Aller au contenu

2026-06-22 — OpenSSF Best Practices Badge : answer-sheet « passing »

ChampContenu
Date2026-06-22
Typefeuille de réponses opérationnelle — pour remplir le questionnaire passing du badge sur best.openssf.org (BadgeApp)
Fondeles quick-wins maturité de juin 2026 (Scorecard 4.9 → 6.4) + la migration doc Astro Starlight (ADR 0089)
Verdictpassing atteignable : ~50 Met, ~12 N/A légitimes, 0 Unmet. discussion Met (Discussions activées) ; english Met (encarts anglais README/CONTRIBUTING/SECURITY).
  1. Créer le projet sur https://www.bestpractices.dev/ (connexion GitHub, dépôt univ-lehavre/cluster). Le BadgeApp auto-remplit beaucoup de critères via l’API GitHub.
  2. Pour chaque critère ci-dessous : recopier la réponse (Met / N/A) et coller la justification + l’URL de preuve. Plusieurs critères exigent une URL (champ obligatoire dans le BadgeApp) : toute mention fichier.md ci-dessous se traduit en URL par la base https://github.com/univ-lehavre/cluster/blob/main/ + le chemin.
  3. Les critères marqués N/A sont légitimement non applicables (dépôt d’IaC, pas de cryptographie maison) — le badge les compte comme satisfaits dès lors que la justification est fournie.
