@@ -0,0 +1,63 @@
1+name: Build and Release
2+
3+permissions:
4+ contents: write
5+
6+on:
7+ push:
8+ branches: [main]
9+
10+concurrency:
11+ group: release-${{ github.ref }}
12+ cancel-in-progress: true
13+
14+jobs:
15+ build:
16+ runs-on: macos-latest
17+
18+ steps:
19+ - uses: actions/checkout@v6
20+
21+ - name: Install Rust
22+ uses: dtolnay/rust-toolchain@stable
23+
24+ - name: Cache Rust
25+ uses: Swatinem/rust-cache@v2
26+
27+ - name: Build release binary
28+ run: cargo build --release --locked
29+
30+ - name: Set short git commit SHA
31+ id: vars
32+ run: |
33+ echo "SHA_SHORT=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV
34+ echo "BUILD_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
35+
36+ - name: Package binary
37+ run: |
38+ cd target/release
39+ zip vibebox-macos-arm64.zip vibebox
40+
41+ - name: Create sha release
42+ 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 }}" \
46+ target/release/vibebox-macos-arm64.zip
47+ env:
48+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49+
50+ - name: Delete existing latest release
51+ run: gh release delete latest --cleanup-tag --yes || true
52+ env:
53+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
54+
55+ - name: Create latest release
56+ run: |
57+ gh release create latest \
58+ --title "Latest" \
59+ --notes "Built from commit ${{ github.sha }}" \
60+ --prerelease \
61+ target/release/vibebox-macos-arm64.zip
62+ env:
63+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}