Quatre runs d'une branche déjà mergée ont bloqué, ce matin, l'apply qu'on attendait. Deux causes, indépendantes : 1. Les workflows tofu (minio, vault, crowdsec, plausible) s'authentifient à Vault par un flux OIDC dont un HUMAIN doit ouvrir le lien. Déclenchés tout seuls, ils ne peuvent qu'occuper un runner jusqu'au timeout. Ils font en plus `apply` en `auto_approve` CONTRE LA PROD : partir sur le push d'une branche, c'est appliquer du code que personne n'a relu. → `workflow_dispatch` seul, ce qui écrit enfin ce qu'ils faisaient déjà. (crowdsec et plausible passaient de toute façon par une ancre YAML, donc leurs triggers étaient INERTES — issues 113 → 117 de kadans.) 2. `push` sur toutes les branches + `pull_request` = DEUX runs par commit dès qu'une branche a une PR. Vérifié : runs 258/259 et 260/261 portent le même SHA. helmcharts, qui travaille seul et mérite de rester automatique, prend la forme éprouvée de la CI de kadans : push sur `main`, PR pour la branche. Chaque clé de trigger porte un corps explicite : un `pull_request:` nu n'est pas une forme éprouvée ici, et son mode d'échec est le silencieux. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
66 lines
2.3 KiB
YAML
66 lines
2.3 KiB
YAML
---
|
|
# template source: https://github.com/bretfisher/docker-build-workflow/blob/main/templates/call-docker-build.yaml
|
|
name: Crowdsec
|
|
|
|
# À LA DEMANDE, et seulement à la demande — comme minio.yaml : auth Vault par
|
|
# flux OIDC (un humain doit ouvrir un lien) et apply `auto_approve` contre la prod.
|
|
#
|
|
# Note : les triggers `push`/`pull_request` retirés ici étaient de toute façon
|
|
# INERTES — ils passaient par une ancre YAML (`&`/`*`), que le parseur
|
|
# d'événements de Gitea ne résout pas (vécu sur arcodange/kadans, issues 113
|
|
# → 117). Ce workflow ne partait déjà qu'à la main ; c'est maintenant écrit.
|
|
on:
|
|
workflow_dispatch: {}
|
|
|
|
# cancel any previously-started, yet still active runs of this workflow on the same branch
|
|
concurrency:
|
|
group: ${{ github.ref }}-${{ github.workflow }}
|
|
cancel-in-progress: true
|
|
|
|
.vault_step: &vault_step
|
|
name: read vault secret
|
|
uses: https://gitea.arcodange.lab/arcodange-org/vault-action.git@main
|
|
id: vault-secrets
|
|
with:
|
|
url: https://vault.arcodange.lab
|
|
caCertificate: ${{ secrets.HOMELAB_CA_CERT }}
|
|
jwtGiteaOIDC: ${{ needs.gitea_vault_auth.outputs.gitea_vault_jwt }}
|
|
role: gitea_cicd_crowdsec
|
|
method: jwt
|
|
path: gitea_jwt
|
|
secrets: |
|
|
kvv1/google/credentials credentials | GOOGLE_BACKEND_CREDENTIALS ;
|
|
kvv1/gitea/tofu_module_reader ssh_private_key | TERRAFORM_SSH_KEY ;
|
|
|
|
jobs:
|
|
gitea_vault_auth:
|
|
name: Auth with gitea for vault
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
gitea_vault_jwt: ${{steps.gitea_vault_jwt.outputs.id_token}}
|
|
steps:
|
|
|
|
- name: Auth with gitea for vault
|
|
id: gitea_vault_jwt
|
|
run: |
|
|
echo -n "${{ secrets.vault_oauth__sh_b64 }}" | base64 -d | bash
|
|
|
|
tofu:
|
|
name: Tofu - Crowdsec IAC
|
|
needs:
|
|
- gitea_vault_auth
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
OPENTOFU_VERSION: 1.8.2
|
|
TERRAFORM_VAULT_AUTH_JWT: ${{ needs.gitea_vault_auth.outputs.gitea_vault_jwt }}
|
|
VAULT_CACERT: "${{ github.workspace }}/homelab.pem"
|
|
steps:
|
|
- *vault_step
|
|
- uses: actions/checkout@v4
|
|
- name: prepare vault self signed cert
|
|
run: echo -n "${{ secrets.HOMELAB_CA_CERT }}" | base64 -d > $VAULT_CACERT
|
|
- name: terraform apply
|
|
uses: dflook/terraform-apply@v1
|
|
with:
|
|
path: crowdsec/iac
|
|
auto_approve: true |