Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add StyleX napi-rs compiler #38

Merged
merged 6 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
323 changes: 323 additions & 0 deletions .github/workflows/napi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,323 @@
name: Validate StyleX RS compilator
env:
DEBUG: napi:*
APP_NAME: 'rs-compiler'
MACOSX_DEPLOYMENT_TARGET: '10.13'
CARGO_INCREMENTAL: '1'
permissions:
contents: write
id-token: write
'on':
push:
branches:
- master
tags-ignore:
- '**'
paths-ignore:
- '**/*.md'
- LICENSE
- '**/*.gitignore'
- .editorconfig
- docs/**
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
- converted_to_draft

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
if: github.event_name == 'push' || github.event.pull_request.draft == false
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
name: stable - ${{ matrix.settings.target }} - node@18
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/${{ env.APP_NAME }}.*.node
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'
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'
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'
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
node:
- '18'
- '20'
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
- 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
needs:
- build
- benchmark
- test-macOS-windows-binding
- test-linux-x64-gnu-binding
- test-linux-x64-musl-binding
steps:
- uses: actions/checkout@v4
- name: Setup environment
uses: ./.github/actions/setup
- 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: |
mv crates/stylex-rs-compiler/npm/*/*.node crates/stylex-rs-compiler/dist
ls -R crates/stylex-rs-compiler/dist
- name: Prepare artifacts
run: |
sed -i "s|require('@stylexswc/rs-compiler-[^']*')|require('@stylexswc/rs-compiler')|g" crates/stylex-rs-compiler/dist/index.js
shell: bash
# - name: Publish
# run: |
# npm config set provenance true
# if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$";
# then
# echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
# npm publish --access public
# elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+";
# then
# echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
# npm publish --tag next --access public
# else
# echo "Not a release, skipping publish"
# fi
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
Loading
Loading