Skip to content

Publish to NPM

Publish to NPM #327

Workflow file for this run

name: Publish to NPM
env:
DEBUG: napi:*
APP_NAME: 'rs-compiler'
MACOSX_DEPLOYMENT_TARGET: '10.13'
CARGO_INCREMENTAL: '1'
permissions:
contents: write
id-token: write
actions: write
'on':
workflow_call:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
strategy:
fail-fast: false
matrix:
settings:
- host: macos-latest
target: x86_64-apple-darwin
build:
pnpm run build --filter @stylexswc/rs-compiler -- --target x86_64-apple-darwin
- host: windows-latest
build:
pnpm run build --filter @stylexswc/rs-compiler -- --target
x86_64-pc-windows-msvc
target: x86_64-pc-windows-msvc
- host: windows-latest
build:
pnpm run build --filter @stylexswc/rs-compiler -- --target
aarch64-pc-windows-msvc
target: aarch64-pc-windows-msvc
- host: ubuntu-latest
target: x86_64-unknown-linux-gnu
docker: stylex-debian-builder
dockerfile: .github/docker/debian.Dockerfile
build: |
corepack prepare pnpm@10.30.3 --activate
pnpm run build --filter @stylexswc/rs-compiler -- --target x86_64-unknown-linux-gnu
- host: ubuntu-latest
target: x86_64-unknown-linux-musl
docker: stylex-alpine-builder
dockerfile: .github/docker/alpine.Dockerfile
build: |
corepack prepare pnpm@10.30.3 --activate
pnpm run build --filter @stylexswc/rs-compiler -- --target x86_64-unknown-linux-musl
- host: macos-latest
target: aarch64-apple-darwin
build:
pnpm run build --filter @stylexswc/rs-compiler -- --target aarch64-apple-darwin
- host: ubuntu-latest
target: aarch64-unknown-linux-gnu
docker: stylex-debian-aarch64-builder
dockerfile: .github/docker/debian-aarch64.Dockerfile
build: |
corepack prepare pnpm@10.30.3 --activate
pnpm run build --filter @stylexswc/rs-compiler -- --target aarch64-unknown-linux-gnu
node:
- '24.14.0'
name: 🛠️ Build - ${{ matrix.settings.target }} - node@${{ matrix.settings.target }}
runs-on: ${{ matrix.settings.host }}
steps:
- name: Enable long path support
run: git config --system core.longpaths true
if: ${{ matrix.settings.host == 'windows-latest' }}
- uses: actions/checkout@v6.0.2
- name: Setup environment
uses: ./.github/actions/setup
with:
setup-rust: ${{ !matrix.settings.docker }}
rust-target: ${{ matrix.settings.target }}
- name: Cache turbo build setup
id: turbo-cache
uses: ./.github/actions/turbo
with:
cache-scope: npm-build-${{ matrix.settings.target }}
restore-cache-scope: npm-build-${{ matrix.settings.target }}
allow-global-fallback: 'false'
- uses: goto-bus-stop/setup-zig@abea47f85e598557f500fa1fd2ab7464fcb39406 # v2.2.1
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
with:
version: 0.13.0
- name: Setup toolchain
run: ${{ matrix.settings.setup }}
if: ${{ matrix.settings.setup }}
shell: bash
- name: Build custom Docker image
if: ${{ matrix.settings.dockerfile }}
run: docker build -t ${{ matrix.settings.docker }} -f ${{ matrix.settings.dockerfile }} .
- name: Build in docker
uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3.0.0
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: Save turbo build cache
if: always()
uses: ./.github/actions/turbo-save
with:
cache-key: ${{ steps.turbo-cache.outputs.cache-key }}
- name: Upload artifact
uses: actions/upload-artifact@v7
with:
name: bindings-${{ matrix.settings.target }}
path: crates/stylex-rs-compiler/dist
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
architecture: x64
# Skip testing for aarch64-pc-windows-msvc as ARM64 binaries cannot run on x64 Windows runners
# - host: windows-latest
# target: aarch64-pc-windows-msvc
# architecture: arm64
- host: macos-latest
target: aarch64-apple-darwin
architecture: arm64
- host: macos-latest
target: x86_64-apple-darwin
architecture: x64
node:
# - '20.18.1' #Emittery v2 is not compatible with Node.js 20.
- '22.22.1'
- '24.14.0'
#- '26.0.0' # Node.js 26 is not supported yet
runs-on: ${{ matrix.settings.host }}
steps:
- name: Enable long path support
run: git config --system core.longpaths true
if: ${{ matrix.settings.host == 'windows-latest' }}
- uses: actions/checkout@v6.0.2
- name: Setup environment
uses: ./.github/actions/setup
with:
rust-target: ${{ matrix.settings.target }}
node-version: ${{ matrix.node }}
node-architecture: ${{ matrix.settings.architecture }}
install-recursive: 'false'
frozen-lockfile: 'false'
- name: Cache turbo build setup
id: turbo-cache
uses: ./.github/actions/turbo
with:
cache-scope: npm-test-bindings-${{ matrix.settings.target }}-node-${{ matrix.node }}
restore-cache-scope: npm-build-${{ matrix.settings.target }}
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: bindings-${{ matrix.settings.target }}
path: crates/stylex-rs-compiler/dist
- name: List artifacts
run: ls -R crates/stylex-rs-compiler/dist
shell: bash
- name: Test bindings
run: pnpm run test --filter @stylexswc/rs-compiler --only
- name: Save turbo build cache
if: always()
uses: ./.github/actions/turbo-save
with:
cache-key: ${{ steps.turbo-cache.outputs.cache-key }}
test-linux-x64-gnu-binding:
name: 🧪 Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
settings:
- target: x86_64-unknown-linux-gnu
node:
# - '20.18.1' #Emittery v2 is not compatible with Node.js 20.
- '22.22.1'
- '24.14.0'
#- '26.0.0' # Node.js 26 is not supported yet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- name: Setup environment
uses: ./.github/actions/setup
with:
rust-target: ${{ matrix.settings.target }}
node-version: ${{ matrix.node }}
install-recursive: 'false'
frozen-lockfile: 'false'
- name: Cache turbo build setup
id: turbo-cache
uses: ./.github/actions/turbo
with:
cache-scope: npm-test-bindings-${{ matrix.settings.target }}-node-${{ matrix.node }}
restore-cache-scope: npm-build-${{ matrix.settings.target }}
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: bindings-${{ matrix.settings.target }}
path: crates/stylex-rs-compiler/dist
- name: List artifacts
run: ls -R crates/stylex-rs-compiler/dist
shell: bash
- name: Test bindings
run: |
docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim sh -c "
npm install -g pnpm &&
pnpm run test --filter @stylexswc/rs-compiler --only
"
- name: Save turbo build cache
if: always()
uses: ./.github/actions/turbo-save
with:
cache-key: ${{ steps.turbo-cache.outputs.cache-key }}
test-linux-x64-musl-binding:
name: 🧪 Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
settings:
- target: x86_64-unknown-linux-musl
node:
# - '20.18.1' #Emittery v2 is not compatible with Node.js 20.
- '22.22.1'
- '24.14.0'
#- '26.0.0' # Node.js 26 is not supported yet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- name: Setup environment
uses: ./.github/actions/setup
with:
rust-target: ${{ matrix.settings.target }}
node-version: ${{ matrix.node }}
install-recursive: 'false'
frozen-lockfile: 'false'
- name: Cache turbo build setup
id: turbo-cache
uses: ./.github/actions/turbo
with:
cache-scope: npm-test-bindings-${{ matrix.settings.target }}-node-${{ matrix.node }}
restore-cache-scope: npm-build-${{ matrix.settings.target }}
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: bindings-${{ matrix.settings.target }}
path: crates/stylex-rs-compiler/dist
- name: List artifacts
run: ls -R crates/stylex-rs-compiler/dist
shell: bash
- name: Test bindings
run: |
docker run --rm -e CI=true -v $(pwd):/build -w /build node:${{ matrix.node }}-alpine sh -c "
npm install -g pnpm &&
pnpm install --frozen-lockfile &&
pnpm run test --filter @stylexswc/rs-compiler --only
"
- name: Save turbo build cache
if: always()
uses: ./.github/actions/turbo-save
with:
cache-key: ${{ steps.turbo-cache.outputs.cache-key }}
benchmark:
name: 📊 Benchmark on ${{ matrix.settings.target }} - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
settings:
- host: windows-latest
target: x86_64-pc-windows-msvc
architecture: x64
# Skip benchmarking for aarch64-pc-windows-msvc as ARM64 binaries cannot run on x64 Windows runners
# - host: windows-latest
# target: aarch64-pc-windows-msvc
# architecture: arm64
- host: macos-latest
target: aarch64-apple-darwin
architecture: arm64
- host: macos-latest
target: x86_64-apple-darwin
architecture: x64
- host: ubuntu-latest
target: x86_64-unknown-linux-gnu
architecture: x64
node:
- '20.18.1'
- '22.22.1'
- '24.14.0'
runs-on: ${{ matrix.settings.host }}
permissions:
contents: write
pull-requests: write
repository-projects: write
steps:
- name: Enable long path support
run: git config --system core.longpaths true
if: ${{ matrix.settings.host == 'windows-latest' }}
- uses: actions/checkout@v6.0.2
- name: Setup environment
uses: ./.github/actions/setup
with:
setup-rust: 'false'
rust-target: ${{ matrix.settings.target }}
node-version: ${{ matrix.node }}
node-architecture: ${{ matrix.settings.architecture }}
install-recursive: 'false'
frozen-lockfile: 'false'
- name: Cache turbo build setup
id: turbo-cache
uses: ./.github/actions/turbo
with:
cache-scope: npm-benchmark-${{ matrix.settings.target }}-node-${{ matrix.node }}
restore-cache-scope: npm-build-${{ matrix.settings.target }}
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: bindings-${{ matrix.settings.target }}
path: crates/stylex-rs-compiler/dist
- name: Download previous benchmark data
uses: actions/cache@v5
with:
path: ./cache
key: ${{ matrix.settings.target }}-benchmark-${{ matrix.node }}
restore-keys: |
${{ matrix.settings.target }}-benchmark-${{ matrix.node }}-
${{ matrix.settings.target }}-benchmark-${{ matrix.node }}
${{ matrix.settings.target }}-benchmark-
${{ matrix.settings.target }}-benchmark
- name: Run benchmarks
run: pnpm run bench --filter @stylexswc/rs-compiler --only
- name: Store benchmark result
uses: benchmark-action/github-action-benchmark@a60cea5bc7b49e15c1f58f411161f99e0df48372 # v1.22.0
with:
tool: 'benchmarkjs'
output-file-path: 'crates/stylex-rs-compiler/benchmark/results/output.txt'
external-data-json-path: './cache/benchmark-data.json'
fail-on-alert: true
comment-on-alert: true
alert-comment-cc-users: '@Dwlad90'
summary-always: true
github-token: ${{ secrets.GITHUB_TOKEN }}
alert-threshold: '150%'
fail-threshold: '175%'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Save turbo build cache
if: always()
uses: ./.github/actions/turbo-save
with:
cache-key: ${{ steps.turbo-cache.outputs.cache-key }}
publish:
name: 📦 Publish
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
environment:
name: publish-approval
needs:
- build
- benchmark
- test-macOS-windows-binding
- test-linux-x64-gnu-binding
- test-linux-x64-musl-binding
steps:
- uses: actions/checkout@v6.0.2
- name: Setup pnpm
uses: ./.github/actions/setup-pnpm
- name: Cache turbo build setup
id: turbo-cache-build-public-packages
uses: ./.github/actions/turbo
with:
cache-scope: npm-publish-build-public-packages
restore-cache-scope: npm-build-x86_64-unknown-linux-gnu
allow-global-fallback: 'false'
- name: Download all artifacts
uses: actions/download-artifact@v8
with:
path: crates/stylex-rs-compiler/artifacts
- name: Move artifacts
run: pnpm exec turbo run artifacts --filter @stylexswc/rs-compiler --continue
- name: Move and list artifacts
run: |
mkdir -p crates/stylex-rs-compiler/dist
yes | cp -rf crates/stylex-rs-compiler/artifacts/bindings-aarch64-apple-darwin/{index,transform}.* crates/stylex-rs-compiler/dist/
ls -R crates/stylex-rs-compiler/dist/*
- name: Build all public packages
run: |
pnpm run build --filter "{./packages/*}" --filter "!@stylexswc/*swc*" --filter "!{./crates/*}" --only --continue
- name: Check artifacts
run:
pnpm run check:artifacts --filter "{./packages/*}" --filter "!@stylexswc/*swc*" --filter
"!{./crates/*}" --only
- name: Save turbo build cache
if: always()
uses: ./.github/actions/turbo-save
with:
cache-key: ${{ steps.turbo-cache-build-public-packages.outputs.cache-key }}
- name: Publish
run: |
if [[ "${{ github.ref }}" =~ ^refs/tags/[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
pnpm publish -r --access public --no-git-checks --report-summary
elif [[ "${{ github.ref }}" =~ ^refs/tags/[0-9]+\.[0-9]+\.[0-9]+-.*$ ]]; then
pnpm publish -r --tag next --access public --no-git-checks --report-summary
git diff
cat ./pnpm-publish-summary.json
else
echo "Not a release, skipping publish"
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_CONFIG_PROVENANCE: true
cleanup:
needs: [publish]
runs-on: ubuntu-latest
if: false
steps:
- name: 🧹 Cleanup Caches
run: |
REF="${{ github.ref }}"
run_id=$(gh workflow run cleanup.yaml \
--ref $REF \
--field reference=$REF \
--repo ${{ github.repository }}) || exit 1
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}