Dockrev
Dockrev 是 self-hosted Docker/Compose update manager。README.md 把根文档定位为快速入口,完整部署、使用、运维、排障和 API 文档在 docs-site/,这说明它是运维工具而不是普通 CRUD 管理台。
- Responsive web UI
- UI version display
- Floating UI tooltip
- GitHub Actions scheduling
- 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: Responsive web UI, UI version display, Floating UI tooltip, GitHub Actions scheduling, Project docs site, Worktree bootstrap
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
相关内容
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 或手工任务被同一个并发键误取消。
Project docs site
主题Project docs site 指项目在工程仓库内维护一个独立的 web 文档站点,通常以 docs-site/、docs-pages.yml 或等价 publish workflow、docs:build / build-docs-site、DOCS_PORT 等入口体现。
Responsive web UI
主题Responsive web UI 指界面把不同视口下的可用性当成正式交付契约,而不是“桌面版做好后再缩一缩”。它关注的是布局、信息层级、交互方式和状态可读性如何在手机、平板和桌面之间持续成立,尤其适用于密集控制台、嵌入式运维界面和需要长期使用的工具型 Web UI(projects/dockrev.md)。 它与 React app、Embedded admin UI、Floating UI tooltip 常同时出现,但边界不同。
UI version display
主题UI version display 指产品有意识地把“当前运行的到底是哪一版”暴露给用户或操作者查看,而不是把版本号藏在构建日志或开发者工具里。它通常包含一个稳定的人类可读显示位点,以及一条由运行时或构建链提供的版本真相路径,用于支持排障、远程协作和发布确认(projects/codex-vibe-monitor.md、projects/dockrev.
Worktree bootstrap
主题Worktree bootstrap 表示仓库把 linked worktree 的“首次进入可开发状态”当成正式 contract 来维护,而不是依赖维护者记忆、散落且无统一入口的手工 checklist,或假定只有主工作区才值得被照顾。