Skip to content

ci(publish): update workflow (#122) #638

ci(publish): update workflow (#122)

ci(publish): update workflow (#122) #638

Workflow file for this run

name: Test
on:
push:
branches:
- main
pull_request:
env:
CARGO_TERM_COLOR: always
DEBIAN_VERSION: trixie
JAVA_VERSION: 21
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
test-cargo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.3
- name: Build
run: cargo build
- name: Run tests
run: cargo test
timeout-minutes: 20
test-cargo-all:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.3
- name: Build
run: cargo build --all-features
- name: Run tests
run: cargo test --all-features
timeout-minutes: 20
test-npm:
strategy:
matrix:
include:
- os: ubuntu-22.04
node-version: 20.x
arch: x64
features: default
- os: ubuntu-latest
node-version: 22.x
arch: x64
features: all
- os: windows-latest
node-version: 20.x
arch: x64
features: default
- os: windows-latest
node-version: 22.x
arch: x64
features: all
- os: windows-latest
node-version: 20.x
arch: x86
features: default
- os: windows-latest
node-version: 22.x
arch: x86
features: default
- os: macos-latest
node-version: 20.x
arch: arm64
features: default
- os: macos-latest
node-version: 22.x
arch: arm64
features: all
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v6
- name: Setup Node.js ${{matrix.node-version}} environment
uses: actions/setup-node@v6
with:
node-version: ${{matrix.node-version}}
architecture: ${{matrix.arch}}
- name: Setup java 17
uses: actions/setup-java@v5
if: ${{matrix.os == 'windows-latest'}}
with:
distribution: 'temurin'
java-version: '17'
architecture: ${{matrix.arch}}
- name: Setup java
uses: actions/setup-java@v5
if: ${{matrix.os != 'windows-latest'}}
with:
distribution: 'temurin'
java-version: ${{env.JAVA_VERSION}}
architecture: ${{matrix.arch}}
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.3
if: ${{matrix.os != 'ubuntu-latest' && matrix.os != 'ubuntu-20.04'}}
- name: Install
run: npm ci
- name: Build
if: ${{(matrix.os != 'windows-latest' || matrix.arch == 'x64') && matrix.features == 'default'}}
run: npm run build
- name: Build with all features
if: ${{(matrix.os != 'windows-latest' || matrix.arch == 'x64') && matrix.features == 'all'}}
run: npm run build:all
- name: Build (win32)
if: ${{matrix.os == 'windows-latest' && matrix.arch == 'x86'}}
run: |
rustup target add i686-pc-windows-msvc
npm run build -- -- --target i686-pc-windows-msvc
shell: bash
- name: Run tests
run: npm run testOnly
timeout-minutes: 20
- name: Create test summary
uses: test-summary/action@dist
if: always()
with:
show: all
paths: testResults.xml
- name: Create package
if: ${{matrix.node-version == '20.x'}}
shell: bash
run: |
node -e 'let p=require("./package.json");p.files.push("dist/*.node");require("fs").writeFileSync("package.json",JSON.stringify(p,null,4))'
npm pack
- name: Upload package
uses: actions/upload-artifact@v6
if: ${{matrix.node-version == '20.x'}}
with:
name: java-${{matrix.arch}}-${{matrix.os}}
path: java-bridge-*.tgz
test-linux-aarch64-gnu-binding:
strategy:
fail-fast: false
matrix:
node-version: [20, 22, 24]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Setup Node.js ${{matrix.node-version}} environment
uses: actions/setup-node@v6
with:
node-version: ${{matrix.node-version}}
- name: Setup java 17
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{env.JAVA_VERSION}}
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: aarch64-unknown-linux-gnu
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.3
- name: Install cross compile toolchain
run: |
sudo apt-get update
sudo apt-get install gcc-multilib -y
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y
- name: Set linker
run: |
mkdir .cargo
printf '[target.aarch64-unknown-linux-gnu]\nlinker = "aarch64-linux-gnu-gcc"\n' >> .cargo/config
- name: Install
run: npm ci
- name: Build
run: npm run build -- -- --target aarch64-unknown-linux-gnu
- name: Install test dependencies
run: npm install
- name: Init qemu
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- name: Docker login
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build test container
run: |
if docker manifest inspect ghcr.io/markusjx/node-java-bridge/test-arm:${{matrix.node-version}}-$JAVA_VERSION-$DEBIAN_VERSION;
then
echo "Docker container already exists"
else
docker build --push --platform linux/arm64 --build-arg NODE_VERSION=${{matrix.node-version}} \
--build-arg DEBIAN_VERSION=$DEBIAN_VERSION \
--build-arg JAVA_VERSION=$JAVA_VERSION -f docker/Dockerfile.arm \
-t ghcr.io/markusjx/node-java-bridge/test-arm:${{matrix.node-version}}-$JAVA_VERSION-$DEBIAN_VERSION .
fi
- name: Run tests
uses: addnab/docker-run-action@v3
timeout-minutes: 180
with:
image: ghcr.io/markusjx/node-java-bridge/test-arm:${{matrix.node-version}}-${{env.JAVA_VERSION}}-${{env.DEBIAN_VERSION}}
options: -v ${{ github.workspace }}:/github/workspace -w /github/workspace --platform linux/arm64
run: |
npm install
npm run testOnly
- name: Create test summary
uses: test-summary/action@dist
if: always()
with:
show: all
paths: testResults.xml
- name: Create package
if: ${{matrix.node-version == '20'}}
run: |
node -e 'let p=require("./package.json");p.files.push("dist/*.node");require("fs").writeFileSync("package.json",JSON.stringify(p,null,4))'
npm pack
- name: Upload package
uses: actions/upload-artifact@v6
if: ${{matrix.node-version == '20'}}
with:
name: java-arm64-ubuntu
path: java-bridge-*.tgz
test-linux-musl-binding:
strategy:
fail-fast: false
matrix:
node-version: [20, 22, 24]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.3
- name: Docker login
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build test container
run: |
if docker manifest inspect ghcr.io/markusjx/node-java-bridge/test-alpine:${{matrix.node-version}}-$JAVA_VERSION;
then
echo "Docker container already exists"
else
docker build --push --build-arg NODE_VERSION=${{matrix.node-version}} \
--build-arg JAVA_VERSION=$JAVA_VERSION -f docker/Dockerfile.alpine \
-t ghcr.io/markusjx/node-java-bridge/test-alpine:${{matrix.node-version}}-$JAVA_VERSION .
fi
- name: Run tests
uses: addnab/docker-run-action@v3
timeout-minutes: 180
with:
image: ghcr.io/markusjx/node-java-bridge/test-alpine:${{matrix.node-version}}-${{env.JAVA_VERSION}}
options: -v ${{ github.workspace }}:/github/workspace -w /github/workspace
run: |
npm ci
npm test
- name: Create test summary
uses: test-summary/action@dist
if: always()
with:
show: all
paths: testResults.xml
- name: Create package
if: ${{matrix.node-version == '20'}}
run: |
node -e 'let p=require("./package.json");p.files.push("dist/*.node");require("fs").writeFileSync("package.json",JSON.stringify(p,null,4))'
npm pack
- name: Upload package
uses: actions/upload-artifact@v6
if: ${{matrix.node-version == '20'}}
with:
name: java-x64-ubuntu-musl
path: java-bridge-*.tgz
benchmark:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Node.js environment
uses: actions/setup-node@v6
with:
node-version: 22.x
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{env.JAVA_VERSION}}
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.3
- name: Install
run: npm ci
- name: Run benchmarks
run: npm run benchmark
timeout-minutes: 20