binding crates #242
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:* | |
APP_NAME: swc | |
MACOSX_DEPLOYMENT_TARGET: "10.13" | |
CARGO_INCREMENTAL: 0 | |
CARGO_PROFILE_RELEASE_LTO: "fat" | |
CI: "1" | |
DISABLE_PLUGIN_E2E_TESTS: true | |
permissions: | |
contents: write | |
id-token: write | |
on: | |
push: | |
branches: | |
- ci | |
- ci* | |
- main | |
tags: | |
- v* | |
jobs: | |
build: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
build: | | |
cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin | |
cp ./bindings/target/release/swc . | |
chmod +x ./swc | |
yarn build | |
strip -x *.node | |
- host: windows-latest | |
build: | | |
export CARGO_PROFILE_RELEASE_LTO=false | |
yarn build | |
cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin | |
cp ./bindings/target/release/swc . | |
target: x86_64-pc-windows-msvc | |
- host: windows-latest | |
build: | | |
export DISABLE_PLUGIN_E2E_TESTS=true | |
export CARGO_PROFILE_RELEASE_LTO=false | |
cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --target i686-pc-windows-msvc | |
cp bindings/target/i686-pc-windows-msvc/release/swc . | |
yarn build --target i686-pc-windows-msvc --cargo-flags="--no-default-features" --features swc_v1 | |
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 && RUSTFLAGS='-C target-feature=+sse2' cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin && | |
rm -rf bindings/target/target/x86_64-unknown-linux-gnu/release/.cargo-lock && | |
cp bindings/target/x86_64-unknown-linux-gnu/release/swc . && chmod +x ./swc && | |
yarn build --target x86_64-unknown-linux-gnu && | |
strip swc.linux-x64-gnu.node | |
- 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' cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin && | |
rm -rf target/release/.cargo-lock && | |
cp bindings/target/release/swc . && chmod +x ./swc && | |
RUSTFLAGS='-C target-feature=+sse2 -C target-feature=-crt-static' yarn build && | |
llvm-strip -x swc.linux-x64-musl.node | |
- 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"; | |
cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin --target=aarch64-apple-darwin | |
cp ./bindings/target/aarch64-apple-darwin/release/swc . | |
chmod +x ./swc | |
yarn build --target=aarch64-apple-darwin | |
strip -x *.node | |
- 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 && | |
RUSTFLAGS='' cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin --target aarch64-unknown-linux-gnu && | |
cp ./bindings/target/aarch64-unknown-linux-gnu/release/swc . && chmod +x ./swc && | |
export CC_aarch64_unknown_linux_gnu=/usr/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc && | |
yarn build --target aarch64-unknown-linux-gnu && | |
llvm-strip -x swc.linux-arm64-gnu.node | |
- host: ubuntu-latest | |
target: armv7-unknown-linux-gnueabihf | |
setup: | | |
sudo apt-get update | |
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y | |
# Use napi to build cli binary here to use zig as linker | |
build: | | |
export DISABLE_PLUGIN_E2E_TESTS=true | |
yarn napi build --bin swc --release --target armv7-unknown-linux-gnueabihf --cargo-cwd ./bindings/swc_cli --cargo-name swc --zig --zig-link-only | |
chmod +x ./swc | |
yarn build --target armv7-unknown-linux-gnueabihf --cargo-flags='--no-default-features --features swc_v1' | |
arm-linux-gnueabihf-strip swc.linux-arm-gnueabihf.node | |
- 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 && | |
RUSTFLAGS='-C target-feature=+crt-static -C link-arg=-lgcc' cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --features plugin --target aarch64-unknown-linux-musl && | |
rm -rf target/release/.cargo-lock && | |
cp bindings/target/aarch64-unknown-linux-musl/release/swc . && chmod +x ./swc && | |
env RUSTFLAGS='-C target-feature=-crt-static' yarn build --target=aarch64-unknown-linux-musl && | |
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip swc.linux-arm64-musl.node | |
- host: windows-latest | |
target: aarch64-pc-windows-msvc | |
# Disable `LTO` and increase `codegen-units` to avoid llvm `OOM` on GitHub Actions. | |
build: | | |
export DISABLE_PLUGIN_E2E_TESTS=true | |
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=256 | |
export CARGO_PROFILE_RELEASE_LTO=false | |
cargo build --manifest-path ./bindings/swc_cli/Cargo.toml --release --target aarch64-pc-windows-msvc | |
cp bindings/target/aarch64-pc-windows-msvc/release/swc.exe . | |
yarn build --target aarch64-pc-windows-msvc --cargo-flags='--no-default-features --features swc_v1' | |
name: stable - ${{ matrix.settings.target }} - node@18 | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node x64 | |
uses: actions/setup-node@v3 | |
if: matrix.settings.target != 'i686-pc-windows-msvc' | |
with: | |
node-version: 18 | |
cache: yarn | |
architecture: x64 | |
- name: Setup node x86 | |
uses: actions/setup-node@v3 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
with: | |
node-version: 18 | |
cache: yarn | |
architecture: x86 | |
- name: Install | |
uses: actions-rs/toolchain@v1 | |
if: ${{ !matrix.settings.docker }} | |
with: | |
profile: minimal | |
override: true | |
target: ${{ matrix.settings.target }} | |
- uses: goto-bus-stop/setup-zig@v2 | |
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
with: | |
version: 0.10.1 | |
- name: Install node dependencies | |
shell: bash | |
run: | | |
yarn | |
- name: Cache cargo registry | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ matrix.settings.target }}-node@18-cargo-registry-trimmed | |
- name: Cache cargo index | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/git | |
key: ${{ matrix.settings.target }}-node@18-cargo-index-trimmed | |
if: ${{ matrix.settings.docker }} | |
- name: Setup toolchain | |
run: ${{ matrix.settings.setup }} | |
if: ${{ matrix.settings.setup }} | |
shell: bash | |
- name: Install dependencies | |
run: | | |
yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
echo '/usr/local/cargo/bin' >> $GITHUB_PATH | |
- 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: >- | |
yarn global add wasm-pack && | |
${{ 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: | | |
swc* | |
if-no-files-found: error | |
test-macOS-windows-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
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: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: yarn | |
- 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 build:ts | |
- name: Test bindings | |
run: yarn test | |
test-linux-x64-gnu-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: yarn | |
- 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 build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/swc -w /swc node:${{ matrix.node }}-slim env DISABLE_PLUGIN_E2E_TESTS=true yarn test | |
test-linux-x64-musl-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: yarn | |
- 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 build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/swc -w /swc node:${{ matrix.node }}-alpine env DISABLE_PLUGIN_E2E_TESTS=true yarn test | |
test-linux-aarch64-musl-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }} | |
needs: | |
- build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- 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 build:ts | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: arm64 | |
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: node:lts-alpine | |
options: "--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build" | |
run: >- | |
set -e && | |
DISABLE_PLUGIN_E2E_TESTS=true yarn test | |
test-linux-arm-gnueabihf-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- 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 build:ts | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: arm | |
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: node:${{ matrix.node }}-bullseye-slim | |
options: "--platform linux/arm/v7 -v ${{ github.workspace }}:/build -w /build" | |
run: >- | |
set -e && | |
DISABLE_PLUGIN_E2E_TESTS=true yarn test && | |
ls -la | |
publish: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
name: npm | |
runs-on: ubuntu-latest | |
needs: | |
- test-linux-x64-gnu-binding | |
- test-linux-x64-musl-binding | |
- test-linux-arm-gnueabihf-binding | |
- test-macOS-windows-binding | |
- test-linux-aarch64-musl-binding | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: yarn | |
- name: Set release name | |
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: List binaries | |
run: ls -R artifacts | |
shell: bash | |
- name: Move binaries | |
shell: bash | |
run: | | |
./scripts/cli_artifacts.sh | |
ls -R ./artifacts_cli | |
npm run artifacts | |
- name: List npm | |
run: ls -R ./scripts/npm | |
shell: bash | |
- name: Set fallback dependencies | |
shell: bash | |
run: | | |
node ./scripts/update_fallback_dependencies.js | |
- name: Publish | |
run: | | |
npm config set provenance true | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
npm publish --access public | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Upload CLI binaries to gh release | |
shell: bash | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
RELEASE_VERSION: ${{ env.RELEASE_VERSION }} | |
run: | | |
./scripts/cli_upload_gh_release.sh |