Skip to content

fix(core): stabilize core refactor and break internal cycles (#182) #37

fix(core): stabilize core refactor and break internal cycles (#182)

fix(core): stabilize core refactor and break internal cycles (#182) #37

Workflow file for this run

name: release
on:
push:
tags:
- "v*"
permissions:
contents: write
jobs:
create-release:
name: create release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
native-prebuild:
name: native prebuild (${{ matrix.id }})
needs: create-release
runs-on: ${{ matrix.runsOn }}
strategy:
fail-fast: false
matrix:
include:
- id: linux-x64-gnu
runsOn: ubuntu-latest
rustTarget: x86_64-unknown-linux-gnu
nodeFile: rezi_ui_native.linux-x64-gnu.node
runSmoke: true
- id: darwin-x64
runsOn: macos-latest
rustTarget: x86_64-apple-darwin
nodeFile: rezi_ui_native.darwin-x64.node
runSmoke: false
- id: darwin-arm64
runsOn: macos-latest
rustTarget: aarch64-apple-darwin
nodeFile: rezi_ui_native.darwin-arm64.node
runSmoke: true
- id: win32-x64-msvc
runsOn: windows-latest
rustTarget: x86_64-pc-windows-msvc
nodeFile: rezi_ui_native.win32-x64-msvc.node
runSmoke: true
- id: win32-arm64-msvc
runsOn: windows-latest
rustTarget: aarch64-pc-windows-msvc
nodeFile: rezi_ui_native.win32-arm64-msvc.node
runSmoke: false
msvcArch: amd64_arm64
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
- name: Install
run: npm ci
- name: Setup Rust (stable)
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.rustTarget }}
- name: Setup MSVC (cross)
if: runner.os == 'Windows' && matrix.id == 'win32-arm64-msvc'
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.msvcArch }}
- name: Build prebuild
run: npx napi build --platform --release --target "${{ matrix.rustTarget }}" --js false
working-directory: packages/native
- name: Smoke test (host)
if: matrix.runSmoke
run: npm -w @rezi-ui/native run test:native:smoke
- name: Upload prebuild
uses: actions/upload-artifact@v4
with:
name: native-prebuild-${{ matrix.id }}
if-no-files-found: error
path: packages/native/${{ matrix.nodeFile }}
linux-arm64-gnu:
name: native prebuild (linux-arm64-gnu)
needs: create-release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Build + smoke (docker, linux/arm64 glibc)
run: |
docker run --rm --platform linux/arm64 \
-v "$PWD:/w" -w /w \
node:22-bullseye bash -lc '
set -euo pipefail
apt-get update
apt-get install -y curl build-essential git
curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable
. "$HOME/.cargo/env"
npm ci
(cd packages/native && npx napi build --platform --release --target aarch64-unknown-linux-gnu --js false)
npm -w @rezi-ui/native run test:native:smoke
'
- name: Upload prebuild
uses: actions/upload-artifact@v4
with:
name: native-prebuild-linux-arm64-gnu
if-no-files-found: error
path: packages/native/rezi_ui_native.linux-arm64-gnu.node
publish:
name: publish (npm)
runs-on: ubuntu-latest
needs:
- native-prebuild
- linux-arm64-gnu
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Extract version from tag
id: version
run: |
TAG="${GITHUB_REF#refs/tags/v}"
echo "value=$TAG" >> "$GITHUB_OUTPUT"
echo "Publishing version: $TAG"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
registry-url: https://registry.npmjs.org
- name: Install
run: npm ci
- name: Sync package versions to tag
run: node scripts/release-set-version.mjs "${{ steps.version.outputs.value }}"
- name: Build TypeScript
run: npm run build
- name: Download native prebuilds
uses: actions/download-artifact@v4
with:
path: .artifacts/native-prebuilds
merge-multiple: true
- name: Assemble binaries into packages/native
run: |
rm -f packages/native/*.node
cp .artifacts/native-prebuilds/*.node packages/native/
ls -la packages/native/*.node
- name: Verify npm pack contents + install smoke
run: node scripts/verify-native-pack.mjs
# Publish in dependency order. Separate steps so a single failure
# doesn't block the rest and each package gets its own status in the UI.
- name: Publish @rezi-ui/core
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish -w @rezi-ui/core --access public
- name: Publish @rezi-ui/native
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish -w @rezi-ui/native --access public
- name: Publish @rezi-ui/testkit
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish -w @rezi-ui/testkit --access public
- name: Publish @rezi-ui/node
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish -w @rezi-ui/node --access public
- name: Publish @rezi-ui/jsx
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish -w @rezi-ui/jsx --access public
- name: Publish create-rezi
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish -w create-rezi --access public