Repository navigation
fix: skip env templates by suffix, not by exact name - #42
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
gwt sync-envrecopiait des fichiers versionnés par-dessus la branche.Le défaut
L'exclusion se faisait par nom exact :
Donc
.env.tplétait protégé, mais.env.development.tplnon — et c'est la forme que les vrais dépôts utilisent. Ces fichiers sont suivis par git : leur contenu appartient à la branche. Recopier la version du worktree principal par-dessus une branche qui vient d'en modifier un produit ungit statusque personne n'a demandé.Sur un monorepo qui nomme ses gabarits par environnement, ça fait 44 fichiers concernés.
Le correctif
Vérification sur le suffixe, plus sur le nom :
.env,.env.local,.env.development.env.tpl,.env.example,.env.test.env.development.tpl.env.production.tpl.env.development.local.tpl.env.development.example.env.test.localQuatre lignes changent de comportement, et
.env.test.localgarde le sien : c'est une surcharge locale, pas un gabarit versionné.Le test assertait la liste, pas la propriété
C'est ce qui a laissé passer le défaut :
Les cinq noms exacts passaient, donc le test était vert — alors que la propriété visée est « un fichier versionné n'est jamais recopié », et
.env.development.tplla viole par n'importe quel jugement, y compris celui de git. Le test couvre maintenant les formes préfixées ; réintroduire l'ancien filtre le fait échouer.Internal
actions/checkoutetactions/setup-nodepassent de v4 à v7 — fin de l'avertissement de dépréciation Node 20 sur les runners.Détail utile pour la suite :
setup-nodev7 supprime le dummyNODE_AUTH_TOKENexport, précisément ce qui faisait renvoyer E401 àregistry-urlface au trusted publisher npm. Le contournement (ne pas mettreregistry-url) n'est donc plus porteur — il reste en place, le chemin de publication fonctionne.Et le taux de collision des couleurs est 8,8 %, mesuré sur 20 000 tirages. Le code disait huit pour cent à un endroit et une sur quatorze à un autre ; l'entrée 0.8.3 dit sept. Le premier était le plus proche. Les commentaires et le test portent maintenant le chiffre mesuré.
Et la liste de suffixes reste une supposition
Question posée en revue : « c'est générique ? quelqu'un d'autre a peut-être un système différent ». Elle est juste.
Un dépôt qui versionne
.env.defaults— aucun suffixe de gabarit — avait le même bug sous une autre forme. La règle que la liste approximait est plus simple, et ne demande aucune configuration :planEnvSyncmarque donctrackedtout fichier que git suit dans la destination — c'est là qu'un diff parasite apparaîtrait — etsync-envannonce combien il a laissés. Les suffixes restent par-dessus, parce qu'ils portent une intention que l'index ne connaît pas : un.env.examplenon versionné reste un exemple.Un piège mesuré
La consultation est un
git ls-filesscopé par pathspec. Délibérément : un listing nu sort 1,09 Mo sur un gros monorepo, au-dessus dumaxBufferpar défaut d'execFileSync— contre 1,7 Ko scopé. La version naïve échouait sur le dépôt qui a révélé le bug.Vérifié, pas déduit
Sur le monorepo concerné, 68 fichiers
.env*: 40 suivis par git → tous exclus, 28 non suivis → tous copiés. Zéro du mauvais côté, dans les deux sens. Unsync-env --allen dry-run annonce 112 fichiers sur 4 worktrees, soit 28 chacun, et pas un.tpl.Et les deux nouveaux tests échouent si on retire la garde — vérifié en neutralisant l'appel dans le build :
165 tests.