node.jsgithubgithub-actionsworkflowsemantic-release

Why do I always fail when I run jobs on github actions? even though I have installed the latest version of Node on my machine


I have installed the latest version of NodeJs (v18.14.0), but it still fails to do jobs, what should I do? this is the code from my workflow and the screenshot of the error.

# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Node.js CI

on:
  push:
    branches: ['main']
  pull_request:
    branches: ['*']

jobs:
  quality:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm install
      - run: npm test

  publish:
    runs-on: ubuntu-latest
    if: ${{ github.ref == 'refs/heads/main' }}
    needs: [quality]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm install
      - run: npm run semantic-release
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

enter image description here

I've tried installing everything from scratch by removing node_modules and package.lock.json then I did an npm install, but the result is still the same. When pushed to the repository it always fails to run the job


Solution

  • The strategy is missing for the publish job. You have to define it under publish too.

    Using ${{ matrix.node-version }} is invalid here without strategy:

    publish:
        runs-on: ubuntu-latest
        # ...
        steps:
          # ...
          - uses: actions/setup-node@v3
            with:
              node-version: ${{ matrix.node-version }} # invalid
    

    You need to verify which version actions/setup-node installs under publish with that invalid value. Apparently, only the default preinstalled Node.js 16.19.0 is there.

    NOTE: The default preinstalled NodeJS version will be set to 18 from tomorrow (Monday - February 13th, 2023).


    Apart from that, the error in that image:

    [semantic-release]: node version >=18 is required. Found v16.19.0.
    

    means that this step can only run on NodeJS v18+. Installing other lower versions i.e. 14.x and 16.x would result in failures. This makes strategy completely redundant because you only need v18:

          - uses: actions/setup-node@v3
            with:
              node-version: 18
    

    You might want to lint your workflows with https://rhysd.github.io/actionlint/ to identify potential issues.