diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..51c8a19 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,51 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + fmt: + name: Format + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + - name: cargo fmt + run: cargo fmt --all -- --check + + clippy: + name: Clippy + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + - name: cargo clippy + run: cargo clippy --all-targets --all-features -- -D warnings + + build: + name: Build + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + - name: cargo build + run: cargo build --locked diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..20c7dd7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,63 @@ +name: Build and Release + +permissions: + contents: write + +on: + push: + branches: [main] + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v6 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + + - name: Build release binary + run: cargo build --release --locked + + - name: Set short git commit SHA + id: vars + run: | + echo "SHA_SHORT=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV + echo "BUILD_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV + + - name: Package binary + run: | + cd target/release + zip vibebox-macos-arm64.zip vibebox + + - name: Create sha release + run: | + gh release create "${{ env.BUILD_DATE }}-${{ env.SHA_SHORT }}" \ + --title "${{ env.BUILD_DATE }}-${{ env.SHA_SHORT }}" \ + --notes "Built from commit ${{ github.sha }}" \ + target/release/vibebox-macos-arm64.zip + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Delete existing latest release + run: gh release delete latest --cleanup-tag --yes || true + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create latest release + run: | + gh release create latest \ + --title "Latest" \ + --notes "Built from commit ${{ github.sha }}" \ + --prerelease \ + target/release/vibebox-macos-arm64.zip + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}