name: Release on: push: tags: ["v*"] permissions: contents: write env: CARGO_TERM_COLOR: always jobs: build-release: name: Build ${{ matrix.target }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-gnu artifact: zeroclaw - os: macos-latest target: x86_64-apple-darwin artifact: zeroclaw - os: macos-latest target: aarch64-apple-darwin artifact: zeroclaw - os: windows-latest target: x86_64-pc-windows-msvc artifact: zeroclaw.exe steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - uses: Swatinem/rust-cache@v2 - name: Build release run: cargo build --release --target ${{ matrix.target }} - name: Check binary size (Unix) if: runner.os != 'Windows' run: | SIZE=$(stat -f%z target/${{ matrix.target }}/release/${{ matrix.artifact }} 2>/dev/null || stat -c%s target/${{ matrix.target }}/release/${{ matrix.artifact }}) echo "Binary size: $((SIZE / 1024 / 1024))MB ($SIZE bytes)" if [ "$SIZE" -gt 5242880 ]; then echo "::warning::Binary exceeds 5MB target" fi - name: Package (Unix) if: runner.os != 'Windows' run: | cd target/${{ matrix.target }}/release tar czf ../../../zeroclaw-${{ matrix.target }}.tar.gz ${{ matrix.artifact }} - name: Package (Windows) if: runner.os == 'Windows' run: | cd target/${{ matrix.target }}/release 7z a ../../../zeroclaw-${{ matrix.target }}.zip ${{ matrix.artifact }} - name: Upload artifact uses: actions/upload-artifact@v4 with: name: zeroclaw-${{ matrix.target }} path: zeroclaw-${{ matrix.target }}.* publish: name: Publish Release needs: build-release runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: generate_release_notes: true files: artifacts/**/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}