Publish to NPM #138
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 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 --filter @stylexswc/rs-compiler build --target x86_64-apple-darwin | |
- host: windows-latest | |
build: pnpm run --filter @stylexswc/rs-compiler build --target x86_64-pc-windows-msvc | |
target: x86_64-pc-windows-msvc | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian | |
build: pnpm run --filter @stylexswc/rs-compiler build --target x86_64-unknown-linux-gnu | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: pnpm run --filter @stylexswc/rs-compiler build --target x86_64-unknown-linux-musl | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
build: pnpm run --filter @stylexswc/rs-compiler 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: pnpm run --filter @stylexswc/rs-compiler build --target aarch64-unknown-linux-gnu | |
node: | |
- '22.13.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@v4 | |
- name: Setup environment | |
uses: ./.github/actions/setup | |
- uses: goto-bus-stop/setup-zig@v2 | |
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 in docker | |
uses: addnab/docker-run-action@v3 | |
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: Upload artifact | |
uses: actions/upload-artifact@v4 | |
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 | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
architecture: arm64 | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
architecture: x64 | |
node: | |
- '18.20.5' | |
- '20.18.1' | |
- '22.13.0' | |
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@v4 | |
- name: Setup environment | |
uses: ./.github/actions/setup-pnpm | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: pnpm | |
architecture: ${{ matrix.settings.architecture }} | |
- name: Install dependencies | |
run: pnpm install --frozen-lockfile | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
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 --filter @stylexswc/rs-compiler 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.5' | |
- '20.18.1' | |
- '22.13.0' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup environment | |
uses: ./.github/actions/setup-pnpm | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: pnpm | |
- name: Install dependencies | |
run: pnpm install --frozen-lockfile | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-x86_64-unknown-linux-gnu | |
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 --filter @stylexswc/rs-compiler 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.5' | |
- '20.18.1' | |
- '22.13.0' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup environment | |
uses: ./.github/actions/setup-pnpm | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: pnpm | |
- name: Install dependencies | |
run: pnpm install --frozen-lockfile | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-x86_64-unknown-linux-musl | |
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 }}-alpine sh -c " | |
npm install -g pnpm && | |
pnpm run --filter @stylexswc/rs-compiler test | |
" | |
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 | |
- 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: | |
- '18.20.5' | |
- '20.18.1' | |
- '22.13.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@v4 | |
- name: Setup environment | |
uses: ./.github/actions/setup-pnpm | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
cache: pnpm | |
architecture: ${{ matrix.settings.architecture }} | |
- name: Install dependencies | |
run: pnpm install --frozen-lockfile | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: crates/stylex-rs-compiler/dist | |
- name: Download previous benchmark data | |
uses: actions/cache@v4 | |
with: | |
path: ./cache | |
key: ${{ matrix.settings.target }}-benchmark-${{ github.ref }} | |
restore-keys: | | |
${{ matrix.settings.target }}-benchmark- | |
- name: Run benchmarks | |
run: pnpm run --filter @stylexswc/rs-compiler bench | |
- name: Store benchmark result | |
uses: benchmark-action/github-action-benchmark@v1 | |
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 }} | |
publish: | |
name: 📦 Publish | |
runs-on: ubuntu-latest | |
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@v4 | |
- name: Setup pnpm | |
uses: ./.github/actions/setup-pnpm | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: crates/stylex-rs-compiler/artifacts | |
- name: Move artifacts | |
run: pnpm run --filter @stylexswc/rs-compiler artifacts | |
- 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.* crates/stylex-rs-compiler/dist/ | |
ls -R crates/stylex-rs-compiler/dist/* | |
- name: Build all public packages | |
run: pnpm run --filter "{./packages/*}" --filter "!@stylexswc/*swc*" --filter "!{./crates/*}" build | |
- name: Check artifacts | |
run: pnpm run --filter "{./packages/*}" --filter "!@stylexswc/*swc*" check:artifacts | |
- name: Publish | |
run: | | |
if [[ "${{ github.ref }}" =~ ^refs/tags/[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
pnpm publish -r --access public --no-git-checks --report-summary | |
elif [[ "${{ github.ref }}" =~ ^refs/tags/[0-9]+\.[0-9]+\.[0-9]+-.*$ ]]; then | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
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_TOKEN: ${{ secrets.NPM_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 }} | |