chore(infra): per-PR schema sweep owner and CI wiring for preview environments
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 20/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- github-actions, postgresql, rust
- 领域
- ci-cd, databases, infrastructure
调研方向
Start by reading the cited ownership questions Q-0094.7 and Q-0094.1, then inspect the infrastructure scripts products/thrust/kube/scripts/pr-schema.sh and hyperdrive.sh and this repository’s .github/workflows/ files. The issue asks for an owner decision, scheduled reconciliation, preview CI, bounds, and live validation; done means the acceptance criteria pass, including hermetic sweep tests and cleanup checks.
由索引模型根据 Issue 内容生成。
描述
Context
PR previews are meant to run on the shared dev database with one schema per PR (ADR-0092 line 76; Q-0092.2, QUESTIONS.md:227), on thrust-pg-dev, the one-instance cluster that hosts dev, staging and the per-PR schemas (ADR-0094 line 70). The infrastructure repository has products/thrust/kube/scripts/pr-schema.sh create|drop|list <n>: login role pr_<n> with a connection limit of 8, schema pr_<n> owned by it, and a role-level search_path, run with psql through kubectl exec on the dev primary (research/0010 lines 107-110). hyperdrive.sh ensure creates a per-PR Hyperdrive config with caching disabled (ADR-0094 line 95). Spike 0001 Stage 2 used both live: create, migrate as the role, the Worker found its tables with no application search_path, then drop with a clean catalog (ADR-0094 line 131; research/0004 §10.1 line 351 and §10.7 line 451). This repository's CI has no preview job (.github/workflows/: ci.yml, contract-cell.yml, flake-hunt.yml).
Problem
Nothing is automated (research/0010 lines 110-112): no wiring to PR events, no sweep of schemas left by PRs that closed without the hook, nobody calls hyperdrive.sh ensure, and there are no per-PR migrations or storage bounds. Q-0094.7 (QUESTIONS.md:339) and Q-0094.1 (QUESTIONS.md:300: "the per-PR schemas and CI wiring are still unowned") are open, and so is the owner question in research/0010 §9 item 7 (line 261). Round 25 flagged the missing cleanup, ownership and migration-lock story (REVIEW-NOTES.md:151), and spike 0002 step 9 asks for it (spikes/0002-database-engine.md:28). Review §4 lists the cleanup owner as unassigned. Every leaked schema keeps a login role with 8 connections on a one-instance cluster.
Proposal
- Owner decision first: who owns the sweep and where it runs. Default: the infrastructure repository, which already holds
pr-schema.sh,hyperdrive.shand the cluster credentials. - Reconcile instead of relying on hooks: a scheduled job lists the open PRs of
aRustyDev/thrustthat want a preview (gh pr list --state open), listspr-schema.sh listand the per-PR Hyperdrive configs, creates what is missing and drops what has no open PR. A missed close event then costs one period, not a leak. - Preview deploy in this repository's CI: on PR open or push, wait for the schema and the config, run the expand migrations as role
pr_<n>(each PR owns its schema, so previews need no shared migration lock), and deploy a preview Worker bound to that config, using the same expand step as the deploy pipeline (#49). - Bounds: at most N live previews, and a schema with no push for M days is dropped.
- The
status.wovenprobe in Q-0094.7 is #42. If #37 picks the Durable Object engine, the per-PR Postgres schema goes away and the loop manages preview Workers only.
Acceptance criteria
- Q-0094.7's per-PR item is answered with the owner and the job's home, citing FR-10.
- The reconcile script has hermetic tests with fake
gh,kubectlandcurl, in the style oftest-pr-schema.sh(research/0010line 131). Control: a sweep that ignores the open-PR list (and so drops an open PR's schema) fails them. - Live: a test PR's
pr_<n>schema and Hyperdrive config appear within one period of opening; within one period of closing,pr-schema.sh listno longer shows it and the catalog check fromresearch/0004§10.7 (0 roles, 0 schemas, 0pr_%role settings) passes. - The preview migration step runs as
pr_<n>; a migration that writes topublicfails with a permission error (control).
References
- Review: .agents/plans/contrail/reviews/2026-10-19-fable-architecture-review.md (FR-10, §4 "Per-PR schemas")
- Q-0094.7, Q-0094.1, Q-0092.2; ADR-0094 (lines 70, 95, 131), ADR-0092 (line 76)
research/0010-thrust-postgres-infra-plan.mdlines 107-112, 131, 261research/0004-rust-on-workers-binding-matrix.md§10.1 (line 351), §10.7 (line 451)REVIEW-NOTES.md:151;spikes/0002-database-engine.md:28- Infra repository:
products/thrust/kube/scripts/pr-schema.sh,hyperdrive.sh - Beads: plane-byd.4
Finding: FR-10 (Q-0094.7)
- 主要语言
- Rust
- 星标
- 0
- 派生
- 0
- 平均合并
- 1 小时 35 分钟
- 30 天内合并 PR
- 67
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aRustyDev/thrust 的其他 Issue
-
area:process prio:p1 type:security
难度 4/5 3-5 天 新手友好度 48/100
维护者通常 1 天内回复
-
area:process bug prio:p1
难度 4/5 3-5 天 新手友好度 38/100
维护者通常 1 天内回复
-
area:process prio:p1
难度 4/5 3-5 天 新手友好度 55/100
维护者通常 1 天内回复
-
area:process prio:p1
难度 4/5 1-2 天 新手友好度 55/100
维护者通常 1 天内回复
-
area:process prio:p1
难度 4/5 3-5 天 新手友好度 56/100
维护者通常 1 天内回复
相似的 Issue
-
yara-x fails to build with rsa 0.10.0: unresolved import rsa::Pkcs1v15Sign可能已有人在做 @CfirTsabari 今天认领。 未关闭
难度 1/5 1 小时以内 新手友好度 87/100
VirusTotal/yara-x#865 ·
维护者通常 1 天内回复
-
good first issue help wanted program
难度 2/5 1-3 小时 新手友好度 83/100
hffgzktbcc-blip/ounce-core#297 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
nautechsystems/nautilus_trader#5631 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 69/100
bytecodealliance/rustix#1736 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
longbridge/gpui-kit#3871 ·
维护者通常 1 天内回复