fix: enable scheduled builds and improve asset deletion logic in autobuild workflow

This commit is contained in:
Tunglies
2025-06-02 14:58:32 +08:00
parent 9978182cae
commit 4926d33849

View File

@@ -2,15 +2,15 @@ name: Auto Build
on:
workflow_dispatch:
# schedule:
# UTC+8 0,6,12,18
# - cron: "0 16,22,4,10 * * *"
schedule:
# UTC+8 0,6,12,18
- cron: "0 16,22,4,10 * * *"
permissions: write-all
env:
TAG_NAME: autobuild
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: short
concurrency:
# only allow per workflow per commit (and not pr) to run at a time
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
@@ -29,32 +29,26 @@ jobs:
- name: Check if version changed or src changed
id: check
run: |
# For manual workflow_dispatch, always run
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "should_run=true" >> $GITHUB_OUTPUT
exit 0
fi
# Store current version from package.json
CURRENT_VERSION=$(cat package.json | jq -r '.version')
echo "Current version: $CURRENT_VERSION"
# Get the previous commit's package.json version
git checkout HEAD~1 package.json
PREVIOUS_VERSION=$(cat package.json | jq -r '.version')
echo "Previous version: $PREVIOUS_VERSION"
# Reset back to current commit
git checkout HEAD package.json
# Check if version changed
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION"
echo "should_run=true" >> $GITHUB_OUTPUT
exit 0
fi
# Check if src or src-tauri directories changed
CURRENT_SRC_HASH=$(git rev-parse HEAD:src)
PREVIOUS_SRC_HASH=$(git rev-parse HEAD~1:src 2>/dev/null || echo "")
CURRENT_TAURI_HASH=$(git rev-parse HEAD:src-tauri 2>/dev/null || echo "")
@@ -73,79 +67,74 @@ jobs:
echo "should_run=false" >> $GITHUB_OUTPUT
fi
# delete_old_assets:
# needs: check_commit
# if: ${{ needs.check_commit.outputs.should_run == 'true' }}
# runs-on: ubuntu-latest
# steps:
# - name: Delete Old Alpha Release Assets
# uses: actions/github-script@v7
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# script: |
# const releaseTag = 'alpha';
delete_old_assets:
name: Delete Old Autobuild Release Assets
needs: check_commit
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Delete Old Autobuild Release Assets
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const releaseTag = '${{ env.TAG_NAME }}';
# try {
# // Get the release by tag name
# const { data: release } = await github.rest.repos.getReleaseByTag({
# owner: context.repo.owner,
# repo: context.repo.repo,
# tag: releaseTag
# });
try {
const { data: release } = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag: releaseTag
});
# console.log(`Found release with ID: ${release.id}`);
console.log(`Found release with ID: ${release.id}`);
# // Delete each asset
# if (release.assets && release.assets.length > 0) {
# console.log(`Deleting ${release.assets.length} assets`);
if (release.assets && release.assets.length > 0) {
console.log(`Deleting ${release.assets.length} assets`);
# for (const asset of release.assets) {
# console.log(`Deleting asset: ${asset.name} (${asset.id})`);
# await github.rest.repos.deleteReleaseAsset({
# owner: context.repo.owner,
# repo: context.repo.repo,
# asset_id: asset.id
# });
# }
for (const asset of release.assets) {
console.log(`Deleting asset: ${asset.name} (${asset.id})`);
await github.rest.repos.deleteReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
asset_id: asset.id
});
}
# console.log('All assets deleted successfully');
# } else {
# console.log('No assets found to delete');
# }
# } catch (error) {
# if (error.status === 404) {
# console.log('Release not found, nothing to delete');
# } else {
# console.error('Error:', error);
# throw error;
# }
# }
console.log('All assets deleted successfully');
} else {
console.log('No assets found to delete');
}
} catch (error) {
if (error.status === 404) {
console.log('Release not found, nothing to delete');
} else {
console.error('Error:', error);
throw error;
}
}
update_tag:
name: Update tag
runs-on: ubuntu-latest
needs: check_commit
needs: [check_commit, delete_old_assets]
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Fetch Alpha update logs
id: fetch_alpha_logs
- name: Fetch UPDATE logs
id: fetch_update_logs
run: |
# Check if UPDATELOG.md exists
if [ -f "UPDATELOG.md" ]; then
# Extract the section starting with ## and containing -alpha until the next ## or end of file
# ALPHA_LOGS=$(awk '/^## .*-alpha/{flag=1; print; next} /^## /{flag=0} flag' UPDATELOG.md)
ALPHA_LOGS=$(awk '/^## v/{if(flag) exit; flag=1} flag' UPDATELOG.md)
if [ -n "$ALPHA_LOGS" ]; then
echo "Found alpha update logs"
echo "ALPHA_LOGS<<EOF" >> $GITHUB_ENV
echo "$ALPHA_LOGS" >> $GITHUB_ENV
UPDATE_LOGS=$(awk '/^## v/{if(flag) exit; flag=1} flag' UPDATELOG.md)
if [ -n "$UPDATE_LOGS" ]; then
echo "Found update logs"
echo "UPDATE_LOGS<<EOF" >> $GITHUB_ENV
echo "$UPDATE_LOGS" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
else
echo "No alpha sections found in UPDATELOG.md"
echo "No update sections found in UPDATELOG.md"
fi
else
echo "UPDATELOG.md file not found"
@@ -158,17 +147,15 @@ jobs:
shell: bash
- run: |
# 检查 ALPHA_LOGS 是否存在,如果不存在则使用默认消息
if [ -z "$ALPHA_LOGS" ]; then
echo "No alpha logs found, using default message"
ALPHA_LOGS="More new features are now supported. Check for detailed changelog soon."
if [ -z "$UPDATE_LOGS" ]; then
echo "No update logs found, using default message"
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
else
echo "Using found alpha logs"
echo "Using found update logs"
fi
# 生成 release.txt 文件
cat > release.txt << EOF
$ALPHA_LOGS
$UPDATE_LOGS
## 我应该下载哪个版本?
@@ -191,7 +178,6 @@ jobs:
- arm64架构: arm64_fixed_webview2-setup.exe
### FAQ
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
### 稳定机场VPN推荐
@@ -203,7 +189,7 @@ jobs:
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: autobuild
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev AutoBuild"
body_path: release.txt
prerelease: true
@@ -227,7 +213,6 @@ jobs:
target: x86_64-apple-darwin
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
@@ -284,8 +269,8 @@ jobs:
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: alpha
releaseName: "Clash Verge Rev Alpha"
tagName: ${{ env.TAG_NAME }}
releaseName: "Clash Verge Rev AutoBuild"
releaseBody: "More new features are now supported."
releaseDraft: false
prerelease: true
@@ -340,8 +325,8 @@ jobs:
- name: Release Autobuild Version
run: pnpm release-version autobuild
- name: "Setup for linux"
run: |-
- name: Setup for linux
run: |
sudo ls -lR /etc/apt/
cat > /tmp/sources.list << EOF
@@ -375,14 +360,14 @@ jobs:
patchelf:${{ matrix.arch }} \
librsvg2-dev:${{ matrix.arch }}
- name: "Install aarch64 tools"
- name: Install aarch64 tools
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu
- name: "Install armv7 tools"
- name: Install armv7 tools
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
run: |
sudo apt install -y \
@@ -415,7 +400,7 @@ jobs:
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: autobuild
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev AutoBuild"
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}
@@ -511,7 +496,7 @@ jobs:
- name: Upload Release
uses: softprops/action-gh-release@v2
with:
tag_name: autobuild
tag_name: ${{ env.TAG_NAME }}
name: "Clash Verge Rev AutoBuild"
prerelease: true
token: ${{ secrets.GITHUB_TOKEN }}