I am currently working on replacing our Drone CI installation with GitHub Actions.
The Action Workflow I have so far boils down to the following .github/workflows/ci.yml
file:
on: [ push, pull_request ]
name: CI
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '13.x'
- name: Install Dependencies
run: npm install
The log itself comes out as a long series of npm WARN tar ENOENT: no such file or directory
ala the truncated list below.
2020-04-29T21:15:31.7899082Z npm install
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/acorn-26d8ba97/dist/acorn.js.map'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/coffeescript-acee515b/lib/coffee-script/register.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/coffeescript-acee515b/lib/coffee-script/repl.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/coffeescript-acee515b/lib/coffee-script/rewriter.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/tslint-c216b578/LICENSE'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/eslint-cd3dbe58/LICENSE'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/eslint-cd3dbe58/README.md'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/typescript-b4b55d18/lib/diagnosticMessages.generated.json'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/jquery-1794793b/dist/jquery.min.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/lodash-05c1df31/fp/_convertBrowser.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/lodash-70e4a396/fp/_convertBrowser.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/lodash-79f5ae17/fp/_convertBrowser.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/lodash-e49b02f6/fp/_convertBrowser.js'
npm WARN tar ENOENT: no such file or directory, open '/home/runner/work/project/project/node_modules/.staging/lodash-16fa050d/fp/_convertBrowser.js'
The advice I have found online is to rm package-lock.json
but that's not an acceptable solution as I need to test our code with the exact versions of our dependencies we have locked.
Further, I don't believe there is anything wrong with our package-lock.json file to begin with because it still npm install
's as expected both locally and on our Drone CI installation.
To resolve the ENOENT warning message, you need to add a package. json file in the directory where you run the npm install command. And then run your npm install command again. This time, the warning message should not appear.
While doing npm install, inside node_modules . staging folder is getting created. Reasons: This is a temporary folder where the modules will be kept untill npm downloads all the modules specified in the package.
At long wait, I found the solution here:
Install an npm module from a private GitHub repository using GitHub Actions
- uses: actions/checkout@v2
with:
persist-credentials: false
- uses: actions/setup-node@v1
with:
node-version: 12.x
- run: git config --global url."https://${{ secrets.PAT }}@github.com/".insteadOf ssh://[email protected]/
- run: npm ci
...
I had tried basically all of this on my own but the most important part was missing:
with:
persist-credentials: false
actions/checkout@v2
will by default mess with some settings for Git and prevent insteadOf
from working properly.
This error condition can also happen if you are using a private npm package, and simply forget to add the secret to the repo.
E.g. if you have something like this in your GitHub Actions workflow:
- name: Add token for private package access to .npmrc
run: echo "//npm.pkg.github.com/:_authToken=$ACME_CORP_TOKEN" > ~/.npmrc
env:
ACME_CORP_TOKEN: ${{ secrets.ACME_CORP_TOKEN }}
...an action like the above won't fail if $ACME_CORP_TOKEN
doesn't exist (though it would be better to make it do so), so if you've forgotten to actually add the ACME_CORP_TOKEN
secret to the repository (in the Secrets tab of the repository settings), then you will get this same problem.
The enormous list of npm WARN tar ENOENT
errors for normal-looking dependencies inside of node_modules
won't make it obvious that the problem is actually the missing private registry access token.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With