lightningcss 1.0.0-alpha.44

A CSS parser, transformer, and minifier
Documentation
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
          # 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/npm-install@v1.8.32
      - 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/npm-install@v1.8.32
      - 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:lts-debian-zig
          - target: aarch64-unknown-linux-musl
            image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
            strip: aarch64-linux-musl-strip
          - target: x86_64-unknown-linux-musl
            image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
            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/npm-install@v1.8.32
      - 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-wasm:
    runs-on: ubuntu-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
        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: yarn wasm:build-release
      - name: Optimize wasm
        run: |
          ./binaryen-version_111/bin/wasm-opt wasm/lightningcss_node.wasm -Oz -o wasm/lightningcss_node.opt.wasm
          mv wasm/lightningcss_node.opt.wasm wasm/lightningcss_node.wasm
      - 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-wasm
    steps:
      - uses: actions/checkout@v3
      - uses: bahmutov/npm-install@v1.8.32
      - 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/npm-install@v1.8.32
      - 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