CritèreURL à coller (préfixe https://github.com/univ-lehavre/cluster/)
contributionblob/main/CONTRIBUTING.md
contribution_requirementsblob/main/CONTRIBUTING.md#workflow-de-pr
documentation_basicsblob/main/bootstrap/RUNBOOK.md
documentation_interfaceblob/main/contract/README.md
vulnerability_report_processblob/main/SECURITY.md
report_processblob/main/.github/ISSUE_TEMPLATE/bug_report.md
static_analysisblob/main/.github/workflows/codeql.yml
test_policyblob/main/docs/architecture/plan-de-tests.md
sites_httpshttps://univ-lehavre.github.io/cluster/
discussionhttps://github.com/univ-lehavre/cluster/discussions

Discipline d’honnêteté (ADR 0061/0080). Aucun critère n’est coché « pour le badge » : chaque ligne cite une preuve réelle. Les N/A crypto reflètent que le dépôt consomme du TLS standard (cert-manager) sans implémenter d’algorithme.

CritèreRéponseJustification / preuve
description_goodMetREADME (# Cluster) + description repo « Installateur et réconciliateur sur kubernetes » + site doc.
interactMetREADME « Par où commencer », CONTRIBUTING.md, issue templates, GitHub Discussions activées.
contributionMetCONTRIBUTING.md : process (branches, Conventional Commits, hooks, merge commit ADR 0037).
contribution_requirementsMetExigences d’acceptation dans CONTRIBUTING.md § « Workflow de PR » (sujet minuscule, ≤100 col, hooks pre-push, merge commit). URL : CONTRIBUTING.md#workflow-de-pr
floss_licenseMetLICENSE = MIT (FLOSS).
floss_license_osiMetMIT = OSI-approved.
license_locationMetLICENSE + NOTICE à la racine.
documentation_basicsMetInstall (bootstrap/RUNBOOK.md), usage (docs/se-brancher.md), sécurité (SECURITY.md, SAFEGUARDS.md).
documentation_interfaceMetContrat versionné contract/ (endpoints, StorageClasses) + docs/guide-dev-data.md.
sites_httpsMetSite doc HTTPS (GitHub Pages, Astro Starlight depuis ADR 0089) ; repo GitHub HTTPS.
discussionMetGitHub Discussions activées (hasDiscussionsEnabled: true) + issue tracker public searchable.
englishMetEncart anglais (« English summary ») dans README.md + notes anglaises dans CONTRIBUTING.md et SECURITY.md : issues, PR et rapports de sécurité en anglais acceptés. La doc de fond reste française (langue de l’équipe).
maintainedMetActivité quotidienne (releases régulières, issues traitées sous quelques jours).
CritèreRéponseJustification / preuve
repo_publicMetDépôt public versionné git.
repo_trackMetGit suit changements, auteurs, horodatages.
repo_interimMetBranches PR + merge commit (ADR 0037) préservent les versions intermédiaires.
repo_distributedMetGit (distribué).
version_uniqueMetTags SemVer uniques (vX.Y.Z).
version_semverMetSemVer via release-please.
version_tagsMetReleases identifiées par tags.
release_notesMetCHANGELOG.md (Keep a Changelog) + GitHub Releases, générés par release-please.
release_notes_vulnsMetPas de CVE publique corrigée à ce jour ; les fix: (sécurité incluse) sont au changelog.
CritèreRéponseJustification / preuve
report_processMet.github/ISSUE_TEMPLATE/ (bug, feature, config).
report_trackerMetGitHub Issues utilisé activement.
report_responsesMetMainteneur réactif (issues ouvertes/fermées sous quelques jours).
enhancement_responsesMetfeature_request.md + issues d’amélioration traitées.
report_archiveMetIssues GitHub publiques et searchable.
vulnerability_report_processMetSECURITY.md publié, lié au repo.
vulnerability_report_privateMetGitHub Private Vulnerability Reporting + e-mail mainteneur (SECURITY.md).
vulnerability_report_responseMetDélai de réponse visé documenté (SECURITY.md).
CritèreRéponseJustification / preuve
buildN/AIaC : pas de compilation. « Build » = build doc Astro (docs.yml) + validation manifestes (kubeconform).
build_common_toolsMetpnpm, uv, ansible, kubeconform, Astro (outils standards).
build_floss_toolsMetToute la chaîne est FLOSS.
testMetSuite FLOSS : bats (bench/unit/, 10 fichiers), pytest/unittest (tests/, 31 fichiers), scénarios e2e.
test_invocationMetpnpm test:shell, pnpm test:python (unittest discover).
test_mostMetLarge couverture : ~31 fichiers pytest + 10 suites bats + 31 scénarios e2e.
test_continuous_integrationMetCI GitHub Actions sur chaque push/PR (ci.yml).
test_policyMetPolitique documentée (docs/architecture/plan-de-tests.md, ADR 0045).
tests_are_addedMetTests ajoutés avec les features (ex. property-based ADR 0087, gitops-assert.bats).
tests_documented_addedMetplan-de-tests.md + section Tests de CONTRIBUTING.md.
warningsMetLinters stricts en CI : ruff, shellcheck, yamllint, ansible-lint, markdownlint, kubeconform -strict.
warnings_fixedMet12 checks bloquants requis sur main (strict, enforce_admins).
warnings_strictMetkubeconform -strict, jscpd ≤5%, ruff format --check global, CodeQL security-and-quality.
CritèreRéponseJustification / preuve
know_secure_designMetModèle de menace explicite + compromis tracés en ADR (SECURITY.md, SAFEGUARDS.md).
know_common_errorsMetgitleaks (secrets), CodeQL (SAST), trivy (IaC), Scorecard.
crypto_publishedN/APas de crypto maison ; TLS standard via cert-manager.
crypto_callN/AAucun appel crypto direct dans le code (IaC).
crypto_flossN/APas de fonctionnalité crypto propre ; briques FLOSS (cert-manager, etcd).
crypto_keylengthN/APas de génération de clés par le projet ; cert-manager gère.
crypto_workingN/AAucun algorithme crypto implémenté.
crypto_weaknessesN/AIdem.
crypto_pfsN/APas de négociation de clé maison ; TLS délégué.
crypto_password_storageN/APas de stockage de mot de passe applicatif (RStudio sans auth ADR 0012, registry HTTP ADR 0011, mono-tenant isolé).
crypto_randomN/APas de génération de clés/nonces par le projet.
delivery_mitmMetGit/HTTPS + images épinglées par digest (ADR 0006) + checksums vérifiés (gitleaks).
delivery_unsignedMetTéléchargements via HTTPS + vérif checksum.
vulnerabilities_fixed_60_daysMetRenovate (pinDigests) + Scorecard ; les vulns transitives VitePress sont éteintes par la migration Astro (ADR 0089).
vulnerabilities_critical_fixedMetRenovate + Scorecard + délai SECURITY.md.
no_leaked_credentialsMetValeurs d’exemple génériques (ADR 0023) ; gitleaks scanne l’historique ; vraies valeurs en config locale gitignorée.
CritèreRéponseJustification / preuve
static_analysisMetCodeQL (Python, codeql.yml) + trivy (IaC) + ruff + shellcheck + ansible-lint + kubeconform.
static_analysis_common_vulnerabilitiesMetCodeQL security-and-quality + trivy HIGH/CRITICAL + gitleaks.
static_analysis_fixedMettrivy bloque HIGH/CRITICAL (compromis ciblés justifiés dans .trivyignore.yaml).
static_analysis_oftenMetÀ chaque push/PR + cron hebdo (CodeQL, Scorecard).
dynamic_analysisMetBanc e2e Lima : 31 scénarios (résilience, sécu active, chaos) ; property-based (ADR 0087).
dynamic_analysis_unsafeN/APas de langage memory-unsafe (Python/bash/YAML).
dynamic_analysis_enable_assertionsMetGates bloquants à chaque phase du banc (bench/lima/run-phases.sh).
dynamic_analysis_fixedMetÉcarts e2e indexés (registre des drifts) puis corrigés dans le code (ADR 0046/0052).
  • Met : ~49 · N/A : ~12 · Unmet : 1. Le badge passing ignore les N/A justifiés → il ne reste qu’un critère à traiter.
  • english (SHOULD) — le seul manque. Deux voies :
    1. cocher Met en justifiant (« projet académique francophone ; issues et rapports de sécurité en anglais acceptés ») — suffisant pour un SHOULD ;
    2. (mieux) ajouter un encart anglais dans README.md + une mention dans CONTRIBUTING.md/SECURITY.md. Effort ~30 min.

Au-delà de passing (utile pour silver/gold) : signatures GPG vérifiées, branch protection stricte (enforce_admins), CodeQL + Scorecard + trivy + gitleaks, CITATION.cff + DOI, CODEOWNERS, permissions GITHUB_TOKEN au moindre privilège, images épinglées par digest, releases signées (cosign + SLSA, ADR 0088).