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: [12.16, current] 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 "github-actions@github.com" 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