npm install -g in onCreateCommand doesn't work in GitHub Actions
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Comienza con los archivos devcontainer.json y cdk.yml mostrados; después, inspecciona el paso devcontainers/ci y el usuario, HOME y entorno npm que crea. Reproduce el comando npm install --global localmente y en GitHub Actions, comparando el usuario efectivo y las rutas de inicio. La tarea estará terminada cuando la versión configurada de npm se instale correctamente en ambos entornos sin el error de permisos /home/runner.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I'm not sure if this is an issue with devcontainers/ci, GitHub Actions, npm, or what, but I'm hoping that someone here can provide some insight.
Here is my setup:
My devcontainer.json
{
"name": "Jekyll Site With AWS Backend",
"image": "mcr.microsoft.com/devcontainers/jekyll:2.2.7-3.4-bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided"
},
"ghcr.io/devcontainers/features/git-lfs:1": {
"autoPull": true,
"installDirectlyFromGitHubRelease": true,
"version": "latest"
},
"ghcr.io/devcontainers/features/aws-cli:1": {
"version": "2.34.12"
},
"ghcr.io/devcontainers/features/node:1": {
"version": "24"
}
},
"forwardPorts": [
4000, // Jekyll server
9229 // Node.js debugging
],
// Ensure the ~/.gnupg dir exists, otherwise the bind mount below will fail.
// mkdir -p option ensures no error if the dir already exists.
"initializeCommand": "mkdir -p ${localEnv:HOME}${localEnv:USERPROFILE}/.gnupg/",
"onCreateCommand": {
"updateNpm": "npm install --global [email protected]",
"aptUpdate": "sudo apt-get update && sudo apt-get upgrade --yes"
},
"updateContentCommand": {
"npm": "cd cdk/ && npm install",
"bundle": "cd web/ && bundle install"
},
"mounts": [
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.gnupg/,target=/home/vscode/.gnupg/,type=bind"
]
}
My GitHub Actions workflow definition (`cdk.yml`)
name: CDK Synth and Deploy
on:
push:
branches: [main]
paths: [cdk/**, ".github/workflows/cdk.yml", ".devcontainer/**"]
pull_request:
branches: [main]
paths: [cdk/**, ".github/workflows/cdk.yml", ".devcontainer/**"]
workflow_dispatch:
permissions:
id-token: write
contents: read
jobs:
cdk:
runs-on: ubuntu-latest # Ubuntu version doesn't matter, everything will be running in our devcontainer anyway
environment: ${{ github.ref == 'refs/heads/main' && 'production' || 'test' }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
lfs: true
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
# This step builds the devcontainer and runs commands inside it, so CI env matches developer machines.
- name: CDK Synth and Deploy in Devcontainer
uses: devcontainers/[email protected]
env:
IMAGE_NAME: ghcr.io/dansite/devcontainer
with:
imageName: ${{ env.IMAGE_NAME }}
cacheFrom: ${{ env.IMAGE_NAME }} # Pre-build devcontainer image
inheritEnv: true
skipContainerUserIdUpdate: true # Don't update the user of the devcontainer to match the host (i.e., keep it `vscode` not `runner`)
runCmd: |
cd cdk/
npm ci
# Do other stuff
When building and opening this devcontainer locally in VS Code on Windows, everything works fine. However, when the devcontainers/ci step runs in GitHub Actions, I get the following error logs):
Error message
npm error code EACCES
npm error syscall mkdir
npm error path /home/runner
npm error errno EACCES
npm error FetchError: Invalid response body while trying to fetch https://registry.npmjs.org/npm: EACCES: permission denied, mkdir '/home/runner'
npm error at /usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/minipass-fetch/lib/body.js:174:15
npm error at async Response.json (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/minipass-fetch/lib/body.js:75:17)
npm error at async RegistryFetcher.packument (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/pacote/lib/registry.js:98:25)
npm error at async RegistryFetcher.manifest (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/pacote/lib/registry.js:128:23)
npm error at async Install.exec (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/lib/commands/install.js:114:27)
npm error at async Npm.exec (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/lib/npm.js:209:9)
npm error at async module.exports (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/lib/cli/entry.js:67:5) {
npm error code: 'EACCES',
npm error errno: 'EACCES',
npm error syscall: 'mkdir',
npm error path: '/home/runner',
npm error type: 'system'
npm error }
npm error
npm error The operation was rejected by your operating system.
npm error It is likely you do not have the permissions to access this file as the current user
npm error
npm error If you believe this might be a permissions issue, please double-check the
npm error permissions of the file and its containing directories, or try running
npm error the command again as root/Administrator.
npm error Log files were not written due to an error writing to the directory: /home/runner/.npm/_logs
npm error You can rerun the command with `--loglevel=verbose` to see the logs in your terminal
The EACCES: permission denied, mkdir '/home/runner' part is super confusing to me. If commands in my devcontainer are running as the default vscode user, then why is npm trying to create a directory at /home/runner, especially when I have skipContainerUserIdUpdate: true set on the GitHub Actions step? For that matter, why is npm trying to create a home directory at all? How can I modify the above files to ensure that my devcontainer has the latest npm version both locally and in GitHub Actions workflows? Thanks in advance!
- Lenguaje dominante
- TypeScript
- Estrellas
- 499
- Forks
- 101
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de devcontainers/ci
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
devcontainers/ci#446 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
devcontainers/ci#445 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
devcontainers/ci#444 · 2 comentarios · 3 reacciones ·
-
Inputs are wrong in post step when action is called through a nested composite actionPosiblemente ocupada @v-Kaniska244 la tomó hace 65 días. Abierto
devcontainers/ci#442 · 1 asignado ·
-
Add Woodpecker CI Plugin for Dev ContainersPosiblemente ocupada @head1328 la tomó hace 292 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
devcontainers/ci#430 ·
Todos los issues de devcontainers/ci
Issues similares
-
area: desktop area: website priority: P2 type: feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
appandflow/stim#3411 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
rjsf-team/react-jsonschema-form#5485 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
lingdojo/kana-dojo#32090 · 1 comentario · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
Friction: Org home and org switcher copy still say repositories and connected agents live in the personal accountPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertofriction
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
kentcdodds/kody#3265 ·
Los mantenedores suelen responder en 1 día