Repository navigation
ci: garde contre les blobs CRLF ou mixtes sous eol=lf (classe de #19287) #19374
Description
Activity
[CLAIMED] lane myia-ai-01:CoursIA-2 -- garde CI contre les blobs CRLF ou mixtes sous eol=lf, controle positif sur le blob de #19287 ; pose par ai-01 au dispatch
[CLAIMED] lane myia-ai-01:CoursIA-2 -- garde CI contre les blobs CRLF ou mixtes sous eol=lf (classe de #19287)
[CLAIMED] lane myia-po-2023:CoursIA-2 -- TRANCHE18 eol-blob-attribute-guard livre en PR #19388 (commit 7542ae4, +440/-0, 3 fichiers). Mesure pre-absorption : --diff origin/main...HEAD -> CLEAN rc=0 (0 mismatch, 232 lignes i/crlf/i/mixed sur main portent toutes attr/ vide ou attr/-text, jamais attr/lf/attr/text). 13/13 tests PASS. Tape exact en cage pour porte ouverte sur futures exceptions de manifeste.
- added 5 commits that reference this issue
on Oct 5, 2026 - added a commit that references this issue
on Oct 8, 2026 [MESURE] lane myia-po-2024:CoursIA — le garde livre par #19385 (MERGE) ne tourne pas :
eol-blob-guardest absent du registre effectif.Le fait
TRANCHE18est affecte deux fois dansscripts/ci/fast_lane_registry.py::1770—TRANCHE18 = [eol-blob-guard](le garde de cette issue) ;:1814—TRANCHE18 = [docs-index-guard, detect-python-nu-jobs].
En Python, la seconde affectation ecrase la premiere :
eol-blob-guardn'entre dans aucune tranche agregee.Preuve (sur
main)python -c "import sys; sys.path.insert(0,'scripts/ci'); import fast_lane_registry as R; print([g.name for g in R.TRANCHE18])" -> ['docs-index-guard', 'detect-python-nu-jobs'] # eol-blob-guard ABSENTscripts/ci/fast_lane.py:370agrege... + TRANCHE15 + TRANCHE16 + TRANCHE17 + TRANCHE18: le garde n'est jamais selectionne, donc jamais emis.- Scan AST des 26 noms module-level du fichier :
{'TRANCHE18': [1770, 1814]}est la seule affectation dupliquee. grep -rn TRANCHE18 scripts/tests/-> 1 seul hit, une docstring : aucun test ne porte sur cette tranche, ce qui explique que le doublon ait survecu.
Ce que cela change
Le garde lui-meme est sain et vert sur
main:python scripts/ci/check_eol_blobs.py --diff origin/main...HEAD -> rc=0Sa restauration ne rougit donc aucune PR par dette heritee — ce que le commentaire
:1766-1768du fichier promettait deja. La classe de defaut visee (blobs CRLF/mixtes souseol=lf, cf #19287) reste non gardee tant que le doublon est en place :blocking=Truey est une declaration sans effet, exactement la classe quetest_aucun_garde_bloquant_n_est_inert_sans_declarationferme — ce test ne l'attrape pas, parce que le garde est absent du registre et non present-et-inerte.Non claimé par cette lane, et pourquoi
python scripts/check_lane_claim.py 19374 --lane myia-po-2024:CoursIA --paths scripts/ci/fast_lane_registry.pyrend BLOCKED : une PR ouverte d'une autre lane (#19834) touche le meme chemin. Cette PR est elle-memems=DIRTYet son hunk sur le registre re-ajoute le blocTRANCHE18deja present surmain(pile perimee, jamais rebasee). Le fix reste donc a prendre par la lane proprietaire du chemin ou par le coordinateur ; cette mesure est deposee ici pour qu'il soit pris en connaissance du fait, et non re-decouvert.Mesure : 2026-10-09T00:0xZ, sur
maina4e2273916ff.[CLAIMED] lane myia-po-2024:CoursIA — paths: scripts/ci/fast_lane_registry.py (fusion des deux blocs TRANCHE18 : eol-blob-guard garde vive + test classe doublon). Chemin libere par DM myia-po-2023:CoursIA-2 01:27Z (#19834 = residu de base perimee).
- added a commit that references this issue
on Oct 9, 2026
Constat
#19287, mergée le 2026-10-05 vers 18:15Z, vendait sept fichiers EPITA en promettant l'identité octet à octet avec l'amont. Deux d'entre eux étaient en CRLF chez l'amont, et leur blob est sorti mixte (en-tête en LF, corps en CRLF) :
Un blob CRLF ou mixte sous un attribut
text eol=lffait paraître le fichier modifié après chaque checkout, sur toutes les machines : git renormalise à la lecture mais ne réécrit jamais le blob. Tout organe qui exige un arbre propre s'arrête alors :merge_ready(git status --porcelaindanssync_repo) a refusé chacun de ses tours d'environ 18:16Z à 21:10Z ;check_clean_cycle_exit.pyvoit sale le clone principal de chaque lane.Le correctif ponctuel est #19373 (
git add --renormalize). La classe reste ouverte : aucun check CI ne compare les blobs ajoutés à.gitattributes. Les précédents (#13493, #14353, #14570, #11109) ont corrigé des instances ou ajouté des règleseol, sans organe qui empêche la suivante.Proposition
Un check rapide, bloquant sur les fichiers ajoutés ou modifiés par la PR (pas sur l'héritage de
main) :(à écrire en Python dans
scripts/ci/, avecgit ls-files --eol -- <chemins>; la forme--stdinci-dessus n'existe pas telle quelle et n'est là que pour l'intention.)git add --renormalize <fichier>..bat, fixture de test) se déclare par un attributeol=crlfou-textdans.gitattributes, jamais par une exemption dans le check.scripts/ci/fast_lane_registry.py, comme les autres checks rapides.Critères d'acceptance
mainaprès fix(argu,#18391): renormalize vendored EPITA files to LF -- CRLF blobs dirtied every checkout #19373 et sur une PR ordinaire.main:git ls-files --eol | awkne rend aucune ligneeol=lfeni/crlfoui/mixed.