refactor: streamline clean old assets job by using reusable workflow
refactor: update clean old assets job to include steps section refactor: add checkout step in clean_old_assets job for improved repository access fix: correct path to clean old assets workflow in autobuild.yml fix: update path to clean old assets workflow in autobuild.yml refactor: simplify clean_old_assets job by removing unnecessary steps refactor: enhance clean_old_assets job dependencies for improved execution flow Revert "refactor: enhance clean_old_assets job dependencies for improved execution flow" This reverts commit 1a5108b5ad932e888a2b52f13616b483ebb9856e. feat: implement get_latest_tauri_commit script and update release versioning logic
This commit is contained in:
92
.github/workflows/autobuild.yml
vendored
92
.github/workflows/autobuild.yml
vendored
@@ -52,60 +52,20 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 只检查 src 中的源码文件,排除构建产物和缓存
|
# Use get_latest_tauri_commit.bash to find the latest Tauri-related commit
|
||||||
CURRENT_SRC_HASH=$(git ls-tree -r HEAD -- src/ ':(exclude)src/dist' ':(exclude)src/build' ':(exclude)src/node_modules' ':(exclude)src/.next' ':(exclude)src/.cache' 2>/dev/null | git hash-object --stdin || echo "")
|
echo "🔍 Finding last commit with Tauri-related changes using script..."
|
||||||
PREVIOUS_SRC_HASH=$(git ls-tree -r HEAD~1 -- src/ ':(exclude)src/dist' ':(exclude)src/build' ':(exclude)src/node_modules' ':(exclude)src/.next' ':(exclude)src/.cache' 2>/dev/null | git hash-object --stdin || echo "")
|
|
||||||
|
|
||||||
# 只检查 src-tauri 中的源码文件,排除构建产物和缓存
|
# Make script executable
|
||||||
CURRENT_TAURI_HASH=$(git ls-tree -r HEAD -- src-tauri/src src-tauri/Cargo.toml src-tauri/Cargo.lock src-tauri/tauri.*.conf.json src-tauri/build.rs src-tauri/capabilities 2>/dev/null | git hash-object --stdin || echo "")
|
chmod +x scripts-workflow/get_latest_tauri_commit.bash
|
||||||
PREVIOUS_TAURI_HASH=$(git ls-tree -r HEAD~1 -- src-tauri/src src-tauri/Cargo.toml src-tauri/Cargo.lock src-tauri/tauri.*.conf.json src-tauri/build.rs src-tauri/capabilities 2>/dev/null | git hash-object --stdin || echo "")
|
|
||||||
|
|
||||||
echo "📂 Current src source hash: $CURRENT_SRC_HASH"
|
# Get the latest Tauri-related commit hash
|
||||||
echo "📂 Previous src source hash: $PREVIOUS_SRC_HASH"
|
LAST_TAURI_COMMIT_FULL=$(./scripts-workflow/get_latest_tauri_commit.bash)
|
||||||
echo "🦀 Current tauri source hash: $CURRENT_TAURI_HASH"
|
LAST_TAURI_COMMIT=$(git rev-parse --short "$LAST_TAURI_COMMIT_FULL")
|
||||||
echo "🦀 Previous tauri source hash: $PREVIOUS_TAURI_HASH"
|
|
||||||
|
|
||||||
if [ "$CURRENT_SRC_HASH" != "$PREVIOUS_SRC_HASH" ] || [ "$CURRENT_TAURI_HASH" != "$PREVIOUS_TAURI_HASH" ]; then
|
|
||||||
echo "✅ Source directories changed"
|
|
||||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the last commit that changed Tauri-related files
|
|
||||||
echo "🔍 Finding last commit with Tauri-related changes..."
|
|
||||||
|
|
||||||
# Define patterns for Tauri-related files
|
|
||||||
TAURI_PATTERNS="src/ src-tauri/src src-tauri/Cargo.toml src-tauri/Cargo.lock src-tauri/tauri.*.conf.json src-tauri/build.rs src-tauri/capabilities"
|
|
||||||
|
|
||||||
# Get the last commit that changed any of these patterns (excluding build artifacts)
|
|
||||||
LAST_TAURI_COMMIT=""
|
|
||||||
for commit in $(git rev-list HEAD --max-count=50); do
|
|
||||||
# Check if this commit changed any Tauri-related files
|
|
||||||
CHANGED_FILES=$(git show --name-only --pretty=format: $commit | tr '\n' ' ')
|
|
||||||
HAS_TAURI_CHANGES=false
|
|
||||||
|
|
||||||
# Check each pattern
|
|
||||||
if echo "$CHANGED_FILES" | grep -q "src/" && echo "$CHANGED_FILES" | grep -qvE "src/(dist|build|node_modules|\.next|\.cache)"; then
|
|
||||||
HAS_TAURI_CHANGES=true
|
|
||||||
elif echo "$CHANGED_FILES" | grep -qE "src-tauri/(src|Cargo\.(toml|lock)|tauri\..*\.conf\.json|build\.rs|capabilities)"; then
|
|
||||||
HAS_TAURI_CHANGES=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$HAS_TAURI_CHANGES" = true ]; then
|
|
||||||
LAST_TAURI_COMMIT=$(git rev-parse --short $commit)
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$LAST_TAURI_COMMIT" ]; then
|
|
||||||
echo "⚠️ No Tauri-related changes found in recent commits, using current commit"
|
|
||||||
LAST_TAURI_COMMIT=$(git rev-parse --short HEAD)
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "📝 Last Tauri-related commit: $LAST_TAURI_COMMIT"
|
echo "📝 Last Tauri-related commit: $LAST_TAURI_COMMIT"
|
||||||
echo "📝 Current commit: $(git rev-parse --short HEAD)"
|
echo "📝 Current commit: $(git rev-parse --short HEAD)"
|
||||||
|
|
||||||
# Generate autobuild version for consistency across jobs
|
# Generate autobuild version using autobuild-latest format
|
||||||
CURRENT_BASE_VERSION=$(echo "$CURRENT_VERSION" | sed -E 's/-(alpha|beta|rc)(\.[0-9]+)?//g' | sed -E 's/\+[a-zA-Z0-9.-]+//g')
|
CURRENT_BASE_VERSION=$(echo "$CURRENT_VERSION" | sed -E 's/-(alpha|beta|rc)(\.[0-9]+)?//g' | sed -E 's/\+[a-zA-Z0-9.-]+//g')
|
||||||
MONTH=$(date +%m)
|
MONTH=$(date +%m)
|
||||||
DAY=$(date +%d)
|
DAY=$(date +%d)
|
||||||
@@ -250,35 +210,13 @@ jobs:
|
|||||||
|
|
||||||
clean_old_assets:
|
clean_old_assets:
|
||||||
name: Clean Old Release Assets
|
name: Clean Old Release Assets
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [check_commit, update_tag]
|
needs: [check_commit, update_tag]
|
||||||
if: ${{ needs.check_commit.outputs.should_run == 'true' && needs.update_tag.result == 'success' }}
|
if: ${{ needs.check_commit.outputs.should_run == 'true' && needs.update_tag.result == 'success' }}
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Remove old assets from release
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
TAG_NAME: ${{ env.TAG_NAME }}
|
|
||||||
run: |
|
|
||||||
# Use consistent values from check_commit job
|
|
||||||
CURRENT_AUTOBUILD_VERSION="${{ needs.check_commit.outputs.autobuild_version }}"
|
|
||||||
LAST_TAURI_COMMIT="${{ needs.check_commit.outputs.last_tauri_commit }}"
|
|
||||||
|
|
||||||
echo "📦 Current autobuild version: $CURRENT_AUTOBUILD_VERSION"
|
uses: clash-verge-rev/clash-verge-rev/.github/workflows/clean-old-assets.yml@dev
|
||||||
echo "📝 Last Tauri commit: $LAST_TAURI_COMMIT"
|
with:
|
||||||
|
tag_name: autobuild
|
||||||
# Get all assets and remove old ones
|
dry_run: false
|
||||||
assets=$(gh release view "$TAG_NAME" --json assets -q '.assets[].name' || true)
|
|
||||||
for asset in $assets; do
|
|
||||||
# Keep assets that match current autobuild version or are non-versioned files (like latest.json)
|
|
||||||
if [[ "$asset" == *"$CURRENT_AUTOBUILD_VERSION"* ]] || [[ "$asset" == "latest.json" ]]; then
|
|
||||||
echo "🔒 Keeping current asset: $asset"
|
|
||||||
else
|
|
||||||
echo "🗑️ Deleting old asset: $asset"
|
|
||||||
gh release delete-asset "$TAG_NAME" "$asset" -y || echo "⚠️ Failed to delete $asset"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
autobuild-x86-windows-macos-linux:
|
autobuild-x86-windows-macos-linux:
|
||||||
name: Autobuild x86 Windows, MacOS and Linux
|
name: Autobuild x86 Windows, MacOS and Linux
|
||||||
@@ -340,7 +278,7 @@ jobs:
|
|||||||
pnpm run prebuild ${{ matrix.target }}
|
pnpm run prebuild ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Release ${{ env.TAG_CHANNEL }} Version
|
- name: Release ${{ env.TAG_CHANNEL }} Version
|
||||||
run: pnpm release-version ${{ env.TAG_NAME }}
|
run: pnpm release-version autobuild-latest
|
||||||
|
|
||||||
- name: Tauri build
|
- name: Tauri build
|
||||||
uses: tauri-apps/tauri-action@v0
|
uses: tauri-apps/tauri-action@v0
|
||||||
@@ -414,7 +352,7 @@ jobs:
|
|||||||
pnpm run prebuild ${{ matrix.target }}
|
pnpm run prebuild ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Release ${{ env.TAG_CHANNEL }} Version
|
- name: Release ${{ env.TAG_CHANNEL }} Version
|
||||||
run: pnpm release-version ${{ env.TAG_NAME }}
|
run: pnpm release-version autobuild-latest
|
||||||
|
|
||||||
- name: Setup for linux
|
- name: Setup for linux
|
||||||
run: |
|
run: |
|
||||||
@@ -546,7 +484,7 @@ jobs:
|
|||||||
pnpm run prebuild ${{ matrix.target }}
|
pnpm run prebuild ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Release ${{ env.TAG_CHANNEL }} Version
|
- name: Release ${{ env.TAG_CHANNEL }} Version
|
||||||
run: pnpm release-version ${{ env.TAG_NAME }}
|
run: pnpm release-version autobuild-latest
|
||||||
|
|
||||||
- name: Download WebView2 Runtime
|
- name: Download WebView2 Runtime
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
12
.github/workflows/clean-old-assets.yml
vendored
12
.github/workflows/clean-old-assets.yml
vendored
@@ -13,6 +13,18 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
type: boolean
|
type: boolean
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
tag_name:
|
||||||
|
description: "Release tag name to clean (default: autobuild)"
|
||||||
|
required: false
|
||||||
|
default: "autobuild"
|
||||||
|
type: string
|
||||||
|
dry_run:
|
||||||
|
description: "Dry run mode (only show what would be deleted)"
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
|
|
||||||
|
|||||||
56
scripts-workflow/get_latest_tauri_commit.bash
Executable file
56
scripts-workflow/get_latest_tauri_commit.bash
Executable file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 获取最近一个和 Tauri 相关的改动的 commit hash
|
||||||
|
# This script finds the latest commit that modified Tauri-related files
|
||||||
|
|
||||||
|
# Tauri 相关文件的模式
|
||||||
|
TAURI_PATTERNS=(
|
||||||
|
"src-tauri/"
|
||||||
|
"Cargo.toml"
|
||||||
|
"Cargo.lock"
|
||||||
|
"tauri.*.conf.json"
|
||||||
|
"package.json"
|
||||||
|
"pnpm-lock.yaml"
|
||||||
|
"src/"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 排除的文件模式(build artifacts 等)
|
||||||
|
EXCLUDE_PATTERNS=(
|
||||||
|
"src-tauri/target/"
|
||||||
|
"src-tauri/gen/"
|
||||||
|
"*.log"
|
||||||
|
"*.tmp"
|
||||||
|
"node_modules/"
|
||||||
|
".git/"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 构建 git log 的路径过滤参数
|
||||||
|
PATHS=""
|
||||||
|
for pattern in "${TAURI_PATTERNS[@]}"; do
|
||||||
|
if [[ -e "$pattern" ]]; then
|
||||||
|
PATHS="$PATHS $pattern"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 如果没有找到相关路径,返回错误
|
||||||
|
if [[ -z "$PATHS" ]]; then
|
||||||
|
echo "Error: No Tauri-related paths found in current directory" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 获取最新的 commit hash
|
||||||
|
# 使用 git log 查找最近修改了 Tauri 相关文件的提交
|
||||||
|
LATEST_COMMIT=$(git log --format="%H" -n 1 -- $PATHS)
|
||||||
|
|
||||||
|
# 验证是否找到了 commit
|
||||||
|
if [[ -z "$LATEST_COMMIT" ]]; then
|
||||||
|
echo "Error: No commits found for Tauri-related files" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 输出结果
|
||||||
|
echo "$LATEST_COMMIT"
|
||||||
|
|
||||||
|
# 如果需要更多信息,可以取消注释以下行
|
||||||
|
# echo "Latest Tauri-related commit: $LATEST_COMMIT"
|
||||||
|
# git show --stat --oneline "$LATEST_COMMIT"
|
||||||
@@ -6,9 +6,10 @@
|
|||||||
*
|
*
|
||||||
* <version> can be:
|
* <version> can be:
|
||||||
* - A full semver version (e.g., 1.2.3, v1.2.3, 1.2.3-beta, v1.2.3+build)
|
* - A full semver version (e.g., 1.2.3, v1.2.3, 1.2.3-beta, v1.2.3+build)
|
||||||
* - A tag: "alpha", "beta", "rc", "autobuild", or "deploytest"
|
* - A tag: "alpha", "beta", "rc", "autobuild", "autobuild-latest", or "deploytest"
|
||||||
* - "alpha", "beta", "rc": Appends the tag to the current base version (e.g., 1.2.3-beta)
|
* - "alpha", "beta", "rc": Appends the tag to the current base version (e.g., 1.2.3-beta)
|
||||||
* - "autobuild": Appends a timestamped autobuild tag (e.g., 1.2.3+autobuild.2406101530)
|
* - "autobuild": Appends a timestamped autobuild tag (e.g., 1.2.3+autobuild.2406101530)
|
||||||
|
* - "autobuild-latest": Appends an autobuild tag with latest Tauri commit (e.g., 1.2.3+autobuild.0614.a1b2c3d)
|
||||||
* - "deploytest": Appends a timestamped deploytest tag (e.g., 1.2.3+deploytest.2406101530)
|
* - "deploytest": Appends a timestamped deploytest tag (e.g., 1.2.3+deploytest.2406101530)
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
* pnpm release-version v1.2.3-beta
|
* pnpm release-version v1.2.3-beta
|
||||||
* pnpm release-version beta
|
* pnpm release-version beta
|
||||||
* pnpm release-version autobuild
|
* pnpm release-version autobuild
|
||||||
|
* pnpm release-version autobuild-latest
|
||||||
* pnpm release-version deploytest
|
* pnpm release-version deploytest
|
||||||
*
|
*
|
||||||
* The script will:
|
* The script will:
|
||||||
@@ -45,6 +47,24 @@ function getGitShortCommit() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取最新 Tauri 相关提交的短 hash
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
function getLatestTauriCommit() {
|
||||||
|
try {
|
||||||
|
const fullHash = execSync("./scripts-workflow/get_latest_tauri_commit.bash")
|
||||||
|
.toString()
|
||||||
|
.trim();
|
||||||
|
return execSync(`git rev-parse --short ${fullHash}`).toString().trim();
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(
|
||||||
|
"[WARN]: Failed to get latest Tauri commit, fallback to current git short commit",
|
||||||
|
);
|
||||||
|
return getGitShortCommit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成短时间戳(格式:YYMMDD)或带 commit(格式:YYMMDD.cc39b27)
|
* 生成短时间戳(格式:YYMMDD)或带 commit(格式:YYMMDD.cc39b27)
|
||||||
* @param {boolean} withCommit 是否带 commit
|
* @param {boolean} withCommit 是否带 commit
|
||||||
@@ -219,7 +239,14 @@ async function main(versionArg) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
let newVersion;
|
let newVersion;
|
||||||
const validTags = ["alpha", "beta", "rc", "autobuild", "deploytest"];
|
const validTags = [
|
||||||
|
"alpha",
|
||||||
|
"beta",
|
||||||
|
"rc",
|
||||||
|
"autobuild",
|
||||||
|
"autobuild-latest",
|
||||||
|
"deploytest",
|
||||||
|
];
|
||||||
|
|
||||||
if (validTags.includes(versionArg.toLowerCase())) {
|
if (validTags.includes(versionArg.toLowerCase())) {
|
||||||
const currentVersion = await getCurrentVersion();
|
const currentVersion = await getCurrentVersion();
|
||||||
@@ -228,6 +255,10 @@ async function main(versionArg) {
|
|||||||
if (versionArg.toLowerCase() === "autobuild") {
|
if (versionArg.toLowerCase() === "autobuild") {
|
||||||
// 格式: 2.3.0+autobuild.250613.cc39b27
|
// 格式: 2.3.0+autobuild.250613.cc39b27
|
||||||
newVersion = `${baseVersion}+autobuild.${generateShortTimestamp(true)}`;
|
newVersion = `${baseVersion}+autobuild.${generateShortTimestamp(true)}`;
|
||||||
|
} else if (versionArg.toLowerCase() === "autobuild-latest") {
|
||||||
|
// 格式: 2.3.0+autobuild.0614.a1b2c3d (使用最新 Tauri 提交)
|
||||||
|
const latestTauriCommit = getLatestTauriCommit();
|
||||||
|
newVersion = `${baseVersion}+autobuild.${generateShortTimestamp()}.${latestTauriCommit}`;
|
||||||
} else if (versionArg.toLowerCase() === "deploytest") {
|
} else if (versionArg.toLowerCase() === "deploytest") {
|
||||||
// 格式: 2.3.0+deploytest.250613.cc39b27
|
// 格式: 2.3.0+deploytest.250613.cc39b27
|
||||||
newVersion = `${baseVersion}+deploytest.${generateShortTimestamp(true)}`;
|
newVersion = `${baseVersion}+deploytest.${generateShortTimestamp(true)}`;
|
||||||
|
|||||||
Reference in New Issue
Block a user