name: publish env: DEBUG: napi:* NX_RUN_GROUP: ${{ github.run_id }}-${{ github.run_attempt }} on: release: types: [published] jobs: build: if: "!contains(github.event.head_commit.message, 'skip ci')" strategy: fail-fast: false matrix: settings: - host: macos-latest target: x86_64-apple-darwin build: | yarn nx -- run-many --target=build-native -- --target=x86_64-apple-darwin - host: windows-latest build: yarn nx -- run-many --target=build-native -- --target=x86_64-pc-windows-msvc target: x86_64-pc-windows-msvc # Windows 32bit (not needed) # - host: windows-latest # build: | # yarn nx -- run-many --target=build-native -- --target=i686-pc-windows-msvc # target: i686-pc-windows-msvc - host: ubuntu-latest target: x86_64-unknown-linux-gnu docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian build: |- set -e && yarn --version && yarn nx -- run-many --target=build-native -- --target=x86_64-unknown-linux-gnu - host: ubuntu-latest target: x86_64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: set -e && yarn nx -- run-many --target=build-native -- --target=x86_64-unknown-linux-musl - host: macos-latest target: aarch64-apple-darwin build: | sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/*; export CC=$(xcrun -f clang); export CXX=$(xcrun -f clang++); SYSROOT=$(xcrun --sdk macosx --show-sdk-path); export CFLAGS="-isysroot $SYSROOT -isystem $SYSROOT"; yarn nx -- run-many --target=build-native -- --target=aarch64-apple-darwin - host: ubuntu-latest target: aarch64-unknown-linux-gnu docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 build: |- set -e && yarn --version && yarn nx -- run-many --target=build-native -- --target=aarch64-unknown-linux-gnu - host: ubuntu-latest target: armv7-unknown-linux-gnueabihf setup: | sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabihf -y build: | yarn nx -- run-many --target=build-native -- --target=armv7-unknown-linux-gnueabihf # Android (not needed) # - host: ubuntu-latest # target: aarch64-linux-android # build: | # yarn nx -- run-many --target=build-native -- --target=aarch64-linux-android # - host: ubuntu-latest # target: armv7-linux-androideabi # build: | # yarn nx -- run-many --target=build-native -- --target=armv7-linux-androideabi - host: ubuntu-latest target: aarch64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: |- set -e && rustup target add aarch64-unknown-linux-musl && yarn nx -- run-many --target=build-native -- --target=aarch64-unknown-linux-musl - host: windows-latest target: aarch64-pc-windows-msvc build: yarn nx -- run-many --target=build-native -- --target=aarch64-pc-windows-msvc name: stable - ${{ matrix.settings.target }} - node@18 runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 if: ${{ !matrix.settings.docker }} with: node-version: 18 check-latest: true cache: yarn - name: Install uses: dtolnay/rust-toolchain@stable if: ${{ !matrix.settings.docker }} with: targets: ${{ matrix.settings.target }} - name: Cache cargo uses: actions/cache@v3 with: path: | ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ .cargo-cache target/ key: ${{ matrix.settings.target }}-cargo-registry - uses: goto-bus-stop/setup-zig@v2 if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} with: version: 0.10.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: yarn config set supportedArchitectures.cpu "ia32" shell: bash - name: Install dependencies run: yarn install timeout-minutes: 30 - name: Setup node x86 uses: actions/setup-node@v3 if: matrix.settings.target == 'i686-pc-windows-msvc' with: node-version: 18 check-latest: true cache: yarn architecture: x86 - 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@v3 with: name: bindings-${{ matrix.settings.target }} path: packages/**/*.node if-no-files-found: error # build-freebsd: # runs-on: macos-12 # name: Build FreeBSD # steps: # - uses: actions/checkout@v3 # - name: Build # id: build # uses: vmactions/freebsd-vm@v0 # env: # DEBUG: napi:* # RUSTUP_HOME: /usr/local/rustup # CARGO_HOME: /usr/local/cargo # RUSTUP_IO_THREADS: 1 # with: # envs: DEBUG RUSTUP_HOME CARGO_HOME RUSTUP_IO_THREADS # usesh: true # mem: 3000 # prepare: | # pkg install -y -f curl node libnghttp2 # curl -qL https://www.npmjs.com/install.sh | sh # npm install --location=global --ignore-scripts yarn # curl https://sh.rustup.rs -sSf --output rustup.sh # sh rustup.sh -y --profile minimal --default-toolchain stable # export PATH="/usr/local/cargo/bin:$PATH" # echo "~~~~ rustc --version ~~~~" # rustc --version # echo "~~~~ node -v ~~~~" # node -v # echo "~~~~ yarn --version ~~~~" # yarn --version # run: | # export PATH="/usr/local/cargo/bin:$PATH" # pwd # ls -lah # whoami # env # freebsd-version # yarn install # yarn nx -- run-many --target=build-native -- --target=x86_64-unknown-freebsd # strip -x packages/*/*.node # rm -rf node_modules # rm -rf target # rm -rf .yarn/cache # - name: Upload artifact # uses: actions/upload-artifact@v3 # with: # name: bindings-freebsd # path: packages/*/*.node # if-no-files-found: error publish: name: Publish runs-on: ubuntu-latest needs: # - build-freebsd - build steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: 18 check-latest: true cache: yarn - name: Install dependencies run: yarn install - name: Download all artifacts uses: actions/download-artifact@v3 with: path: artifacts - name: List artifacts run: ls -R artifacts shell: bash - name: Publish run: | git checkout -b publish/$GITHUB_REF_NAME npm config set //registry.npmjs.org/:_authToken=$NPM_TOKEN yarn nx-release --local=false $GITHUB_REF_NAME env: GH_TOKEN: ${{ github.token }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}