node #529
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: node | |
on: | |
push: | |
workflow_dispatch: | |
inputs: | |
repo: | |
description: The URL of Node.js repo | |
required: false | |
type: string | |
commit: | |
description: Which Node.js commit or branch to build | |
required: false | |
type: string | |
schedule: | |
- cron: '0 21 * * *' | |
env: | |
WIN_SDK_VERSION: 22621 | |
jobs: | |
build: | |
needs: [vs-toolchain] | |
runs-on: ${{ fromJson('{"linux":"ubuntu-22.04","mac":"macos-13","win":"ubuntu-22.04"}')[matrix.targetOs] }} | |
continue-on-error: false | |
strategy: | |
fail-fast: false | |
matrix: | |
targetOs: [linux, mac, win] | |
arch: [x64, arm64] | |
steps: | |
- name: Prepare to Install Linux Dependencies | |
if: runner.os == 'Linux' | |
run: sudo apt update | |
- name: Install Linux Dependencies | |
if: runner.os == 'Linux' && matrix.targetOs == 'win' | |
# Needed for running ciopfs, used when setup vs toolchain. | |
run: sudo apt install -y fuse | |
- name: Install Linux Cross Compilation Toolchains | |
if: runner.os == 'linux' && matrix.arch != 'x64' | |
run: sudo apt install -y gcc-multilib g++-multilib | |
- name: Install Linux Arm Toolchains | |
if: matrix.targetOs == 'linux' && startsWith(matrix.arch, 'arm') | |
run: sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-dev-armhf-cross linux-libc-dev-armhf-cross binutils-aarch64-linux-gnu | |
- uses: actions/setup-python@v3 | |
with: | |
python-version: '3.11' | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Maximize Build Space | |
if: matrix.targetOs == 'win' | |
uses: hirnidrin/free-disk-space@main | |
- name: Use ccache | |
uses: hendrikmuhs/ccache-action@v1.2 | |
with: | |
key: v0-${{ matrix.targetOs }}-${{ matrix.arch }} | |
- name: Get Windows SDK | |
if: matrix.targetOs == 'win' | |
uses: actions/cache/restore@v3 | |
with: | |
path: '*.zip' | |
key: vs-toolchain-${{ env.WIN_SDK_VERSION }} | |
fail-on-cache-miss: true | |
enableCrossOsArchive: true | |
- name: Build | |
run: | | |
node scripts/bootstrap.js --target-os=${{ matrix.targetOs }} --target-cpu=${{ matrix.arch }} '--extra-args=cc_wrapper="ccache"' --node-repo=${{ inputs.repo || 'https://github.com/nodejs/node' }} --node-commit=${{ inputs.commit || '' }} | |
node scripts/build.js | |
- name: Run Tests | |
if: runner.arch == matrix.arch && matrix.targetOs != 'win' | |
run: | | |
# Build tests. | |
node scripts/build.js node_cctest node_embedtest overlapped_checker | |
# Build native addons used for testing. | |
BUILD_ADDONS_ARGS="--config-gypi-path=`pwd`/out/Release/gen/node/config.gypi --root-dir=`pwd`/node" | |
python node/tools/build_addons.py node/test/addons --skip-tests=openssl-client-cert-engine,openssl-key-engine,openssl-test-engine $BUILD_ADDONS_ARGS | |
python node/tools/build_addons.py node/test/node-api $BUILD_ADDONS_ARGS | |
python node/tools/build_addons.py node/test/js-native-api $BUILD_ADDONS_ARGS | |
# Run tests. | |
cd node | |
../out/Release/node_cctest | |
../out/Release/node test/embedding/test-embedding.js | |
./tools/test.py --shell ../out/Release/node js-native-api | |
./tools/test.py --shell ../out/Release/node node-api | |
# TODO(zcbenz): Disabled tests: | |
# parallel/test-crypto-no-algorithm | |
# broken by https://github.com/nodejs/node/pull/46237 | |
# parallel/test-worker-nearheaplimit-deadlock | |
# broken by https://github.com/nodejs/node/pull/51598 | |
# wasm-allocation | |
# added by https://github.com/nodejs/node/pull/52766 | |
# parallel/test-async-context-frame | |
# broken by https://github.com/nodejs/node/pull/54510 | |
./tools/test.py --shell ../out/Release/node --flaky-tests=dontcare --skip-tests=parallel/test-crypto-no-algorithm,parallel/test-worker-nearheaplimit-deadlock,wasm-allocation,parallel/test-async-context-frame | |
vs-toolchain: | |
runs-on: windows-2022 | |
continue-on-error: false | |
steps: | |
- name: Check cache | |
id: check-cache | |
# It is not job failure when this step fails. | |
continue-on-error: true | |
env: | |
GH_TOKEN: ${{ github.token }} | |
shell: bash | |
run: | | |
# Check if vs-toolchain has been generated before. | |
gh extension install actions/gh-actions-cache | |
gh actions-cache list --repo $GITHUB_REPOSITORY | grep -q vs-toolchain-$WIN_SDK_VERSION | |
- name: Validate branch | |
if: steps.check-cache.outcome == 'failure' | |
run: | | |
# GitHub limits where cache is accessible, we don't want to create | |
# vs toolchain for every branch so force creating one on main branch. | |
if (${env:GITHUB_BASE_REF}) { | |
$env:GIT_BRANCH = ${env:GITHUB_BASE_REF} | |
} else { | |
$env:GIT_BRANCH = ${env:GITHUB_REF} -replace '^refs/heads/', '' | |
} | |
if (${env:GIT_BRANCH} -ne 'main') { | |
Write-Output 'Can not create vs-toolchain in a sub-branch, please re-run the main branch job.' | |
Write-Output "The value of GIT_BRANCH is: ${env:GIT_BRANCH}." | |
Exit 1 | |
} | |
- name: Checkout | |
if: steps.check-cache.outcome == 'failure' | |
uses: actions/checkout@v3 | |
with: | |
repository: yue/build-gn | |
- name: Generate Windows SDK package | |
if: steps.check-cache.outcome == 'failure' | |
# See: https://chromium.googlesource.com/chromium/src/+/master/docs/win_cross.md | |
run: python third_party/depot_tools/win_toolchain/package_from_installed.py 2022 -w 10.0.${env:WIN_SDK_VERSION}.0 | |
- name: Save to cache | |
uses: actions/cache/save@v3 | |
if: steps.check-cache.outcome == 'failure' | |
with: | |
path: '*.zip' | |
key: vs-toolchain-${{ env.WIN_SDK_VERSION }} | |
enableCrossOsArchive: true | |
notify-build-failure: | |
needs: [build] | |
if: failure() && github.event.schedule != null | |
permissions: | |
issues: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: jayqi/failed-build-issue-action@v1 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} |