Commit Graph
52 Commits
Author SHA1 Message Date
Jesse_Chen e801fcf53b fix(ci): preserve npm install diagnostics and classify forced timeout
Independent Staging Quality Gate / validate (push) Successful in 10m17s
Independent Staging Quality Gate / publish (push) Successful in 21m1s
2026-09-26 17:52:37 +08:00
jesse-ux 69ede4367f fix(ci): migrate staging automatically before deploy
Independent Staging Quality Gate / validate (push) Successful in 10m6s
Independent Staging Quality Gate / publish (push) Successful in 4m18s
Quality gate now dispatches Migrate Staging Database, waits for success, then dispatches Deploy staging. Automatic migrate attests the in-progress gate run so the two jobs cannot deadlock. Manual migrate is unchanged. Staging schema changes must stay backward-compatible with the currently deployed app.
2026-09-15 23:36:09 +08:00
jesse-ux 298a73e8e5 fix(ci): keep vendor/** on both quality-gate path filters
Independent Staging Quality Gate / validate (push) Successful in 9m36s
Independent Staging Quality Gate / publish (push) Successful in 8m7s
BUG-714: deploy/gated-paths.txt already listed vendor/** after the
qizheng vendoring, but backend-quality-gate.yml did not. The contract
test requires the two lists to match.
2026-09-15 18:31:46 +08:00
jesse-ux d021bca5e1 fix(ci): clear leftover .venv before Python 3.14 venv create (BUG-677)
Independent Staging Quality Gate / validate (push) Successful in 12m2s
Independent Staging Quality Gate / publish (push) Successful in 2m8s
Staging gate run 2594 died in Install dependencies with FileExistsError on a reused hostexecutor .venv. Remove the leftover directory and create the venv with --clear so Python 3.14 mkdir does not abort the job.
2026-09-14 09:49:25 +08:00
Jesse_ChenandClaude Fable 5.1 f7428909d2 ci(gate): drop the removed GitHub workflow directory from the gated path list
Independent Staging Quality Gate / validate (push) Successful in 21m36s
Independent Staging Quality Gate / publish (push) Successful in 1m56s
The mirror workflows were deleted in the same release, so the gated
path list, both trigger filters and the contract test no longer name
.github/workflows/**.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandClaude Fable 5.1 68414a8223 ci(gate): check out the exact SHA from a host-persistent mirror with remote fallback
Both gate jobs spent 4-8 minutes (validate) plus 3-5 minutes (publish) on
`git fetch --depth=1` of a 105 MB tree over the WAN, and run 2270 burned
15 minutes on three timed-out attempts. act_runner's hostexecutor discards
the workspace between runs but keeps the host filesystem, so keep a bare
mirror at /root/.cache/jyotisha-mirror.git: take an flock on it (validate,
publish, or overlapping runs may race), clone it once or `fetch --prune`
only when it lacks the requested commit, fetch the exact SHA from local
disk, then point origin back at Gitea for every later step.

The mirror is an accelerator, not a dependency: an unwritable path, a busy
lock, a failed clone/fetch, a non-repository directory, or a stale git lock
file all fall through to the unchanged bounded three-attempt remote fetch,
and the SHA-format, checkout, `git clean -ffdx`, HEAD-equals-SHA, and
clean-tree assertions are untouched. Rehearsed locally against a local
remote for fresh, reused, prune-refresh, unwritable, corrupt, stale-lock,
and lock-contention cases.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandClaude Fable 5.1 534f5e617c ci(gate): skip the staging gate for docs-only pushes without releasing stale code
Twenty-four of the last sixty staging pushes were pure documentation, yet each
one ran (and cancelled) the full gate and image publish. Introduce
deploy/gated-paths.txt as the single source of truth for what must rerun the
gate: every Dockerfile COPY source, the Python package inputs, the workflow and
build-context files, and the repository files frontend/tests read at gate time.
Both triggers of backend-quality-gate.yml now carry that exact list; pushes
that touch none of it neither run the gate nor cancel a running code gate.

Because staging head may then legitimately sit ahead of the last tested SHA,
add deploy/is-docs-only-range.sh: it proves <base> is an ancestor of <head>
and that no changed path matches a gated glob, from local history when it is
available and otherwise from the Gitea compare API (per-commit `files`, parent
walk for ancestry, total_commits cross-checked). The publish dispatch and the
deploy-staging head checks accept an advanced head only when that script
succeeds; diverged, older, or code-bearing heads are still refused. In
deploy-staging the check runs after the gate-attested controller bundle is
extracted so only the tested checker and path list are ever executed; the
manual rollback branch is unchanged.

AGENTS.md §6.3/§6.4 describe the new contract: `.deployment.gitCommit` must
equal the latest staging commit that touched a gated path, not staging head.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandCursor 5687182980 ci(runner): move every Gitea job to xiaoxin and let the gate reclaim its own disk
Independent Staging Quality Gate / validate (push) Successful in 9m24s
Independent Staging Quality Gate / publish (push) Successful in 7m24s
质量门跑在以 :host 模式注册的跳板机上,与无关生产服务共用文件系统,累积的按
SHA 打标镜像把根分区占满,PostgreSQL fixture 起不来,staging 连续 5 个提交发不
出去。把 12 个 job 统一迁到 xiaoxin,并在开跑前回收磁盘、余量不足时直接报磁盘
原因而不是让 23 个数据库测试代为失败。

当年据以搬迁的「xiaoxin 缺少 Docker Compose v2」是误诊:真实原因是用户级插件
目录里一个零字节 docker-compose 遮蔽了系统插件。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-18 10:12:55 +08:00
Jesse_Chen 8ddcef4cf1 fix(deploy): prevent Next.js chunk version skew
Independent Staging Quality Gate / validate (push) Successful in 13m28s
Independent Staging Quality Gate / publish (push) Successful in 10m14s
2026-08-16 09:09:27 +08:00
Jesse_Chen 934c4175d3 ops: automate production recovery attestation
Independent Staging Quality Gate / validate (push) Successful in 13m3s
Independent Staging Quality Gate / publish (push) Successful in 2m18s
2026-08-16 01:03:10 +08:00
Jesse_Chen 7a613f26db fix(ci): isolate staging gate from legacy main listener
Independent Staging Quality Gate / validate (push) Successful in 12m45s
Independent Staging Quality Gate / publish (push) Successful in 2m7s
2026-08-13 13:05:59 +08:00
Jesse_Chen c8bd8e8a2b fix(ci): provide Gitea context to deploy dispatch
Staging Backend Quality Gate / validate (push) Successful in 12m15s
Staging Backend Quality Gate / publish (push) Successful in 2m10s
2026-08-13 12:43:18 +08:00
Jesse_Chen 945f8974d4 fix(ci): inject token for staging deploy dispatch
Staging Backend Quality Gate / validate (push) Successful in 12m40s
Staging Backend Quality Gate / publish (push) Failing after 2m5s
2026-08-13 12:23:13 +08:00
Jesse_Chen 013c15a9e9 ci(staging): decouple deployment from main
Staging Backend Quality Gate / validate (push) Successful in 14m50s
Staging Backend Quality Gate / publish (push) Failing after 7m58s
2026-08-13 11:57:24 +08:00
Jesse_Chen 9235ee66f6 keep staging image build on turbopack
Staging Backend Quality Gate / validate (push) Successful in 17m58s
Staging Backend Quality Gate / publish (push) Successful in 4m14s
2026-08-09 22:14:40 +08:00
Jesse_Chen 4f3f842958 avoid duplicate staging production build
Staging Backend Quality Gate / validate (push) Successful in 12m20s
Staging Backend Quality Gate / publish (push) Failing after 47m39s
2026-08-09 21:06:47 +08:00
Jesse_Chen b40f3a1cf0 fix staging npm ci in-container timeout
Staging Backend Quality Gate / validate (push) Successful in 16m27s
Staging Backend Quality Gate / publish (push) Failing after 55m53s
2026-08-09 16:06:16 +08:00
Jesse_Chen f53e2d09ed ops: add production PostgreSQL migration tooling 2026-08-09 13:20:06 +08:00
Jesse_Chen 04c4bd3ead ci: isolate staging dependency install
Staging Backend Quality Gate / validate (push) Has been cancelled
Staging Backend Quality Gate / publish (push) Has been cancelled
2026-08-09 13:18:47 +08:00
Jesse_Chen 07223b6b4a fix(staging): extend Gitea publish timeout
Staging Backend Quality Gate / validate (push) Successful in 20m7s
Staging Backend Quality Gate / publish (push) Successful in 14m51s
2026-08-07 15:24:55 +08:00
Jesse f145f52b01 fix(staging): bound frontend quality build
Staging Backend Quality Gate / validate (pull_request) Successful in 11m6s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-07 00:06:45 +08:00
Jesse c1061695c7 fix(staging): retry exact gate checkout 2026-08-06 20:47:38 +08:00
Jesse 8473146773 fix(staging): deploy gate-attested controllers
Staging Backend Quality Gate / validate (pull_request) Successful in 14m1s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 19:18:04 +08:00
Jesse_Chen 35fa0f0c78 Fix artifact inputs in Docker uploader
Staging Backend Quality Gate / validate (pull_request) Successful in 11m18s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 02:50:40 +08:00
Jesse_Chen fdd0dcdd3b Run vendored artifact uploader directly
Staging Backend Quality Gate / validate (pull_request) Successful in 14m17s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 02:14:34 +08:00
Jesse_Chen c1c2094b77 Fix local artifact action inputs
Staging Backend Quality Gate / validate (pull_request) Successful in 13m30s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 01:38:36 +08:00
Jesse_Chen b412108a2b Vendor Gitea artifact upload action
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-06 00:59:46 +08:00
Jesse_Chen f8ace3125a Use internal artifact action mirror
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-06 00:54:16 +08:00
Jesse_Chen 11ae58c7e5 Use Gitea-compatible artifact upload action
Staging Backend Quality Gate / validate (pull_request) Successful in 13m27s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 00:08:18 +08:00
Jesse_Chen 88cdb6e6a0 Use runner-native artifact upload action
Staging Backend Quality Gate / validate (pull_request) Successful in 11m51s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 23:17:56 +08:00
Jesse_Chen 7d818d5e51 Keep registry auth through manifest capture
Staging Backend Quality Gate / validate (pull_request) Successful in 15m59s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 20:00:41 +08:00
Jesse_Chen 3b08826752 Run pinned Node integration tests on host
Staging Backend Quality Gate / validate (pull_request) Successful in 12m18s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 17:33:55 +08:00
Jesse_Chen c2949bbb50 Run integration tests on runner tooling
Staging Backend Quality Gate / validate (pull_request) Failing after 13m5s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 17:16:21 +08:00
Jesse_Chen 2e62dc15bf Skip unused Playwright setup in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 16m38s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 16:53:28 +08:00
Jesse_Chen 0127321c06 Use reachable npm registry in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 16:41:23 +08:00
Jesse_Chen 9190b0edef Use reachable Playwright mirror in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 16:21:26 +08:00
Jesse_Chen a3a354e88f Install C++ compiler for Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 15:57:46 +08:00
Jesse_Chen 77c663b9b7 Install Python headers for Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 5m19s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 15:48:09 +08:00
Jesse_Chen a49ab48936 Use existing PyPI mirror in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 10m0s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 15:32:56 +08:00
Jesse_Chen c1543bdb5c Bound Gitea CI dependency resolution
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 15:16:09 +08:00
Jesse_Chen 8174edc10d Install Python venv support in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 14:20:28 +08:00
Jesse_Chen 4c4b7751cc Use pinned ECR PostgreSQL image for Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 14:12:25 +08:00
Jesse_Chen 54b886fce9 Run Node tooling in a pinned CI container
Staging Backend Quality Gate / validate (pull_request) Failing after 6m42s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 13:55:52 +08:00
Jesse_Chen aa958758b7 Install missing CI toolchain packages
Staging Backend Quality Gate / validate (pull_request) Failing after 14m23s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 13:26:05 +08:00
Jesse_Chen ef0f01f193 Run quality gate on available Linux runner
Staging Backend Quality Gate / validate (pull_request) Failing after 4m39s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 13:16:06 +08:00
Jesse_Chen e9800ed324 Install Compose from runner package manager
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 12:56:14 +08:00
Jesse_Chen ca4417a345 Use existing registry mirror for PostgreSQL CI
Staging Backend Quality Gate / validate (pull_request) Failing after 8m31s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 12:44:40 +08:00
Jesse_Chen 2c511eb0ce Retry Gitea CI tool downloads
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 12:42:55 +08:00
Jesse_Chen 0bccba89ec Retry PostgreSQL image preload in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 3m18s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 12:37:15 +08:00
Jesse_Chen 7fe29dcf01 Fix Gitea quality gate portability
Staging Backend Quality Gate / validate (pull_request) Failing after 19m39s
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 11:52:38 +08:00