@mcptoolshop/housekeeping 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.es.md +125 -78
- package/README.fr.md +119 -114
- package/README.hi.md +74 -78
- package/README.it.md +117 -75
- package/README.ja.md +82 -79
- package/README.md +2 -0
- package/README.pt-BR.md +87 -69
- package/README.zh.md +72 -89
- package/housekeeping.config.example.json +2 -1
- package/package.json +1 -1
- package/src/cli.mjs +85 -2
- package/src/collect.mjs +74 -4
- package/src/config.mjs +13 -4
- package/src/load.mjs +55 -3
- package/src/schema.sql +26 -0
- package/src/workflow-risks.mjs +35 -2
package/README.fr.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">
|
|
2
|
+
<a href="README.md">English</a> | <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
@@ -21,51 +21,53 @@
|
|
|
21
21
|
<a href="https://mcp-tool-shop-org.github.io/housekeeping/handbook/"><img src="https://img.shields.io/badge/Handbook-read-blue" alt="Handbook" /></a>
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
|
-
Une seule analyse collecte l’état des CI de chaque dépôt, les problèmes ouverts et les demandes de fusion,
|
|
24
|
+
Une seule analyse collecte l’état des CI de chaque dépôt, les problèmes ouverts et les demandes de fusion,
|
|
25
|
+
les versions, les étiquettes de version, les fichiers de workflow, la protection des branches, les alertes de sécurité,
|
|
26
|
+
les fichiers de verrouillage et la facturation d’Actions dans SQLite, puis effectue une vérification de l’ensemble en fonction des règles définies.
|
|
25
27
|
|
|
26
28
|
Il répond, pour l’ensemble de l’organisation, aux questions suivantes :
|
|
27
29
|
|
|
28
30
|
- Quelles sont les branches par défaut qui présentent des problèmes, et s’agit-il d’une branche principale défectueuse ou d’un historique obsolète ?
|
|
29
|
-
- Quelles sont les demandes de fusion qui ne
|
|
31
|
+
- Quelles sont les demandes de fusion qui ne peuvent jamais être fusionnées, car une vérification requise qui ne renvoie aucune donnée les bloque-t-elle ?
|
|
30
32
|
- Quels sont les déploiements que les paramètres du dépôt refusent ?
|
|
31
|
-
- Où `package.json`, les étiquettes Git et le registre npm
|
|
32
|
-
- Quels sont les
|
|
33
|
-
- Quels sont les dépôts qui contiennent des avis que le
|
|
33
|
+
- Où `package.json`, les étiquettes Git et le registre npm divergent-ils ?
|
|
34
|
+
- Quels sont les workflows qui enfreignent les règles de coût d’Actions, quel a été leur coût et quelles tâches ont consommé ces ressources ?
|
|
35
|
+
- Quels sont les dépôts qui contiennent des avis que le nombre d’alertes de GitHub ne prend pas en compte ?
|
|
34
36
|
|
|
35
|
-
Il s’agit d’un outil d’audit, et non d’un
|
|
37
|
+
Il s’agit d’un outil d’audit, et non d’un outil de correction. Il lit GitHub et ne modifie rien.
|
|
36
38
|
|
|
37
39
|
## Un agent pour chaque dépôt
|
|
38
40
|
|
|
39
|
-
Une organisation comptant des dizaines de dépôts n’a pas d’emplacement unique où sont stockées ses données. housekeeping est cet emplacement, et son serveur MCP, `hk-mcp`, transmet
|
|
41
|
+
Une organisation comptant des dizaines de dépôts n’a pas d’emplacement unique où sont stockées ses données. housekeeping est cet emplacement, et son serveur MCP, `hk-mcp`, les transmet à un agent d’IA. Grâce à lui, un seul agent peut agir en tant que coordinateur pour l’ensemble de l’organisation :
|
|
40
42
|
|
|
41
|
-
1. **Analyse.** `hk refresh` effectue une
|
|
42
|
-
2. **Tri.** L’agent demande
|
|
43
|
-
3. **Planification d’une vague.** Une
|
|
44
|
-
4. **Réalisation des tâches.** housekeeping n’écrit jamais. L’agent ouvre des demandes de fusion avec ses propres outils,
|
|
45
|
-
5. **Vérification.** Nouvelle analyse.
|
|
43
|
+
1. **Analyse.** `hk refresh` effectue une capture instantanée de chaque dépôt.
|
|
44
|
+
2. **Tri.** L’agent demande ce qui présente des problèmes, ce qui est bloqué et ce qui s’est aggravé, et obtient des réponses qui permettent déjà de distinguer une branche principale défectueuse d’un historique obsolète, et une demande de fusion bloquée d’une demande en conflit.
|
|
45
|
+
3. **Planification d’une vague.** Une requête `hk_sql` trouve tous les dépôts qui ont la même structure, de sorte qu’une correction devient une demande de fusion par dépôt au lieu d’une recherche.
|
|
46
|
+
4. **Réalisation des tâches.** housekeeping n’écrit jamais. L’agent ouvre des demandes de fusion avec ses propres outils, sous ses propres autorisations et sous votre contrôle.
|
|
47
|
+
5. **Vérification.** Nouvelle analyse. Le problème est résolu ou non, et la différence entre deux captures instantanées est une requête.
|
|
46
48
|
|
|
47
|
-
Questions auxquelles un agent répond en
|
|
49
|
+
Questions auxquelles un agent répond en un ou deux échanges :
|
|
48
50
|
|
|
49
51
|
- Quelles sont les branches par défaut qui présentent des problèmes, et quelle tâche et quelle étape sont à l’origine du problème ?
|
|
50
|
-
- Quelles sont les demandes de fusion qui ne
|
|
52
|
+
- Quelles sont les demandes de fusion qui ne peuvent jamais être fusionnées, et est-ce le déclencheur ou un conflit qui en est la cause ?
|
|
51
53
|
- Quels sont les dépôts qui contiennent un avis de production pour lequel GitHub n’affiche aucune alerte ?
|
|
52
|
-
- Quels sont les
|
|
53
|
-
- Quel a été le coût d’Actions, et quelle tâche a
|
|
54
|
+
- Quels sont les workflows planifiés qui enfreignent les règles relatives aux plannings, et comment ?
|
|
55
|
+
- Quel a été le coût d’Actions, et quelle tâche a consommé ces ressources ?
|
|
54
56
|
- Qu’est-ce qui a changé depuis la dernière analyse ?
|
|
55
57
|
|
|
56
58
|
| Outil | Ce à quoi il répond |
|
|
57
59
|
|---|---|
|
|
58
|
-
| `hk_summary` | Totaux pour la dernière analyse : dépôts, problèmes, demandes de fusion,
|
|
59
|
-
| `hk_findings` | Résultats par code, gravité, catégorie ou dépôt ; nombre par code lorsque les résultats ne sont pas filtrés. Le résultat d’une branche principale
|
|
60
|
-
| `hk_ci` | Dépôts dont la branche par défaut présente des problèmes et
|
|
61
|
-
| `hk_repo` | Un dépôt en
|
|
60
|
+
| `hk_summary` | Totaux pour la dernière analyse : dépôts, problèmes, demandes de fusion, workflows, résultats. |
|
|
61
|
+
| `hk_findings` | Résultats par code, gravité, catégorie ou dépôt ; nombre par code lorsque les résultats ne sont pas filtrés. Le résultat d’une branche principale rouge indique la tâche et l’étape qui ont causé le problème. |
|
|
62
|
+
| `hk_ci` | Dépôts dont la branche par défaut présente des problèmes et workflows ayant échoué ; également, plannings ayant échoué, branches de demandes de fusion ayant échoué et dépôts sans CI. |
|
|
63
|
+
| `hk_repo` | Un dépôt en entier : résultats, workflows, demandes de fusion et problèmes ouverts. |
|
|
62
64
|
| `hk_backlog` | Demandes de fusion ou problèmes ouverts dans l’ensemble de l’organisation, du plus ancien au plus récent. |
|
|
63
|
-
| `hk_health` | Un score de santé par dépôt, du
|
|
64
|
-
| `hk_cost` | Dépenses d’Actions par dépôt,
|
|
65
|
-
| `hk_sql` | Une seule instruction `SELECT` ou `WITH` en lecture seule par rapport à l’entrepôt
|
|
65
|
+
| `hk_health` | Un score de santé par dépôt, du plus mauvais au meilleur. |
|
|
66
|
+
| `hk_cost` | Dépenses d’Actions par dépôt, workflow ou tâche, en brut et en net. |
|
|
67
|
+
| `hk_sql` | Une seule instruction `SELECT` ou `WITH` en lecture seule par rapport à l’entrepôt. |
|
|
66
68
|
| `hk_schema` | Les tables et les colonnes, pour écrire des requêtes `hk_sql`. |
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
Chaque réponse provient de la dernière capture instantanée, ouverte en lecture seule. Un appel ayant échoué renvoie une erreur structurée, et non une trace de pile.
|
|
69
71
|
|
|
70
72
|
### Connectez-le
|
|
71
73
|
|
|
@@ -78,44 +80,47 @@ Toute réponse provient de la dernière analyse, ouverte en lecture seule. Une r
|
|
|
78
80
|
}
|
|
79
81
|
```
|
|
80
82
|
|
|
81
|
-
`HK_HOME` est le répertoire à partir duquel vous effectuez l’analyse. À partir d’un clone, utilisez `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. Le deuxième serveur est [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas), qui répond aux mêmes questions concernant un seul dépôt
|
|
83
|
+
`HK_HOME` est le répertoire à partir duquel vous effectuez l’analyse. À partir d’un clone, utilisez `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. Le deuxième serveur est [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas), qui répond aux mêmes questions concernant un seul dépôt (voir ci-dessous). Sous Windows, démarrez une commande installée globalement via `cmd /c`.
|
|
82
84
|
|
|
83
85
|
## housekeeping et Atlas
|
|
84
86
|
|
|
85
|
-
[Atlas]
|
|
87
|
+
[Atlas] https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas
|
|
88
|
+
`@dogfood-lab/atlas` mappe un seul dépôt : ses composants et ses points d’accès, ce qui signifie
|
|
89
|
+
chaque flux de travail, y compris ce qu’il exécute, publie et déploie. La carte est enregistrée
|
|
90
|
+
sous la forme `atlas/` et vérifiée dans le cadre de l’intégration continue. La gestion est la vue d’ensemble de l’organisation. Les deux
|
|
91
|
+
sont conçus pour fonctionner ensemble.
|
|
86
92
|
|
|
87
|
-
- **Chaque carte, analysée.** Une analyse lit la carte
|
|
88
|
-
- **Où une exécution
|
|
89
|
-
- **
|
|
90
|
-
- **Avertissements dans l’ensemble du parc.** Atlas signale une étape de
|
|
93
|
+
- **Chaque carte, analysée.** Une analyse lit la carte enregistrée de chaque dépôt, ainsi que tous les autres éléments, et signale quels sont les dépôts qui n’en ont pas, lesquels n’exécutent jamais `atlas check` et lesquels utilisent une version différente de celle que le reste de l’organisation utilise.
|
|
94
|
+
- **Où une exécution rouge a échoué.** Lorsqu’une branche par défaut présente des problèmes, le résultat indique la tâche et l’étape qui ont échoué et, via la carte, la commande que cette étape exécute, de sorte que la correction commence dans le bon fichier.
|
|
95
|
+
- **Faits de déploiement à partir de la carte.** L’environnement vers lequel une tâche se déploie est extrait de la carte où il est enregistré, de sorte que les deux outils lisent un workflow de la même manière.
|
|
96
|
+
- **Avertissements dans l’ensemble du parc.** Atlas signale une étape de workflow qui échouera avant son exécution, comme un outil qui nécessite une version d’exécution plus récente que celle installée par la tâche. Le rapport les répertorie pour tous les dépôts en même temps.
|
|
91
97
|
|
|
92
|
-
Un agent
|
|
98
|
+
Un agent disposant des deux serveurs passe de « ces douze dépôts sont bloqués » (housekeeping) à « il s’agit du workflow, de la tâche et des fichiers qu’une modification affectera » (Atlas), sans avoir à ouvrir chaque dépôt manuellement.
|
|
93
99
|
|
|
94
100
|
## Pourquoi il est structuré de cette manière
|
|
95
101
|
|
|
96
102
|
| Couche | Choix | Raison |
|
|
97
103
|
|---|---|---|
|
|
98
104
|
| Transport | L’interface de ligne de commande `gh` | Elle contient déjà votre jeton. L’outil ne stocke ni ne demande jamais d’informations d’identification. |
|
|
99
|
-
| Collecte | GitHub GraphQL,
|
|
100
|
-
| Exécutions d’Actions | REST | GraphQL
|
|
101
|
-
|
|
|
102
|
-
| Tarifs des exécuteurs
|
|
103
|
-
| Stockage
|
|
104
|
-
| Source de
|
|
105
|
-
| Journal de balayage
|
|
105
|
+
| Collecte | GitHub GraphQL, par pages | Une requête renvoie les métadonnées, les problèmes ouverts, les demandes de fusion ouvertes, les versions et les arborescences de fichiers pour une page de dépôts. Une page qui continue de dépasser le délai d’attente est divisée par deux et la requête est répétée à partir du même curseur. |
|
|
106
|
+
| Exécutions d’Actions | REST | GraphQL n’a pas d’interface Actions. |
|
|
107
|
+
| Coût d’Actions | API de facturation plus durées par tâche | La facture indique le dépôt ; seules les tâches indiquent le flux de travail. Les points de terminaison GitHub de `/timing` renvoient des zéros, de sorte que la somme par tâche est recalculée, puis comparée à la facture. |
|
|
108
|
+
| Tarifs des exécuteurs | lu dans la facture | Un tarif facturé peut différer du prix catalogue, et une constante dans la source fausserait tous les chiffres. |
|
|
109
|
+
| Stockage | SQLite via le `node:sqlite` intégré | Aucune étape de compilation native. |
|
|
110
|
+
| Source de vérité | `data/snapshots/*.json` | Brut, diffusable et en ajout uniquement. La base de données est dérivée : `npm run rebuild` la reconstruit hors ligne. |
|
|
111
|
+
| Journal de balayage | `data/sweeps.jsonl` | Une ligne par balayage, y compris les balayages ayant échoué et les balayages n’ayant rien trouvé de nouveau. |
|
|
106
112
|
|
|
107
113
|
Les instantanés sont immuables et additifs, de sorte que la dérive entre deux dates est un `JOIN`.
|
|
108
114
|
|
|
109
115
|
## Exigences
|
|
110
116
|
|
|
111
117
|
- Node.js 22.5 ou version ultérieure.
|
|
112
|
-
- [GitHub
|
|
113
|
-
pouvant lire l’organisation
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
sous Linux en CI. macOS devrait fonctionner et n’est pas testé.
|
|
118
|
+
- L’[CLI GitHub](https://cli.github.com/), connecté (`gh auth status`) en tant que
|
|
119
|
+
compte pouvant lire l’organisation. La lecture des factures et des alertes de sécurité
|
|
120
|
+
nécessite les autorisations correspondantes ; un balayage sans celles-ci enregistre « non mesuré » et
|
|
121
|
+
continue. Il n’enregistre jamais une autorisation manquante comme un résultat valide.
|
|
122
|
+
- Windows ou Linux. Il est développé sur Windows et ses tests sont exécutés sur Linux en
|
|
123
|
+
CI. macOS devrait fonctionner et n’est pas testé.
|
|
119
124
|
|
|
120
125
|
## Utilisation
|
|
121
126
|
|
|
@@ -128,7 +133,7 @@ hk refresh your-org # collect, load, analyze, write repor
|
|
|
128
133
|
Pour conserver les paramètres entre les balayages, placez un `housekeeping.config.json` dans ce
|
|
129
134
|
répertoire (voir Configuration) ; ensuite, `hk refresh` n’a besoin d’aucun argument.
|
|
130
135
|
|
|
131
|
-
Ou exécutez-le à partir d’
|
|
136
|
+
Ou exécutez-le à partir d’un clone, ce qui conserve ses données dans le clone :
|
|
132
137
|
|
|
133
138
|
```bash
|
|
134
139
|
git clone https://github.com/mcp-tool-shop-org/housekeeping.git
|
|
@@ -148,6 +153,8 @@ hk findings # findings grouped by severity and code
|
|
|
148
153
|
hk health # per-repository health score, worst first
|
|
149
154
|
hk repo <name> # one repository in full
|
|
150
155
|
hk prs # every open pull request by age
|
|
156
|
+
hk branches # branches by state: merged, moved after merge, no PR
|
|
157
|
+
hk watch # open PRs, alerts and branches for a short watch list
|
|
151
158
|
hk versions # package.json against git tag against npm
|
|
152
159
|
hk actions # every workflow and its rule flags
|
|
153
160
|
hk cost # Actions cost, gross and net side by side
|
|
@@ -155,23 +162,19 @@ hk sql "SELECT ..." # one read-only statement
|
|
|
155
162
|
hk help # every command and flag
|
|
156
163
|
```
|
|
157
164
|
|
|
158
|
-
Dans
|
|
165
|
+
Dans un clone sans `npm link`, chaque `hk <command>` est `node src/cli.mjs <command>`.
|
|
159
166
|
|
|
160
167
|
`npm run rebuild` redérive la base de données et le rapport à partir des instantanés déjà
|
|
161
168
|
présents sur le disque, sans accès au réseau.
|
|
162
169
|
|
|
163
|
-
Un balayage complet effectue quelques centaines d’appels d’API. N’exécutez pas
|
|
164
|
-
`refresh` en boucle.
|
|
170
|
+
Un balayage complet effectue quelques centaines d’appels d’API. N’exécutez pas `refresh` en boucle.
|
|
165
171
|
|
|
166
|
-
Les résultats sont envoyés vers la sortie standard ; les progrès et les erreurs
|
|
167
|
-
|
|
168
|
-
et un indice. Codes de sortie : 0 (ok), 1 (erreur utilisateur), 2 (erreur
|
|
169
|
-
d’exécution), 3 (partiel, le balayage s’est terminé, avec des lacunes).
|
|
172
|
+
Les résultats sont envoyés vers la sortie standard ; les progrès et les erreurs sont envoyés vers la sortie d’erreur standard. Chaque
|
|
173
|
+
erreur affiche un code et un indice. Codes de sortie : 0 ok, 1 erreur utilisateur, 2 erreur d’exécution, 3 partiel (le balayage est terminé, avec des lacunes).
|
|
170
174
|
|
|
171
175
|
## Configuration
|
|
172
176
|
|
|
173
|
-
`housekeeping.config.json`, dans le répertoire dans lequel
|
|
174
|
-
ci-dessous) :
|
|
177
|
+
`housekeeping.config.json`, dans le répertoire dans lequel le programme de maintenance fonctionne (voir ci-dessous) :
|
|
175
178
|
|
|
176
179
|
```json
|
|
177
180
|
{
|
|
@@ -180,80 +183,82 @@ ci-dessous) :
|
|
|
180
183
|
}
|
|
181
184
|
```
|
|
182
185
|
|
|
183
|
-
- `org` est l’organisation à analyser. `hk refresh <org>` le remplace.
|
|
184
|
-
deux, un balayage refuse de démarrer.
|
|
185
|
-
- `metaRepos` sont les dépôts qui contiennent les paramètres
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
absence de
|
|
189
|
-
et absence de versions.
|
|
186
|
+
- `org` est l’organisation à analyser. `hk refresh <org>` le remplace. Sans
|
|
187
|
+
aucun des deux, un balayage refuse de démarrer.
|
|
188
|
+
- `metaRepos` sont les dépôts qui contiennent les paramètres, les actifs ou les
|
|
189
|
+
outils de l’organisation, et non un produit commercialisé. Ils sont exemptés des résultats qui ne
|
|
190
|
+
sont pertinents que pour un produit : fichier README, fichier LICENSE et fichiers similaires manquants,
|
|
191
|
+
absence de flux de travail et absence de versions.
|
|
190
192
|
|
|
191
|
-
Un fichier malformé est une erreur, jamais une valeur par défaut silencieuse :
|
|
192
|
-
une clé inconnue, un type incorrect ou un JSON corrompu interrompent l’exécution.
|
|
193
|
+
Un fichier malformé est une erreur, jamais une valeur par défaut silencieuse : une clé inconnue, un type incorrect ou un JSON corrompu interrompent l’exécution.
|
|
193
194
|
|
|
194
|
-
Exécution à partir d’
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
`HK_HOME` lorsque cela est défini.
|
|
195
|
+
Exécution à partir d’un clone, le programme de maintenance conserve `data/`, `reports/` et le fichier de configuration
|
|
196
|
+
dans le clone. Exécution en tant que package installé, il les conserve dans le répertoire à partir duquel vous
|
|
197
|
+
l’exécutez, ou dans `HK_HOME` lorsque cela est défini.
|
|
198
198
|
|
|
199
|
-
Environnement : `HK_HOME` (où les données, les rapports et la configuration sont
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
(chemin vers `gh`).
|
|
199
|
+
Environnement : `HK_HOME` (où les données, les rapports et la configuration sont stockés),
|
|
200
|
+
`HK_CONFIG` (chemin de configuration), `HK_DB` (chemin de la base de données), `HK_LOG`
|
|
201
|
+
(`silent`, `normal`, `verbose` ou `debug`), `HK_COST_REPOS` et
|
|
202
|
+
`HK_COST_BUDGET` (limites du coût par tâche), `GH_PATH` (chemin vers `gh`).
|
|
203
203
|
|
|
204
|
-
## Conserver les données
|
|
204
|
+
## Conserver les données privées
|
|
205
205
|
|
|
206
206
|
**Ce qu’un balayage écrit est sensible. Ne committez pas `data/` ou `reports/` dans un
|
|
207
207
|
dépôt public.**
|
|
208
208
|
|
|
209
|
-
Un instantané enregistre les noms et les descriptions des dépôts privés,
|
|
210
|
-
|
|
211
|
-
flux de travail et la facturation d’Actions. GitHub masque délibérément les
|
|
212
|
-
alertes de sécurité d’un dépôt public à tous, sauf à ses mainteneurs ; un
|
|
213
|
-
instantané publié diffuserait cette liste.
|
|
209
|
+
Un instantané enregistre les noms et les descriptions des dépôts privés, chaque
|
|
210
|
+
alerte de sécurité ouverte avec le package qu’elle mentionne, les fichiers de flux de travail et la facturation d’Actions. GitHub masque délibérément les alertes de sécurité d’un dépôt public à tous, sauf à ses mainteneurs ; un instantané publié diffuserait cette liste.
|
|
214
211
|
|
|
215
|
-
Le `.gitignore` de ce dépôt exclut `data/`, `reports/` et
|
|
216
|
-
|
|
217
|
-
|
|
212
|
+
Le `.gitignore` de ce dépôt exclut `data/`, `reports/` et
|
|
213
|
+
`housekeeping.config.json`. Pour conserver l’historique, qui est l’objectif des instantanés,
|
|
214
|
+
exécutez l’outil à partir d’un **dépôt privé** et committez-les là.
|
|
218
215
|
|
|
219
216
|
## Résultats
|
|
220
217
|
|
|
221
|
-
Les règles sont stockées dans `src/analyze.mjs`. Chacune d’entre elles cite la règle écrite
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
disponibles dans [`rules/`](rules/) :
|
|
218
|
+
Les règles sont stockées dans `src/analyze.mjs`. Chacune d’entre elles cite la règle écrite qu’elle applique,
|
|
219
|
+
de sorte qu’un résultat peut être contesté par rapport à une norme et non par rapport au goût. Les règles
|
|
220
|
+
fournies avec ce dépôt sont disponibles dans [`rules/`](rules/) :
|
|
225
221
|
|
|
226
|
-
- [`rules/github-actions.md`](rules/github-actions.md) : filtres de chemins, exécuteurs, taille de
|
|
227
|
-
la
|
|
228
|
-
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md) : la CI doit réussir, les
|
|
229
|
-
portes de publication, les versions.
|
|
222
|
+
- [`rules/github-actions.md`](rules/github-actions.md) : filtres de chemins, exécuteurs, taille de la matrice, limite du fichier de flux de travail, concurrence.
|
|
223
|
+
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md) : la CI doit réussir, les étapes de publication, les versions.
|
|
230
224
|
- [`rules/repo-first.md`](rules/repo-first.md) : la branche par défaut.
|
|
231
|
-
- [`rules/atlas-map.md`](rules/atlas-map.md) : une carte validée de chaque dépôt, vérifiée en
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
- **
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
- **Une
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
- **
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
Le
|
|
225
|
+
- [`rules/atlas-map.md`](rules/atlas-map.md) : une carte validée de chaque dépôt, vérifiée en CI.
|
|
226
|
+
|
|
227
|
+
Ce sont les normes d’une organisation. Si les vôtres sont différentes, modifiez le fichier de règles
|
|
228
|
+
et la règle en même temps.
|
|
229
|
+
|
|
230
|
+
Les règles veillent à distinguer les éléments qui se ressemblent, car leur regroupement produit du bruit :
|
|
231
|
+
|
|
232
|
+
- **Une branche par défaut rouge n’est pas une branche de demande de tirage rouge.** Une branche Dependabot défaillante est en attente ; une exécution `push` défaillante sur la branche par défaut est une
|
|
233
|
+
erreur. L’événement de l’exécution détermine lequel.
|
|
234
|
+
- **L’historique n’est pas une erreur.** Un flux de travail déplacé vers une exécution uniquement en production conserve
|
|
235
|
+
sa dernière erreur de branche par défaut pour toujours. Un flux de travail supprimé conserve ses exécutions.
|
|
236
|
+
Aucun des deux n’est un défaut actif.
|
|
237
|
+
- **Une vérification requise qui ne peut rien émettre n’est pas une vérification qui n’a pas été exécutée ici.**
|
|
238
|
+
L’une dit de supprimer l’exigence ; l’autre dit de corriger le déclencheur. Les corrections
|
|
239
|
+
se contredisent.
|
|
240
|
+
- **Une demande de tirage que le déclencheur a ignorée n’est pas une demande de tirage en conflit.** GitHub n’exécute
|
|
241
|
+
aucun flux de travail de demande de tirage sur une demande de tirage avec des conflits, de sorte que sa vérification manquante ne dit rien sur le déclencheur. Celle-ci nécessite une rebasification.
|
|
242
|
+
- **Une exécution ayant échoué n’est pas une exécution annulée.** `cancel-in-progress` sert à arrêter
|
|
243
|
+
les exécutions obsolètes, de sorte que les minutes annulées correspondent généralement au fonctionnement de la règle de concurrence.
|
|
244
|
+
- **Le coût brut n’est pas le coût net.** GitHub mesure les dépôts publics à plein
|
|
245
|
+
tarif et les réduit à zéro. Le coût brut est la puissance de calcul réelle ; le coût net est l’argent réel.
|
|
246
|
+
Ils ne sont jamais additionnés.
|
|
247
|
+
- **Non mesuré n’est pas propre.** Un dépôt GitHub qui n’analyse pas les rapports
|
|
248
|
+
n’affiche aucune alerte. Un dépôt pour lequel le passage des coûts n’a pas été atteint n’a pas de ligne de coût. Les deux
|
|
249
|
+
sont signalés comme inconnus.
|
|
250
|
+
|
|
251
|
+
La gravité détermine un score de santé : critique 40, élevé 15, moyen 6, faible 2, info 0,
|
|
252
|
+
déduit de 100. Le score classe l’attention, et non la qualité.
|
|
253
|
+
|
|
254
|
+
Le [manuel](https://mcp-tool-shop-org.github.io/housekeeping/handbook/)
|
|
255
|
+
énumère tous les résultats, toutes les commandes, tous les codes d’erreur et tous les tableaux.
|
|
251
256
|
|
|
252
257
|
## Sécurité
|
|
253
258
|
|
|
254
|
-
- **Lecture seule.** Le collecteur effectue
|
|
255
|
-
- **Aucun identifiant.** L’authentification
|
|
256
|
-
- **Aucune télémétrie.** Les seuls hôtes contactés sont l’API GitHub, via `gh`, et le registre npm, pour les
|
|
259
|
+
- **Lecture seule.** Le collecteur effectue GraphQL requêtes et des appels REST `GET`. Il ne fusionne, ne pousse, ne publie, ne modifie ni ne met à jour jamais un paramètre.
|
|
260
|
+
- **Aucun identifiant.** L’authentification se fait en utilisant les informations déjà disponibles dans `gh`. Rien n’est écrit sur le disque à ce sujet.
|
|
261
|
+
- **Aucune télémétrie.** Les seuls hôtes contactés sont l’API GitHub, via `gh`, et le registre npm, pour vérifier les versions et les avis de sécurité.
|
|
257
262
|
- **Ce qu’il stocke** est la partie sensible : voir « Conserver les données en privé ».
|
|
258
263
|
|
|
259
264
|
Signalez une vulnérabilité comme décrit dans [SECURITY.md](SECURITY.md).
|
|
@@ -264,7 +269,7 @@ Signalez une vulnérabilité comme décrit dans [SECURITY.md](SECURITY.md).
|
|
|
264
269
|
npm test
|
|
265
270
|
```
|
|
266
271
|
|
|
267
|
-
Chaque règle est testée dans les deux sens : la forme qui doit être déclenchée et la forme voisine qui ne doit pas l’être. Un vérificateur distinct
|
|
272
|
+
Chaque règle est testée dans les deux sens : la forme qui doit être déclenchée et la forme voisine qui ne doit pas l’être. Un vérificateur distinct recalcule un échantillon de résultats à partir des données GitHub en temps réel, en utilisant son propre canal de communication, et signale clairement lorsqu’il n’y a pas de base de données ou de réseau.
|
|
268
273
|
|
|
269
274
|
## Licence
|
|
270
275
|
|