Skip to content

ci: squash with previous commit once the job has created a new one #853

ci: squash with previous commit once the job has created a new one

ci: squash with previous commit once the job has created a new one #853

Workflow file for this run

name: CI
env:
MACOSX_DEPLOYMENT_TARGET: '10.13'
on:
push:
branches:
- main
tags-ignore:
- '**'
paths:
- '**/src/**/*.rs'
- '**/*.cjs'
- '**/*.js'
- '**/*.ts'
- '**/*.mjs'
- '**/*.java'
- '**/*.json'
- 'README.md'
- 'core/bin/codepoints.bin'
- 'bindings/native/docs/**'
- 'bindings/native/decancer.h'
- 'bindings/native/decancer.cpp'
- 'bindings/native/decancer.hpp'
pull_request: null
permissions:
contents: write
pages: write
id-token: write
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: latest
- name: Setup
id: setup
run: node scripts/ci_setup.mjs
env:
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
outputs:
release: ${{ steps.setup.outputs.release }}
core_affected: ${{ steps.setup.outputs.core_affected }}
node_affected: ${{ steps.setup.outputs.node_affected }}
wasm_affected: ${{ steps.setup.outputs.wasm_affected }}
native_affected: ${{ steps.setup.outputs.native_affected }}
native_docs_affected: ${{ steps.setup.outputs.native_docs_affected }}
java_affected: ${{ steps.setup.outputs.java_affected }}
core:
name: Test core
runs-on: ubuntu-latest
needs:
- setup
if: ${{ needs.setup.outputs.release != 'null' || needs.setup.outputs.core_affected == 'true' }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
- uses: actions/setup-node@v4
if: ${{ !matrix.settings.docker }}
with:
node-version: latest
- name: Ensure no default features is working
working-directory: core
run: cargo c --no-default-features
- name: Run cargo test
working-directory: core
run: cargo test --all-features
java-native:
strategy:
fail-fast: true
matrix:
settings:
- target: aarch64-apple-darwin
host: macos-latest
- target: aarch64-pc-windows-msvc
host: windows-latest
- target: aarch64-unknown-linux-gnu
host: ubuntu-latest
- target: aarch64-unknown-linux-musl
host: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |
rustup target add aarch64-unknown-linux-musl
cargo build --target aarch64-unknown-linux-musl --release
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip ./target/aarch64-unknown-linux-musl/release/libdecancer.so
mv ./target/aarch64-unknown-linux-musl/release/libdecancer.so ../../artifacts/libdecancer-aarch64-unknown-linux-musl.so
- target: arm-unknown-linux-gnueabi
host: ubuntu-latest
- target: armv5te-unknown-linux-gnueabi
host: ubuntu-latest
- target: armv7-unknown-linux-gnueabi
host: ubuntu-latest
- target: armv7-unknown-linux-gnueabihf
host: ubuntu-latest
- target: i686-pc-windows-msvc
host: windows-latest
- target: i686-unknown-freebsd
host: ubuntu-latest
- target: i686-unknown-linux-gnu
host: ubuntu-latest
- target: riscv64gc-unknown-linux-gnu
host: ubuntu-latest
- target: x86_64-apple-darwin
host: macos-latest
- target: x86_64-pc-windows-msvc
host: windows-latest
- target: x86_64-unknown-freebsd
host: ubuntu-latest
- target: x86_64-unknown-linux-gnu
host: ubuntu-latest
- target: x86_64-unknown-linux-musl
host: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |
cargo build --release
strip ./target/release/libdecancer.so
mv ./target/release/libdecancer.so ../../artifacts/libdecancer-x86_64-unknown-linux-musl.so
needs:
- setup
- core
if: ${{ always() && (needs.setup.outputs.release != 'null' || needs.setup.outputs.java_affected == 'true') }}
name: Build native java bindings on ${{ matrix.settings.target }}
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: latest
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
override: true
toolchain: stable
- name: Make artifacts directory
run: mkdir artifacts
shell: bash
- name: Build with cross
if: ${{ !matrix.settings.build }}
uses: houseabsolute/actions-rust-cross@v0
with:
working-directory: bindings/java
args: '--release --target-dir=.'
command: build
target: ${{ matrix.settings.target }}
- name: Build in docker
uses: addnab/docker-run-action@v3
if: ${{ matrix.settings.docker && matrix.settings.build }}
with:
image: ${{ matrix.settings.docker }}
options: '--user 0:0 -v ${{ github.workspace }}/bindings/java/.cargo/registry/cache:/root/.cargo/registry/cache -v ${{ github.workspace }}/bindings/java/.cargo/registry/index:/root/.cargo/registry/index -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace}}/bindings/java'
run: ${{ matrix.settings.build }}
- name: Build
working-directory: bindings/java
run: ${{ matrix.settings.build }}
if: ${{ !matrix.settings.docker && matrix.settings.build }}
shell: bash
- name: Move and rename binaries
if: ${{ !matrix.settings.build }}
run: node scripts/ci_native_artifacts.mjs ${{ matrix.settings.target }} --java
shell: bash
- name: Upload artifact
if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: java-${{ matrix.settings.target }}
path: ./artifacts/**
if-no-files-found: error
java:
needs:
- setup
- java-native
if: ${{ always() && github.event_name != 'pull_request' && (needs.setup.outputs.release != 'null' || needs.setup.outputs.java_affected == 'true') }}
name: Test java bindings
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: oracle
java-version: 21
- uses: gradle/actions/setup-gradle@v4
- name: Download java artifact
uses: actions/download-artifact@v4
with:
name: java-x86_64-unknown-linux-gnu
path: bindings/java/bin
- name: Test
run: |
chmod +x ./gradlew
./gradlew test javadoc -DDECANCER_TESTING=1
working-directory: bindings/java
shell: bash
native:
strategy:
fail-fast: true
matrix:
settings:
- target: aarch64-apple-darwin
host: macos-latest
- target: aarch64-apple-ios
host: macos-latest
- target: aarch64-apple-ios-sim
host: macos-latest
- target: aarch64-linux-android
host: ubuntu-latest
build: |
rustup target add aarch64-linux-android
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}"
cargo build --target aarch64-linux-android --release
llvm-strip ./target/aarch64-linux-android/release/*.so
mv ./target/aarch64-linux-android/release/*.so ../../artifacts
- target: aarch64-pc-windows-msvc
host: windows-latest
- target: aarch64-unknown-linux-gnu
host: ubuntu-latest
- target: aarch64-unknown-linux-musl
host: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |
rustup target add aarch64-unknown-linux-musl
cargo build --target aarch64-unknown-linux-musl --release
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip ./target/aarch64-unknown-linux-musl/release/*.so
mv ./target/aarch64-unknown-linux-musl/release/*.so ../../artifacts
- target: arm-unknown-linux-gnueabi
host: ubuntu-latest
- target: armv5te-unknown-linux-gnueabi
host: ubuntu-latest
- target: armv7-linux-androideabi
host: ubuntu-latest
build: |
rustup target add armv7-linux-androideabi
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}"
cargo build --target armv7-linux-androideabi --release
llvm-strip ./target/armv7-linux-androideabi/release/*.so
mv ./target/armv7-linux-androideabi/release/*.so ../../artifacts
- target: armv7-unknown-linux-gnueabi
host: ubuntu-latest
- target: armv7-unknown-linux-gnueabihf
host: ubuntu-latest
- target: i586-unknown-linux-gnu
host: ubuntu-latest
- target: i686-pc-windows-msvc
host: windows-latest
- target: i686-unknown-freebsd
host: ubuntu-latest
- target: i686-unknown-linux-gnu
host: ubuntu-latest
- target: powerpc64le-unknown-linux-gnu
host: ubuntu-latest
- target: riscv64gc-unknown-linux-gnu
host: ubuntu-latest
- target: s390x-unknown-linux-gnu
host: ubuntu-latest
- target: sparcv9-sun-solaris
host: ubuntu-latest
- target: thumbv7neon-unknown-linux-gnueabihf
host: ubuntu-latest
- target: x86_64-apple-darwin
host: macos-latest
- target: x86_64-apple-ios
host: macos-latest
- target: x86_64-pc-windows-msvc
host: windows-latest
- target: x86_64-unknown-freebsd
host: ubuntu-latest
- target: x86_64-unknown-illumos
host: ubuntu-latest
- target: x86_64-unknown-linux-gnu
host: ubuntu-latest
- target: x86_64-unknown-linux-musl
host: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |
cargo build --release
strip ./target/release/*.so
mv ./target/release/*.so ../../artifacts
needs:
- setup
- core
if: ${{ always() && (needs.setup.outputs.release != 'null' || needs.setup.outputs.native_affected == 'true') }}
name: Build native bindings on ${{ matrix.settings.target }}
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: latest
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
override: true
toolchain: stable
- name: Make artifacts directory
run: mkdir artifacts
shell: bash
- name: Build with cross
if: ${{ !matrix.settings.build }}
uses: houseabsolute/actions-rust-cross@v0
with:
working-directory: bindings/native
args: '--release --target-dir=.'
command: build
target: ${{ matrix.settings.target }}
- name: Build in docker
uses: addnab/docker-run-action@v3
if: ${{ matrix.settings.docker && matrix.settings.build }}
with:
image: ${{ matrix.settings.docker }}
options: '--user 0:0 -v ${{ github.workspace }}/bindings/native/.cargo/registry/cache:/root/.cargo/registry/cache -v ${{ github.workspace }}/bindings/native/.cargo/registry/index:/root/.cargo/registry/index -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace}}/bindings/native'
run: ${{ matrix.settings.build }}
- name: Build
working-directory: bindings/native
run: ${{ matrix.settings.build }}
if: ${{ !matrix.settings.docker && matrix.settings.build }}
shell: bash
- name: Move binaries
if: ${{ !matrix.settings.build }}
run: node scripts/ci_native_artifacts.mjs ${{ matrix.settings.target }}
shell: bash
- name: Upload artifact
if: ${{ needs.setup.outputs.release != 'null' || matrix.settings.target == 'x86_64-unknown-linux-gnu' }}
uses: actions/upload-artifact@v4
with:
name: native-${{ matrix.settings.target }}
path: ./artifacts/**
if-no-files-found: error
native-test:
name: Test native bindings
needs:
- setup
- native
if: ${{ always() && github.event_name != 'pull_request' && (needs.setup.outputs.release != 'null' || needs.setup.outputs.native_affected == 'true') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
if: ${{ !matrix.settings.docker }}
with:
node-version: latest
cache: yarn
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: native-x86_64-unknown-linux-gnu
path: bindings/native
- name: Compile and run tests
working-directory: bindings/native/tests
run: node test.mjs
node:
strategy:
fail-fast: true
matrix:
settings:
- host: macos-latest
target: x86_64-apple-darwin
build: |
yarn build
strip -x *.node
- host: windows-latest
build: yarn build
target: x86_64-pc-windows-msvc
- host: windows-latest
build: yarn build --target i686-pc-windows-msvc
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: |
yarn build --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: |
yarn build
strip *.node
- 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";
yarn build --target aarch64-apple-darwin
strip -x *.node
- host: ubuntu-latest
target: aarch64-unknown-linux-gnu
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
build: |
yarn build --target aarch64-unknown-linux-gnu
aarch64-unknown-linux-gnu-strip *.node
- host: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
build: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
yarn build --target=armv7-unknown-linux-gnueabihf
arm-linux-gnueabihf-strip *.node
- host: ubuntu-latest
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
llvm-strip *.node
- host: ubuntu-latest
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
llvm-strip *.node
- host: ubuntu-latest
target: aarch64-unknown-linux-musl
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |
rustup target add aarch64-unknown-linux-musl
yarn build --target aarch64-unknown-linux-musl
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node
- host: windows-latest
target: aarch64-pc-windows-msvc
build: yarn build --target aarch64-pc-windows-msvc
needs:
- setup
- core
if: ${{ always() && (needs.setup.outputs.release != 'null' || needs.setup.outputs.node_affected == 'true') }}
name: Build node bindings on ${{ matrix.settings.target }}
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
if: ${{ !matrix.settings.docker }}
with:
node-version: latest
cache: yarn
- name: Install Rust
uses: actions-rs/toolchain@v1
if: ${{ !matrix.settings.docker }}
with:
profile: minimal
override: true
toolchain: stable
target: ${{ matrix.settings.target }}
- uses: goto-bus-stop/setup-zig@v2
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
with:
version: 0.11.0
- name: Configure architecture to use with node
if: ${{ matrix.settings.target == 'i686-pc-windows-msvc' }}
run: yarn config set supportedArchitectures.cpu "ia32"
shell: bash
- uses: actions/setup-node@v4
if: ${{ matrix.settings.target == 'i686-pc-windows-msvc' }}
with:
node-version: latest
cache: yarn
architecture: x86
- name: Install dependencies
working-directory: bindings/node
run: yarn install
- name: Build in docker
uses: addnab/docker-run-action@v3
if: ${{ matrix.settings.docker }}
with:
image: ${{ matrix.settings.docker }}
options: '--user 0:0 -v ${{ github.workspace }}/node/.cargo-cache/git/db:/root/.cargo/git/db -v ${{ github.workspace }}/bindings/node/.cargo/registry/cache:/root/.cargo/registry/cache -v ${{ github.workspace }}/bindings/node/.cargo/registry/index:/root/.cargo/registry/index -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace}}/bindings/node'
run: ${{ matrix.settings.build }}
- name: Build
working-directory: bindings/node
run: ${{ matrix.settings.build }}
if: ${{ !matrix.settings.docker }}
shell: bash
- name: Move artifact
run: mv ./bindings/node/decancer.*.node .
shell: bash
- name: Upload artifact
if: ${{ needs.setup.outputs.release != 'null' || matrix.settings.target == 'x86_64-unknown-linux-gnu' }}
uses: actions/upload-artifact@v4
with:
name: node-${{ matrix.settings.target }}
path: decancer.*.node
if-no-files-found: error
#node-freebsd:
# runs-on: macos-12
# needs:
# - setup
# - core
# if: ${{ always() && (needs.setup.outputs.release != 'null' || needs.setup.outputs.node_affected == 'true') }}
# name: Build node bindings on FreeBSD
# steps:
# - uses: actions/checkout@v4
# - name: Build
# id: build
# uses: cross-platform-actions/action@v0.23.0
# timeout-minutes: 30
# env:
# DEBUG: napi:*
# RUSTUP_IO_THREADS: 1
# with:
# operating_system: freebsd
# version: '13.2'
# memory: 8G
# cpu_count: 3
# environment_variables: DEBUG RUSTUP_IO_THREADS
# shell: bash
# run: |
# sudo pkg install -y -f curl node libnghttp2 npm
# sudo npm install -g yarn --ignore-scripts
# curl https://sh.rustup.rs -sSf --output rustup.sh
# sh rustup.sh -y --profile minimal --default-toolchain stable
# source "$HOME/.cargo/env"
# cd ./bindings/node
# yarn install
# yarn build
# strip -x *.node
# mv ./decancer.freebsd-x64.node ../..
# rm -rf node_modules
# rm -rf target
# rm -rf .yarn/cache
# - name: Upload artifact
# if: ${{ needs.setup.outputs.release != 'null' }}
# uses: actions/upload-artifact@v4
# with:
# name: node-freebsd-x64
# path: decancer.freebsd-x64.node
# if-no-files-found: error
node-test:
name: Test node bindings
needs:
- setup
- node
if: ${{ always() && github.event_name != 'pull_request' && (needs.setup.outputs.release != 'null' || needs.setup.outputs.node_affected == 'true') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: latest
cache: yarn
- name: Install dependencies
working-directory: bindings/node
run: yarn install
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: node-x86_64-unknown-linux-gnu
path: bindings/node
- name: Test bindings
working-directory: bindings/node
run: yarn test
wasm:
name: Build and test wasm
runs-on: ubuntu-latest
needs:
- setup
- core
if: ${{ always() && (needs.setup.outputs.release != 'null' || needs.setup.outputs.wasm_affected == 'true') }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
- uses: actions/setup-node@v4
with:
node-version: latest
- name: Setup wasm-pack
run: cargo install wasm-pack
- name: Build wasm
working-directory: bindings/wasm
run: |
wasm-pack build --no-typescript --release -t web
mv -f ./pkg/decancer_wasm_bg.wasm ./bin/decancer.wasm
cp ./bin/decancer.wasm ../..
- name: Test wasm
working-directory: bindings/wasm/tests
run: |
npm i
timeout 180 node .
- name: Upload artifact
if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: wasm
path: decancer.wasm
if-no-files-found: error
commit:
name: Commit changes
runs-on: ubuntu-latest
needs:
- setup
- java
- wasm
if: ${{ always() && github.event_name != 'pull_request' }}
steps:
- uses: actions/checkout@v4
- name: Pull previous commit
run: git reset --soft HEAD~1
shell: bash
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
- uses: actions/setup-node@v4
with:
node-version: latest
- name: Setup clang
if: ${{ needs.setup.outputs.native_affected == 'true' || needs.setup.outputs.release != 'null' }}
run: |
wget https://apt.llvm.org/llvm.sh
chmod u+x llvm.sh
sudo ./llvm.sh 18 all
shell: bash
- name: Prettier files
run: node scripts/pretty.mjs --clang-format=clang-format-18
env:
DECANCER_SETUP_OUTPUTS: ${{ toJSON(needs.setup.outputs) }}
shell: bash
- name: Update README files for bindings
run: |
node scripts/ci_readme.mjs ./core/README.md DECANCER_RUST
node scripts/ci_readme.mjs ./bindings/node/README.md DECANCER_JS
node scripts/ci_readme.mjs ./bindings/native/README.md DECANCER_NATIVE
shell: bash
- name: Download wasm artifact
if: ${{ needs.setup.outputs.wasm_affected == 'true' || needs.setup.outputs.release != 'null' }}
uses: actions/download-artifact@v4
with:
name: wasm
path: bindings/wasm/bin
- name: Download all java artifacts
if: ${{ needs.setup.outputs.java_affected == 'true' || needs.setup.outputs.release != 'null' }}
uses: actions/download-artifact@v4
with:
pattern: java-*
path: java-artifacts
- name: Modify bindings.zip
if: ${{ needs.setup.outputs.java_affected == 'true' || needs.setup.outputs.release != 'null' }}
run: |
node scripts/ci_validate_java_artifacts.mjs
mv ./java-artifacts/**/*.{dll,so,dylib} .
zip -FSr ./bindings/java/bin/bindings.zip ./*.{dll,so,dylib}
shell: bash
- name: Import Actions GPG key
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.CI_GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.CI_GPG_PASS }}
git_user_signingkey: true
git_commit_gpgsign: true
- name: Create commit
uses: EndBug/add-and-commit@v9
with:
commit: -S
message: ${{ github.event.head_commit.message }}
push: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Push commit
run: git push -f
shell: bash
pages:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
needs:
- setup
- commit
permissions: write-all
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
if: ${{ always() && github.event_name != 'pull_request' && (needs.setup.outputs.release != 'null' || needs.setup.outputs.wasm_affected == 'true' || needs.setup.outputs.native_docs_affected == 'true') }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-node@v4
with:
node-version: latest
- uses: ssciwr/doxygen-install@v1
- name: Download wasm artifact
if: ${{ needs.setup.outputs.wasm_affected == 'true' || needs.setup.outputs.release != 'null' }}
uses: actions/download-artifact@v4
with:
name: wasm
path: bindings/wasm/bin
- name: Move wasm example file
run: mv ./bindings/wasm/example.html ./wasm_example.html
shell: bash
- name: Generate native library documentation
working-directory: bindings/native/docs
run: |
node ./docgen.mjs
mv ./html ../../../native_docs
shell: bash
- name: Setup GitHub Pages
uses: actions/configure-pages@v5
- name: Delete GitHub Pages deployment history
uses: strumwolf/delete-deployment-environment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
environment: github-pages
onlyRemoveDeployments: true
- name: Prepare GitHub Pages directories
run: |
node ./scripts/ci_setup_pages.mjs
rm -rf ./scripts
shell: bash
- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
java-publish:
name: Publish java binding
runs-on: ubuntu-latest
needs:
- setup
- commit
- java
if: ${{ always() && github.event_name != 'pull_request' && needs.setup.outputs.release != 'null' }}
env:
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_NAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASS }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASS }}
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.MAVEN_GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JRELEASER_VERSION: ${{ needs.setup.outputs.release }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: oracle
java-version: 21
- name: Prepare java binding
working-directory: bindings/java
run: |
unzip ./bin/bindings.zip -d ./bin
chmod +x ./gradlew
./gradlew jreleaserConfig
./gradlew clean build publish -x test
shell: bash
- name: Publish java binding
working-directory: bindings/java
run: ./gradlew jreleaserFullRelease
continue-on-error: true
shell: bash
- name: Move jar file
working-directory: bindings/java
run: mv ./build/libs/decancer-${{ needs.setup.outputs.release }}.jar ../../decancer.jar
shell: bash
- name: Upload jar artifact
uses: actions/upload-artifact@v4
with:
name: java-jar
path: decancer.jar
if-no-files-found: error
publish:
name: Publish
runs-on: ubuntu-latest
needs:
- setup
- node-test
#- node-freebsd
- native-test
- commit
- pages
- java-publish
if: ${{ always() && github.event_name != 'pull_request' && needs.setup.outputs.release != 'null' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: latest
cache: yarn
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Modify artifacts
run: node scripts/ci_artifacts.mjs
- name: Install node dependencies
working-directory: bindings/node
run: yarn install
- name: Move node artifacts
working-directory: bindings/node
run: yarn artifacts
- name: Publish node binding
working-directory: bindings/node
run: |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
npm publish --access public
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Import Actions GPG key
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.CI_GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.CI_GPG_PASS }}
git_user_signingkey: true
git_tag_gpgsign: true
- name: Create GitHub Tag
uses: rickstaa/action-create-tag@v1
with:
message: "This is the GitHub Release for decancer v${{ needs.setup.outputs.release }}."
tag: "v${{ needs.setup.outputs.release }}"
gpg_private_key: ${{ secrets.CI_GPG_PRIVATE_KEY }}
gpg_passphrase: ${{ secrets.CI_GPG_PASS }}
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
body: "This is the GitHub Release for decancer v${{ needs.setup.outputs.release }}."
draft: false
prerelease: false
files: |
decancer.jar
*.zip
tag_name: "v${{ needs.setup.outputs.release }}"
token: ${{ secrets.GITHUB_TOKEN }}
env:
GITHUB_REPOSITORY: null8626/decancer