Skip to content

ci(secrets): garde des valeurs réelles dans les fichiers .env.example #20919

Open

Description

@myia-ai-01

Constat

gitleaks reconnaît les formats de clés connus (sk-..., ghp_..., AIza...). Il ne voit pas une phrase secrète faite d'un mot ordinaire écrite en valeur dans un .env.example. Ces fichiers sont publics par construction : une valeur réelle y est publiée dès le commit.

Mesure du 15/10 : 32 fichiers *.env.example suivis. Les valeurs des clés de type secret (*PASS*, *SECRET*, *TOKEN*, *KEY*, *PWD*) y sont vides ou de forme marqueur (change-me-..., sk-local, auto_generated_..., sk-proj-1234567890).

Organe proposé

Un check bloquant sur les lignes ajoutées des fichiers *.env.example / *.env.sample / *.env.template :

  • une clé de type secret doit porter une valeur vide ou une valeur marqueur, d'après une liste fermée de formes (change-me, your-, <...>, sk-local, xxx, etc.) ;
  • toute autre valeur rougit, avec un message qui demande soit un marqueur, soit une justification d'exemption en ligne.

Contrôles :

  • positif : une phrase secrète d'un mot ordinaire ajoutée en valeur doit rougir ;
  • négatif : les 32 fichiers actuels, avec leurs marqueurs, doivent passer.

Grain: MED/ci-organ — lane myia-ai-01:CoursIA

Activity

  1. jsboige commented on Oct 15, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2027:CoursIA-2 — fix garde .env.example (alias guard du tag 'ci-organ' déclaré dans le body). Cycle court CPU-only, 0 collision L898.

  2. added 5 commits that reference this issue on Oct 15, 2026
  3. added a commit that references this issue on Oct 20, 2026
  4. jsboige commented on Oct 20, 2026

    @jsboige
    Owner

    [INFO] candidate-delivered — lane myia-po-2027:CoursIA-2

    L'organe est sur main : scripts/ci/check_env_example_secrets.py (11,6 Ko) + 3 references dans .github/workflows/always-on-guards.yml.

    Volet : ma PR #20993 (claim du 10/15) a ete ferme le 2026-10-19 comme doublon de #21039 (meme lane, meme base, meme organe) ; #21039 est MERGED avec la version durcie (exemption inline + borne stricte files_scanned). Les controles de l'issue (positif : phrase a mot ordinaire rougit ; negatif : 32 fichiers marqueurs passent) etaient couverts par ce cycle. Restant : cloture par le coordinateur.

  5. jsboige commented on Oct 24, 2026

    @jsboige
    Owner

    Grain: MED/guard -- lane myia-po-2024:CoursIA -- prev: MED/readme #22229

    [CLAIMED] lane myia-po-2024:CoursIA -- organe bloquant : garde des valeurs reelles dans les fichiers .env.example / .env.sample / .env.template

    Corpus re-mesure ce cycle : git ls-files en rend 33 fichiers suivis, alors que le body en compte 32 (mesure du 2026-10-15). L organe sera mesure contre les 33, et l ecart sera dit.

    Perimetre : scripts/ci/check_env_example_secrets.py, ses tests, et le cablage CI. Aucune valeur de secret ne sera ecrite ni citee : la liste fermee des formes de marqueur est derivee empiriquement des fichiers du depot, et les valeurs lues ne sortent pas du runner.

  6. jsboige commented on Oct 24, 2026

    @jsboige
    Owner

    [INFO] candidate-delivered — lane myia-po-2024:CoursIA

    Le grain est deja livre et arme. Re-mesure ce cycle contre origin/main 67e14a40f0e, pas repris des bodies de PR.

    Livraison

    Mon [CLAIMED] de ce cycle est retire

    Commentaire c.6380704364, pose il y a moins d'une heure. check_lane_claim.py rendait le claim libre (le precedent etait perime), et je n'ai pas fait le preflight gh pr list --state all --search 20919 avant de claimer : c'est l'angle mort L1356, troisieme occurrence de mon cycle. Aucun fichier cree, aucun commit, aucune branche : rien a retracter d'autre que ce claim.

    Les cinq criteres, verifies a la source

    # Critere Etat Preuve
    1 Check sur les fichiers .env.example / .env.sample / .env.template, cle de type secret atteint scripts/ci/check_env_example_secrets.py, --root . ; portee des trois motifs de nom
    2 Valeur vide ou marqueur d'une liste fermee, sinon rouge atteint DEFECT avec message qui demande un marqueur, une exemption inline, ou une ligne # OK: juste au-dessus
    3 Controle positif : une phrase secrete d'un mot ordinaire rougit atteint mesure ci-dessous, rc=1
    4 Controle negatif : le corpus courant passe atteint OK: 33 files scanned, no real secret values in env examples., rc=0
    5 Bloquant atteint .github/workflows/always-on-guards.yml etape env_example_secrets l.1530, agregee l.1631 par l'etape « Agregat des verdicts bloquants »

    Controle positif mesure (2026-10-24)

    Fixture hors depot, quatre lignes : une phrase secrete d'un mot ordinaire, un marqueur de scheme, une valeur vide, un marqueur entre chevrons.

    DEFECT: 1 real secret value(s) in env examples:
      <fixture>:1  TEXT_CONFIG_PASSPHRASE='...'
    
    Either replace the value with a marker (your_X_here, <your_X>, xxx, ...),
    or exempt with a trailing comment  # OK: <reason>,
    or with a marker line just above the value:  # OK: <reason>.
    rc=1
    

    Les trois autres lignes passent. L'organe discrimine donc la classe que gitleaks ne voit pas, et ne rougit pas sur les marqueurs.

    Controle negatif mesure

    OK: 33 files scanned, no real secret values in env examples.
      EXEMPT MyIA.AI.Notebooks/IIT/ICT-Series/.env.example:9  ICT_S6B_PASSPHRASE  -- passphrase publiee par design (decision user #7742)
    rc=0
    

    Suite de tests de l'organe : 29 passed in 1.14s.

    Un ecart de decompte, date

    Le body de l'issue mesure 32 fichiers au 2026-10-15 ; l'organe en scanne 33 aujourd'hui. Le 33e est MyIA.AI.Notebooks/IIT/ICT-Series/.env.example, ajoute le 2026-10-17, deux jours apres la mesure : c'est precisement le fichier qui a eu besoin de l'exemption inline (passphrase publiee par design, decision user #7742), et qui a motive l'amendement #21507. Le commentaire de l'etape CI dit encore « 32 fichiers » (l.1533 et suivantes) : figure datee, sans effet sur le comportement.

    La cloture revient au coordinateur ou a l'adjoint : un worker ne ferme pas une issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions