Fix build: Separate napi and bin builds to prevent --target conflicts #9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| env: | |
| DEBUG: napi:* | |
| APP_NAME: bum | |
| MACOSX_DEPLOYMENT_TARGET: "10.13" | |
| permissions: | |
| contents: write | |
| id-token: write | |
| "on": | |
| push: | |
| branches: | |
| - main | |
| - update-bum-to-npm | |
| tags-ignore: | |
| - "**" | |
| paths-ignore: | |
| - "**/*.md" | |
| - LICENSE | |
| - "**/*.gitignore" | |
| - .editorconfig | |
| - docs/** | |
| pull_request: null | |
| jobs: | |
| build: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - host: macos-latest | |
| target: x86_64-apple-darwin | |
| build: | | |
| bun run build | |
| strip -x *.node | |
| - host: windows-latest | |
| build: bun run build | |
| target: x86_64-pc-windows-msvc | |
| - host: macos-latest | |
| target: aarch64-apple-darwin | |
| build: | | |
| bun run build:napi --target aarch64-apple-darwin | |
| bun run build:bin | |
| strip -x *.node | |
| - host: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian | |
| build: |- | |
| set -e && | |
| corepack enable && | |
| npm install -g bun && | |
| bun install && | |
| bun run build:napi --target x86_64-unknown-linux-gnu && | |
| bun run build:bin && | |
| strip *.node | |
| - host: ubuntu-latest | |
| target: x86_64-unknown-linux-musl | |
| docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
| build: |- | |
| set -e && | |
| apk add --no-cache perl make && | |
| corepack enable && | |
| npm install -g bun && | |
| bun install && | |
| bun run build && | |
| strip *.node | |
| - host: ubuntu-latest | |
| target: aarch64-unknown-linux-gnu | |
| docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 | |
| build: |- | |
| set -e && | |
| corepack enable && | |
| npm install -g bun && | |
| bun install && | |
| bun run build:napi --target aarch64-unknown-linux-gnu && | |
| bun run build:bin && | |
| aarch64-unknown-linux-gnu-strip *.node | |
| - host: ubuntu-latest | |
| target: aarch64-unknown-linux-musl | |
| docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
| build: |- | |
| set -e && | |
| apk add --no-cache perl make && | |
| rustup target add aarch64-unknown-linux-musl && | |
| corepack enable && | |
| npm install -g bun && | |
| bun install && | |
| bun run build:napi --target aarch64-unknown-linux-musl && | |
| bun run build:bin && | |
| /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node | |
| name: stable - ${{ matrix.settings.target }} - node@22 | |
| runs-on: ${{ matrix.settings.host }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| node-version: 22 | |
| - name: Install Bum (Unix) | |
| if: ${{ !matrix.settings.docker && runner.os != 'Windows' }} | |
| run: | | |
| curl -fsSL https://github.com/owenizedd/bum/raw/main/install.sh | bash | |
| echo "$HOME/.bum/bin" >> $GITHUB_PATH | |
| echo "$HOME/.bun/bin" >> $GITHUB_PATH | |
| shell: bash | |
| - name: Setup Bun (Windows - fallback to official installer) | |
| if: ${{ !matrix.settings.docker && runner.os == 'Windows' }} | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: "1.3.0" | |
| - name: Use Bun via Bum (Unix) | |
| if: ${{ !matrix.settings.docker && runner.os != 'Windows' }} | |
| run: | | |
| export PATH="$HOME/.bum/bin:$PATH" | |
| bum use 1.3.0 | |
| shell: bash | |
| - name: Install | |
| uses: dtolnay/rust-toolchain@stable | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| toolchain: stable | |
| targets: ${{ matrix.settings.target }} | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| .cargo-cache | |
| target/ | |
| key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} | |
| - uses: goto-bus-stop/setup-zig@v2 | |
| if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
| with: | |
| version: 0.11.0 | |
| - name: Setup toolchain | |
| run: ${{ matrix.settings.setup }} | |
| if: ${{ matrix.settings.setup }} | |
| shell: bash | |
| - name: Setup node x86 | |
| if: matrix.settings.target == 'i686-pc-windows-msvc' | |
| run: bun config set supportedArchitectures.cpu "ia32" | |
| shell: bash | |
| - name: Setup node x86 architecture | |
| uses: actions/setup-node@v4 | |
| if: matrix.settings.target == 'i686-pc-windows-msvc' | |
| with: | |
| node-version: 22 | |
| architecture: x86 | |
| - name: Install dependencies | |
| run: bun install | |
| if: ${{ !matrix.settings.docker }} | |
| - name: Build in docker | |
| uses: addnab/docker-run-action@v3 | |
| if: ${{ matrix.settings.docker }} | |
| with: | |
| image: ${{ matrix.settings.docker }} | |
| options: "--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build" | |
| run: ${{ matrix.settings.build }} | |
| - name: Build | |
| run: ${{ matrix.settings.build }} | |
| if: ${{ !matrix.settings.docker }} | |
| shell: bash | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: bindings-${{ matrix.settings.target }} | |
| path: ${{ env.APP_NAME }}.*.node | |
| if-no-files-found: error | |
| universal-macOS: | |
| name: Build universal macOS binary | |
| needs: | |
| - build | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 18 | |
| - name: Install Bum | |
| run: | | |
| curl -fsSL https://github.com/owenizedd/bum/raw/main/install.sh | bash | |
| echo "$HOME/.bum/bin" >> $GITHUB_PATH | |
| echo "$HOME/.bun/bin" >> $GITHUB_PATH | |
| shell: bash | |
| - name: Use Bun via Bum | |
| run: | | |
| export PATH="$HOME/.bum/bin:$PATH" | |
| bum use 1.3.0 | |
| shell: bash | |
| - name: Install dependencies | |
| run: bun install | |
| - name: Download macOS x64 artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: bindings-x86_64-apple-darwin | |
| path: artifacts | |
| - name: Download macOS arm64 artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: bindings-aarch64-apple-darwin | |
| path: artifacts | |
| - name: Combine binaries | |
| run: bun run universal | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: bindings-universal-apple-darwin | |
| path: ${{ env.APP_NAME }}.*.node | |
| if-no-files-found: error | |
| publish: | |
| name: Publish | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build | |
| - universal-macOS | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - name: Install Bum | |
| run: | | |
| curl -fsSL https://github.com/owenizedd/bum/raw/main/install.sh | bash | |
| echo "$HOME/.bum/bin" >> $GITHUB_PATH | |
| echo "$HOME/.bun/bin" >> $GITHUB_PATH | |
| shell: bash | |
| - name: Use Bun via Bum | |
| run: | | |
| export PATH="$HOME/.bum/bin:$PATH" | |
| bum use 1.3.0 | |
| shell: bash | |
| - name: Install dependencies | |
| run: bun install | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Move artifacts | |
| run: bun run artifacts | |
| - name: List packages | |
| run: ls -R ./npm | |
| shell: bash | |
| - name: Publish | |
| run: | | |
| npm config set provenance true | |
| if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; | |
| then | |
| echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
| npm publish --access public | |
| elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; | |
| then | |
| echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
| npm publish --tag next --access public | |
| else | |
| echo "Not a release, skipping publish" | |
| fi | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |