on push branches #270
Workflow file for this run
This file contains 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: Publish (node) | |
env: | |
DEBUG: napi:* | |
MACOSX_DEPLOYMENT_TARGET: "10.13" | |
CARGO_INCREMENTAL: 0 | |
CARGO_PROFILE_RELEASE_LTO: "fat" | |
CI: "1" | |
# https://github.com/actions/setup-node/issues/899#issuecomment-1819151595 | |
SKIP_YARN_COREPACK_CHECK: 1 | |
on: | |
push: | |
branches: | |
- ci | |
- pub* | |
- ci* | |
- main | |
tags: | |
- v* | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
build: | | |
yarn build | |
- host: windows-latest | |
build: | | |
export CARGO_PROFILE_RELEASE_LTO=false | |
yarn build | |
target: x86_64-pc-windows-msvc | |
- host: windows-latest | |
# use npm to run test, because of corepack link the yarn with x64 Node.js | |
build: | | |
export CARGO_PROFILE_RELEASE_LTO=false | |
yarn build --target i686-pc-windows-msvc | |
yarn test | |
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 && | |
unset CC_x86_64_unknown_linux_gnu && unset CC && yarn build --target x86_64-unknown-linux-gnu | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
# musl build is slow, let's disable the LTO | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: >- | |
set -e && | |
export CARGO_PROFILE_RELEASE_LTO=false && | |
RUSTFLAGS='-C target-feature=+sse2 -C target-feature=-crt-static' yarn build | |
- 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 build --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 && | |
export JEMALLOC_SYS_WITH_LG_PAGE=16 && | |
rustup target add aarch64-unknown-linux-gnu && | |
export CC_aarch64_unknown_linux_gnu=/usr/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc && | |
yarn build --target aarch64-unknown-linux-gnu | |
- host: ubuntu-latest | |
target: armv7-unknown-linux-gnueabihf | |
build: | | |
yarn build --target armv7-unknown-linux-gnueabihf --zig | |
- host: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
downloadTarget: aarch64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: >- | |
export JEMALLOC_SYS_WITH_LG_PAGE=16 && | |
rustup toolchain install $(cat ./rust-toolchain) && | |
rustup target add aarch64-unknown-linux-musl && | |
env RUSTFLAGS='-C target-feature=-crt-static' yarn build --target=aarch64-unknown-linux-musl | |
- host: windows-latest | |
target: aarch64-pc-windows-msvc | |
# Disable `LTO` and increase `codegen-units` to avoid llvm `OOM` on GitHub Actions. | |
build: | | |
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=256 | |
export CARGO_PROFILE_RELEASE_LTO=false | |
yarn build --target aarch64-pc-windows-msvc | |
name: stable - ${{ matrix.settings.target }} - node@16 | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Corepack | |
shell: bash | |
run: corepack enable | |
- name: Setup node x64 | |
uses: actions/setup-node@v4 | |
if: matrix.settings.target != 'i686-pc-windows-msvc' | |
with: | |
node-version: 20 | |
check-latest: true | |
cache: yarn | |
architecture: x64 | |
- name: Setup node x86 | |
uses: actions/setup-node@v4 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
with: | |
node-version: 20 | |
check-latest: true | |
cache: yarn | |
architecture: x86 | |
- name: Install | |
uses: actions-rs/toolchain@v1 | |
if: ${{ !matrix.settings.docker }} | |
with: | |
profile: minimal | |
override: true | |
target: ${{ matrix.settings.target }} | |
- name: Install dependencies | |
# run corepack enable again | |
# because on Windows, yarn will use `cmd` to run `yarn install` | |
shell: bash | |
run: | | |
corepack enable | |
yarn install | |
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
echo '/usr/local/cargo/bin' >> $GITHUB_PATH | |
- name: Cache cargo registry | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ matrix.settings.target }}-node@16-cargo-registry-trimmed | |
- name: Cache cargo index | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/git | |
key: ${{ matrix.settings.target }}-node@16-cargo-index-trimmed | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-${{ matrix.settings.target }}-node@16 | |
if: ${{ matrix.settings.docker }} | |
- name: Setup toolchain | |
run: ${{ matrix.settings.setup }} | |
if: ${{ matrix.settings.setup }} | |
shell: bash | |
- name: Install dependencies | |
# run corepack enable again | |
# because on Windows, yarn will use `cmd` to run `yarn install` | |
shell: bash | |
run: | | |
corepack enable | |
yarn install | |
- name: Build in docker | |
uses: addnab/docker-run-action@v3 | |
if: ${{ matrix.settings.docker }} | |
with: | |
image: ${{ matrix.settings.docker }} | |
options: -v ${{ env.HOME }}/.cargo/git:/root/.cargo/git -v ${{ env.HOME }}/.cargo/registry:/root/.cargo/registry -v ${{ github.workspace }}:/build -w /build | |
run: >- | |
corepack enable && | |
${{ matrix.settings.build }} | |
- name: Build | |
if: ${{ !matrix.settings.docker }} | |
run: ${{ matrix.settings.build }} | |
shell: bash | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: | | |
packages/*/*.node | |
if-no-files-found: error | |
test-macOS-windows-binding: | |
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: windows-latest | |
target: x86_64-pc-windows-msvc | |
node: | |
- "18" | |
- "20" | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Corepack | |
shell: bash | |
run: corepack enable | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-${{ matrix.settings.target }}-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
run: yarn workspaces foreach --all run build:ts | |
- name: Test bindings | |
run: yarn workspaces foreach --all run test | |
test-linux-x64-gnu-binding: | |
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "18" | |
- "20" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Corepack | |
shell: bash | |
run: corepack enable | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-x64-gnu-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-x86_64-unknown-linux-gnu | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
run: yarn workspaces foreach --all run build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/swc -w /swc node:${{ matrix.node }}-slim yarn workspaces foreach --all run test | |
test-linux-x64-musl-binding: | |
name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "18" | |
- "20" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Corepack | |
shell: bash | |
run: corepack enable | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-x86_64-unknown-linux-musl-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-x86_64-unknown-linux-musl | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
run: yarn workspaces foreach --all run build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/swc -w /swc node:${{ matrix.node }}-alpine yarn workspaces foreach --all run test | |
test-linux-aarch64-gnu-binding: | |
name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "18" | |
- "20" | |
runs-on: ubuntu-latest | |
steps: | |
- run: docker run --rm --privileged multiarch/qemu-user-static:register --reset | |
- uses: actions/checkout@v4 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-aarch64-unknown-linux-gnu | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-aarch64-gnu-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --ignore-platform --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build TypeScript | |
run: yarn workspaces foreach --all run build:ts | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: ghcr.io/napi-rs/napi-rs/nodejs:aarch64-${{ matrix.node }} | |
options: "-v ${{ github.workspace }}:/build -w /build" | |
run: | | |
set -e | |
yarn workspaces foreach --all run test | |
ls -la | |
test-linux-aarch64-musl-binding: | |
name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }} | |
needs: | |
- build | |
runs-on: ubuntu-latest | |
steps: | |
- run: docker run --rm --privileged multiarch/qemu-user-static:register --reset | |
- uses: actions/checkout@v4 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-aarch64-unknown-linux-musl | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-aarch64-musl-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --ignore-platform --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build TypeScript | |
run: yarn workspaces foreach --all run build:ts | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: multiarch/alpine:aarch64-latest-stable | |
options: "-v ${{ github.workspace }}:/build -w /build" | |
run: | | |
set -e | |
apk add nodejs npm yarn | |
yarn workspaces foreach --all run test | |
test-linux-arm-gnueabihf-binding: | |
name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "18" | |
- "20" | |
runs-on: ubuntu-latest | |
steps: | |
- run: docker run --rm --privileged multiarch/qemu-user-static:register --reset | |
- uses: actions/checkout@v4 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-armv7-unknown-linux-gnueabihf | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-arm-gnueabihf-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --ignore-platform --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build TypeScript | |
run: yarn workspaces foreach --all run build:ts | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: ghcr.io/napi-rs/napi-rs/nodejs:armhf-${{ matrix.node }} | |
options: "-v ${{ github.workspace }}:/build -w /build" | |
run: | | |
set -e | |
yarn workspaces foreach --all run test | |
ls -la | |
publish: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/ci' }} | |
name: npm | |
runs-on: ubuntu-latest | |
needs: | |
- test-linux-x64-gnu-binding | |
- test-linux-x64-musl-binding | |
- test-linux-aarch64-gnu-binding | |
- test-linux-arm-gnueabihf-binding | |
- test-macOS-windows-binding | |
- test-linux-aarch64-musl-binding | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Set release name | |
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-publish | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build typescript files | |
run: yarn workspaces foreach --all run build:ts | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: List binaries | |
run: ls -R artifacts | |
shell: bash | |
- name: Copy binaries | |
shell: bash | |
run: | | |
./scripts/move-artifacts.sh css || true | |
./scripts/move-artifacts.sh html || true | |
./scripts/move-artifacts.sh linter || true | |
- name: Move binaries | |
shell: bash | |
run: | | |
yarn workspaces foreach --all run artifacts | |
- name: List npm | |
run: ls -R ./packages/*/scripts/npm | |
shell: bash | |
- name: Publish | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
run: | | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
(cd packages/css && npm publish --access public || true) | |
(cd packages/html && npm publish --access public || true) | |
(cd packages/linter && npm publish --access public || true) | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |