Dockrev
Dockrev 是 self-hosted Docker/Compose update manager。README.md 把根文档定位为快速入口,完整部署、使用、运维、排障和 API 文档在 docs-site/,这说明它是运维工具而不是普通 CRUD 管理台。
- Rust web service
- Embedded admin UI
- React app
- Responsive web UI
- Ops tool
- Dockerized dev
- Storybook component QA
- UI version display
- Floating UI tooltip
- Service ports
- Manual version release delivery
- Release failure notification
- GitHub Actions scheduling
- Quality gates
- Project docs site
- Worktree bootstrap
目录
技术栈
运行与交付
- CI 工作流
- ci-pr.yml
- docs-pages.yml
- notify-failed-workflow.yml
- notify-release-failure.yml
- release-completion-pr.yml
- release-preparation.yml
- release.yml
- review-policy.yml
- 能力标记
- bun_lock
- cargo_toml
- dockerfile
- github_actions
- package_json
依赖与工具
- package.json
- 开发依赖
- @commitlint/cli
- @commitlint/config-conventional
- commitlint-plugin-function-rules
- 项目脚本
- bootstrap:worktree
- docs:build
- docs:dev
- docs:preview
- hooks:install
- test:worktree-bootstrap
配置与质量
- 配置文件
- .editorconfig
- .env.example
- .gitignore
- Cargo.toml
- lefthook.yml
- package.json
- rust-toolchain.toml
- skills-lock.json
{
"ci_workflows": [
"ci-pr.yml",
"docs-pages.yml",
"notify-failed-workflow.yml",
"notify-release-failure.yml",
"release-completion-pr.yml",
"release-preparation.yml",
"release.yml",
"review-policy.yml"
],
"configs_root": [
".editorconfig",
".env.example",
".gitignore",
"Cargo.toml",
"lefthook.yml",
"package.json",
"rust-toolchain.toml",
"skills-lock.json"
],
"markers_present": [
"bun_lock",
"cargo_toml",
"dockerfile",
"github_actions",
"package_json"
],
"package_json": {
"deps_dev": [
"@commitlint/cli",
"@commitlint/config-conventional",
"commitlint-plugin-function-rules"
],
"scripts": [
"bootstrap:worktree",
"docs:build",
"docs:dev",
"docs:preview",
"hooks:install",
"test:worktree-bootstrap"
]
}
}Purpose
Dockrev 是 self-hosted Docker/Compose update manager。README.md 把根文档定位为快速入口,完整部署、使用、运维、排障和 API 文档在 docs-site/,这说明它是运维工具而不是普通 CRUD 管理台。
Taxonomy
- Tags: Rust web service, Embedded admin UI, React app, Responsive web UI, Ops tool, Dockerized dev, Storybook component QA, UI version display, Floating UI tooltip, Service ports, Manual version release delivery, Release failure notification, GitHub Actions scheduling, Quality gates, Project docs site, Worktree bootstrap
- Why / evidence: 这些 tags 来自 checked-out repo 和 catalog record。主要证据包括
README.md、Cargo.toml、Dockerfile、deploy/、docs-site/package.json、web/package.json、web/.storybook/main.ts、web/scripts/capture-storybook-screenshots.mjs,以及 worktree 相关的scripts/install-hooks.sh、scripts/bootstrap-worktree.sh、scripts/test-worktree-bootstrap.sh和docs-site/docs/quick-start.md。Topic token 的大小写以对应技术/工作流的官方写法为准;slug 只作为稳定 ID,不直接充当项目标题。
Repository map
src/和crates/承载 Rust service/domain;Cargo.toml是 Axum/ops 服务入口。web/是 React/Vite 管理 UI,包含大量web/tests/*.test.ts(x)、Storybook daemon 和 screenshot capture scripts。docs-site/是 Rspress 文档站,docs-pages.yml负责发布。Dockerfile与deploy/说明 Dockerized delivery 是核心路径。
Runtime and delivery
文档站脚本由根 package.json 暴露 docs:dev、docs:build、docs:preview,默认端口 50885 可用 DOCS_PORT 覆盖。Web 子项目有 Storybook daemon、screenshot capture、test-storybook 和 Vite build。Dockerfile 把服务作为 deployable artifact 构建。新 linked worktree 的开发前提由 README.md 与 docs-site/docs/quick-start.md 固定为 bun run hooks:install 后执行 bun run bootstrap:worktree;shared post-checkout 会恢复根目录、web/、docs-site/ 的 Bun 依赖并预热 cargo fetch --locked,但不替维护者安装 Bun、Rust、Playwright 或系统包。
Architecture notes
产品模型围绕 Docker/Compose target discovery、digest snapshot、candidate version、release drawer、supervisor health 和 webhook/status。React UI 嵌入在 Rust 服务旁,既是操作台也是状态解释层;floating UI / tooltip 相关依赖说明复杂状态说明不是纯表格文本。
证据锚点:README.md。
Workflow and quality gates
ci-main.yml、ci-pr.yml、docs-pages.yml、release-preparation.yml、release-completion-pr.yml、release.yml、review-policy.yml、notify-release-failure.yml 和 notify-failed-workflow.yml 拆分 PR、main、docs、release、review 和 failure-notification gates。.github/manual-version-release.json 声明唯一发布策略;Release Preparation 只接受必填字符串 version,每次从 main 根 VERSION 计算目标,缺失或无效时失败关闭。它创建只改根 VERSION 的签名身份、冻结来源与目标,并用不可变 reservation 约束同版本身份;创建身份 PR 后还会复查基准,若基准已变化则关闭过期 PR,避免它阻塞下一次准备。.github/quality-gates.json 声明 Review Policy Gate 与 Manual Version Release Completion,并记录精确的旧/目标检查集合及目标工作流契约。.github/scripts/check-live-quality-gates.py 只接受精确的旧规则集或目标规则集;旧集合显式报告为迁移未完成,并从 main 检查目标 workflow 的 pull_request_target、github.workflow_sha checkout 和目标 check 名称。当前 live ruleset 已切换到目标集合 Review Policy Gate 与 Manual Version Release Completion;目标 workflow 已可信地进入 main,GitHub 会在每个 PR 合并前要求这两个检查成功。release-completion-pr.yml 只使用 pull_request_target,并检出 github.workflow_sha 对应的工作流版本,只监听 opened、synchronize、reopened 和 ready_for_review,不监听 edited;项目 contract test 固定这组事件,避免 PR 合并或关闭后的元数据编辑重新触发 required completion gate。Stable、alpha、beta 与 RC 的序号/晋升由 .github/scripts/release_policy.py 校验;major/minor/patch 始终按 main 最新 VERSION 的数值核心计算,预发布输入按同核心通道顺序推进,且不会推进 GHCR latest。.github/workflows/release.yml 为同一身份构建一个包含 Linux binaries、archives、checksums 与文件清单的 bundle;发布前验证清单文件 hash 和 GitHub artifact SHA-256。失败通知携带 identity 与 artifact digest;若身份上下文 artifact 无法下载,则只发送标明身份未验证的运行上下文,不伪造版本身份。同身份恢复复用已完成 bundle。Release Preparation 只负责准备受保护 main PR,当前流程不调用 merge 或 auto-merge;PR 合并后,release.yml 由 main 的 push 自动完成发布。已验证样本是 PR #432 修复 edited 触发、PR #433 合并后的 Release run 和 v0.81.4-beta.1;它们均绑定 merge SHA fbebdb27b9cde15a5fa63faacfdf5e480b969dd8。GITHUB_TOKEN 相关 workflow-run approval 不作为每次发布的固定人工步骤或本项目的 universal blocker 记录。
Reusable decisions
- 运维工具把完整 docs-site 作为主要文档入口,README 保持短入口。
- 任何被声明为 expected-success 的 workflow 都必须对最终
failure可达通知;业务 workflow 负责业务上下文,通用 sidecar 只消费workflow_runmetadata,不能把普通 CI/Docs failure 伪装成 release identity。 - Storybook 用于 component QA;没有 accessibility addon 证据时不要命名为 accessibility。
- Docker/Compose update manager 的发布失败必须有通知,因为部署用户依赖 image/artifact 可用性。
- 手动发版只保留一个
version决策入口,主干根VERSION同时作为身份文件和下一次分配基准;release tag、package manifest 与历史发布记录不能替代它。 - 预发布序列按 alpha -> beta -> rc -> stable 前进;stable baseline 可直接开始 beta,RC 必须来自相同 numeric core 的 beta lineage,任何跳级或回退都应在分配时拒绝。
- required-check 迁移必须保留可信执行边界;不得把由待合并改动自行提供的 workflow 当作受信任保护检查。
- required-check 过渡态要声明旧集合与目标集合;CI 仅容忍精确的已知旧集合,并单独报告 main 上目标 workflow 的可信状态。切换后,目标 check 必须对每个 PR 成功,GitHub 才允许合并。
- 手动版本发布由
Release Preparation准备受保护的VERSION-only 身份 PR,当前 workflow 不自动合并;PR 合并后 main push 触发Release发布,workflow_dispatch只用于同一 merge identity 的恢复。 - required PR completion gate 的事件集合固定为
opened、synchronize、reopened和ready_for_review;edited默认不参与该 gate,避免合并/关闭后的 PR 元数据编辑制造迟到或错误的 required check。 - 发布恢复必须固定同一个 merge identity 与已完成 artifact digest;bundle 缺失时才可为同一身份重建,不能重算或替换版本。
- 把 linked-worktree 依赖恢复收敛在
scripts/bootstrap-worktree.sh,以 lockfile hash 做幂等 stamp,并用scripts/test-worktree-bootstrap.sh覆盖首次恢复、缓存命中、跳过开关和缺失工具失败路径。 - 失败通知配置、workflow 名称和 notification exclusion 必须一起更新并由 contract test 校验;OIDC/Oidrune 的外部 allowlist 仍属于维护者配置,不写进 caller workflow 的 secret。
Risks and open questions
- live ruleset 是仓库外部配置,可能与
.github/quality-gates.json漂移;调整必需检查后,应运行.github/scripts/check-live-quality-gates.py验证目标集合和 main 上的可信 workflow 状态。 - 更新动作可能影响真实容器,UI guard 和 backend guard 必须同步。
- Digest freshness/candidate inference 一旦误判会引导错误升级。
- docs-site 端口和服务端口要遵守 port lease,不要直接复用默认值。
- bootstrap 只恢复仓库内依赖,不应把安装 Bun、Rust、Playwright 或系统包混入 checkout hook;缺工具时应给出可操作错误或 skip 开关(
scripts/bootstrap-worktree.sh、README.md)。
Evidence index
README.mdCargo.tomlDockerfiledeploy/docs-site/package.jsonweb/package.jsonweb/.storybook/main.tsweb/scripts/capture-storybook-screenshots.mjsweb/tests/.github/workflows/ci-main.yml.github/workflows/ci-pr.yml.github/workflows/docs-pages.yml.github/workflows/release-preparation.yml.github/workflows/release-completion-pr.yml.github/workflows/release.yml.github/manual-version-release.json.github/scripts/release_policy.py.github/scripts/check-live-quality-gates.py.github/scripts/release_preparation.py.github/scripts/release_completion.py.github/scripts/release_identity.py.github/scripts/release_artifact_bundle.py.github/scripts/release_recovery_artifact.py.github/workflows/notify-release-failure.yml.github/workflows/notify-failed-workflow.yml.github/release-failure-notification.json.github/scripts/workflow_failure_context.py.github/scripts/test_workflow_failure_notification_contract.py.github/scripts/test_manual_version_release.py.github/scripts/test_release_workflow_contract.pyhttps://github.com/IvanLi-CN/dockrev/pull/432https://github.com/IvanLi-CN/dockrev/pull/433https://github.com/IvanLi-CN/dockrev/actions/runs/37331154606https://github.com/IvanLi-CN/dockrev/releases/tag/v0.81.4-beta.1docs/specs/workflow-failure-notification/SPEC.mddocs/specs/release-channel-promotion/SPEC.mddocs/release.mdscripts/install-hooks.shscripts/bootstrap-worktree.shscripts/test-worktree-bootstrap.shdocs-site/docs/quick-start.md
相关内容
Dockerized dev
主题Dockerized dev 标记 Dockerfile、Compose 或 container build 是本地开发、集成验证或部署交付的一等路径。它不表示“仓库里偶然有 Dockerfile”,而是 Docker 影响运行环境、数据卷、端口、build args、嵌入式前端产物或 release artifact。
Embedded admin UI
主题Embedded admin UI 表示 operator/admin UI 不是独立部署的前端产品,而是主服务交付物的一部分,通常由同一个 release binary、同一个镜像或同一个部署单元一起提供。这里的重点是交付和边界耦合,而不是框架选型。 这个 Topic 用来回答“控制台为什么要随服务一起发、一起验、一起部署”。
Floating UI tooltip
主题Floating UI tooltip 表示 tooltip/气泡说明已经被当成正式交互层来维护,而不是临时 title 文本。这里默认采用 @floating-ui/react 一类定位中间件,处理视口避让、箭头、滚动更新和交互稳定性,而不是手写定位魔法。
GitHub Actions scheduling
主题GitHub Actions scheduling 表示仓库把 workflow 触发事件、并发 namespace、cancel-in-progress 和 required check 可见性组织成可审计的运行调度合同。目标不是让每个事件只跑一次,而是让当前 PR head 获得正确且可观察的 gate,同时不让无关 PR、main、deploy 或手工任务被同一个并发键误取消。
Manual version release delivery
主题Manual version release delivery 是一种可复用的发布交付合同:维护者显式选择或确认一次 release target,系统再用可插拔的 Version Policy 校验版本、绑定 source identity、完成 reservation、经过 PR 与质量门禁、创建显式 Release,并让部署与 recovery 复用该 identity 下对应的不可变产物。
Ops tool
主题Ops tool 表示项目的核心价值在于运维自动化本身:部署、升级、监控、编排、设备管理、触发器或共享工作流,而不是面向终端用户的业务功能。这里的主语是“帮维护者安全地操作系统”,不是“恰好带个管理后台”。 这个 Topic 用来回答一个问题:系统真正的产品是不是一套可复用的操作能力。
Project docs site
主题Project docs site 指项目在工程仓库内维护一个独立的 web 文档站点,通常以 docs-site/、docs-pages.yml 或等价 publish workflow、docs:build / build-docs-site、DOCS_PORT 等入口体现。
Quality gates
主题Quality gates 表示仓库把“什么叫可以合并、什么叫可以发布”写成了显式、可审计的契约,并通过本地脚本、CI workflows、review/signature policy、GitHub required checks 或同类机制把它执行出来。它关注的是 gate contract,而不是某一门具体技术。 这个 Topic 用来回答“仓库怎样防止低质量或不完整的改动穿过默认分支”。
React app
主题React app 标记 React 是主要用户界面、管理台、控制台或嵌入式操作面 runtime。这里关心的是 route、component tree、client state、表单流、dashboard 交互和前端构建后的真实运行边界,而不是“项目依赖里有 React”。 这个 Topic 用来回答“用户实际操作的是不是一个 React runtime,以及它在系统里承担什么职责”。
Release failure notification
主题Release failure notification 指一个仓库为所有“预期成功但最终以 failure 结束”的交付 workflow 建立显式、可审查的告警路径。范围包括 release、deploy、CI、Docs Pages 和 required gate,但必须由 checked-in allowlist 声明;成功、skipped、cancelled 和通知 workflow 自身不属于通知条件。
Responsive web UI
主题Responsive web UI 指界面把不同视口下的可用性当成正式交付契约,而不是“桌面版做好后再缩一缩”。它关注的是布局、信息层级、交互方式和状态可读性如何在手机、平板和桌面之间持续成立,尤其适用于密集控制台、嵌入式运维界面和需要长期使用的工具型 Web UI(projects/dockrev.md)。 它与 React app、Embedded admin UI、Floating UI tooltip 常同时出现,但边界不同。
Rust web service
主题Rust web service 表示 Rust binary 承担长期运行的服务职责:提供 HTTP API、proxy、SSE、docs/data service、admin backend 或 ops daemon,并对外暴露稳定的网络、存储和部署边界。这里的关键词不是“Rust”,而是“服务进程”。 这个 Topic 不只是“语言是 Rust”。
Service ports
主题Service ports 表示端口号、bind 地址、dev/prod 暴露方式和多组件端口分工本身就是仓库的稳定 contract。它不是“服务都会有端口”这种空泛事实,而是说端口设计会直接影响本地预览、反向代理、权限边界、自动化脚本和故障排查。 这个 Topic 关注的是端口作为系统边界的那一面。
Storybook component QA
主题Storybook component QA 表示仓库把 Storybook 当作组件级文档、状态枚举、视觉检查或 interaction smoke 的稳定入口。它不等同于 Storybook accessibility:只有项目明确引入 a11y addon 或等价 Axe sweep 时,才同时打 accessibility Topic。这个拆分用于避免“只要有 Storybook 就叫 a11y”的误判。
UI version display
主题UI version display 指产品有意识地把“当前运行的到底是哪一版”暴露给用户或操作者查看,而不是把版本号藏在构建日志或开发者工具里。它通常包含一个稳定的人类可读显示位点,以及一条由运行时或构建链提供的版本真相路径,用于支持排障、远程协作和发布确认(projects/codex-vibe-monitor.md、projects/dockrev.
Worktree bootstrap
主题Worktree bootstrap 表示仓库把 linked worktree 的“首次进入可开发状态”当成正式 contract 来维护,而不是依赖维护者记忆、散落且无统一入口的手工 checklist,或假定只有主工作区才值得被照顾。