4

I have written a test file for a Github Action:

test.yml

name: Test
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14.x, 16.x]
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

but my package.json uses an organization private repo. When the Github Action runs it fails and I get the error:

npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@org/repo/
npm ERR! 404 
npm ERR! 404  '@org/repo@1.2.3' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/runner/.npm/_logs/2022-02-10T17_17_46_961Z-debug.log
Error: Process completed with exit code 1.

My research trying to solve the issue:

In my Github Action how can I properly reference the private org repo so that my test will work correctly or is there a step I'm missing?

DᴀʀᴛʜVᴀᴅᴇʀ
  • 7,681
  • 17
  • 73
  • 127
  • I found [this issue](https://github.com/actions/setup-node/issues/49) with some interesting suggestions. For example, using a PAT when calling the `npm ci` command that use the `package.json`, because the default GITHUB_TOKEN doesn't have access to the other repositories, even in the same organization. – GuiFalourd Feb 10 '22 at 17:42

2 Answers2

3

This answer was correct and here is the sample test.yml file now:

name: Test
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14.x, 16.x]
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> .npmrc
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Github Action shows as passed:

jobs

DᴀʀᴛʜVᴀᴅᴇʀ
  • 7,681
  • 17
  • 73
  • 127
2

You have to add authorization to on CI with URL + token - it's done through .npmrc file.

  1. Create a token: npm token create --read-only

  2. Add it to your secrets on GitHub named NPM_TOKEN

  3. Before running npm ci create a local file with your token:

    Add a step: - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> .npmrc

Everything else stays as it is.

Grzegorz Krukowski
  • 18,081
  • 5
  • 50
  • 71