name: Release on: push: tags: - "v*" workflow_dispatch: permissions: contents: write jobs: build: name: Build ${{ matrix.target }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: # macOS - target: x86_64-macos os: macos-latest rust-target: x86_64-apple-darwin cross-packages: "" - target: aarch64-macos os: macos-latest rust-target: aarch64-apple-darwin cross-packages: "" # Linux - target: x86_64-linux-gnu os: ubuntu-latest rust-target: x86_64-unknown-linux-gnu cross-packages: "" - target: aarch64-linux-gnu os: ubuntu-latest rust-target: aarch64-unknown-linux-gnu cross-packages: gcc-aarch64-linux-gnu - target: x86-linux-gnu os: ubuntu-latest rust-target: i686-unknown-linux-gnu cross-packages: gcc-i686-linux-gnu - target: arm-linux-gnueabihf os: ubuntu-latest rust-target: armv7-unknown-linux-gnueabihf cross-packages: gcc-arm-linux-gnueabihf - target: loongarch64-linux-gnu os: ubuntu-latest rust-target: loongarch64-unknown-linux-gnu cross-packages: gcc-loongarch64-linux-gnu - target: mips64el-linux-gnuabi64 os: ubuntu-latest rust-target: mips64el-unknown-linux-gnuabi64 cross-packages: gcc-mips64el-linux-gnuabi64 - target: powerpc64-linux-gnu os: ubuntu-latest rust-target: powerpc64le-unknown-linux-gnu cross-packages: gcc-powerpc64-linux-gnu - target: riscv64-linux-gnu os: ubuntu-latest rust-target: riscv64gc-unknown-linux-gnu cross-packages: gcc-riscv64-linux-gnu - target: s390x-linux-gnu os: ubuntu-latest rust-target: s390x-unknown-linux-gnu cross-packages: gcc-s390x-linux-gnu # Windows - target: x86_64-windows-gnu os: ubuntu-latest rust-target: x86_64-pc-windows-gnu cross-packages: mingw-w64 - target: aarch64-windows-gnu os: ubuntu-latest rust-target: aarch64-pc-windows-gnullvm cross-packages: mingw-w64 - target: x86-windows-gnu os: ubuntu-latest rust-target: i686-pc-windows-gnu cross-packages: mingw-w64 # BSD - target: x86_64-freebsd os: ubuntu-latest rust-target: x86_64-unknown-freebsd cross-packages: "" - target: aarch64-freebsd os: ubuntu-latest rust-target: aarch64-unknown-freebsd cross-packages: "" - target: x86_64-netbsd os: ubuntu-latest rust-target: x86_64-unknown-netbsd cross-packages: "" - target: aarch64-netbsd os: ubuntu-latest rust-target: aarch64-unknown-netbsd cross-packages: "" - target: x86_64-openbsd os: ubuntu-latest rust-target: x86_64-unknown-openbsd cross-packages: "" - target: aarch64-openbsd os: ubuntu-latest rust-target: aarch64-unknown-openbsd cross-packages: "" # illumos - target: x86_64-solaris os: ubuntu-latest rust-target: x86_64-pc-solaris cross-packages: "" # Additional targets - target: wasm32-freestanding os: ubuntu-latest rust-target: wasm32-unknown-unknown cross-packages: "" - target: wasm32-wasi os: ubuntu-latest rust-target: wasm32-wasip1 cross-packages: "" - target: x86_64-linux-musl os: ubuntu-latest rust-target: x86_64-unknown-linux-musl cross-packages: "" - target: aarch64-linux-musl os: ubuntu-latest rust-target: aarch64-unknown-linux-musl cross-packages: "" - target: aarch64-linux-android os: ubuntu-latest rust-target: aarch64-linux-android cross-packages: "" - target: aarch64-ios os: macos-latest rust-target: aarch64-apple-ios cross-packages: "" steps: - uses: actions/checkout@v4 - name: Setup Zig uses: mlugg/setup-zig@v2 with: version: 0.17.0-dev.1398+cb5635714 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.rust-target }} - name: Install cross-compilers if: matrix.cross-packages != '' run: | sudo apt-get update sudo apt-get install -y ${{ matrix.cross-packages }} - name: Build Package run: | cd lib zig build -Dbuild-rust -Dtarget=${{ matrix.target }} -Doptimize=ReleaseSafe - name: Package artifact run: | cd lib mkdir -p dist tar -czf "dist/${{ matrix.target }}.tar.gz" -C zig-out/lib . - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }} path: lib/dist/${{ matrix.target }}.tar.gz retention-days: 1 release: name: Create Release needs: build runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: dist merge-multiple: true - name: Release uses: softprops/action-gh-release@v2 with: files: dist/*.tar.gz generate_release_notes: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}