@mcptoolshop/housekeeping 1.3.0 → 1.4.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 +49 -0
- package/README.es.md +113 -70
- package/README.fr.md +145 -65
- package/README.hi.md +125 -65
- package/README.it.md +126 -65
- package/README.ja.md +111 -70
- package/README.md +89 -23
- package/README.pt-BR.md +144 -76
- package/README.zh.md +130 -66
- package/housekeeping.config.example.json +2 -1
- package/package.json +1 -1
- package/rules/atlas-map.md +6 -1
- package/rules/github-actions.md +7 -3
- package/src/analyze.mjs +201 -44
- package/src/cli.mjs +2 -2
- package/src/collect.mjs +5 -2
- package/src/config.mjs +13 -4
- package/src/load.mjs +7 -3
- package/src/mcp.mjs +2 -1
- package/src/report.mjs +14 -10
- package/src/schema.sql +9 -1
- package/src/workflow-risks.mjs +125 -0
package/README.zh.md
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
12
|
An operational-health warehouse for a GitHub organization.<br>
|
|
13
|
-
One sweep, one SQLite database, findings you can argue with
|
|
13
|
+
One sweep, one SQLite database, findings you can argue with,<br>
|
|
14
|
+
and the whole-organization view an AI agent needs to coordinate every repository.
|
|
14
15
|
</p>
|
|
15
16
|
|
|
16
17
|
<p align="center">
|
|
@@ -20,30 +21,87 @@
|
|
|
20
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>
|
|
21
22
|
</p>
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
一次扫描收集每个仓库的 CI 状态、未解决的问题和拉取请求、发布、版本标签、工作流文件、分支保护、安全警报、锁文件和 Actions 账单,并将所有内容存储到 SQLite 中,然后根据编写的规则对所有内容进行审核。
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
它一次性回答整个组织的问题:
|
|
26
27
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
28
|
+
- 哪些默认分支显示为红色,这是否表示主线已损坏或历史记录已过时?
|
|
29
|
+
- 哪些拉取请求永远无法合并,因为一个必需的检查未发出,从而阻止了它们?
|
|
29
30
|
- 哪些部署被仓库自身的设置拒绝?
|
|
30
31
|
- `package.json`、Git 标签和 npm 注册表之间的差异在哪里?
|
|
31
|
-
- 哪些工作流违反了 Actions
|
|
32
|
-
- 哪些仓库包含 GitHub
|
|
32
|
+
- 哪些工作流违反了 Actions 成本规则,它们花费了多少,哪些任务花费了这些成本?
|
|
33
|
+
- 哪些仓库包含 GitHub 自身的警报计数未识别的建议?
|
|
33
34
|
|
|
34
35
|
它是一种审计工具,而不是修复工具。它读取 GitHub 数据,但不进行任何更改。
|
|
35
36
|
|
|
36
|
-
##
|
|
37
|
+
## 每个仓库都有一个代理
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
拥有数十个仓库的组织没有一个统一的地方来存储其状态。housekeeping 就是这个地方,它的 MCP 服务器 `hk-mcp` 将数据提供给一个 AI 代理。通过它,一个代理可以充当整个组织的协调器:
|
|
40
|
+
|
|
41
|
+
1. **扫描。** `hk refresh` 提取每个仓库的快照。
|
|
42
|
+
2. **分类。** 代理询问哪些内容显示为红色、哪些内容被阻止以及哪些内容变得更糟,并获得答案,这些答案可以区分已损坏的主线和过时的历史记录,以及区分停滞的拉取请求和冲突的拉取请求。
|
|
43
|
+
3. **规划一个批次。** 一个 `hk_sql` 查询找到具有相同结构的每个仓库,因此修复变成每个仓库一个拉取请求,而不是一次性查找。
|
|
44
|
+
4. **执行工作。** housekeeping 从不进行写入。代理使用自己的工具,在自己的权限下打开拉取请求,并由您进行审核。
|
|
45
|
+
5. **验证。** 再次扫描。如果发现的问题已解决,或者未解决,那么两次快照之间的差异就是一个查询。
|
|
46
|
+
|
|
47
|
+
代理在一次或两次调用中回答的问题:
|
|
48
|
+
|
|
49
|
+
- 哪些默认分支显示为红色,以及哪个任务和步骤导致了错误?
|
|
50
|
+
- 哪些拉取请求永远无法合并,是触发器还是冲突导致了问题?
|
|
51
|
+
- 哪些仓库包含生产建议,而 GitHub 没有显示任何警报?
|
|
52
|
+
- 哪些计划工作流违反了计划规则,以及如何违反?
|
|
53
|
+
- Actions 花费了多少,哪些任务花费了这些成本?
|
|
54
|
+
- 自上次扫描以来,发生了哪些变化?
|
|
55
|
+
|
|
56
|
+
| 工具 | 它回答的问题 |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `hk_summary` | 最新扫描的总计:仓库、问题、拉取请求、工作流、发现。 |
|
|
59
|
+
| `hk_findings` | 按代码、严重程度、类别或仓库分类的发现;未筛选时,按代码计数。红色主线的发现会命名导致错误的作业和步骤。 |
|
|
60
|
+
| `hk_ci` | 默认分支显示为红色的仓库以及失败的工作流;还包括失败的计划、失败的拉取请求分支以及没有 CI 的仓库。 |
|
|
61
|
+
| `hk_repo` | 完整的单个仓库:发现、工作流、未解决的拉取请求和问题。 |
|
|
62
|
+
| `hk_backlog` | 整个组织中未解决的拉取请求或问题,按时间顺序排列。 |
|
|
63
|
+
| `hk_health` | 每个仓库的健康评分,按从好到坏的顺序排列。 |
|
|
64
|
+
| `hk_cost` | Actions 按仓库、工作流或作业花费的成本,分别显示总成本和净成本。 |
|
|
65
|
+
| `hk_sql` | 针对仓库执行的单个只读 `SELECT` 或 `WITH` 语句。 |
|
|
66
|
+
| `hk_schema` | 表和列,用于编写 `hk_sql` 查询。 |
|
|
67
|
+
|
|
68
|
+
每个答案都来自最新的快照,并且以只读方式打开。如果调用失败,则返回结构化的错误,而不是堆栈跟踪。
|
|
69
|
+
|
|
70
|
+
### 连接它
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"mcpServers": {
|
|
75
|
+
"housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } },
|
|
76
|
+
"atlas": { "command": "atlas", "args": ["mcp"] }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`HK_HOME` 是您从中进行扫描的目录。从克隆版本开始,使用 `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`。第二个服务器是 [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),它回答关于单个仓库的相同代理的问题(参见下文)。在 Windows 上,通过 `cmd /c` 启动全局安装的命令。
|
|
82
|
+
|
|
83
|
+
## housekeeping 和 Atlas
|
|
84
|
+
|
|
85
|
+
[Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas) (`@dogfood-lab/atlas`) 映射一个仓库:它的各个部分以及它的入口,这意味着每个工作流及其运行、发布和部署的内容。该映射作为 `atlas/` 提交并检查到 CI 中。housekeeping 是组织视图。这两个工具是为协同工作而设计的。
|
|
86
|
+
|
|
87
|
+
- **每个映射,都进行扫描。** 扫描读取每个仓库的已提交映射以及所有其他内容,并报告哪些仓库没有映射,哪些仓库从未运行 `atlas check`,以及哪些仓库包含与组织中其他仓库使用的引擎不同的引擎。
|
|
88
|
+
- **红色运行失败的位置。** 当默认分支显示为红色时,该发现会命名失败的作业和步骤,并通过映射,命名该步骤运行的命令,因此修复从正确的文件开始。
|
|
89
|
+
- **从映射中获取部署事实。** 作业部署到的环境是从映射中获取的,映射中记录了该环境,因此这两个工具以相同的方式读取工作流。
|
|
90
|
+
- **整个组织中的警告。** Atlas 标记一个工作流步骤,该步骤将在运行之前失败,例如需要比作业安装的更新运行时环境的工具。该报告一次性列出所有仓库中的这些步骤。
|
|
91
|
+
|
|
92
|
+
使用这两个服务器的代理从“这十二个仓库被阻止” (housekeeping) 变为“这是工作流、作业和更改将影响的文件” (Atlas),而无需手动打开每个仓库。
|
|
93
|
+
|
|
94
|
+
## 为什么它具有这种结构
|
|
95
|
+
|
|
96
|
+
| 层 | 选择 | 原因 |
|
|
39
97
|
|---|---|---|
|
|
40
|
-
| 传输 | `gh` CLI |
|
|
41
|
-
| 收集 | GitHub GraphQL,分页 |
|
|
98
|
+
| 传输 | `gh` CLI | 它已经持有您的令牌。该工具从不存储或请求任何凭据。 |
|
|
99
|
+
| 收集 | GitHub GraphQL,分页 | 一个查询返回一个页面中仓库的元数据、未解决的问题、未解决的拉取请求、发布和文件树。如果一个页面持续超时,则将其减半并从相同的游标重新请求。 |
|
|
42
100
|
| Actions 运行 | REST | GraphQL 没有 Actions 接口。 |
|
|
43
|
-
|
|
|
44
|
-
| 运行器费率 | 从发票中读取 |
|
|
101
|
+
| 操作需要成本 | 计费 API 加上每个作业的持续时间 | 发票上会显示哪个仓库;只有作业会显示哪个工作流程。GitHub 的 `/timing` 端点返回零,因此会重新计算每个作业的总和,然后与发票进行核对。 |
|
|
102
|
+
| 运行器费率 | 从发票中读取 | 已计费的费率可能与列表价格不同,并且源中的常量会错误地显示每个数字。 |
|
|
45
103
|
| 存储 | 通过内置的 `node:sqlite` 使用 SQLite | 没有本地构建步骤。 |
|
|
46
|
-
| 事实来源 | `data/snapshots/*.json` |
|
|
104
|
+
| 事实来源 | `data/snapshots/*.json` | 原始、可比较且仅可追加。数据库是派生的:`npm run rebuild` 在离线状态下重建它。 |
|
|
47
105
|
| 扫描日志 | `data/sweeps.jsonl` | 每条扫描记录一行,包括失败的扫描和未发现任何新内容的扫描。 |
|
|
48
106
|
|
|
49
107
|
快照是不可变的且具有累积性,因此两个日期之间的差异是 `JOIN`。
|
|
@@ -51,8 +109,12 @@
|
|
|
51
109
|
## 要求
|
|
52
110
|
|
|
53
111
|
- Node.js 22.5 或更高版本。
|
|
54
|
-
- [GitHub CLI](https://cli.github.com/),已登录(`gh auth status
|
|
55
|
-
|
|
112
|
+
- [GitHub CLI](https://cli.github.com/),已登录(`gh auth status`),并且是
|
|
113
|
+
可以读取组织的帐户。读取计费和安全警报
|
|
114
|
+
需要相应的权限;如果没有,扫描会记录“未测量”并
|
|
115
|
+
继续。它绝不会将缺少权限记录为干净的结果。
|
|
116
|
+
- Windows 或 Linux。它在 Windows 上开发,其测试在 Linux 上运行
|
|
117
|
+
CI。macOS 应该可以工作,但未进行测试。
|
|
56
118
|
|
|
57
119
|
## 使用方法
|
|
58
120
|
|
|
@@ -62,9 +124,10 @@ mkdir warehouse && cd warehouse # housekeeping keeps its data here
|
|
|
62
124
|
hk refresh your-org # collect, load, analyze, write reports/AUDIT-<date>.md
|
|
63
125
|
```
|
|
64
126
|
|
|
65
|
-
|
|
127
|
+
为了在扫描之间保留设置,请在 `housekeeping.config.json` 目录中放置一个
|
|
128
|
+
文件(请参阅“配置”);然后 `hk refresh` 不需要任何参数。
|
|
66
129
|
|
|
67
|
-
|
|
130
|
+
或者从克隆运行,这样它的数据将保存在克隆中:
|
|
68
131
|
|
|
69
132
|
```bash
|
|
70
133
|
git clone https://github.com/mcp-tool-shop-org/housekeeping.git
|
|
@@ -75,7 +138,7 @@ cp housekeeping.config.example.json housekeeping.config.json # then set "org"
|
|
|
75
138
|
hk refresh
|
|
76
139
|
```
|
|
77
140
|
|
|
78
|
-
|
|
141
|
+
然后查询它:
|
|
79
142
|
|
|
80
143
|
```bash
|
|
81
144
|
hk summary # portfolio totals
|
|
@@ -91,17 +154,20 @@ hk sql "SELECT ..." # one read-only statement
|
|
|
91
154
|
hk help # every command and flag
|
|
92
155
|
```
|
|
93
156
|
|
|
94
|
-
在没有 `npm link`
|
|
157
|
+
在没有 `npm link` 的克隆中,每次 `hk <command>` 都是 `node src/cli.mjs <command>`。
|
|
95
158
|
|
|
96
|
-
`npm run rebuild`
|
|
159
|
+
`npm run rebuild` 会重新派生数据库和报告,这些报告来自已
|
|
160
|
+
存储在磁盘上的快照,无需网络访问。
|
|
97
161
|
|
|
98
|
-
|
|
162
|
+
一次完整的扫描会进行数百次 API 调用。不要在循环中运行 `refresh`。
|
|
99
163
|
|
|
100
|
-
|
|
164
|
+
结果输出到标准输出;进度和错误输出到标准错误。每个
|
|
165
|
+
错误都会打印一个代码和一个提示。退出代码:0 表示正常,1 表示用户错误,2 表示运行时
|
|
166
|
+
错误,3 表示部分(扫描已完成,但存在差距)。
|
|
101
167
|
|
|
102
168
|
## 配置
|
|
103
169
|
|
|
104
|
-
`housekeeping.config.json`,位于 housekeeping
|
|
170
|
+
`housekeeping.config.json`,位于 housekeeping 运行的目录中(请参阅下文):
|
|
105
171
|
|
|
106
172
|
```json
|
|
107
173
|
{
|
|
@@ -110,73 +176,71 @@ hk help # every command and flag
|
|
|
110
176
|
}
|
|
111
177
|
```
|
|
112
178
|
|
|
113
|
-
- `org` 是要扫描的组织。`hk refresh <org>`
|
|
114
|
-
|
|
179
|
+
- `org` 是要扫描的组织。`hk refresh <org>` 会覆盖它。如果
|
|
180
|
+
两者都没有,扫描将拒绝启动。
|
|
181
|
+
- `metaRepos` 是包含组织默认设置、资源或
|
|
182
|
+
工具的仓库,而不是已发布的最终产品。它们不适用于仅
|
|
183
|
+
对最终产品有意义的发现:缺少 README、LICENSE 和类似文件,没有
|
|
184
|
+
工作流程,以及没有发布。
|
|
115
185
|
|
|
116
|
-
|
|
186
|
+
格式不正确的文件是一个错误,绝不会是无声的默认值:未知的键、错误的
|
|
187
|
+
类型或损坏的 JSON 会停止运行。
|
|
117
188
|
|
|
118
189
|
Run from a clone, housekeeping keeps `data/`, `reports/` and the config file
|
|
119
190
|
in the clone. Run as an installed package, it keeps them in the directory you
|
|
120
191
|
run it from, or in `HK_HOME` when that is set.
|
|
121
192
|
|
|
122
|
-
环境:`HK_HOME
|
|
193
|
+
环境:`HK_HOME`(数据、报告和配置所在的位置)、
|
|
194
|
+
`HK_CONFIG`(配置路径)、`HK_DB`(数据库路径)、`HK_LOG`
|
|
195
|
+
(`silent`、`normal`、`verbose` 或 `debug`)、`HK_COST_REPOS` 和
|
|
196
|
+
`HK_COST_BUDGET`(每个作业成本的上限)、`GH_PATH`(`gh` 的路径)。
|
|
123
197
|
|
|
124
198
|
## 保护数据
|
|
125
199
|
|
|
126
|
-
**扫描写入的内容是敏感信息。请勿将 `data/` 或 `reports/`
|
|
127
|
-
|
|
128
|
-
快照会记录私有仓库的名称和描述、每个未解决的安全警报以及它引用的软件包、工作流文件和 Actions 计费信息。GitHub 会故意将公共仓库的安全警报隐藏起来,只向其维护者显示;发布的快照会将该列表提供给其他人。
|
|
129
|
-
|
|
130
|
-
此仓库的 `.gitignore` 排除 `data/`、`reports/` 和 `housekeeping.config.json`。为了保留历史记录,这是快照的目的,请从您自己的**私有**仓库中运行该工具,并将它们提交到那里。
|
|
131
|
-
|
|
132
|
-
## MCP 服务器
|
|
133
|
-
|
|
134
|
-
`hk-mcp`(或克隆版本中的 `npm run mcp`)通过标准输入/输出 (stdio) 为仓库提供服务,因此助手可以在不读取多兆字节快照的情况下提出问题:
|
|
135
|
-
|
|
136
|
-
`hk_summary` · `hk_findings` · `hk_ci` · `hk_repo` · `hk_backlog` · `hk_health` · `hk_cost` · `hk_sql` · `hk_schema`
|
|
137
|
-
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"mcpServers": {
|
|
141
|
-
"housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } }
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
```
|
|
200
|
+
**扫描写入的内容是敏感信息。请勿将 `data/` 或 `reports/` 提交到
|
|
201
|
+
公共仓库。**
|
|
145
202
|
|
|
146
|
-
|
|
203
|
+
快照会记录私有仓库的名称和描述、每个
|
|
204
|
+
公开的安全警报以及它引用的软件包、工作流程文件和 Actions
|
|
205
|
+
计费。GitHub 会故意将公共仓库的安全警报隐藏起来,只向其维护者显示;发布的快照会将该列表提供给所有人。
|
|
147
206
|
|
|
148
|
-
|
|
207
|
+
此仓库的 `.gitignore` 排除 `data/`、`reports/` 和
|
|
208
|
+
`housekeeping.config.json`。为了保留历史记录,这是快照的目的,
|
|
209
|
+
请从您自己的**私有**仓库运行该工具,并将它们提交到那里。
|
|
149
210
|
|
|
150
211
|
## 发现
|
|
151
212
|
|
|
152
|
-
规则位于 `src/analyze.mjs`
|
|
213
|
+
规则位于 `src/analyze.mjs` 中。每个规则都引用了它所执行的书面规则,
|
|
214
|
+
因此可以针对标准而不是针对个人喜好来争论发现。此仓库提供的规则位于 [`rules/`](rules/) 中:
|
|
153
215
|
|
|
154
|
-
- [`rules/github-actions.md`](rules/github-actions.md)
|
|
216
|
+
- [`rules/github-actions.md`](rules/github-actions.md):路径过滤器、运行器、矩阵大小、工作流程文件限制、并发。
|
|
155
217
|
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md):CI 必须通过、发布门控、版本。
|
|
156
218
|
- [`rules/repo-first.md`](rules/repo-first.md):默认分支。
|
|
157
|
-
- [`rules/atlas-map.md`](rules/atlas-map.md)
|
|
219
|
+
- [`rules/atlas-map.md`](rules/atlas-map.md):每个仓库的已提交映射,在 CI 中进行检查。
|
|
158
220
|
|
|
159
|
-
|
|
221
|
+
这些是一个组织的标准。如果您的标准不同,请同时更改规则文件
|
|
222
|
+
和规则。
|
|
160
223
|
|
|
161
|
-
|
|
224
|
+
规则会注意区分看起来相似的事物,因为将它们合并会产生噪音:
|
|
162
225
|
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
226
|
+
- **默认分支为红色的状态并不意味着拉取请求分支也为红色。** 如果 Dependabot 分支出现故障,则表示存在未处理的问题;如果在默认分支上出现 `push` 运行失败,则表示存在错误。运行的事件决定了是哪种情况。
|
|
227
|
+
- **历史记录并不等同于错误。** 如果工作流程被移动到仅触发发布,则其最后一次在默认分支上的失败状态将永久保留。即使删除了工作流程,其运行记录也会保留。两者都不是当前存在的缺陷。
|
|
228
|
+
- **如果某个必需的检查无法执行,这并不意味着该检查未在此处运行。** 一种情况是建议取消该要求;另一种情况是建议修复触发器。这两种修复方法相互矛盾。
|
|
229
|
+
- **如果触发器跳过了一个拉取请求,这并不意味着该拉取请求存在冲突。** GitHub 不会对存在冲突的拉取请求运行任何拉取请求工作流程,因此,如果缺少检查,则说明该触发器没有问题。在这种情况下,需要重新进行基准测试。
|
|
230
|
+
- **失败的运行并不等同于已取消的运行。** `cancel-in-progress` 的作用是终止过时的运行,因此,通常情况下,已取消的运行是并发规则在起作用。
|
|
231
|
+
- **总成本不等于净成本。** GitHub 对公共仓库收取全部费用,然后将其折扣为零。总成本是实际的计算成本;净成本是实际的支出。两者不能简单地相加。
|
|
232
|
+
- **未测量的数据并不意味着数据是干净的。** 如果 GitHub 未对某个仓库进行扫描,则报告的警报数量为零。如果成本评估未达到某个阈值,则该仓库不会显示任何成本行。两者都将报告为未知。
|
|
169
233
|
|
|
170
|
-
|
|
234
|
+
严重程度决定了健康评分:严重 40,高 15,中 6,低 2,信息 0,从 100 中扣除。评分衡量的是需要关注的程度,而不是质量。
|
|
171
235
|
|
|
172
|
-
[手册](https://mcp-tool-shop-org.github.io/housekeeping/handbook/)
|
|
236
|
+
[手册](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) 列出了所有发现、命令、错误代码和表格。
|
|
173
237
|
|
|
174
238
|
## 安全性
|
|
175
239
|
|
|
176
240
|
- **只读。** 收集器会发出 GraphQL 查询和 REST `GET` 请求。它绝不会合并、推送、发布、公开或编辑任何设置。
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
- **它存储的内容**
|
|
241
|
+
- **不存储凭据。** 身份验证使用 `gh` 中已有的凭据。不会将任何凭据写入磁盘。
|
|
242
|
+
- **不收集遥测数据。** 唯一联系的主机是 GitHub API(通过 `gh`)和 npm 注册表,用于查找版本和安全建议。
|
|
243
|
+
- **它存储的内容** 是敏感部分:请参阅“保护数据”。
|
|
180
244
|
|
|
181
245
|
如 [SECURITY.md](SECURITY.md) 中所述,报告漏洞。
|
|
182
246
|
|
|
@@ -186,7 +250,7 @@ run it from, or in `HK_HOME` when that is set.
|
|
|
186
250
|
npm test
|
|
187
251
|
```
|
|
188
252
|
|
|
189
|
-
|
|
253
|
+
每个规则都从两个方向进行测试:必须触发的模式,以及不应触发的相邻模式。一个单独的验证器会从实时 GitHub 中重新推导出样本发现,并通过其自身的传输方式进行验证,并在没有数据库或没有网络时发出明确的警告。
|
|
190
254
|
|
|
191
255
|
## 许可证
|
|
192
256
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcptoolshop/housekeeping",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Operational-health warehouse for a GitHub organization: CI, issues, PRs, releases, Actions cost and repo hygiene, collected into SQLite and audited against written rules.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"github",
|
package/rules/atlas-map.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Every repository that runs workflows keeps a committed Atlas map on its
|
|
4
4
|
default branch, made by the fleet's current engine version, and runs
|
|
5
|
-
`atlas check` in CI. Archived repositories
|
|
5
|
+
`atlas check` in CI. Archived repositories, and forks of another
|
|
6
|
+
organization's project, are exempt.
|
|
6
7
|
|
|
7
8
|
## What it means in a repository
|
|
8
9
|
|
|
@@ -15,6 +16,10 @@ default branch, made by the fleet's current engine version, and runs
|
|
|
15
16
|
- The version is pinned, never floating, and the whole fleet carries the same
|
|
16
17
|
one. It moves by pull request: the pin and the regenerated map in the same
|
|
17
18
|
change.
|
|
19
|
+
- A fork of another organization's project is exempt. Its workflows are the
|
|
20
|
+
upstream's, and a map and a CI step would make the fork diverge from the
|
|
21
|
+
project it tracks and conflict on every sync. "Fork" means GitHub records it
|
|
22
|
+
as a fork whose parent belongs to an organization outside your own.
|
|
18
23
|
|
|
19
24
|
## Transition (ended)
|
|
20
25
|
|
package/rules/github-actions.md
CHANGED
|
@@ -11,6 +11,10 @@ These are the rules the `actions` findings enforce.
|
|
|
11
11
|
- Every workflow carries `workflow_dispatch` as a manual fallback.
|
|
12
12
|
- Release, publish and container workflows trigger on `release: published`
|
|
13
13
|
only, with no push trigger.
|
|
14
|
+
- A workflow that emits a required status check takes no paths filter on its
|
|
15
|
+
`pull_request` trigger; its `push` trigger stays paths-gated. Otherwise a
|
|
16
|
+
pull request that touches none of the listed paths, such as a docs-only
|
|
17
|
+
change, never reports the check and can never merge.
|
|
14
18
|
|
|
15
19
|
## Runners
|
|
16
20
|
|
|
@@ -54,6 +58,6 @@ concurrency:
|
|
|
54
58
|
|
|
55
59
|
A scheduled workflow is allowed when it does something a push trigger cannot
|
|
56
60
|
(dependency or pin freshness, drift detection against an outside source), runs
|
|
57
|
-
weekly or slower, is bounded (`ubuntu-latest`, an
|
|
58
|
-
`concurrency` block), opens a pull request rather
|
|
59
|
-
branch, and carries `workflow_dispatch`.
|
|
61
|
+
weekly or slower (daily needs a stated reason), is bounded (`ubuntu-latest`, an
|
|
62
|
+
explicit `timeout-minutes`, a `concurrency` block), opens a pull request rather
|
|
63
|
+
than pushing to a protected branch, and carries `workflow_dispatch`.
|