mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-14 21:20:48 +08:00
120 lines
5.1 KiB
YAML
120 lines
5.1 KiB
YAML
name: Autobuild Check Logic Test
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
check_autobuild_logic:
|
|
name: Check Autobuild Should Run Logic
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 2
|
|
|
|
- name: Check if version or source changed, or assets already exist
|
|
id: check
|
|
run: |
|
|
if ! git rev-parse HEAD~1 > /dev/null 2>&1; then
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "🟢 没有前一个提交,默认需要构建"
|
|
exit 0
|
|
fi
|
|
|
|
CURRENT_VERSION=$(jq -r '.version' package.json)
|
|
PREVIOUS_VERSION=$(git show HEAD~1:package.json | jq -r '.version' 2>/dev/null || echo "")
|
|
|
|
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "🟢 版本号变更: $PREVIOUS_VERSION → $CURRENT_VERSION"
|
|
exit 0
|
|
fi
|
|
|
|
SRC_DIFF=$(git diff --name-only HEAD~1 HEAD -- src/ | grep -Ev '^src/(dist|build|node_modules|\.next|\.cache)' || true)
|
|
TAURI_DIFF=$(git diff --name-only HEAD~1 HEAD -- src-tauri/ | grep -Ev '^src-tauri/(target|node_modules|dist|\.cache)' || true)
|
|
|
|
if [ -n "$SRC_DIFF" ] || [ -n "$TAURI_DIFF" ]; then
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "🟢 源码变更 detected"
|
|
exit 0
|
|
fi
|
|
|
|
echo "🔍 查找最后一个 Tauri 相关变更的 commit..."
|
|
|
|
LAST_TAURI_COMMIT=""
|
|
for commit in $(git rev-list HEAD --max-count=50); do
|
|
CHANGED_FILES=$(git show --name-only --pretty=format: $commit | tr '\n' ' ')
|
|
HAS_TAURI_CHANGES=false
|
|
|
|
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 "⚠️ 最近的 commits 中未找到 Tauri 相关变更,使用当前 commit"
|
|
LAST_TAURI_COMMIT=$(git rev-parse --short HEAD)
|
|
fi
|
|
|
|
CURRENT_COMMIT=$(git rev-parse --short HEAD)
|
|
echo "📝 最后 Tauri 相关 commit: $LAST_TAURI_COMMIT"
|
|
echo "📝 当前 commit: $CURRENT_COMMIT"
|
|
|
|
AUTOBUILD_RELEASE_EXISTS=$(gh release view "autobuild" --json id -q '.id' 2>/dev/null || echo "")
|
|
|
|
if [ -z "$AUTOBUILD_RELEASE_EXISTS" ]; then
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "🟢 没有 autobuild release,需构建"
|
|
else
|
|
LATEST_JSON_EXISTS=$(gh release view "autobuild" --json assets -q '.assets[] | select(.name == "latest.json") | .name' 2>/dev/null || echo "")
|
|
|
|
if [ -z "$LATEST_JSON_EXISTS" ]; then
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "🟢 没有 latest.json,需构建"
|
|
else
|
|
echo "📥 下载 latest.json 检查版本..."
|
|
LATEST_JSON_URL=$(gh release view "autobuild" --json assets -q '.assets[] | select(.name == "latest.json") | .browser_download_url' 2>/dev/null)
|
|
|
|
if [ -n "$LATEST_JSON_URL" ]; then
|
|
LATEST_JSON_CONTENT=$(curl -s "$LATEST_JSON_URL" 2>/dev/null || echo "")
|
|
|
|
if [ -n "$LATEST_JSON_CONTENT" ]; then
|
|
LATEST_VERSION=$(echo "$LATEST_JSON_CONTENT" | jq -r '.version' 2>/dev/null || echo "")
|
|
echo "📦 最新 autobuild 版本: $LATEST_VERSION"
|
|
|
|
LATEST_COMMIT=$(echo "$LATEST_VERSION" | sed -n 's/.*+autobuild\.[0-9]\{4\}\.\([a-f0-9]*\)$/\1/p' || echo "")
|
|
echo "📝 最新 autobuild commit: $LATEST_COMMIT"
|
|
|
|
if [ "$LAST_TAURI_COMMIT" != "$LATEST_COMMIT" ]; then
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "🟢 Tauri commit hash 不匹配 ($LAST_TAURI_COMMIT != $LATEST_COMMIT),需构建"
|
|
else
|
|
echo "should_run=false" >> $GITHUB_OUTPUT
|
|
echo "🔴 相同 Tauri commit hash ($LAST_TAURI_COMMIT),不需构建"
|
|
fi
|
|
else
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "⚠️ 无法下载或解析 latest.json,需构建"
|
|
fi
|
|
else
|
|
echo "should_run=true" >> $GITHUB_OUTPUT
|
|
echo "⚠️ 无法获取 latest.json 下载 URL,需构建"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
- name: Output should_run result
|
|
run: |
|
|
echo "Result: ${{ steps.check.outputs.should_run }}"
|