Merge releases/v3 into releases/v2 #45
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: PR Checks | |
on: | |
push: | |
branches: [main, releases/v*] | |
pull_request: | |
# Run checks on reopened draft PRs to support triggering PR checks on draft PRs that were opened | |
# by other workflows. | |
types: [opened, synchronize, reopened, ready_for_review] | |
workflow_dispatch: | |
jobs: | |
check-js: | |
name: Check JS | |
runs-on: ubuntu-latest | |
timeout-minutes: 45 | |
strategy: | |
matrix: | |
node-types-version: [16.11, current] # run tests on 16.11 while codeql-action v2 is still supported | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Lint | |
run: npm run-script lint | |
- name: Update version of @types/node | |
if: matrix.node-types-version != 'current' | |
env: | |
NODE_TYPES_VERSION: ${{ matrix.node-types-version }} | |
run: | | |
# Export `NODE_TYPES_VERSION` so it's available to jq | |
export NODE_TYPES_VERSION="${NODE_TYPES_VERSION}" | |
contents=$(jq '.devDependencies."@types/node" = env.NODE_TYPES_VERSION' package.json) | |
echo "${contents}" > package.json | |
# Usually we run `npm install` on macOS to ensure that we pick up macOS-only dependencies. | |
# However we're not checking in the updated lockfile here, so it's fine to run | |
# `npm install` on Linux. | |
npm install | |
if [ ! -z "$(git status --porcelain)" ]; then | |
git config --global user.email "[email protected]" | |
git config --global user.name "github-actions[bot]" | |
# The period in `git add --all .` ensures that we stage deleted files too. | |
git add --all . | |
git commit -m "Use @types/node=${NODE_TYPES_VERSION}" | |
fi | |
- name: Check generated JS | |
run: .github/workflows/script/check-js.sh | |
check-node-modules: | |
name: Check modules up to date | |
runs-on: macos-latest | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check node modules up to date | |
run: .github/workflows/script/check-node-modules.sh | |
check-file-contents: | |
name: Check file contents | |
runs-on: ubuntu-latest | |
timeout-minutes: 45 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
# When updating this, update the autogenerated code header in `sync.py` too. | |
pip install ruamel.yaml==0.17.31 | |
# Ensure the generated PR check workflows are up to date. | |
- name: Verify PR checks up to date | |
run: .github/workflows/script/verify-pr-checks.sh | |
npm-test: | |
name: Unit Test | |
needs: [check-js, check-node-modules] | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 45 | |
steps: | |
- name: Setup Python on MacOS | |
uses: actions/setup-python@v4 | |
if: | | |
matrix.os == 'macos-latest' && ( | |
matrix.version == 'stable-20220908' || | |
matrix.version == 'stable-20221211' || | |
matrix.version == 'stable-20230418' || | |
matrix.version == 'stable-v2.13.5' || | |
matrix.version == 'stable-v2.14.6') | |
with: | |
python-version: '3.11' | |
- uses: actions/checkout@v4 | |
- name: npm test | |
run: | | |
# Run any commands referenced in package.json using Bash, otherwise | |
# we won't be able to find them on Windows. | |
npm config set script-shell bash | |
npm test | |
check-backport-node-versions: | |
if: ${{ github.event.pull_request }} | |
name: Check node version for backports | |
runs-on: ubuntu-latest | |
timeout-minutes: 45 | |
env: | |
BASE_REF: ${{ github.base_ref }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: head-version | |
name: check HEAD node version | |
run: | | |
# NB we are matching the node version string both with and without single quotes | |
NODE_VERSION=$(find . -name "*.yml" -exec grep -oh "using: 'node[0-9][0-9]\|using: node[0-9][0-9]" {} \; | sed -e "s/using: '//g" -e "s/using: //g" | sort | uniq) | |
echo "NODE_VERSION: ${NODE_VERSION}" | |
if [[ $(echo "$NODE_VERSION" | wc -l) -gt 1 ]]; then | |
echo "Error: More than one node version used in actions." | |
exit 1 | |
fi | |
echo "node_version=${NODE_VERSION}" >> $GITHUB_OUTPUT | |
echo "" | |
echo "github.head_ref: ${{ github.head_ref }}" | |
echo "github.ref: ${{ github.ref }}" | |
echo "github.ref_name: ${{ github.ref_name }}" | |
echo "github.base_ref: ${{ env.BASE_REF }}" | |
- id: checkout-base | |
name: check out base ref for backport check | |
if: ${{ startsWith(github.head_ref, 'nickfyson-') }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.BASE_REF }} | |
- name: compare with node version on base ref for backport check | |
if: steps.checkout-base.outcome == 'success' | |
env: | |
HEAD_VERSION: ${{ steps.head-version.outputs.node_version }} | |
run: | | |
BASE_VERSION=$(find . -name "*.yml" -exec grep -oh "using: 'node[0-9][0-9]\|using: node[0-9][0-9]" {} \; | sed -e "s/using: '//g" -e "s/using: //g" | sort | uniq) | |
echo "HEAD_VERSION: ${HEAD_VERSION}" | |
echo "BASE_VERSION: ${BASE_VERSION}" | |
if [[ "$BASE_VERSION" != "$HEAD_VERSION" ]]; then | |
echo "Error: Cannot change node version in a backport PR." | |
exit 1 | |
fi |