Reusable templates for forgejo builds
  • TypeScript 61.8%
  • Shell 18.2%
  • JavaScript 16.6%
  • Python 3.2%
  • Dockerfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Arnaud Dartois f23321e5a7 fix(ci): sonar-dotnet attend OK/ERROR (NONE = CE pas encore traité, transitoire) ; pr-agent skip si Python < 3.12 (Debian 12 = 3.11, review IA non bloquante)
- sonar-dotnet : gate check cassait sur NONE 8s après la fin d'analyse (runs sleipnir 2062/2178) → 30 itérations × 5s, ne break que sur OK/ERROR réel.
- pr-agent : pip exige Python >=3.12, runner Debian 12 fournit 3.11.2 → step d'install échouait et rougissait le job (PR Givarr #11). Skip avec warning si < 3.12.
2026-08-15 02:41:48 +02:00
.forgejo fix(ci): sonar-dotnet attend OK/ERROR (NONE = CE pas encore traité, transitoire) ; pr-agent skip si Python < 3.12 (Debian 12 = 3.11, review IA non bloquante) 2026-08-15 02:41:48 +02:00
scripts feat(scripts): scripts d'installation/upgrade d'agent consolidés des 3 LXC (#11) 2026-08-14 16:06:18 +02:00
README.md feat(qa): modèle de rapport QA immutable (the-qa) sur les PR (#7) 2026-08-14 14:43:33 +02:00

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.