chore(ci): Enable publish action for more branches (#1057) #1015
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: Publish | |
env: | |
DEBUG: napi:* | |
APP_NAME: stc | |
MACOSX_DEPLOYMENT_TARGET: "10.13" | |
CARGO_INCREMENTAL: 0 | |
CARGO_PROFILE_RELEASE_LTO: "fat" | |
CI: "1" | |
on: | |
push: | |
branches: | |
- ci | |
- main | |
tags: | |
- v* | |
jobs: | |
build: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
build: | | |
cargo build --release | |
cp ./target/release/stc . | |
chmod +x ./stc | |
- host: windows-latest | |
build: | | |
export CARGO_PROFILE_RELEASE_LTO=false | |
cargo build --release | |
cp ./target/release/stc . | |
chmod +x ./stc | |
target: x86_64-pc-windows-msvc | |
- host: windows-latest | |
build: | | |
export DISABLE_PLUGIN_E2E_TESTS=true | |
export CARGO_PROFILE_RELEASE_LTO=false | |
cargo build --release --target i686-pc-windows-msvc | |
cp target/i686-pc-windows-msvc/release/stc . | |
chmod +x ./stc | |
target: i686-pc-windows-msvc | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian | |
build: >- | |
set -e && | |
unset CC_x86_64_unknown_linux_gnu && unset CC && RUSTFLAGS='-C target-feature=+sse2' cargo build --release && | |
rm -rf target/target/x86_64-unknown-linux-gnu/release/.cargo-lock && | |
cp target/x86_64-unknown-linux-gnu/release/stc . && chmod +x ./stc | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
# musl build is slow, let's disable the LTO | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: >- | |
set -e && | |
export CARGO_PROFILE_RELEASE_LTO=false && | |
RUSTFLAGS='-C target-feature=+sse2' cargo build --release && | |
rm -rf target/release/.cargo-lock && | |
cp target/release/stc . && chmod +x ./stc | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
build: | | |
sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/*; | |
export CC=$(xcrun -f clang); | |
export CXX=$(xcrun -f clang++); | |
SYSROOT=$(xcrun --sdk macosx --show-sdk-path); | |
export CFLAGS="-isysroot $SYSROOT -isystem $SYSROOT"; | |
cargo build --release --target=aarch64-apple-darwin | |
cp ./target/aarch64-apple-darwin/release/stc . | |
chmod +x ./stc | |
# - host: ubuntu-latest | |
# target: aarch64-unknown-linux-gnu | |
# docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 | |
# build: >- | |
# set -e && | |
# rustƒ target add aarch64-unknown-linux-gnu && | |
# unset CC_x86_64_unknown_linux_gnu && unset CC && | |
# RUSTFLAGS='' cargo build --release --target aarch64-unknown-linux-gnu && | |
# cp ./target/aarch64-unknown-linux-gnu/release/stc . && chmod +x ./stc | |
- host: ubuntu-latest | |
target: armv7-unknown-linux-gnueabihf | |
setup: | | |
sudo apt-get update | |
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y | |
build: | | |
cargo build --release --target=armv7-unknown-linux-gnueabihf | |
cp ./target/armv7-unknown-linux-gnueabihf/release/stc . | |
chmod +x ./stc | |
- host: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
downloadTarget: aarch64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: >- | |
rustup toolchain install $(cat ./rust-toolchain) && | |
rustup target add aarch64-unknown-linux-musl && | |
RUSTFLAGS='-C target-feature=+crt-static -C link-arg=-lgcc' cargo build --release --target aarch64-unknown-linux-musl && | |
rm -rf target/release/.cargo-lock && | |
cp target/aarch64-unknown-linux-musl/release/stc . && chmod +x ./stc | |
- host: windows-latest | |
target: aarch64-pc-windows-msvc | |
# Disable `LTO` and increase `codegen-units` to avoid llvm `OOM` on GitHub Actions. | |
build: | | |
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=256 | |
export CARGO_PROFILE_RELEASE_LTO=false | |
cargo build --release --target aarch64-pc-windows-msvc | |
cp target/aarch64-pc-windows-msvc/release/stc.exe . | |
name: stable - ${{ matrix.settings.target }} - node@16 | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node x64 | |
uses: actions/setup-node@v3 | |
if: matrix.settings.target != 'i686-pc-windows-msvc' | |
with: | |
node-version: 16 | |
check-latest: true | |
cache: yarn | |
architecture: x64 | |
- name: Setup node x86 | |
uses: actions/setup-node@v3 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
with: | |
node-version: 16 | |
check-latest: true | |
cache: yarn | |
architecture: x86 | |
- name: Install | |
uses: actions-rs/toolchain@v1 | |
if: ${{ !matrix.settings.docker }} | |
with: | |
profile: minimal | |
override: true | |
target: ${{ matrix.settings.target }} | |
- name: Install node dependencies | |
shell: bash | |
run: | | |
yarn | |
- name: Cache cargo registry | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ matrix.settings.target }}-node@16-cargo-registry-trimmed | |
- name: Cache cargo index | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/git | |
key: ${{ matrix.settings.target }}-node@16-cargo-index-trimmed | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-${{ matrix.settings.target }}-node@16 | |
if: ${{ matrix.settings.docker }} | |
- name: Setup toolchain | |
run: ${{ matrix.settings.setup }} | |
if: ${{ matrix.settings.setup }} | |
shell: bash | |
- name: Install dependencies | |
run: | | |
yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
echo '/usr/local/cargo/bin' >> $GITHUB_PATH | |
- name: Build in docker | |
uses: addnab/docker-run-action@v3 | |
if: ${{ matrix.settings.docker }} | |
with: | |
image: ${{ matrix.settings.docker }} | |
options: -v ${{ env.HOME }}/.cargo/git:/root/.cargo/git -v ${{ env.HOME }}/.cargo/registry:/root/.cargo/registry -v ${{ github.workspace }}:/build -w /build | |
run: >- | |
yarn global add wasm-pack && | |
${{ matrix.settings.build }} | |
- name: Build | |
if: ${{ !matrix.settings.docker }} | |
run: ${{ matrix.settings.build }} | |
shell: bash | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: | | |
stc* | |
if-no-files-found: error | |
test-macOS-windows-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
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 | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-${{ matrix.settings.target }}-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
run: yarn build:ts | |
- name: Test bindings | |
run: yarn test | |
test-linux-x64-gnu-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-x64-gnu-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-x86_64-unknown-linux-gnu | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
run: yarn build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/stc -w /stc node:${{ matrix.node }}-slim env yarn test | |
test-linux-x64-musl-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-x86_64-unknown-linux-musl-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-x86_64-unknown-linux-musl | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Build TypeScript | |
run: yarn build:ts | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/stc -w /stc node:${{ matrix.node }}-alpine env DISABLE_PLUGIN_E2E_TESTS=true yarn test | |
test-linux-aarch64-musl-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }} | |
needs: | |
- build | |
runs-on: ubuntu-latest | |
steps: | |
- run: docker run --rm --privileged multiarch/qemu-user-static:register --reset | |
- uses: actions/checkout@v3 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-aarch64-unknown-linux-musl | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-aarch64-musl-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --ignore-platform --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build TypeScript | |
run: yarn build:ts | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: multiarch/alpine:aarch64-latest-stable | |
options: "-v ${{ github.workspace }}:/build -w /build" | |
run: | | |
set -e | |
apk add nodejs npm yarn | |
test-linux-arm-gnueabihf-binding: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "14" | |
- "16" | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- run: docker run --rm --privileged multiarch/qemu-user-static:register --reset | |
- uses: actions/checkout@v3 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-armv7-unknown-linux-gnueabihf | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-test-linux-arm-gnueabihf-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --ignore-platform --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build TypeScript | |
run: yarn build:ts | |
- name: Setup and run tests | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: ghcr.io/napi-rs/napi-rs/nodejs:armhf-${{ matrix.node }} | |
options: "-v ${{ github.workspace }}:/build -w /build" | |
run: | | |
set -e | |
ls -la | |
test-all: | |
name: Ok to publish | |
runs-on: ubuntu-latest | |
needs: | |
- test-linux-x64-gnu-binding | |
- test-linux-x64-musl-binding | |
- test-linux-arm-gnueabihf-binding | |
- test-macOS-windows-binding | |
- test-linux-aarch64-musl-binding | |
steps: | |
- run: echo true | |
publish-npm: | |
name: npm | |
runs-on: ubuntu-latest | |
needs: | |
- test-all | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Set release name | |
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Cache NPM dependencies | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: npm-cache-publish | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: List binaries | |
run: ls -R artifacts | |
shell: bash | |
- name: Move binaries | |
shell: bash | |
run: | | |
./scripts/cli_artifacts.sh | |
npm run artifacts | |
- name: List npm | |
run: ls -R ./scripts/npm | |
shell: bash | |
- name: Set fallback dependencies | |
shell: bash | |
run: | | |
node ./scripts/update_fallback_dependencies.js | |
- name: Publish | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
run: | | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
npm publish --access public | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
publish-wasm: | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/ci') }} | |
name: Publisg Wasm for ${{ matrix.target }} | |
# needs: | |
# - test-all | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
target: [nodejs, web] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/ | |
**/target/ | |
key: ${{ runner.os }}-publish-wasm | |
- name: Install node dependencies | |
run: yarn | |
- name: Install wasm-pack | |
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
- name: Build | |
working-directory: crates/binding_wasm | |
run: | | |
wasm-pack build --out-name wasm --release --scope=swc --target ${{ matrix.target }} | |
sed -i -e 's/"name": "@swc\/binding_wasm"/"name": "@swc\/stc-wasm-${{ matrix.target }}"/g' pkg/package.json | |
- name: Publish | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
run: | | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
(cd crates/binding_wasm/pkg && npm publish --access public) | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |