ci(publish): update workflow (#122) #638
This file contains hidden or 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: 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 |