0.0.5 #15
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: CI | |
env: | |
DEBUG: napi:* | |
APP_NAME: node | |
MACOSX_DEPLOYMENT_TARGET: '10.13' | |
'on': | |
push: | |
branches: | |
- main | |
tags-ignore: | |
- '**' | |
paths-ignore: | |
- '**/*.md' | |
- LICENSE | |
- '**/*.gitignore' | |
- .editorconfig | |
- docs/** | |
pull_request: null | |
jobs: | |
build: | |
if: '!contains(github.event.head_commit.message, ''skip ci'')' | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
architecture: x64 | |
build: | | |
yarn build | |
strip -x *.node | |
- host: windows-latest | |
build: yarn build | |
target: x86_64-pc-windows-msvc | |
architecture: x64 | |
- host: windows-latest | |
build: | | |
yarn build --target i686-pc-windows-msvc | |
target: i686-pc-windows-msvc | |
architecture: x86 | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
architecture: x64 | |
docker: | | |
docker pull $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-debian | |
docker tag $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-debian builder | |
build: | | |
docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd):/build -w /build builder yarn build && strip *.node | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
architecture: x64 | |
docker: | | |
docker pull $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
docker tag $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-alpine builder | |
build: docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd):/build -w /build builder yarn build && strip *.node | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
build: | | |
yarn build --target=aarch64-apple-darwin | |
strip -x *.node | |
- host: ubuntu-latest | |
architecture: x64 | |
target: aarch64-unknown-linux-gnu | |
setup: | | |
sudo apt-get update | |
sudo apt-get install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu -y | |
build: | | |
yarn build --target=aarch64-unknown-linux-gnu | |
aarch64-linux-gnu-strip *.node | |
- host: ubuntu-latest | |
architecture: x64 | |
target: armv7-unknown-linux-gnueabihf | |
setup: | | |
sudo apt-get update | |
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y | |
build: | | |
yarn build --target=armv7-unknown-linux-gnueabihf | |
arm-linux-gnueabihf-strip *.node | |
- host: ubuntu-latest | |
architecture: x64 | |
target: aarch64-linux-android | |
build: | | |
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" | |
export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" | |
export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang++" | |
export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" | |
yarn build --target aarch64-linux-android | |
${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip *.node | |
- host: ubuntu-latest | |
architecture: x64 | |
target: armv7-linux-androideabi | |
build: | | |
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" | |
export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" | |
export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++" | |
export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" | |
yarn build --target armv7-linux-androideabi | |
${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip *.node | |
- host: ubuntu-latest | |
architecture: x64 | |
target: aarch64-unknown-linux-musl | |
downloadTarget: aarch64-unknown-linux-musl | |
docker: | | |
docker pull ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
docker tag ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine builder | |
build: | | |
docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd):/build -w /build builder sh -c "yarn build --target=aarch64-unknown-linux-musl && /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node" | |
- host: windows-latest | |
architecture: x64 | |
target: aarch64-pc-windows-msvc | |
build: yarn build --target aarch64-pc-windows-msvc | |
- host: ubuntu-latest | |
target: wasm32-unknown-unknown | |
architecture: x64 | |
build: | | |
cargo install -f wasm-bindgen-cli | |
yarn build:wasm | |
name: stable - ${{ matrix.settings.target }} - node@18 | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup node | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18 | |
check-latest: true | |
cache: yarn | |
architecture: ${{ matrix.settings.architecture }} | |
- name: Install | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
override: true | |
toolchain: stable | |
target: ${{ matrix.settings.target }} | |
- name: Generate Cargo.lock | |
uses: actions-rs/cargo@v1 | |
with: | |
command: generate-lockfile | |
- name: Cache cargo registry | |
uses: actions/cache@v2 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ matrix.settings.target }}-node@18-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }} | |
- name: Cache cargo index | |
uses: actions/cache@v2 | |
with: | |
path: ~/.cargo/git | |
key: ${{ matrix.settings.target }}-node@18-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }} | |
- name: Cache NPM dependencies | |
uses: actions/cache@v2 | |
with: | |
path: node_modules | |
key: npm-cache-${{ matrix.settings.target }}-node@18-${{ hashFiles('yarn.lock') }} | |
- name: Pull latest image | |
run: ${{ matrix.settings.docker }} | |
env: | |
DOCKER_REGISTRY_URL: ghcr.io | |
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 --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Build | |
run: ${{ matrix.settings.build }} | |
shell: bash | |
- name: Upload artifact | |
if: ${{ !contains(matrix.settings.target, 'wasm') }} | |
uses: actions/upload-artifact@v2 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: ${{ env.APP_NAME }}.*.node | |
if-no-files-found: error | |
- name: Upload artifact (WASM) | |
if: ${{ contains(matrix.settings.target, 'wasm') }} | |
uses: actions/upload-artifact@v2 | |
with: | |
name: wasm | |
path: wasm/dist | |
if-no-files-found: error | |
build-freebsd: | |
runs-on: macos-10.15 | |
name: Build FreeBSD | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Build | |
id: build | |
uses: vmactions/freebsd-vm@v0.1.5 | |
env: | |
DEBUG: napi:* | |
RUSTUP_HOME: /usr/local/rustup | |
CARGO_HOME: /usr/local/cargo | |
RUSTUP_IO_THREADS: 1 | |
with: | |
envs: DEBUG RUSTUP_HOME CARGO_HOME RUSTUP_IO_THREADS | |
usesh: true | |
mem: 3000 | |
prepare: | | |
pkg install -y curl node14 python2 | |
curl -qL https://www.npmjs.com/install.sh | sh | |
npm install -g yarn | |
curl https://sh.rustup.rs -sSf --output rustup.sh | |
sh rustup.sh -y --profile minimal --default-toolchain stable | |
export PATH="/usr/local/cargo/bin:$PATH" | |
echo "~~~~ rustc --version ~~~~" | |
rustc --version | |
echo "~~~~ node -v ~~~~" | |
node -v | |
echo "~~~~ yarn --version ~~~~" | |
yarn --version | |
run: | | |
export PATH="/usr/local/cargo/bin:$PATH" | |
pwd | |
ls -lah | |
whoami | |
env | |
freebsd-version | |
yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 | |
yarn build | |
strip -x *.node | |
rm -rf node_modules | |
rm -rf target | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: bindings-freebsd | |
path: ${{ env.APP_NAME }}.*.node | |
if-no-files-found: error | |
publish: | |
name: Publish | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
- build-freebsd | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup node | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18 | |
check-latest: true | |
cache: yarn | |
- name: Cache NPM dependencies | |
uses: actions/cache@v2 | |
with: | |
path: node_modules | |
key: npm-cache-ubuntu-latest-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
npm-cache- | |
- name: Install dependencies | |
run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 | |
- name: Download all artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
path: artifacts | |
- name: Move artifacts (WASM) | |
run: mv artifacts/wasm wasm/dist | |
- name: Move artifacts | |
run: yarn artifacts | |
- name: List packages | |
run: ls -R ./npm ./wasm ./meta | |
shell: bash | |
- name: Publish | |
run: | | |
sudo apt-get -y install jq moreutils | |
# WASM | |
jq '.[0].version = .[1].version | .[0]' -s wasm/package.json package.json | sponge wasm/package.json | |
# Meta | |
jq '.[0].version = .[1].version | .[0]' -s meta/package.json package.json | sponge meta/package.json | |
jq '.[0].dependencies[] = .[1].version | .[0]' -s meta/package.json package.json | sponge meta/package.json | |
jq '.[0].keywords = ([.[1].keywords, .[2].keywords] | flatten | unique) | .[0]' -s meta/package.json package.json wasm/package.json | sponge meta/package.json | |
PACKAGES=( | |
"." | |
"wasm" | |
"meta" | |
) | |
function run_in_all_pkgs() { | |
for i in ${PACKAGES[@]}; do | |
pushd $i | |
"$@" | |
popd | |
done | |
} | |
if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; | |
then | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
run_in_all_pkgs npm publish --access public | |
elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; | |
then | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
run_in_all_pkgs npm publish --tag next --access public | |
else | |
echo "Not a release, skipping publish" | |
fi | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |