release #138
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: release | |
on: | |
workflow_dispatch: | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Windows | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
binary: lightningcss.exe | |
- os: windows-latest | |
target: aarch64-pc-windows-msvc | |
binary: lightningcss.exe | |
# Mac OS | |
- os: macos-latest | |
target: x86_64-apple-darwin | |
strip: strip -x # Must use -x on macOS. This produces larger results on linux. | |
binary: lightningcss | |
name: build-${{ matrix.target }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install Node.JS | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Setup rust target | |
run: rustup target add ${{ matrix.target }} | |
- uses: bahmutov/[email protected] | |
- name: Build release | |
run: yarn build-release | |
env: | |
RUST_TARGET: ${{ matrix.target }} | |
- name: Build CLI | |
run: | | |
cargo build --release --features cli --target ${{ matrix.target }} | |
node -e "require('fs').renameSync('target/${{ matrix.target }}/release/${{ matrix.binary }}', '${{ matrix.binary }}')" | |
- name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 | |
if: ${{ matrix.strip }} | |
run: ${{ matrix.strip }} *.node ${{ matrix.binary }} | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bindings-${{ matrix.target }} | |
path: | | |
*.node | |
${{ matrix.binary }} | |
build-apple-silicon: | |
name: build-apple-silicon | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install Node.JS | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Setup rust target | |
run: rustup target add aarch64-apple-darwin | |
- uses: bahmutov/[email protected] | |
- name: Build release | |
run: yarn build-release | |
env: | |
RUST_TARGET: aarch64-apple-darwin | |
JEMALLOC_SYS_WITH_LG_PAGE: 14 | |
- name: Build CLI | |
run: | | |
export CC=$(xcrun -f clang); | |
export CXX=$(xcrun -f clang++); | |
SYSROOT=$(xcrun --sdk macosx --show-sdk-path); | |
export CFLAGS="-isysroot $SYSROOT -isystem $SYSROOT"; | |
export MACOSX_DEPLOYMENT_TARGET="10.9"; | |
cargo build --release --features cli --target aarch64-apple-darwin | |
mv target/aarch64-apple-darwin/release/lightningcss lightningcss | |
env: | |
JEMALLOC_SYS_WITH_LG_PAGE: 14 | |
- name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 | |
run: strip -x *.node lightningcss | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bindings-aarch64-apple-darwin | |
path: | | |
*.node | |
lightningcss | |
build-linux: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target: x86_64-unknown-linux-gnu | |
strip: strip | |
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian | |
setup: npm install --global yarn@1 | |
- target: aarch64-unknown-linux-gnu | |
strip: llvm-strip | |
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 | |
- target: armv7-unknown-linux-gnueabihf | |
strip: llvm-strip | |
image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:c22284b2d79092d3e885f64ede00f6afdeb2ccef7e2b6e78be52e7909091cd57 | |
- target: aarch64-unknown-linux-musl | |
image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 | |
strip: aarch64-linux-musl-strip | |
- target: x86_64-unknown-linux-musl | |
image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 | |
strip: strip | |
name: build-${{ matrix.target }} | |
runs-on: ubuntu-latest | |
container: | |
image: ${{ matrix.image }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install Node.JS | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Setup cross compile toolchain | |
if: ${{ matrix.setup }} | |
run: ${{ matrix.setup }} | |
- name: Setup rust target | |
run: rustup target add ${{ matrix.target }} | |
- uses: bahmutov/[email protected] | |
- name: Build release | |
run: yarn build-release | |
env: | |
RUST_TARGET: ${{ matrix.target }} | |
- name: Build CLI | |
run: | | |
yarn napi build --bin lightningcss --release --features cli --target ${{ matrix.target }} | |
mv target/${{ matrix.target }}/release/lightningcss lightningcss | |
- name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 | |
if: ${{ matrix.strip }} | |
run: ${{ matrix.strip }} *.node lightningcss | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bindings-${{ matrix.target }} | |
path: | | |
*.node | |
lightningcss | |
build-freebsd: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build FreeBSD | |
uses: cross-platform-actions/[email protected] | |
env: | |
DEBUG: napi:* | |
RUSTUP_HOME: /usr/local/rustup | |
CARGO_HOME: /usr/local/cargo | |
RUSTUP_IO_THREADS: 1 | |
with: | |
operating_system: freebsd | |
version: '14.0' | |
memory: 13G | |
cpu_count: 3 | |
environment_variables: 'DEBUG RUSTUP_IO_THREADS' | |
shell: bash | |
run: | | |
sudo pkg install -y -f curl node libnghttp2 npm yarn | |
curl https://sh.rustup.rs -sSf --output rustup.sh | |
sh rustup.sh -y --profile minimal --default-toolchain beta | |
source "$HOME/.cargo/env" | |
echo "~~~~ rustc --version ~~~~" | |
rustc --version | |
echo "~~~~ node -v ~~~~" | |
node -v | |
echo "~~~~ yarn --version ~~~~" | |
yarn --version | |
yarn install || true | |
yarn build-release | |
strip -x *.node | |
cargo build --release --features cli | |
mv target/release/lightningcss lightningcss | |
node -e "require('.')" | |
./lightningcss --help | |
rm -rf node_modules | |
rm -rf target | |
rm -rf .yarn/cache | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bindings-x86_64-unknown-freebsd | |
path: | | |
*.node | |
lightningcss | |
build-wasm: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install Node.JS | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- uses: bahmutov/[email protected] | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: wasm32-unknown-unknown | |
- name: Setup rust target | |
run: rustup target add wasm32-unknown-unknown | |
- name: Install wasm-opt | |
run: | | |
curl -L -O https://github.com/WebAssembly/binaryen/releases/download/version_111/binaryen-version_111-x86_64-linux.tar.gz | |
tar -xf binaryen-version_111-x86_64-linux.tar.gz | |
- name: Build wasm | |
run: | | |
export PATH="$PATH:./binaryen-version_111/bin" | |
yarn wasm:build-release | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wasm | |
path: wasm/lightningcss_node.wasm | |
release: | |
runs-on: ubuntu-latest | |
name: Build and release | |
needs: | |
- build | |
- build-linux | |
- build-apple-silicon | |
- build-freebsd | |
- build-wasm | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: bahmutov/[email protected] | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Build npm packages | |
run: | | |
node scripts/build-npm.js | |
cp artifacts/wasm/* wasm/. | |
node scripts/build-wasm.js | |
- run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > ~/.npmrc | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Publish to npm | |
run: | | |
for pkg in npm/*; do | |
echo "Publishing $pkg..." | |
cd $pkg; | |
npm publish; | |
cd ../..; | |
done | |
cd wasm | |
echo "Publishing lightningcss-wasm..."; | |
npm publish | |
cd .. | |
cd cli | |
echo "Publishing lightningcss-cli..."; | |
npm publish | |
cd .. | |
echo "Publishing lightningcss..."; | |
npm publish | |
release-crates: | |
runs-on: ubuntu-latest | |
name: Release Rust crate | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: bahmutov/[email protected] | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- run: cargo login ${CRATES_IO_TOKEN} | |
env: | |
CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} | |
- run: | | |
cargo install cargo-workspaces | |
cargo workspaces publish --no-remove-dev-deps --from-git -y |