Templates — Actions & Templates Forgejo réutilisables
Actions composites et workflows workflow_call pour pipelines Forgejo Actions.
Ce repo est conçu pour être utilisé via checkout PAT dans les CI Forgejo :
- name: Checkout CI templates
uses: https://forgejo.tordais.cc/actions/checkout@v4
with:
repository: nonobis/templates
token: \${{ secrets.TEMPLATES_PAT }}
path: .ci
ref: main
Utilisation rapide — Action composite unique
Les projets créent un wrapper fin .forgejo/workflows/ci.yml qui délègue à l'action composite ci-full (checkout des templates dans .ci) :
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
ci:
runs-on: debian-12
enable-openid-connect: true
steps:
- uses: https://forgejo.tordais.cc/actions/checkout@v4
with:
fetch-depth: 0
- uses: https://forgejo.tordais.cc/actions/checkout@v4
with:
repository: nonobis/templates
token: ${{ secrets.TEMPLATES_PAT }}
path: .ci
ref: main
- uses: ./.ci/.forgejo/actions/ci-full
with:
project: heimdall
secrets-provider: infisical
infisical-domain: ${{ secrets.VAULT_URL }}
infisical-client-id: ${{ secrets.VAULT_CLIENT_ID }}
infisical-client-secret: ${{ secrets.VAULT_CLIENT_SECRET }}
infisical-project-id: ${{ secrets.VAULT_PROJECT_ID }}
Workflows disponibles (workflow_call)
| Workflow |
Description |
dotnet-renovate.yml |
Renovate programmé pour les dépendances |
sync-mirrors.yml |
Synchronisation des actions miroirs (hebdo) |
Actions disponibles (composite)
Noyau (.NET)
| Action |
Description |
setup-dotnet |
Cache NuGet + dotnet restore |
setup-gitversion |
GitVersion → outputs : semVer, nugetVersion, dockerTag |
dotnet-build |
Restore + Build avec injection de version optionnelle |
dotnet-test-coverage |
Tests parallélisés avec collecte Coverlet + résumé |
dotnet-format |
dotnet format --verify-no-changes --no-restore |
Release
| Action |
Description |
ci-release |
Pipeline release complet : version → build/test → publish (multi-runtimes) → release notes → release Forgejo → Docker push |
forgejo-release |
Création release Forgejo + release notes automatiques (changelog depuis le dernier tag du même préfixe) + upload asset |
Sécurité (politique projet : bloquant, CVE publiées sur les PR)
| Action |
Description |
trivy-scan |
Scan Trivy des images Docker — bloquant sur HIGH/CRITICAL, rapport markdown CVE |
dependency-check |
OWASP Dependency-Check sur les dépendances .NET — bloquant sur HIGH/CRITICAL, rapport markdown CVE |
sonar-dotnet |
Analyse SonarQube + quality gate bloquant (politique : retour Sonar traité obligatoirement) |
ci-full |
Orchestration : Trivy + Dependency-Check + commentaire CVE automatique sur PR (cve-pr-comment) |
Secrets
| Action |
Description |
vault-secrets |
Secrets HashiCorp Vault (OIDC) — historique |
infisical-secrets |
Secrets Infisical (universal-auth machine identity) — recommandé |
Architecture secrets (validée 2026-08-12)
- Credentials Infisical = secrets Forgejo :
VAULT_URL, VAULT_CLIENT_ID, VAULT_CLIENT_SECRET
→ à déclarer au niveau organisation (ou par repo projet — les secrets d'un repo ne sont PAS accessibles depuis les workflows des autres repos).
- Secrets métier dans l'Infisical dédié :
SONARQUBE_URL, SONARQUBE_TOKEN, SONARQUBE_<PROJET>_PROJECT_KEY (ex. SONARQUBE_HEIMDALL_PROJECT_KEY — clé adaptée à chaque projet), variables Docker scopées par projet DOCKER_<PROJET>_TARGET (forgejo|dockerhub), DOCKER_<PROJET>_LOGIN, DOCKER_<PROJET>_PASSWORD (pas de fallback sur les anciens noms génériques DOCKER_REGISTRY/DOCKER_USERNAME/DOCKER_PASSWORD), REGISTRY_URL, REGISTRY_USER, REGISTRY_TOKEN, FORGEJO_TOKEN…
- Les builds : l'action
infisical-secrets s'authentifie avec les secrets Forgejo, exporte le projet Infisical, injecte dans $GITHUB_ENV.
- SonarQube : l'action
sonar-dotnet résout SONARQUBE_URL / SONARQUBE_TOKEN / SONARQUBE_<PROJET>_PROJECT_KEY depuis l'env (fallback anciens noms Vault SONAR_HOST_URL/SONAR_TOKEN) ; quality gate bloquant par défaut.
Exemple de workflow projet (bascule depuis Vault) :
- uses: ./.ci/.forgejo/actions/ci-full
with:
project: heimdall
secrets-provider: infisical # 'vault' (défaut historique) ou 'infisical'
infisical-domain: ${{ secrets.VAULT_URL }}
infisical-client-id: ${{ secrets.VAULT_CLIENT_ID }}
infisical-client-secret: ${{ secrets.VAULT_CLIENT_SECRET }}
infisical-project-id: <projectId Infisical CI>
# infisical-env: prod (défaut)
Infrastructure
| Action |
Description |
postgres-start |
PostgreSQL pour CI (mode LXC tmpfs + mode service container auto-détecté) |
setup-docker |
Install Docker CLI + Buildx (supporte DinD fallback) |
docker-build-push |
Buildx + cache registry + push multi-registre |
docker-login |
Login Docker Hub + Forgejo Registry (secrets via env vars) |
cleanup-safe |
Cleanup préservant les caches (NuGet, npm, dotnet-tools, Playwright) |
Langages
| Action |
Description |
setup-node |
Cache npm + npm ci |
setup-powershell |
Install Pester test framework |
setup-go |
Setup Go + cache |
setup-python |
Setup Python + cache pip |
checkout |
Git clone sans Node.js |
Qualité / Analyse
| Action |
Description |
sonar-dotnet |
SonarQube .NET : restore → build → test (coverage) → begin/end |
sonar-frontend |
SonarQube frontend via sonarqube-scan-action |
pr-agent |
AI code review via CodiumAI PR-Agent |
prettier-check |
npx prettier --check |
golangci-lint |
Go lint |
lint-python |
Python lint |
typecheck-python |
Python type check |
test-python |
Python tests |
test-report |
Rapport de tests Markdown (PowerShell/Pester) |
Publication
| Action |
Description |
docker-build-push |
Buildx + cache registry + push vers Docker Hub + Forgejo Registry |
goreleaser |
Go release |
renovate |
Renovate dependency updates |
deploy-docker-compose |
Déploiement docker-compose |
pr-comment |
Post commentaire sur PR |
Nouvelles actions (v2 — recommandées)
Ces actions sont les versions enrichies, issues des patterns communs à Heimdall, Njord et Sleipnir :
| Action |
Héritage |
Améliorations |
dotnet-build |
Fusion Njord + Heimdall |
+ injection de version, + multicpu |
dotnet-test-coverage |
Sleipnir |
+ tests parallèles, + Coverlet, + résumé |
postgres-start |
Heimdall |
+ mode LXC tmpfs + mode service container auto |
cleanup-safe |
Sleipnir |
+ préserve caches, + Docker safe, + rapport disque |
Mirrors GitHub
Les actions GitHub sont mirrorées dans .forgejo/mirror/ et synchronisées chaque semaine :
- uses: ./.forgejo/templates/mirror/actions-checkout@v4
Pour ajouter un nouveau mirror, éditez .forgejo/mirror-config.json :
{"repo":"actions/setup-python","ref":"v5","name":"actions-setup-python"}
Versionnage
Les actions et workflows utilisent @main pour la dernière version.
Taguez avec @v1, @v2 pour les releases stables.
Proxmox / LXC — GitOps Pipeline
| Action |
Description |
proxmox-auth |
Auth API Proxmox via credentials Vault (token + ticket) |
proxmox-list-lxc |
Liste les LXC cluster-wide (auto-discovery, gère les migrations) |
lxc-retrieve-files |
pct pull de fichiers depuis un LXC (compose, .env) |
lxc-deploy |
pct push + docker compose pull && up -d vers un LXC |
env-secret-extract |
Parse .env, stocke les secrets dans Vault (ci-infra), remplace par refs |
env-secret-inject |
Résout les refs vault:path#key → valeurs réelles pour déploiement |
Ces actions sont conçues pour fonctionner ensemble avec le workflow suivant :
steps:
- uses: ./.ci/.forgejo/actions/vault-auth
id: vault
with: { vault-url: "https://vault.tordais.cc", role: "infrastructures-ci" }
- uses: ./.ci/.forgejo/actions/proxmox-auth
id: proxmox
with: { vault-url, vault-token: "${{ steps.vault.outputs.token }}", cluster-name: "production" }
- uses: ./.ci/.forgejo/actions/proxmox-list-lxc
with: { proxmox-host, proxmox-token }
Modèle QA immutable
Le rapport QA des PR (plan, exécution, résultats, coverage, verdict) suit le modèle immutable .forgejo/templates/rapport-qa.md, posté en commentaire par the-qa sur chaque PR. Tout projet (présent ou futur) référence ce modèle — ne pas dupliquer.