Skip to content

release

release #138

Workflow file for this run

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