| # This action uses the following secrets: |
| # CACHIX_AUTH_TOKEN: Write access to nodejs.cachix.org – without it, the cache is read-only. |
| name: Test Shared libraries |
| |
| on: |
| pull_request: |
| paths-ignore: |
| - .mailmap |
| - '**.md' |
| - AUTHORS |
| - deps/ada/** |
| - deps/brotli/** |
| - deps/cares/** |
| - deps/corepack/** |
| - deps/icu-small/** |
| - deps/icu-tmp/** |
| - deps/llhttp/** |
| - deps/nghttp2/** |
| - deps/ngtcp2/** |
| - deps/openssl/*/** |
| - deps/simdjson/** |
| - deps/sqlite/** |
| - deps/uv/** |
| - deps/uvwasi/** |
| - deps/zlib/** |
| - deps/zstd/** |
| - doc/** |
| - test/internet/** |
| - .github/** |
| - '!.github/workflows/test-shared.yml' |
| types: [opened, synchronize, reopened, ready_for_review] |
| push: |
| branches: |
| - main |
| - canary |
| - v[0-9]+.x-staging |
| - v[0-9]+.x |
| paths-ignore: |
| - .mailmap |
| - '**.md' |
| - AUTHORS |
| - deps/ada/** |
| - deps/brotli/** |
| - deps/cares/** |
| - deps/corepack/** |
| - deps/icu-small/** |
| - deps/icu-tmp/** |
| - deps/llhttp/** |
| - deps/nghttp2/** |
| - deps/ngtcp2/** |
| - deps/openssl/*/** |
| - deps/simdjson/** |
| - deps/sqlite/** |
| - deps/uv/** |
| - deps/uvwasi/** |
| - deps/zlib/** |
| - deps/zstd/** |
| - doc/** |
| - test/internet/** |
| - .github/** |
| - '!.github/workflows/test-shared.yml' |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} |
| cancel-in-progress: true |
| |
| env: |
| FLAKY_TESTS: keep_retrying |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| build-tarball: |
| if: github.event.pull_request.draft == false |
| name: ${{ github.event_name == 'workflow_dispatch' && 'Skipped job' || 'Build slim tarball' }} |
| runs-on: ubuntu-24.04-arm |
| steps: |
| - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 |
| if: ${{ github.event_name != 'workflow_dispatch' }} |
| with: |
| persist-credentials: false |
| |
| - name: Make tarball |
| if: ${{ github.event_name != 'workflow_dispatch' }} |
| run: | |
| export DATESTRING=$(date "+%Y-%m-%d") |
| export COMMIT=$(git rev-parse --short=10 "$GITHUB_SHA") |
| ./configure && make tar -j4 SKIP_XZ=1 SKIP_SHARED_DEPS=1 |
| env: |
| DISTTYPE: nightly |
| |
| - name: Upload tarball artifact |
| if: ${{ github.event_name != 'workflow_dispatch' }} |
| uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 |
| with: |
| name: tarballs |
| path: '*.tar.gz' |
| compression-level: 0 |
| |
| build: |
| needs: build-tarball |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - runner: ubuntu-24.04 |
| system: x86_64-linux |
| - runner: ubuntu-24.04-arm |
| system: aarch64-linux |
| - runner: macos-15-intel |
| system: x86_64-darwin |
| - runner: macos-latest |
| system: aarch64-darwin |
| name: '${{ matrix.system }}: with shared libraries' |
| runs-on: ${{ matrix.runner }} |
| steps: |
| - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 |
| if: ${{ github.event_name != 'workflow_dispatch' }} |
| with: |
| name: tarballs |
| path: tarballs |
| |
| - name: Extract tarball |
| if: ${{ github.event_name != 'workflow_dispatch' }} |
| run: | |
| tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP" |
| echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV" |
| |
| - uses: cachix/install-nix-action@0b0e072294b088b73964f1d72dfdac0951439dbd # v31.8.4 |
| with: |
| extra_nix_config: sandbox = true |
| |
| - uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16 |
| with: |
| name: nodejs |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} |
| |
| - name: Configure sccache |
| uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 |
| with: |
| script: | |
| core.exportVariable('SCCACHE_GHA_VERSION', 'on'); |
| core.exportVariable('ACTIONS_CACHE_SERVICE_V2', 'on'); |
| core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || ''); |
| core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); |
| |
| - name: Load shell.nix |
| if: github.event_name != 'workflow_dispatch' |
| run: | |
| mv "$TAR_DIR"/*.nix . |
| mkdir tools |
| mv "$TAR_DIR"/tools/nix tools/. |
| |
| - name: Build Node.js and run tests |
| run: | |
| nix-shell \ |
| -I nixpkgs=./tools/nix/pkgs.nix \ |
| --pure --keep TAR_DIR --keep FLAKY_TESTS \ |
| --keep SCCACHE_GHA_VERSION --keep ACTIONS_CACHE_SERVICE_V2 --keep ACTIONS_RESULTS_URL --keep ACTIONS_RUNTIME_TOKEN \ |
| --arg loadJSBuiltinsDynamically false \ |
| --arg ccache '(import <nixpkgs> {}).sccache' \ |
| --arg devTools '[]' \ |
| --arg benchmarkTools '[]' \ |
| ${{ endsWith(matrix.system, '-darwin') && '--arg extraConfigFlags ''["--without-inspector"]'' \' || '\' }} |
| --run ' |
| make -C "$TAR_DIR" run-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS" |
| ' |