Skip to content

🐛 fix(ci): GitHub Actions impose bash -e, le set -uo ne le désactive pas - #28

Merged
kbrdn1 merged 1 commit into
devfrom
chore/#26-release-v1-0-0
Aug 14, 2026
Merged

🐛 fix(ci): GitHub Actions impose bash -e, le set -uo ne le désactive pas#28
kbrdn1 merged 1 commit into
devfrom
chore/#26-release-v1-0-0

Conversation

@kbrdn1

@kbrdn1 kbrdn1 commented Aug 14, 2026

Copy link
Copy Markdown
Owner

Summary

Le premier tag candidat (v1.0.0-rc.1) a fait échouer le job build sans la moindre sortie. resolve était vert : les gates de version, de notes et d'ascendance fonctionnent.

Cause : le step tourne sous bash -e {0} — imposé par GitHub Actions, visible dans le log — et set -uo pipefail ne retire pas ce -e. L'affectation OUT=$(docker manifest inspect …) tuait donc le step dès que la commande renvoyait non-zéro, c'est-à-dire précisément dans le cas nominal du premier tag, quand l'image n'existe pas encore. Le if qui suivait n'était jamais atteint, d'où l'absence totale de trace.

C'est exactement ce à quoi sert l'étage candidat : le bug est tombé sur preprod, pas en production.

Related Issue

Closes #26

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📝 Documentation update
  • ♻️ Refactoring (no functional changes)
  • ⚡️ Performance improvement
  • 🎨 Style/UI update

Scope

  • Homepage
  • Blog
  • Projects
  • UI Components
  • i18n / Translations
  • SEO
  • Configuration

Changes

  • release.yml : if OUT=$(docker manifest inspect …) au lieu de OUT=$(…); RC=$? — le if met la commande en contexte conditionnel, où set -e ne mord pas
  • La branche « image absente » trace la réponse du registre
  • changelogs/pre-releases/1.0.0-rc.2.md — le rc.1 n'a rien publié

Tests

  • YAML validé
  • Une seule occurrence du motif dans le fichier (grep sur set -uo / RC=$?) — les quatre autres steps sont en set -euo, cohérent avec le -e du shell
  • Le run v1.0.0-rc.2 est la vérification — c'est l'objet du tag qui suit

Checklist

  • My code follows the project's coding style
  • I have performed a self-review of my code
  • I have tested my changes locally
  • My changes generate no new warnings
  • I have updated the documentation if needed
  • TypeScript compiles without errors (make typecheck) — sans objet
  • Linting passes (make lint) — sans objet

Additional Notes

Ce qu'on ne sait toujours pas : comment GHCR formule l'absence d'un tag. Le step est mort avant de l'afficher. Cette réponse décide si denied doit rejoindre les motifs d'absence ou rester traité comme une erreur indéterminée — un finding P1 de la review avait fait retirer denied de la liste.

Il reste dehors tant que la preuve manque : c'est le sens du fail-closed. Si le prochain run échoue à nouveau, le log donnera enfin la réponse, et on tranchera dessus plutôt qu'au jugé.

Le premier tag candidat a fait échouer le job build sans la moindre sortie.
Cause : le step tourne sous `bash -e {0}` — imposé par GitHub Actions, visible
dans le log — et `set -uo pipefail` ne retire pas ce `-e`. L'affectation
`OUT=$(docker manifest inspect …)` tuait donc le step dès que la commande
renvoyait non-zéro, c'est-à-dire précisément dans le cas nominal du premier
tag, quand l'image n'existe pas encore. Le `if` qui suivait n'était jamais
atteint, d'où l'absence totale de trace.

Passage à `if OUT=$(…)`, qui met la commande en contexte conditionnel où
`set -e` ne mord pas.

La branche « image absente » trace maintenant la réponse du registre. On ne
sait toujours pas comment GHCR formule cette absence — le step est mort avant
de l'afficher — et cette réponse décide si `denied` doit rejoindre les motifs
d'absence ou rester traité comme une erreur indéterminée. Il reste dehors
tant que la preuve manque : c'est le sens du fail-closed.

Notes du candidat rc.2, le rc.1 n'ayant rien publié.

refs #26
@kbrdn1
kbrdn1 merged commit 7dd0c07 into dev Aug 14, 2026
5 checks passed
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.

1 participant