conclusion job: collect_usage_artifact_files.sh calls bare `node` (exit 127) on runners without node on PATH
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 88/100
Línea de trabajo
Comience con actions/setup/sh/collect_usage_artifact_files.sh y las pruebas de shell relacionadas, como check_mcp_servers_test.sh. Ejecute el script primero con un PATH temporal sin node y después con un node simulado, y verifique la advertencia, el estado de salida, el listado y el comportamiento sin cambios del resumen; ejecute también las comprobaciones relevantes de pkg/workflow/evals_steps_test.go.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Analysis
The conclusion job runs actions/setup/sh/collect_usage_artifact_files.sh (step built by buildUsageArtifactCollectionStep() in pkg/workflow/notify_comment.go). Its last real step is a bare node call (line 89 on main):
mkdir -p /tmp/gh-aw/usage/activity
node "${RUNNER_TEMP}/gh-aw/actions/generate_usage_activity_summary.cjs"
find /tmp/gh-aw/usage -type f -print | sort
Unlike the agent, detection and other jobs, the conclusion job gets no GenerateNodeJsSetupStep() (pkg/workflow/nodejs.go); its github-script steps use the runner's bundled node internally. On a self-hosted runner whose image has no node on PATH (the stock ghcr.io/actions/actions-runner image that ARC scale sets use ships node only under /home/runner/externals/node*), the call fails:
/home/runner/_work/_temp/gh-aw/actions/collect_usage_artifact_files.sh: line 73: node: command not found
##[error]Process completed with exit code 127.
The step is continue-on-error: true, so the job stays green, but every run carries an ##[error] annotation, usage/activity/summary.json is never produced, and the trailing find listing is skipped. The summary is best-effort by design (that is why the step is continue-on-error), so a missing node should degrade to a warning, not an error.
Reproduction
- Compile any workflow and run it on a self-hosted runner image where
nodeis not onPATH(e.g.ghcr.io/actions/actions-runneras the ARC scale-set runner image). - Open the
conclusionjob log: step "Collect usage artifact files" fails with exit code 127 as above.
Observed with gh-aw-actions/setup v0.90.0, engine: pi, runner.topology: arc-dind; the script on main still has the unguarded call.
Implementation Plan
Preferred: guard the call in the script (smallest change, works for every runner and topology, no extra setup step in every conclusion job).
- Guard the call (
actions/setup/sh/collect_usage_artifact_files.sh, thenode ...generate_usage_activity_summary.cjsline):
Keep theif command -v node >/dev/null 2>&1; then node "${RUNNER_TEMP}/gh-aw/actions/generate_usage_activity_summary.cjs" else echo "::warning::node not found on PATH; skipping the usage activity summary" fi find /tmp/gh-aw/usage -type f -print | sortfindlisting running in both cases. - Add a test
actions/setup/sh/collect_usage_artifact_files_test.sh, in the style of the sibling*_test.shscripts (e.g.check_mcp_servers_test.sh): run the script with a temporaryPATHthat contains the coreutils it needs but nonode; assert exit code 0, the::warning::line is printed, and thefindlisting still appears. Add a second case with a stubnodeonPATHasserting it is invoked. - Check
pkg/workflow/evals_steps_test.go(it reads this script) still passes, and recompile the lock files that embed it.
Alternative (heavier, not preferred): prepend GenerateNodeJsSetupStep() to the conclusion job in notify_comment.go, which adds a setup step to every run just for a best-effort summary.
Acceptance Criteria
- On a runner without
nodeonPATH, "Collect usage artifact files" exits 0 and logs a::warning::; no##[error]annotation. - On a runner with
node, behavior is unchanged andusage/activity/summary.jsonis generated. - The new shell test covers both cases.
Workaround on our side: a node symlink on PATH in the runner image.
- Lenguaje dominante
- Go
- Estrellas
- 5.4k
- Forks
- 584
- Merge medio
- 3 h 16 min
- PR fusionados (30 d)
- 829
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Incluye un Dockerfile o un 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 github/gh-aw
-
automation models
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Los mantenedores suelen responder en 1 día
-
cookie delight
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
github/gh-aw#70274 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
automation cookie dependencies go-fan
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
agentic-workflows automation aw-essential cookie
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
Todos los issues de github/gh-aw
Issues similares
-
[BUG]: Windows GUI package of v1.17.0-rc3 has no GTK DLLsPosiblemente ocupada @andrut-ds la tomó hoy. Abiertobug CI/CD Pactus-GUI Windows
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
pactus-project/pactus#2428 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
Los mantenedores suelen responder en 1 día
-
feat
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
ory/hydra-maester#312 · 1 reacción ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
rossoctl/context-guru#610 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Los mantenedores suelen responder en 1 día