Rename #1
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 (extra-bindings) | |
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* | |
tags: | |
- "*" | |
jobs: | |
check: | |
name: "Check if we need to build" | |
outputs: | |
package: ${{ steps.split.outputs.package }} | |
version: ${{ steps.split.outputs.version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Split branch name | |
id: split | |
env: | |
BRANCH: ${{ github.ref_name }} | |
run: | | |
arr=($BRANCH) | |
echo "::set-output name=package::${arr[0]}" | |
echo "::set-output name=version::${arr[1]#v}" | |
build-node: | |
needs: | |
- check | |
strategy: | |
fail-fast: false | |
matrix: | |
package: | |
- minifier | |
- html | |
- css | |
settings: | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
build: | | |
(cd packages/minifier && corepack yarn build && strip -x *.node) | |
- host: windows-latest | |
build: | | |
(cd packages/minifier && yarn build) | |
target: x86_64-pc-windows-msvc | |
- host: windows-latest | |
build: | | |
(cd packages/minifier && corepack yarn build --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 && | |
unset CC_x86_64_unknown_linux_gnu && unset CC && | |
(cd packages/minifier && corepack yarn build --target x86_64-unknown-linux-gnu && strip minifier.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 && | |
(cd packages/minifier && RUSTFLAGS='-C target-feature=+sse2 -C target-feature=-crt-static' corepack yarn build && | |
llvm-strip -x minifier.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"; | |
(cd packages/minifier && corepack 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 && | |
export CC_aarch64_unknown_linux_gnu=/usr/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc && | |
(cd packages/minifier && corepack yarn build --target aarch64-unknown-linux-gnu && | |
llvm-strip -x minifier.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: | | |
(cd packages/minifier && corepack yarn build --target armv7-unknown-linux-gnueabihf && arm-linux-gnueabihf-strip minifier.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 && | |
(cd packages/minifier && env RUSTFLAGS='-C target-feature=-crt-static' corepack yarn build --target=aarch64-unknown-linux-musl && /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip minifier.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 CARGO_PROFILE_RELEASE_CODEGEN_UNITS=256 | |
export CARGO_PROFILE_RELEASE_LTO=false | |
(cd packages/minifier && corepack yarn build --target aarch64-pc-windows-msvc) | |
name: "Build: ${{ matrix.package }} - ${{ matrix.settings.target }} - node@18" | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- if: ${{ startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package }} | |
uses: actions/checkout@v3 | |
- name: Setup node x64 | |
uses: actions/setup-node@v3 | |
if: (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && matrix.settings.target != 'i686-pc-windows-msvc' | |
with: | |
node-version: 18 | |
architecture: x64 | |
- name: Setup node x86 | |
uses: actions/setup-node@v3 | |
if: (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && matrix.settings.target == 'i686-pc-windows-msvc' | |
with: | |
node-version: 18 | |
architecture: x86 | |
- name: Install | |
uses: actions-rs/toolchain@v1 | |
if: ${{ (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && !matrix.settings.docker }} | |
with: | |
profile: minimal | |
override: true | |
target: ${{ matrix.settings.target }} | |
- uses: goto-bus-stop/setup-zig@v2 | |
if: ${{ (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
with: | |
version: 0.10.1 | |
- if: ${{ startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package }} | |
shell: bash | |
run: corepack enable | |
- if: ${{ startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package }} | |
name: Install node dependencies | |
shell: bash | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Setup toolchain | |
run: ${{ matrix.settings.setup }} | |
if: ${{ (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && matrix.settings.setup }} | |
shell: bash | |
- if: ${{ startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package }} | |
name: Install dependencies | |
working-directory: "./packages" | |
run: | | |
# 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: ${{ (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && 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: ${{ (startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package) && !matrix.settings.docker }} | |
run: ${{ matrix.settings.build }} | |
shell: bash | |
- if: ${{ startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package }} | |
run: ls -al ./packages/minifier | |
shell: bash | |
- if: ${{ startsWith(github.ref,'refs/head') || needs.check.outputs.package == matrix.package }} | |
name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: | | |
minifier-${{ matrix.settings.target }} | |
path: | | |
./packages/minifier/minifier* | |
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-node | |
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 }} | |
- name: Install dependencies | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: minifier-${{ matrix.settings.target }} | |
path: "./packages/minifier" | |
- name: List packages | |
run: ls -R ./packages/minifier | |
shell: bash | |
- name: Build TypeScript | |
working-directory: "./packages/minifier" | |
run: corepack yarn build:ts | |
- name: Test bindings | |
working-directory: "./packages/minifier" | |
run: corepack 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-node | |
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 }} | |
- name: Install dependencies | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: minifier-x86_64-unknown-linux-gnu | |
path: "./packages/minifier" | |
- name: List packages | |
working-directory: "./packages/minifier" | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
working-directory: "./packages/minifier" | |
run: corepack yarn build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/swc -w /swc/packages/minifier node:${{ matrix.node }}-slim env DISABLE_PLUGIN_E2E_TESTS=true corepack 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-node | |
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 }} | |
- name: Install dependencies | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: minifier-x86_64-unknown-linux-musl | |
path: "./packages/minifier" | |
- name: List packages | |
working-directory: "./packages/minifier" | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
working-directory: "./packages/minifier" | |
run: corepack yarn build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/swc -w /swc/packages/minifier node:${{ matrix.node }}-alpine env DISABLE_PLUGIN_E2E_TESTS=true corepack 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-node | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: minifier-aarch64-unknown-linux-musl | |
path: "./packages/minifier" | |
- name: List packages | |
working-directory: "./packages/minifier" | |
run: ls -R . | |
shell: bash | |
- name: Install dependencies | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Build TypeScript | |
working-directory: "./packages/minifier" | |
run: corepack 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 && | |
(cd "./packages/minifier" && DISABLE_PLUGIN_E2E_TESTS=true corepack 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-node | |
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: minifier-armv7-unknown-linux-gnueabihf | |
path: "./packages/minifier" | |
- name: List packages | |
working-directory: "./packages/minifier" | |
run: ls -R . | |
shell: bash | |
- name: Install dependencies | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Build TypeScript | |
working-directory: "./packages/minifier" | |
run: corepack 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 && | |
(cd "./packages/minifier" && DISABLE_PLUGIN_E2E_TESTS=true corepack 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 | |
- name: Set release name | |
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Install dependencies | |
working-directory: "./packages/minifier" | |
run: corepack yarn | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: ./packages/minifier/artifacts | |
- name: List binaries | |
working-directory: "./packages/minifier" | |
run: ls -R artifacts | |
shell: bash | |
- name: Move binaries | |
working-directory: "./packages/minifier" | |
shell: bash | |
run: | | |
npm run artifacts | |
- name: List npm | |
working-directory: "./packages/minifier" | |
run: ls -R ./scripts/npm | |
shell: bash | |
- name: Set fallback dependencies | |
working-directory: "./packages/minifier" | |
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 | |
(cd ./packages/minifier && npm publish --access public) | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |