Skip to content

chore: release v2.0.0 (#285) #30

chore: release v2.0.0 (#285)

chore: release v2.0.0 (#285) #30

Workflow file for this run

name: Release NAPI
on:
workflow_dispatch:
push:
branches:
- main
paths:
- npm/package.json # Please only commit this file, so we don't need to wait for test CI to pass.
env:
DEBUG: 'napi:*'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check:
name: Check version
runs-on: ubuntu-latest
outputs:
version: ${{ env.version }}
version_changed: ${{ steps.version.outputs.changed }}
steps:
- uses: taiki-e/checkout-action@v1
- name: Check version changes
uses: EndBug/version-check@v2
id: version
with:
static-checking: localIsNew
file-url: https://unpkg.com/oxc-resolver@latest/package.json
file-name: npm/package.json
- name: Set version name
if: steps.version.outputs.changed == 'true'
run: |
echo "Version change found! New version: ${{ steps.version.outputs.version }} (${{ steps.version.outputs.version_type }})"
echo "version=${{ steps.version.outputs.version }}" >> $GITHUB_ENV
build:
needs: check
if: needs.check.outputs.version_changed == 'true'
env:
version: ${{ needs.check.outputs.version }}
outputs:
version: ${{ env.version }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: windows-latest
target: aarch64-pc-windows-msvc
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
- os: ubuntu-latest
target: aarch64-unknown-linux-musl
- os: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
- os: macos-latest
target: x86_64-apple-darwin
- os: macos-latest
target: aarch64-apple-darwin
- os: ubuntu-latest
target: wasm32-wasip1-threads
name: Package ${{ matrix.target }}
runs-on: ${{ matrix.os }}
steps:
- uses: taiki-e/checkout-action@v1
- uses: ./.github/actions/pnpm
- name: Add Rust Target
run: rustup target add ${{ matrix.target }}
- uses: goto-bus-stop/setup-zig@v2
if: ${{ contains(matrix.target, 'musl') }}
with:
version: 0.13.0
- name: Build with zig cross
if: ${{ contains(matrix.target, 'musl') }}
run: pnpm build -x --target ${{ matrix.target }}
- name: Build with napi cross
if: ${{ contains(matrix.target, 'gnu') }}
run: pnpm build --use-napi-cross --target ${{ matrix.target }}
- name: Build
if: ${{ !contains(matrix.target, 'gnu') && !contains(matrix.target, 'musl') }}
run: pnpm build --target ${{ matrix.target }}
- name: Test
if: matrix.target == 'x86_64-pc-windows-msvc' || matrix.target == 'aarch64-apple-darwin' || matrix.target == 'wasm32-wasip1-threads'
run: pnpm test
- name: Output docker params
if: ${{ contains(matrix.target, 'linux') }}
id: docker
run: |
node -e "
if ('${{ matrix.target }}'.startsWith('aarch64')) {
console.log('PLATFORM=linux/arm64')
} else if ('${{ matrix.target }}'.startsWith('armv7')) {
console.log('PLATFORM=linux/arm/v7')
} else {
console.log('PLATFORM=linux/amd64')
}
" >> $GITHUB_OUTPUT
node -e "
if ('${{ matrix.target }}'.endsWith('-musl')) {
console.log('IMAGE=node:lts-alpine')
} else {
console.log('IMAGE=node:lts-slim')
}
" >> $GITHUB_OUTPUT
echo "PNPM_STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
if: ${{ contains(matrix.target, 'linux') }}
with:
platforms: all
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
if: ${{ contains(matrix.target, 'linux') }}
- name: Run linux test
uses: addnab/docker-run-action@v3
if: ${{ contains(matrix.target, 'linux') }}
with:
image: ${{ steps.docker.outputs.IMAGE }}
options: -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:/oxc_resolver -w /oxc_resolver --platform ${{ steps.docker.outputs.PLATFORM }}
run: |
corepack enable
pnpm test
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: bindings-${{ matrix.target }}
path: |
napi/*.node
napi/*.wasm
build-freebsd:
needs: check
if: needs.check.outputs.version_changed == 'true'
name: Build FreeBSD
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
id: build
uses: cross-platform-actions/[email protected]
env:
DEBUG: napi:*
RUSTUP_IO_THREADS: 1
with:
operating_system: freebsd
version: '14.0'
memory: 8G
cpu_count: 3
environment_variables: 'DEBUG RUSTUP_IO_THREADS'
shell: bash
run: |
sudo pkg install -y -f curl node libnghttp2 npm
curl https://sh.rustup.rs -sSf --output rustup.sh
sh rustup.sh -y --profile minimal --default-toolchain stable
source "$HOME/.cargo/env"
echo "~~~~ rustc --version ~~~~"
rustc --version
echo "~~~~ node -v ~~~~"
node -v
pwd
ls -lah
whoami
env
sudo corepack enable
pnpm install
pnpm build --target x86_64-unknown-freebsd
rm -rf node_modules
rm -rf target
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: bindings-freebsd
path: napi/*.node
if-no-files-found: error
publish:
name: Publish NAPI
runs-on: ubuntu-latest
permissions:
id-token: write # for `npm publish --provenance`
needs:
- build
- build-freebsd
steps:
- uses: taiki-e/checkout-action@v1
- name: corepack
run: corepack enable
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare dirs and artifacts
run: |
pnpm napi create-npm-dirs --package-json-path npm/package.json
pnpm napi artifacts --package-json-path npm/package.json --build-output-dir napi
- name: Publish npm packages as latest
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
shell: bash
run: |
cp napi/index.js npm/index.js
cp napi/index.d.ts npm/index.d.ts
cp napi/browser.js npm/browser.js
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
pnpm napi pre-publish --no-gh-release -t npm --package-json-path npm/package.json
npm publish npm/ --tag latest --provenance --access public