Skip to content

fix(release-publish-oci): keep one Artifact block per release and surface np errors - #103

Merged
sebasnallar merged 1 commit into
mainfrom
fix/release-publish-oci-artifact-block
Sep 10, 2026
Merged

fix(release-publish-oci): keep one Artifact block per release and surface np errors#103
sebasnallar merged 1 commit into
mainfrom
fix/release-publish-oci-artifact-block

Conversation

@agustincelentano

Copy link
Copy Markdown
Collaborator

Qué pasó

Al publicar services-dynamo-db v0.3.0 el paso "Register artifact & finalize release" falló tres veces por configuración del repo (rol OIDC, variable, API key) antes de salir. Cada intento dejó la release así:

  • Cuatro bloques ## Artifact en el body, con cuatro digests distintos y tres con "registration failed". Solo el último era el real.
  • El bloque bueno decía Artifact ID: registered (id unavailable) aunque np sí devolvió el id.
  • Los tres fallos mostraban solo Process completed with exit code 1, sin el motivo.

Por qué

  1. Duplicados. El step lee el body y appendea el bloque, salteándolo solo si el digest ya está en el body. Pero cada corrida reconstruye la imagen y el digest cambia, así que el grep nunca matchea. Y el step corre con !cancelled(), o sea también cuando el registro falló.
  2. Id vacío. El workflow busca .id en la salida de np artifact create, y np lo devuelve como .resource_id.
  3. Error perdido. np imprime el error como JSON por stdout. Con OUTPUT=$(np ...) bajo set -e, el step corta antes de llegar al echo "$OUTPUT" y el mensaje nunca aparece en el log. Lo reprodujimos localmente con una API key inválida: {"error": "{\"statusCode\":403,...}"} y exit 1.

Qué cambia

  • Reemplazar en vez de appendear. Se corta el body desde el primer ## Artifact (el mismo sed que ya usa el step de registro para armar el changelog) y se escribe el bloque actual una sola vez. El bloque siempre refleja la última corrida, que es la imagen que quedó en el tag de ECR, y un intento fallido se sobreescribe al reintentar.
  • .id // .resource_id al leer el id del artifact.
  • || { echo "$OUTPUT"; exit 1; } en la llamada a np, con un ::error:: para que el motivo quede en el log del step.

Sin cambios de comportamiento para las corridas que hoy salen bien: un solo intento produce el mismo body que antes, ahora con el id real.

Caso de referencia

La release limpiada a mano: https://github.com/nullplatform/services-dynamo-db/releases/tag/v0.3.0. Los runs con el problema: 34385508954, 34385753809, 34386263560 (fallidos) y 34479106818 (ok) en ese repo.

…face np errors

- Replace the '## Artifact' block instead of appending: every re-run
  rebuilds the image with a new digest, so the digest-based skip never
  matched and each backfill attempt left another block in the release.
- Read the artifact id from .resource_id too; np returns it under that
  key, so releases said 'registered (id unavailable)'.
- Print np's output when artifact create fails; the JSON error goes to
  stdout and was swallowed by the assignment under set -e.
@sebasnallar
sebasnallar merged commit 5b2aa06 into main Sep 10, 2026
2 checks passed
@sebasnallar
sebasnallar deleted the fix/release-publish-oci-artifact-block branch September 10, 2026 14:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants