Publish to NPM #327
Workflow file for this run
This file contains hidden or 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 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 }} |