134 lines
5.9 KiB
YAML
134 lines
5.9 KiB
YAML
name: Autobuild Check Logic Test
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
check_autobuild_logic:
|
||
name: Check Autobuild Should Run Logic
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 2
|
||
|
||
- name: Check if version or source changed, or assets already exist
|
||
id: check
|
||
run: |
|
||
# # 仅用于测试逻辑,手动触发自动跳过
|
||
# if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||
# echo "should_run=skip" >> $GITHUB_OUTPUT
|
||
# echo "🟡 手动触发,跳过 should_run 检查"
|
||
# exit 0
|
||
# fi
|
||
|
||
# 确保有 HEAD~1
|
||
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 变更(排除常见产物与缓存)
|
||
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
|
||
|
||
# 找到最后一个修改 Tauri 相关文件的 commit
|
||
echo "🔍 查找最后一个 Tauri 相关变更的 commit..."
|
||
|
||
LAST_TAURI_COMMIT=""
|
||
for commit in $(git rev-list HEAD --max-count=50); do
|
||
# 检查此 commit 是否修改了 Tauri 相关文件
|
||
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 是否存在
|
||
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 是否存在
|
||
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
|
||
# 下载并解析 latest.json 检查版本和 commit hash
|
||
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"
|
||
|
||
# 从版本字符串中提取 commit hash (格式: X.Y.Z+autobuild.MMDD.commit)
|
||
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 }}"
|