Beautiful defaults: always-on recipe styling (alpha breaking) (#152) #35
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: 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 |