Node CI #1559
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
| # For details of what checks are run for PRs please refer below | |
| # docs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions | |
| name: Node CI | |
| on: | |
| push: | |
| branches: [ "main", "master", "next" ] | |
| tags: [ "v*" ] | |
| pull_request: | |
| workflow_dispatch: | |
| schedule: | |
| - # dependencies are intended to be not pinned | |
| # test every night, if the setup still works | |
| cron: '42 23 * * *' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: {} | |
| env: | |
| # https://nodejs.dev/en/about/releases/ | |
| NODE_ACTIVE_LTS: "24" | |
| ## As this project is a meta-package, there are no functionalities nor tests. | |
| ## So the only responsibility that must be assured is: this project can be installed under all circumstances. | |
| jobs: | |
| test-npm-install: | |
| name: NPM install (node${{ matrix.node-version }}, ${{ matrix.os }}) | |
| timeout-minutes: 5 | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - windows-latest | |
| - macos-latest | |
| node-version: | |
| # action based on https://github.com/actions/node-versions/releases | |
| # see also: https://nodejs.org/en/about/releases/ | |
| - "26" # Current | |
| - "24" # Active LTS | |
| - "22" | |
| - "20" | |
| - "18" | |
| - "16" | |
| - "14" | |
| exclude: | |
| - os: macos-latest # macos-latest has issues with node14 | |
| node-version: "14" | |
| steps: | |
| - name: Checkout | |
| # see https://github.com/actions/checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| # see https://github.com/actions/setup-node | |
| uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| package-manager-cache: false # must not usecaches. we want the latest, always | |
| - name: bump npm | |
| shell: bash | |
| env: | |
| NODE_VERSION: '${{ matrix.node-version }}' | |
| run: | | |
| set -eux | |
| case "$NODE_VERSION" in | |
| '26' ) | |
| npm install -g npm@latest | |
| ;; | |
| '24') | |
| npm i -g npm@^11 | |
| ;; | |
| '20' | '20.18.0') | |
| npm i -g npm@^10 | |
| ;; | |
| esac | |
| npm --version | |
| - name: install project | |
| run: > | |
| npm install | |
| --no-audit | |
| --no-package-lock | |
| --verbose | |
| # proven: the package can be installed. that's enough for a meta-package | |
| test-yarn-install: | |
| name: YARN install (node${{ matrix.node-version }}, ${{ matrix.os }}) | |
| timeout-minutes: 5 | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - windows-latest | |
| - macos-latest | |
| node-version: | |
| # action based on https://github.com/actions/node-versions/releases | |
| # see also: https://nodejs.org/en/about/releases/ | |
| - "26" # Current | |
| - "24" # Active LTS | |
| - "22" | |
| - "20" | |
| - "18" | |
| - "16" | |
| - "14" | |
| exclude: | |
| - os: macos-latest # macos-latest has issues with node14 | |
| node-version: "14" | |
| steps: | |
| - name: Checkout | |
| ## see https://github.com/actions/checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| # see https://github.com/actions/setup-node | |
| uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| package-manager-cache: false # must not usecaches. we want the latest, always | |
| - name: Setup Yarn | |
| shell: bash | |
| run: | | |
| set -eux | |
| npm uninstall -g yarn | |
| corepack enable yarn | |
| case "$NODE_VERSION" in | |
| '14' | '16') | |
| corepack prepare --activate yarn@3.8.7 | |
| ;; | |
| '18') | |
| corepack prepare --activate yarn@4.0.0 | |
| ;; | |
| *) | |
| corepack install --global yarn@stable | |
| ;; | |
| esac | |
| yarn --version | |
| env: | |
| NODE_VERSION: ${{ matrix.node-version }} | |
| working-directory: .. # prevent evaluation of package.json | |
| - name: install project | |
| shell: bash | |
| run: | | |
| set -eux | |
| YARN_VERSION=$(yarn --version) | |
| YARN_MAJOR=${YARN_VERSION%%.*} | |
| if [ "$YARN_MAJOR" -ge 4 ]; then | |
| export YARN_ENABLE_HARDENED_MODE=0 | |
| fi | |
| yarn install \ | |
| --no-immutable \ | |
| --inline-builds | |
| # proven: the package can be installed. that's enough for a meta-package | |
| test-pnpm-install: | |
| name: PNPM install (node${{ matrix.node-version }}, ${{ matrix.os }}) | |
| timeout-minutes: 5 | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - windows-latest | |
| - macos-latest | |
| node-version: | |
| # action based on https://github.com/actions/node-versions/releases | |
| # see also: https://nodejs.org/en/about/releases/ | |
| - "26" # Current | |
| - "24" # Active LTS | |
| - "22" | |
| pnpm-version: [ "latest" ] | |
| include: | |
| - os: "ubuntu-latest" | |
| node-version: "20" | |
| pnpm-version: "latest-10" # see https://github.com/pnpm/pnpm/issues/11546#issuecomment-4407057536 | |
| - os: "ubuntu-latest" | |
| node-version: "18" | |
| pnpm-version: "latest-9" # see https://github.com/pnpm/pnpm/issues/11546#issuecomment-4407057536 | |
| - os: "ubuntu-latest" | |
| node-version: "16" | |
| pnpm-version: "latest-8" # see https://www.npmjs.com/package/pnpm/?activeTab=versions | |
| - os: "ubuntu-latest" | |
| node-version: "14" | |
| pnpm-version: "latest-7" # see https://www.npmjs.com/package/pnpm/?activeTab=versions | |
| steps: | |
| - name: Checkout | |
| # see https://github.com/actions/checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| # see https://github.com/actions/setup-node | |
| uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| package-manager-cache: false # must not usecaches. we want the latest, always | |
| - name: Remove PNPM from PATH (Windows) | |
| if: ${{ runner.os == 'Windows' }} | |
| shell: pwsh | |
| run: | | |
| Set-PSDebug -Trace 1 | |
| # find pnpm | |
| Get-Alias pnpm -ErrorAction SilentlyContinue | |
| Get-ChildItem Function:\pnpm -ErrorAction SilentlyContinue | |
| Get-Command pnpm -ErrorAction SilentlyContinue | |
| # remove pnpm | |
| Remove-Item Alias:\pnpm -Verbose -ErrorAction SilentlyContinue | |
| Remove-Item Function:\pnpm -Verbose -ErrorAction SilentlyContinue | |
| Remove-Item "C:\npm\prefix\pnpm*" -Verbose -Force -ErrorAction SilentlyContinue | |
| # verify | |
| Get-Alias pnpm -ErrorAction SilentlyContinue | |
| Get-ChildItem Function:\pnpm -ErrorAction SilentlyContinue | |
| Get-Command pnpm -ErrorAction SilentlyContinue | |
| - name: setup pnpm | |
| ## see https://github.com/pnpm/action-setup | |
| uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 | |
| with: | |
| version: ${{ matrix.pnpm-version }} | |
| - name: test pnpm | |
| run: pnpm --version | |
| - name: install project | |
| run: > | |
| pnpm install | |
| --no-lockfile | |
| --verbose | |
| # proven: the package can be installed. that's enough for a meta-package |