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: "" cargo-linker-env: "" cargo-linker: "" - target: aarch64-macos os: macos-latest rust-target: aarch64-apple-darwin cross-packages: "" cargo-linker-env: "" cargo-linker: "" # Linux (esbuild tier) - target: x86_64-linux-gnu os: ubuntu-latest rust-target: x86_64-unknown-linux-gnu cross-packages: "" cargo-linker-env: "" cargo-linker: "" - target: aarch64-linux-gnu os: ubuntu-latest rust-target: aarch64-unknown-linux-gnu cross-packages: gcc-aarch64-linux-gnu cargo-linker-env: "" cargo-linker: "" - target: x86-linux-gnu os: ubuntu-latest rust-target: i686-unknown-linux-gnu cross-packages: gcc-i686-linux-gnu cargo-linker-env: "" cargo-linker: "" - target: arm-linux-gnueabihf os: ubuntu-latest rust-target: armv7-unknown-linux-gnueabihf cross-packages: gcc-arm-linux-gnueabihf cargo-linker-env: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER cargo-linker: arm-linux-gnueabihf-gcc - target: loongarch64-linux-gnu os: ubuntu-latest rust-target: loongarch64-unknown-linux-gnu cross-packages: "" cargo-linker-env: CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_GNU_LINKER cargo-linker: zig cc -target loongarch64-linux-gnu - target: powerpc64le-linux-gnu os: ubuntu-latest rust-target: powerpc64le-unknown-linux-gnu cross-packages: gcc-powerpc64le-linux-gnu cargo-linker-env: "" cargo-linker: "" - target: riscv64-linux-gnu os: ubuntu-latest rust-target: riscv64gc-unknown-linux-gnu cross-packages: gcc-riscv64-linux-gnu cargo-linker-env: "" cargo-linker: "" - target: s390x-linux-gnu os: ubuntu-latest rust-target: s390x-unknown-linux-gnu cross-packages: gcc-s390x-linux-gnu cargo-linker-env: "" cargo-linker: "" # Windows - target: x86_64-windows-gnu os: ubuntu-latest rust-target: x86_64-pc-windows-gnu cross-packages: mingw-w64 cargo-linker-env: "" cargo-linker: "" - target: aarch64-windows-gnu os: ubuntu-latest rust-target: aarch64-pc-windows-gnullvm cross-packages: mingw-w64 cargo-linker-env: "" cargo-linker: "" - target: x86-windows-gnu os: ubuntu-latest rust-target: i686-pc-windows-gnu cross-packages: mingw-w64 cargo-linker-env: "" cargo-linker: "" # BSD (esbuild tier; use zig cc as cargo linker) - target: x86_64-freebsd os: ubuntu-latest rust-target: x86_64-unknown-freebsd cross-packages: "" cargo-linker-env: CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER cargo-linker: zig cc -target x86_64-freebsd - target: x86_64-netbsd os: ubuntu-latest rust-target: x86_64-unknown-netbsd cross-packages: "" cargo-linker-env: CARGO_TARGET_X86_64_UNKNOWN_NETBSD_LINKER cargo-linker: zig cc -target x86_64-netbsd # Additional targets - target: wasm32-freestanding os: ubuntu-latest rust-target: wasm32-unknown-unknown cross-packages: "" cargo-linker-env: "" cargo-linker: "" - target: wasm32-wasi os: ubuntu-latest rust-target: wasm32-wasip1 cross-packages: "" cargo-linker-env: "" cargo-linker: "" - target: x86_64-linux-musl os: ubuntu-latest rust-target: x86_64-unknown-linux-musl cross-packages: "" cargo-linker-env: "" cargo-linker: "" - target: aarch64-linux-musl os: ubuntu-latest rust-target: aarch64-unknown-linux-musl cross-packages: "" cargo-linker-env: "" cargo-linker: "" - target: aarch64-linux-android os: ubuntu-latest rust-target: aarch64-linux-android cross-packages: "" cargo-linker-env: "" cargo-linker: "" - target: aarch64-ios os: macos-latest rust-target: aarch64-apple-ios cross-packages: "" cargo-linker-env: "" cargo-linker: "" 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: | if [ -n "${{ matrix.cargo-linker-env }}" ]; then export "${{ matrix.cargo-linker-env }}=${{ matrix.cargo-linker }}" fi 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/${{ matrix.target }}" . - 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 }}