Skip to content
Back to skills

Release Readiness Check

ASecurity

上线前五分钟体检、发布前检查、上线卡点、release readiness、一条命令跑完 Dockerfile / K8s 清单 / SQL 迁移 / OpenAPI 兼容 / .env 配置五项检查并汇总成一份报告。当用户说「能不能上线」「上线前检查一下」「发布前体检」「帮我看看这次上线有没有风险」「上线 checklist 跑一遍」「CI 加个上线门禁」时使用。附纯标准库脚本 scripts/release_check.py,自动发现目标目录里的 Dockerfile、含 kind 的 K8s YAML、*.sql 迁移、openapi 规范、.env 文件,逐项用子进程调用内置的五个独立检查器,汇总为 Markdown 报告(总览表 → 各项 top 问题 → 门禁结论)。门禁三态:有 high 判「不建议上线」;无 high 但有项拿不到证据(子脚本崩溃、旧规范为空/无 paths、只有 Helm 模板、缺 .env 示例)判「无法判断,缺 N 项证据」并同样不放行;全部项都有结论且无 high 才是「可以上线」。目录里没有这类文件算「不适用」,不影响放行。支持 --js...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 13, 2026
devopspythongobashsqlnodedockergitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned October 13, 2026

npx -y skills add po-et/workbuddy-skills --skill release-readiness-check --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Release Readiness Check?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Release Readiness Check
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/po-et-release-readiness-check/badge)](https://www.skillsdirectory.com/skills/po-et-release-readiness-check)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: release-readiness-check
description: 上线前五分钟体检、发布前检查、上线卡点、release readiness、一条命令跑完 Dockerfile / K8s 清单 / SQL 迁移 / OpenAPI 兼容 / .env 配置五项检查并汇总成一份报告。当用户说「能不能上线」「上线前检查一下」「发布前体检」「帮我看看这次上线有没有风险」「上线 checklist 跑一遍」「CI 加个上线门禁」时使用。附纯标准库脚本 scripts/release_check.py,自动发现目标目录里的 Dockerfile、含 kind 的 K8s YAML、*.sql 迁移、openapi 规范、.env 文件,逐项用子进程调用内置的五个独立检查器,汇总为 Markdown 报告(总览表 → 各项 top 问题 → 门禁结论)。门禁三态:有 high 判「不建议上线」;无 high 但有项拿不到证据(子脚本崩溃、旧规范为空/无 paths、只有 Helm 模板、缺 .env 示例)判「无法判断,缺 N 项证据」并同样不放行;全部项都有结论且无 high 才是「可以上线」。目录里没有这类文件算「不适用」,不影响放行。支持 --json、--strict 做 CI 门禁(有 high 或有无法判断项则退出码 1)、--skip 显式豁免某项、--openapi-base 比对旧规范。
author: Captain
version: 0.1.2
display_name: "上线体检"
display_name_en: "Release Readiness Check"
description_zh: "一条命令给一个项目做上线前五分钟体检:Dockerfile、K8s 清单、SQL 迁移、OpenAPI 兼容、.env 配置五项一起跑,汇总成一份带三态门禁结论(不建议上线 / 无法判断 / 可以上线)的报告。纯 Python 标准库。"
description_en: "One command for a five-minute pre-release checkup: Dockerfile, K8s manifests, SQL migrations, OpenAPI compatibility and .env config in a single run, merged into one report with a three-state verdict (no-go / cannot-tell / go). Missing evidence never counts as a pass. Pure Python stdlib."
examples_zh:
  - "帮这个项目做一次上线前五分钟体检,给我一份报告"
  - "这次发布前检查一下 Dockerfile、K8s 清单和 SQL 迁移有没有风险"
  - "CI 里加个上线门禁,有 high 级问题就拦住发布"
examples_en:
  - "Run a pre-release checkup on this project and give me the report"
  - "Check the Dockerfile, K8s manifests and SQL migrations before we ship"
  - "Add a release gate to CI that fails on any high finding"
metadata:
  { "openclaw": { "requires": { "bins": ["python3"] }, "os": ["darwin", "linux", "windows"], "emoji": "🚦" } }
---

# 上线前五分钟体检

发版前最常见的五类线上事故——镜像里带着密钥、容器没有资源限制、迁移脚本锁表、接口悄悄改了字段、生产少配一个环境变量——都能在提交代码之前静态查出来。本技能把五个独立检查器串成一条命令,跑一遍给出一份报告和一个「能不能上线」的结论。

纯 Python 标准库:不联网、不执行构建、不连集群、不连数据库,只读文件。

## 何时用

- 发版评审前,要一份能贴进上线单的风险清单。
- 接手别人的服务,想快速摸清这套部署配置有没有明显的坑。
- CI 上加一道门禁,high 级问题直接拦住合并或发布。
- 故障复盘后,想确认同类问题在其他仓库有没有重复出现。

不适合:运行时问题(性能、容量、依赖服务可用性)本技能一概看不到,那是压测和监控的活。

## 用法

```bash
python3 scripts/release_check.py                       # 体检当前目录,报告写到系统临时目录并打印绝对路径
python3 scripts/release_check.py ../my-service         # 指定项目目录
python3 scripts/release_check.py . --out ./release-report.md
python3 scripts/release_check.py . --json              # 机器可读,同时仍然写报告文件
python3 scripts/release_check.py . --strict            # 有 high 则退出码 1,用于 CI 门禁
python3 scripts/release_check.py . --skip openapi,env  # 跳过某几项
python3 scripts/release_check.py . --openapi-base ./api/openapi.v1.json   # 和上一版规范比对
```

只想单跑某一项时,五个检查器都能独立运行,参数和输出与各自的单项技能完全一致:

```bash
cd scripts/checks
python3 dockerfile_check.py <项目目录> --json
python3 k8s_check.py <清单目录> --strict
```

## 流程

1. **发现**:走一遍目标目录(跳过 `.git`、`node_modules`、`vendor`、`dist` 等),按类型归类文件。只在有东西可查时才跑对应的检查项,没有就标「跳过」并写明原因。
2. **执行**:逐项用子进程调用内置检查器,统一加 `--json` 取结构化结果。某一项挂了(脚本缺失、超时、退出码非 0、输出不是合法 JSON)标记为**无法判断**,不影响其他四项照跑,但会拦住门禁。
3. **汇总**:把五种不同结构的结果归一成 `severity / code / where / message / fix`,按 high → warn → info 排序。
4. **出报告**:写 Markdown 文件并在终端打印摘要与报告的绝对路径。
5. **判门禁**(三态):
   - 有 high → **不建议上线**;
   - 无 high 但存在「无法判断」项 → **无法判断,缺 N 项证据**,`--strict` 同样退出码 1(门禁拿不到证据不能放行);
   - 全部项都有结论且无 high → **可以上线**(有 warn 则附一句提醒)。
   「不适用」(目录里根本没有这类文件)与 `--skip`(显式豁免)不影响放行;五项都没给出结论时仍是「无法判断」,提醒确认目录选对了没有。
6. **收敛**:按报告里的「→ 改法」逐条改,改完再跑一次,直到 high 清零。

## 五项检查一览

| 检查项 | 看什么 | 典型 high | 单项技能 |
|---|---|---|---|
| Dockerfile | 17 条最佳实践与安全规则:基础镜像未固定、root 运行、缓存层失效、管道执行远程脚本 | ENV/ARG 把密钥写进镜像层 | `dockerfile-check` |
| K8s 清单 | Deployment/Service 等对象的生产就绪基线:资源 requests/limits、探针、安全上下文、镜像标签 | 环境变量里明文写密码,该用 secretKeyRef | `k8s-manifest-check` |
| SQL 迁移 | 迁移脚本的锁表与不可逆风险,自动识别 MySQL / PostgreSQL 方言 | DROP COLUMN、没有 WHERE 的 UPDATE/DELETE | `sql-migration-check` |
| OpenAPI 兼容 | 新旧两份规范的破坏性变更:接口删除、参数变必填、响应字段消失或改类型 | 删接口、改字段类型、响应字段不再保证返回 | `openapi-breaking-diff` |
| .env 配置 | 示例文件、环境文件、代码三方对齐,以及疑似真实密钥 | 环境文件缺了示例中登记的变量;示例里写了真密钥 | `env-sync-check` |

五个检查器已经内置在 `scripts/checks/` 里,无需额外安装。如果只关心其中一类,或者想要该项的完整规则说明和更细的参数(比如 `--dialect` 指定 SQL 方言、`--example` 指定 .env 示例文件),可以单独安装对应技能:`dockerfile-check`、`k8s-manifest-check`、`sql-migration-check`、`openapi-breaking-diff`、`env-sync-check`。

## 输出与产出

报告固定三段:

- **一、总览**:每项一行,状态取 `已检查 / 无法判断 / 不适用 / 已跳过`,列 high / warn / info 数量和覆盖了几个文件;无法判断的项在同一行写明原因码与原因(数量列显示 `?` 而不是 0,避免把「没查到」读成「没问题」);最后一行是合计。
- **二、各项问题**:按项分组,每项最多列 10 条(已按严重度排好序),每条带位置、规则号、原因和「→ 改法」;超出 10 条会提示去跑单项技能看全量。
- **三、门禁结论**:先逐条列出「缺哪几项证据、为什么」,再一句话给三态结论,并说明哪几项是 `--skip` 显式豁免的。

`--json` 会把同样的内容以 `{target, generated, report, total, gate, items[]}` 打到标准输出:`gate` 含 `verdict`(`no-go` / `unknown` / `go-with-warn` / `go`)、`blocked`、`unknown[]`、`headline`;`items[]` 里每项含 `status`(`ok` / `unknown` / `na` / `skipped`)、`reason_code`(`n/a`、`user-skip`、`check-failed`、`skipped-invalid`、`no-baseline`、`missing-base`、`same-file`、`empty-input`)、`reason`、`notes[]`、`targets`、`counts`、`findings`,方便接自己的流水线或机器人。

退出码:正常 0;`--strict` 且存在 high **或存在「无法判断」项**时 1;目标不是目录、`--skip` 写了不认识的值时 2。不带 `--strict` 永远是 0(只出报告)。

## 边界与不做的事

- **只做静态检查。** 不执行构建、不 apply 清单、不连数据库跑迁移、不调用任何线上接口。
- **不替代专业工具。** hadolint、kubeconform、OPA、数据库 DBA 评审各有更全的规则集;本技能是提交之前的第一道快速门禁,不是最后一道。
- **拿不到证据不等于通过。** 这是门禁工具最不能有的失败模式,所以下面几种情况一律判「无法判断」、`--strict` 退出码 1,而**不是**「0 个问题 → 可以上线」:
  - 子脚本崩溃、超时、退出码非 0、输出不是合法 JSON(原因码 `check-failed`);
  - 新旧 OpenAPI 规范任一份不合格——解析不出对象、缺 `openapi`/`swagger` 版本字段、`paths` 缺失或为空、`paths` 里没有任何 HTTP 方法(原因码 `skipped-invalid`,报告里写明是哪份文件、哪条原因)。**一份 `{}` 的旧规范以前会报「0 破坏性变更 → 可以上线」,现在会拦住。**
  - 有规范但没给 `--openapi-base`、`--openapi-base` 指向的文件不存在、或它和目录里唯一那份规范是同一个文件(`no-baseline` / `missing-base` / `same-file`);
  - 找到的 Dockerfile / YAML / .sql 一条指令、一个对象、一条语句都没解析出来(`empty-input`,例如整个目录只有 Helm 模板);
  - 找到 `.env*` 但没有示例文件(`.env.example` / `.sample` / `.template` / `.dist`),三方对齐无从做起(`no-baseline`)。
  真的不想让某项拦门禁,用 `--skip <项>` 显式豁免——这会写进报告,而不是悄悄变成绿灯。
- **「不适用」和「无法判断」是两件事。** 目录里根本没有 Dockerfile / K8s 清单 / .sql / 规范 / `.env`,那是正常的「不适用」,不影响放行;找到了却查不动,才是「无法判断」。
- **OpenAPI 要两份规范才有意义。** 用 `--openapi-base` 指向上一版(上个 tag 里的那份)才能判断兼容性。YAML 规范需要环境里有 PyYAML,没有就先转成 JSON(缺 PyYAML 也算「无法判断」)。目录里有多份规范时只比对第一份,其余会在报告里以「注意」列出。
- **Helm 模板不做展开。** 带 `{{ }}` 的 YAML 会被标记为模板并跳过:只要还有别的清单解析出了对象,这一项照常给结论,但跳过了哪些文件会写在报告的「注意」里;如果一个对象都没解析出来,整项判「无法判断」。先 `helm template` 渲染成纯 YAML 再体检。
- **`.env` 只看目标目录根部。** 多环境目录(如 `deploy/prod/.env`)需要单独指定目录再跑一次。只有示例文件、没有环境文件时,这一项只做「代码 ↔ 示例」对齐并在报告里注明——它查不出某个环境少配了什么。
- **findings 是启发式的,不是判决。** 尤其 info 级大量出现时,先看有没有项目约定上的合理解释,别为了清零而改坏配置。反过来,报告干净也不等于没问题:密钥扫描、接口语义变化仍然要靠专门工具和人工评审。

Files in this skill

  • SKILL.md11.5 KB
  • scripts/checks/dockerfile_check.py10.6 KB
  • scripts/checks/env_sync_check.py12.4 KB
  • scripts/checks/k8s_check.py14.5 KB
  • scripts/checks/openapi_diff.py11.2 KB
  • scripts/checks/sql_migration_check.py9 KB
  • scripts/release_check.py27.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.