From a8042232b49d1160813b96df1b24c6793e69c8e4 Mon Sep 17 00:00:00 2001 From: cijiugechu Date: Wed, 11 Oct 2023 11:00:54 +0800 Subject: [PATCH 1/2] ci: avoid unnecessary release builds --- .github/workflows/build-and-tests.yml | 24 ++++++------ .github/workflows/repl-artefacts.yml | 4 +- package.json | 7 ++-- scripts/build-bindings.js | 54 +++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 scripts/build-bindings.js diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index 661462e1d76..311c80d3ec0 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -81,16 +81,16 @@ jobs: target: x86_64-apple-darwin build: >- set -e && - npm run build:napi -- --release && + npm run build:napi && strip -x *.node - host: windows-latest - build: npm run build:napi -- --release + build: npm run build:napi target: x86_64-pc-windows-msvc - host: windows-latest build: >- set -e && rustup target add i686-pc-windows-msvc && - npm run build:napi -- --release --target i686-pc-windows-msvc + npm run build:napi -- --target i686-pc-windows-msvc target: i686-pc-windows-msvc - host: ubuntu-latest target: x86_64-unknown-linux-gnu @@ -98,20 +98,20 @@ jobs: build: >- set -e && rustup target add x86_64-unknown-linux-gnu && - npm run build:napi -- --release --target x86_64-unknown-linux-gnu && + npm run build:napi -- --target x86_64-unknown-linux-gnu && strip *.node - host: ubuntu-latest target: x86_64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: >- set -e && - npm run build:napi -- --release && strip *.node + npm run build:napi && strip *.node - host: macos-latest target: aarch64-apple-darwin build: >- set -e && rustup target add aarch64-apple-darwin && - npm run build:napi -- --release --target aarch64-apple-darwin && + npm run build:napi -- --target aarch64-apple-darwin && strip -x *.node - host: ubuntu-latest target: aarch64-unknown-linux-gnu @@ -121,7 +121,7 @@ jobs: export JEMALLOC_SYS_WITH_LG_PAGE=16 && rustup default nightly-2023-10-05 && rustup target add aarch64-unknown-linux-gnu && - npm run build:napi -- --release --target aarch64-unknown-linux-gnu && + npm run build:napi -- --target aarch64-unknown-linux-gnu && aarch64-unknown-linux-gnu-strip *.node - host: ubuntu-latest target: armv7-unknown-linux-gnueabihf @@ -131,19 +131,19 @@ jobs: sudo apt-get install gcc-arm-linux-gnueabihf -y build: >- set -e && - npm run build:napi -- --release --target armv7-unknown-linux-gnueabihf && + npm run build:napi -- --target armv7-unknown-linux-gnueabihf && arm-linux-gnueabihf-strip *.node - host: ubuntu-latest target: aarch64-linux-android build: >- set -e && - npm run build:napi -- --release --target aarch64-linux-android && + npm run build:napi -- --target aarch64-linux-android && ${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip *.node - host: ubuntu-latest target: armv7-linux-androideabi build: >- set -e && - npm run build:napi -- --release --target armv7-linux-androideabi && + npm run build:napi -- --target armv7-linux-androideabi && ${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip *.node - host: ubuntu-latest target: aarch64-unknown-linux-musl @@ -153,11 +153,11 @@ jobs: export JEMALLOC_SYS_WITH_LG_PAGE=16 && rustup default nightly-2023-10-05 && rustup target add aarch64-unknown-linux-musl && - RUSTFLAGS='-C target-feature=-crt-static -C linker=aarch64-linux-musl-gcc' npm run build:napi -- --release --target aarch64-unknown-linux-musl && + RUSTFLAGS='-C target-feature=-crt-static -C linker=aarch64-linux-musl-gcc' npm run build:napi -- --target aarch64-unknown-linux-musl && /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node - host: windows-latest target: aarch64-pc-windows-msvc - build: npm run build:napi -- --release --target aarch64-pc-windows-msvc + build: npm run build:napi -- --target aarch64-pc-windows-msvc name: Build ${{ matrix.settings.name || matrix.settings.target }} runs-on: ${{ matrix.settings.host }} timeout-minutes: 30 diff --git a/.github/workflows/repl-artefacts.yml b/.github/workflows/repl-artefacts.yml index 6c7c03a500f..39f8c3ef0d7 100644 --- a/.github/workflows/repl-artefacts.yml +++ b/.github/workflows/repl-artefacts.yml @@ -53,7 +53,9 @@ jobs: if: steps.cache-node-modules.outputs.cache-hit != 'true' run: npm ci --ignore-scripts - name: Build artefacts - run: npm exec -- concurrently -c green,blue,yellow 'npm:build:napi -- --release' 'npm run build:wasm' 'npm:build:cjs' && npm run build:copy-native && npm run build:bootstrap + env: + BUILD_ARTEFACTS: 'build' + run: npm exec -- concurrently -c green,blue,yellow 'npm:build:napi' 'npm run build:wasm' 'npm:build:cjs' && npm run build:copy-native && npm run build:bootstrap - name: Upload "${{ github.event.number }}/rollup.browser.js" to bucket uses: zdurham/s3-upload-github-action@master with: diff --git a/package.json b/package.json index 0f793d993fd..8e464e738f9 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,10 @@ "scripts": { "build": "npm run build:wasm && concurrently -c green,blue \"npm run build:napi -- --release\" \"npm:build:js\" && npm run build:copy-native", "build:quick": "concurrently -c green,blue 'npm:build:napi' 'npm:build:cjs' && npm run build:copy-native", - "build:napi": "napi build --platform --dts native.d.ts --js false --cargo-cwd rust -p bindings_napi --cargo-name bindings_napi", - "build:wasm": "wasm-pack build rust/bindings_wasm --out-dir ../../wasm --target web --no-pack && shx rm wasm/.gitignore", - "build:wasm:node": "wasm-pack build rust/bindings_wasm --out-dir ../../wasm-node --target nodejs --no-pack && shx rm wasm-node/.gitignore", + "build:napi": "npm run build:binding -- --binding=napi", + "build:wasm": "npm run build:binding -- --binding=wasm", + "build:wasm:node": "npm run build:binding -- --binding=wasm-node", + "build:binding": "node scripts/build-bindings.js", "update:napi": "npm run build:napi && npm run build:copy-native", "build:js": "rollup --config rollup.config.ts --configPlugin typescript", "build:js:node": "rollup --config rollup.config.ts --configPlugin typescript --configIsBuildNode", diff --git a/scripts/build-bindings.js b/scripts/build-bindings.js new file mode 100644 index 00000000000..aee0e0cd921 --- /dev/null +++ b/scripts/build-bindings.js @@ -0,0 +1,54 @@ +#!/usr/bin/env node + +import { exec } from 'node:child_process'; +import { env, exit } from 'node:process'; +import argsParser from 'yargs-parser'; + +const parsedArguments = argsParser(process.argv.slice(2)); +const binding = parsedArguments.binding; +const target = parsedArguments.target; + +const isRelease = env.ROLLUP_RELEASE === 'releasing' || env.BUILD_ARTEFACTS === 'build'; + +const buildCommands = { + napi: { + dev: 'napi build --platform --dts native.d.ts --js false --cargo-cwd rust -p bindings_napi --cargo-name bindings_napi', + release: + 'napi build --platform --dts native.d.ts --js false --cargo-cwd rust -p bindings_napi --cargo-name bindings_napi --release' + }, + wasm: { + dev: 'wasm-pack build rust/bindings_wasm --dev --out-dir ../../wasm --target web --no-pack', + postBuild: 'shx rm wasm/.gitignore', + release: 'wasm-pack build rust/bindings_wasm --out-dir ../../wasm --target web --no-pack' + }, + 'wasm-node': { + dev: 'wasm-pack build rust/bindings_wasm --dev --out-dir ../../wasm-node --target nodejs --no-pack', + postBuild: 'shx rm wasm-node/.gitignore', + release: + 'wasm-pack build rust/bindings_wasm --out-dir ../../wasm-node --target nodejs --no-pack' + } +}; + +const commandToRun = (() => { + const buildCommand = buildCommands[binding][isRelease ? 'release' : 'dev']; + const commandWithTarget = target ? `${buildCommand} --target ${target}` : buildCommand; + const postBuild = buildCommands[binding].postBuild; + return postBuild ? `${commandWithTarget} && ${postBuild}` : commandWithTarget; +})(); + +console.log(` +command to run: ${commandToRun} +release or dev: ${isRelease ? 'release' : 'dev'} +binding: ${binding} +target: ${target} +`); + +exec(commandToRun, (error, stdout, stderr) => { + if (error) { + console.error(error); + exit(1); + } + + console.log(stdout); + console.error(stderr); +}); From f6bc9cd92e277b6b6d9dc9ac4f2f021febf627b1 Mon Sep 17 00:00:00 2001 From: cijiugechu Date: Sun, 15 Oct 2023 15:04:06 +0800 Subject: [PATCH 2/2] add `build` to publish --- .github/workflows/build-and-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index 311c80d3ec0..abb5d495ce3 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -311,6 +311,7 @@ jobs: needs: - test - lint + - build # This needs to be adapted for Rollup 5 if: startsWith(github.ref_name, 'v4') steps: