Skip to content

fix(ci): garde-fou de déploiement lisible depuis un if, et lint des workflows - #5

Merged
rolljee merged 1 commit into
masterfrom
fix/deploy-workflow-context
Jul 25, 2026
Merged

rolljee merged 1 commit into
masterfrom
fix/deploy-workflow-context

Conversation

@rolljee

@rolljee rolljee commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Le bug

Le run 30172628259 a échoué sans qu'aucun job ne démarre, et l'image n'a donc jamais été publiée sur GHCR.

Cause : le garde-fou introduit en PR #4 s'écrivait

if: ${{ secrets.SCW_CONTAINER_ID != '' }}

Or le contexte secrets n'est autorisé dans aucun if, ni au niveau job ni au niveau step (context availability). Le workflow était rejeté à la validation.

Le correctif

secrets est autorisé dans jobs.<id>.env, et env est lisible depuis un if de step. Le relais se fait donc par là :

deploy:
  env:
    CONTAINER_ID: ${{ secrets.SCW_CONTAINER_ID }}
  steps:
    - if: env.CONTAINER_ID != ''

Bénéfice annexe : les trois variables ne sont plus dupliquées dans chaque step. Une notice explicite est émise quand le déploiement est sauté, pour ne pas laisser un job vide et inexplicable.

Pourquoi actionlint

deploy.yml ne se déclenche que sur master : aucune PR ne pouvait le valider, ce qui est exactement pourquoi ce bug est passé. actionlint détecte l'erreur d'origine mot pour mot :

.github/workflows/bad.yml:6:13: context "secrets" is not allowed here.
available contexts are "github", "inputs", "needs", "vars". [expression]

Il a d'ailleurs immédiatement attrapé une seconde erreur pendant l'écriture de ce correctif : un : non échappé dans un scalaire YAML.

Le binaire est téléchargé depuis une release épinglée (1.7.12) plutôt que via un curl | bash, pour ne pas exécuter en CI du code non versionné.

Effet attendu au merge

Le workflow Deploy devient valide, l'image est publiée sur GHCR, et le job de déploiement est sauté avec une notice puisque les secrets d'infrastructure ne sont pas encore posés — ce qui est la séquence d'amorçage voulue.

🤖 Generated with Claude Code

…orkflows

Le workflow Deploy était invalide et aucun job ne démarrait : le garde-fou
utilisait `if: ${{ secrets.SCW_CONTAINER_ID != '' }}`, or le contexte `secrets`
n'est autorisé dans aucun `if`, ni au niveau job ni au niveau step. L'image n'a
donc jamais été publiée sur GHCR au merge de la PR #4.

Le secret passe désormais par `env` au niveau du job — un des rares endroits où
`secrets` est autorisé — et les steps testent `env`, qui est lisible depuis un
`if`. Une notice explicite signale le cas sauté plutôt que de laisser un job
vide et silencieux.

Ajoute actionlint à la CI, qui détecte précisément cette erreur. Sans lui,
deploy.yml n'était validé par rien : il ne se déclenche que sur `master`, donc
une PR ne pouvait pas en révéler les défauts. Le binaire vient d'une release
épinglée et non d'un `curl | bash`, pour ne pas exécuter en CI du code non
versionné.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rolljee
rolljee merged commit 0dcb274 into master Jul 25, 2026
1 check passed
@rolljee
rolljee deleted the fix/deploy-workflow-context branch July 25, 2026 20:03
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