Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Child apps that set ci.image flip to root tier and fail the Railway leg (citynode.app + feedback.nearbuilders.org both failing) — make child ci.image pin the deploy instead

Cerrado
#493 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Ya se ha fusionado un pull request relacionado.

  • #517 de @elliotBraem — fusionado

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
docker, github-actions, typescript

Línea de trabajo

Start with resolveRuntimeTier, resolveImageLegPlan, and resolveRailwayLeg in packages/everything-dev/src/services/deploy/legs.mjs, then read resolveImageRef and deployImageToRailway in packages/everything-dev/src/services/deploy/image.mjs and ADR 0021. Trace how child ci.image affects tier selection and Railway source deployment; done means a child pin deploys the intended image safely without requiring a root-tier digest. The issue does not name tests or a smoke-test entry point.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

Setting ci.image in a child app's bos.app.ts flips the deploy to root tier (resolveRuntimeTier — packages/everything-dev/src/services/deploy/legs.mjs:10-12: ciImage || imageEnv || hasDockerfile ? "root" : "child"). Root tier requires a pinned digest, and the shared consumer-deploy.yml workflow never passes BOS_IMAGE_DIGEST, so every child deploy with ci.image set fails:

Image skipped: no Dockerfile at the config root
Railway deploy failed: Railway deploy requires a runtime image (set ci.image, or pass BOS_IMAGE_DIGEST for a pre-pushed image)
✗ Config published, but the railway leg(s) failed

The config itself publishes fine — only the Railway leg fails.

Two consumers are broken right now by this:

  • NEARBuilders/feedback.nearbuilders.org — deploy failed 2026-10-19 with exactly this signature.
  • NEARBuilders/citynode.app — its bos.app.ts pins ci.image: ghcr.io/nearbuilders/everything-dev:sha-2fb30b2 with the same thin-wrapper consumer-deploy workflow; its Deploy workflow has failed on every run since 2026-10-14.

The child model without ci.image works (child tier: image leg soft-skips, railway redeploy --from-source succeeds with just RAILWAY_TOKEN + ci.railway.service) — but then the child has no protection from :rc float: the Railway service's dashboard-connected source decides the pulled bytes, not the child's config.

The design gap

Under the current design, a child's ci.image can't pin its deploy even in principle: the Railway leg runs railway redeploy --service <service> --from-source (image.mjs:236-242), which re-pulls the service's dashboard-connected source ref — ci.image never repoints it. It only (a) flips the tier to root and (b) names the image for the root-tier build/prebuilt + smoke path. So a child authoring ci.image as a pin ("deploy this image, not whatever :rc floats to") gets a hard failure instead, and removing it silently opts into :rc tracking.

Proposed fix

Make a child's ci.image meaningful and safe:

  1. Tier: a child that sets ci.image (and has no Dockerfile) should stay child tier — it cannot build, so demanding a digest is a dead end. Root tier should remain reserved for the actual root runtime (which owns its Dockerfile / image train).
  2. Railway leg: when a child pins ci.image, the redeploy should deploy the service pinned to that ref — e.g. repoint the service source to ci.image (or validate that the service's current source matches it and fail loudly on drift), rather than a blind redeploy --from-source. Per ADR 0021 ("Deployments should pin the digest either way"), a tag ref in ci.image could be resolved to its digest at deploy time and pinned.
  3. Smoke leg: for a pinned child, optionally smoke-boot the pinned ref (image@digest) so "pulled bytes are what this train validated" holds for children too.

References

  • ADR 0021 (universal runtime image + the 2026-10-13 amendments — image-backed Railway deploys, :rc train semantics)
  • resolveRuntimeTier / resolveImageLegPlan / resolveRailwayLeg in packages/everything-dev/src/services/deploy/legs.mjs
  • resolveImageRef / deployImageToRailway in packages/everything-dev/src/services/deploy/image.mjs
  • .github/workflows/consumer-deploy.yml (never passes BOS_IMAGE_DIGEST; header describes child-tier soft-skips)
  • Related: #489 (composition precedence — already landed in rc.12/rc.8)
Lenguaje dominante
TypeScript
Estrellas
5
Forks
3
Merge medio
10 h 12 min
PR fusionados (30 d)
102

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de NEARBuilders/everything-dev

Todos los issues de NEARBuilders/everything-dev

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.