@@ -5,7 +5,8 @@ permissions:
55
66on:
77 push:
8− branches: [main]
8+ tags:
9+ - "v*.*.*-*"
910
1011concurrency:
1112 group: release-${{ github.ref }}
@@ -17,6 +18,16 @@ jobs:
1718
1819 steps:
1920 - uses: actions/checkout@v6
21+ with:
22+ fetch-depth: 0
23+
24+ - name: Validate release tag format
25+ run: |
26+ TAG="${GITHUB_REF_NAME}"
27+ if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-[A-Za-z]+$ ]]; then
28+ echo "Tag '$TAG' does not match required format vX.X.X-word"
29+ exit 1
30+ fi
2031
2132 - name: Install Rust
2233 uses: dtolnay/rust-toolchain@stable
@@ -24,25 +35,39 @@ jobs:
2435 - name: Cache Rust
2536 uses: Swatinem/rust-cache@v2
2637
27− - name: Build release binary
28− run: cargo build --release --locked
38+ - name: Resolve target commit
39+ run: |
40+ TARGET_SHA="$(git rev-list -n 1 "${GITHUB_REF_NAME}")"
41+ echo "TARGET_SHA=$TARGET_SHA" >> "$GITHUB_ENV"
2942
30− - name: Set short git commit SHA
31− id: vars
43+ - name: Verify CI passed
44+ env:
45+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3246 run: |
33− echo "SHA_SHORT=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV
34− echo "BUILD_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
47+ COUNT="$(gh run list --workflow ci.yml --commit "$TARGET_SHA" --json conclusion,createdAt --jq 'length')"
48+ if [ "$COUNT" -eq 0 ]; then
49+ echo "No CI runs found for commit $TARGET_SHA"
50+ exit 1
51+ fi
52+ CONCLUSION="$(gh run list --workflow ci.yml --commit "$TARGET_SHA" --json conclusion,createdAt --jq '.[0].conclusion')"
53+ if [ "$CONCLUSION" != "success" ]; then
54+ echo "Latest CI run for commit $TARGET_SHA is $CONCLUSION"
55+ exit 1
56+ fi
57+
58+ - name: Build release binary
59+ run: cargo build --release --locked
3560
3661 - name: Package binary
3762 run: |
3863 cd target/release
3964 zip vibebox-macos-arm64.zip vibebox
4065
41− - name: Create sha release
66+ - name: Create tag release
4267 run: |
43− gh release create "${{ env.BUILD_DATE }}-${{ env.SHA_SHORT }}" \
44− --title "${{ env.BUILD_DATE }}-${{ env.SHA_SHORT }}" \
45− --notes "Built from commit ${{ github.sha }}" \
68+ gh release create "${{ github.ref_name }}" \
69+ --title "${{ github.ref_name }}" \
70+ --notes "Built from commit $TARGET_SHA" \
4671 target/release/vibebox-macos-arm64.zip
4772 env:
4873 GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -56,7 +81,7 @@ jobs:
5681 run: |
5782 gh release create latest \
5883 --title "Latest" \
59− --notes "Built from commit ${{ github.sha }}" \
84+ --notes "Built from commit $TARGET_SHA" \
6085 --prerelease \
6186 target/release/vibebox-macos-arm64.zip
6287 env: