Repository navigation
ci(docs-deploy): deploy the Object UI docs site (www.objectui.org) from ui/apps/site - #27005
Conversation
objectui's own docs-deploy workflow went with the rest of the nested ui/.github/workflows, and ui/apps/site/vercel.json keeps Vercel's Git deployments off, so nothing has published www.objectui.org since the merge. Add a second job to the root Docs Deploy workflow that builds the site on the runner and uploads it with vercel deploy --prebuilt, the way the apps/docs job does, with a step that refuses loudly when the Vercel project's Root Directory is not ui/apps/site. Claude-Session: https://claude.ai/code/session_01L9qibyAYPFxpNP4BCr7Z82 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibyAYPFxpNP4BCr7Z82 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsInputs read: card #26993 body + both comments (claim 6457381366, os-dev-report 6457838917); PR #27005 body, file list (one file), net diff vs Accept-set and public-surface changes the diff implies — each judged:
Watch item (not a must-fix): ② Semver levelThe diff publishes nothing: one CI workflow file, no ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Requested by Tesla · project thread
Part of #26993. This PR carries the code half. The card stays open for its proof: one
workflow_dispatchrun of the new job onmainthat prints the deployment URL, after the maintainer action below. Tier H (.github/workflows/**): draft until green, GOVERNED_APPROVERS review it, the maintainer merges, and no seat enqueues it.Clause-②: no
Metadata-protocol: none
维护者速读
.github/workflows/docs-deploy.yml加第二个作业Deploy objectui docs to Vercel (production),和现有apps/docs作业同一套做法(runner 上vercel pull→vercel build --prod→vercel deploy --prebuilt --prod),部署ui/apps/site到 Vercel 项目objectui(www.objectui.org)。原apps/docs作业一个字没改。ui/.github/workflows/一起删了,ui/apps/site/vercel.json又关了 Git 自动部署,所以合并后没有任何流程发布 www.objectui.org,18.2 之后的文档改动都上不了线。main上按定时(每 6 小时)或手动触发运行,不影响任何 PR 检查。两个作业互相独立,新作业红了不影响apps/docs的部署。回滚 = revert 本 PR。.github/workflows/docs-deploy.yml末尾的deploy-ui-site作业,重点看 "Require the project's Root Directory to be ui/apps/site" 这一步和 build 步骤不带 token 的写法。main)。Root Directory 改好之前,新作业会在 Root Directory 那一步红,报错里写明要改的设置;改好之后应该绿,并在 summary 里打印部署 URL。objectui(prj_v1rXIczaI7YGmXmseQCLFUFOFxTB)的 Settings → Build and Deployment → Root Directory 从apps/site改成ui/apps/site,然后批准合并本 PR。What changes
.github/workflows/docs-deploy.yml:deploy-ui-site, namedDeploy objectui docs to Vercel (production). It keeps the shape of the existingdeployjob:main, then a missingVERCEL_TOKEN, each an::error::and a red run;./.github/actions/setup-workspace;vercel pull→vercel build --prod→vercel deploy --prebuilt --prod, all run from the repository root;VERCEL_CLI_VERSION(60.1.3) and the same team id; the project id is objectui's old one,prj_v1rXIczaI7YGmXmseQCLFUFOFxTB;ui/apps/site/.next/BUILD_IDand.vercel/output/config.json;deploy, both explained in the job's header:vercel pullreadssettings.rootDirectoryfrom the.vercel/project.jsonthe pull wrote. It goes red, naming the dashboard setting and the value it needs, unless that readsui/apps/site. The project's setting still readsapps/sitefrom when the site lived in objectui. Without this step that would fail later insidevercel build, with an error that does not name the cause.vercel buildgets noVERCEL_TOKEN. Onlypullanddeploycall the Vercel API. This is the card's ask and objectui's original choice: the build runs every workspace package's lifecycle scripts.deployjob (apps/docs) is byte-for-byte unchanged.ui/apps/site/vercel.jsonis unchanged. Its commands work in the merged layout, as measured below.Tests
Cold local build of the exact production command, run the way Vercel runs it (cwd
ui/apps/site, thencd ../..):`pnpm turbo run build --filter=@object-ui/site` from `ui/`, head 137ca90
turbo run --dry=jsonfromui/resolved this repository's root and scheduled the site with its whole closure: 67 build tasks, 30 in @object-ui packages and 37 in @objectstack packages (65 of them have work to do, per the run below).--concurrency=2, underscripts/pm/os-verify-lock.sh:Tasks: 65 successful, 65 total·Cached: 0 cached, 65 total·WALL 596s EXIT 0.ui/apps/site/.next/BUILD_IDwas written.pnpm exec turbo --versionreads 2.11.5 from both the root andui/, so thecd ../..intoui/does not pick up a different turbo.The YAML parses: the jobs are
deployanddeploy-ui-site, with 10 steps in the new job.Verification
Derived gates (
node scripts/pm/dispatch-gates.mjs --commands, 36 commands for this one-file diff). The 35 fast ones were run locally on 137ca90 and every one exited 0. They were run again on the final head 2defad3 (a comment-only change on top), and all 35 exited 0 again. The long one,GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push pnpm check:pm-dispatch-gates, ran on 2defad3:✓ dispatch-gates self-test: 2224 cases pass.(fast 1935, slow 289),EXIT 0, 1191 s.Local gate list, each `:: exit 0`
node scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/check-self-test-wired.mjsnode scripts/check-self-test-wired.mjs --self-testnode scripts/check-self-test-workflow-commands.mjsnode scripts/check-self-test-workflow-commands.mjs --self-testnode scripts/check-step-collectors.mjsnode scripts/check-step-collectors.mjs --self-testnode scripts/check-whole-set-label-write.mjsnode scripts/check-whole-set-label-write.mjs --self-testnode scripts/docs-audit/check-drift-comment.mjsnode scripts/pm/ci-failure.mjs --self-testpnpm check:agent-test-spellingpnpm check:aggregator-rosterpnpm check:cross-package-test-inputspnpm check:declared-population-livepnpm check:driver-memory-censuspnpm check:gitlink-declaredpnpm check:node-versionpnpm check:nul-bytespnpm check:pm-expected-skipspnpm check:pm-governed-mergespnpm check:pm-post-stampedpnpm check:pm-record-recogniserspnpm check:pnpm-acquisitionpnpm check:pnpm-filter-targetspnpm check:refd-timer-probepnpm check:required-contextspnpm check:shard-attestationpnpm check:stall-guard-budgetpnpm check:stall-guard-headroompnpm check:watch-hint-literalpnpm check:workflow-status-functionspnpm check:workflow-step-name-quotingCI-only families are read from this PR's check-runs.
NOT MEASURED, and what proves it:
vercel pull, the Root Directory step's reading of.vercel/project.jsonand the upload. They needVERCEL_TOKEN, which this container does not have. Thesettings.rootDirectorykey is what the CLI'spullwrites. The firstworkflow_dispatchrun onmainafter the merge is the proof the card asks for.VERCEL_TOKENcan deploy to theobjectuiproject. The token belongs to the same team as theobjectstackproject. This is part of the card's maintainer action.Acceptance notes
@object-ui/site. The card allowed adding one to a ui lane, or saying why not. Not added, for three reasons:Build UI Depshands the ui jobs only its seven @objectstack packages, so the site's other 30 @objectstack packages and its @object-ui packages would build cold in every ui PR's run. That is a new advisory lane on the hottest filter.main, and "Run workflow" re-checks it at once.ui/content/docs/guide/ci-cd-pipeline.mdstill describes objectui's deleteddocs-deploy.yml(its cron, its secret table row). That page's rewrite or retirement is docs(ui): the CI/CD guide page describes objectui's 28 deleted workflows; retire it and repoint its ~28 readers (F14, parent #25677) #26944, so it is not touched here.Generated by Claude Code