diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index 278a4fda..0bb1977a 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -52,60 +52,20 @@ jobs: exit 0 fi - # 只检查 src 中的源码文件,排除构建产物和缓存 - 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 "") - 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 "") + # Use get_latest_tauri_commit.bash to find the latest Tauri-related commit + echo "🔍 Finding last commit with Tauri-related changes using script..." - # 只检查 src-tauri 中的源码文件,排除构建产物和缓存 - 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 "") - 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 "") + # Make script executable + chmod +x scripts-workflow/get_latest_tauri_commit.bash - echo "📂 Current src source hash: $CURRENT_SRC_HASH" - echo "📂 Previous src source hash: $PREVIOUS_SRC_HASH" - echo "🦀 Current tauri source hash: $CURRENT_TAURI_HASH" - 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 + # Get the latest Tauri-related commit hash + LAST_TAURI_COMMIT_FULL=$(./scripts-workflow/get_latest_tauri_commit.bash) + LAST_TAURI_COMMIT=$(git rev-parse --short "$LAST_TAURI_COMMIT_FULL") echo "📝 Last Tauri-related commit: $LAST_TAURI_COMMIT" 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') MONTH=$(date +%m) DAY=$(date +%d) @@ -250,35 +210,13 @@ jobs: clean_old_assets: name: Clean Old Release Assets - runs-on: ubuntu-latest needs: [check_commit, update_tag] 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" - echo "📝 Last Tauri commit: $LAST_TAURI_COMMIT" - - # Get all assets and remove old ones - 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 + uses: clash-verge-rev/clash-verge-rev/.github/workflows/clean-old-assets.yml@dev + with: + tag_name: autobuild + dry_run: false autobuild-x86-windows-macos-linux: name: Autobuild x86 Windows, MacOS and Linux @@ -340,7 +278,7 @@ jobs: pnpm run prebuild ${{ matrix.target }} - name: Release ${{ env.TAG_CHANNEL }} Version - run: pnpm release-version ${{ env.TAG_NAME }} + run: pnpm release-version autobuild-latest - name: Tauri build uses: tauri-apps/tauri-action@v0 @@ -414,7 +352,7 @@ jobs: pnpm run prebuild ${{ matrix.target }} - name: Release ${{ env.TAG_CHANNEL }} Version - run: pnpm release-version ${{ env.TAG_NAME }} + run: pnpm release-version autobuild-latest - name: Setup for linux run: | @@ -546,7 +484,7 @@ jobs: pnpm run prebuild ${{ matrix.target }} - name: Release ${{ env.TAG_CHANNEL }} Version - run: pnpm release-version ${{ env.TAG_NAME }} + run: pnpm release-version autobuild-latest - name: Download WebView2 Runtime run: | diff --git a/.github/workflows/clean-old-assets.yml b/.github/workflows/clean-old-assets.yml index fdcf40e2..d6c7e35c 100644 --- a/.github/workflows/clean-old-assets.yml +++ b/.github/workflows/clean-old-assets.yml @@ -13,6 +13,18 @@ on: required: false default: false 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 diff --git a/scripts-workflow/get_latest_tauri_commit.bash b/scripts-workflow/get_latest_tauri_commit.bash new file mode 100755 index 00000000..7fa950b1 --- /dev/null +++ b/scripts-workflow/get_latest_tauri_commit.bash @@ -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" \ No newline at end of file diff --git a/scripts/release-version.mjs b/scripts/release-version.mjs index a41e0e35..7e61170d 100644 --- a/scripts/release-version.mjs +++ b/scripts/release-version.mjs @@ -6,9 +6,10 @@ * * can be: * - 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) * - "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) * * Examples: @@ -16,6 +17,7 @@ * pnpm release-version v1.2.3-beta * pnpm release-version beta * pnpm release-version autobuild + * pnpm release-version autobuild-latest * pnpm release-version deploytest * * 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) * @param {boolean} withCommit 是否带 commit @@ -219,7 +239,14 @@ async function main(versionArg) { try { let newVersion; - const validTags = ["alpha", "beta", "rc", "autobuild", "deploytest"]; + const validTags = [ + "alpha", + "beta", + "rc", + "autobuild", + "autobuild-latest", + "deploytest", + ]; if (validTags.includes(versionArg.toLowerCase())) { const currentVersion = await getCurrentVersion(); @@ -228,6 +255,10 @@ async function main(versionArg) { if (versionArg.toLowerCase() === "autobuild") { // 格式: 2.3.0+autobuild.250613.cc39b27 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") { // 格式: 2.3.0+deploytest.250613.cc39b27 newVersion = `${baseVersion}+deploytest.${generateShortTimestamp(true)}`;