Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test-and-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
- name: 检查部署凭据
run: |
if [ -z "${CLOUDFLARE_API_TOKEN}" ]; then
echo "::error::缺少仓库 secret CLOUDFLARE_API_TOKEN,本次没有发布。请在 Settings → Secrets and variables → Actions 里添加一个带 Workers Scripts: Edit 权限的 Cloudflare API token,然后重新运行本工作流。"
echo "::error::缺少 CLOUDFLARE_API_TOKEN,本次没有发布。请在仓库(或组织)的 Settings → Secrets and variables → Actions 里添加一个带 Workers Scripts: Edit 权限的 Cloudflare API token,然后重新运行本工作流。"
exit 1
fi
- name: 构建并发布
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ bun run deploy # 先构建,再用 bunx wrangler deploy 发布 dist/

产物只能来自仓库内容:`bun run build` 每次都会清空并重建 `dist/`,`bun run deploy` 也会先跑一遍构建,所以线上不会出现「仓库里已经有这节课、站点上还是 404」的漂移。这个漂移真实发生过:站点一度停在 4 节课,而仓库已经补到 40 节课,原因是构建与部署只在某台机器上手工跑过一次、此后再没人重跑。

发布前先跑 `bun test`。其中 [`tests/deploy-assets.test.ts`](./tests/deploy-assets.test.ts) 守住这条链路:构建产物覆盖 `courseData` 里的每一节课(缺课、`dist/` 里残留上一次的旧页面都会失败)、课程地址的末尾斜杠跳转(静态资源的 `html_handling`)与 Worker 的中文 404 仍然在,以及部署目标(Worker 名、`dist` 目录、自定义域名)与文档写的是同一个。发布默认是自动的:main 上的每次推送都由 [`.github/workflows/test-and-deploy.yml`](./.github/workflows/test-and-deploy.yml) 接手——先跑 `bun test`,通过后 `bun run deploy` 发布,最后抽检线上(每一节课、末尾斜杠跳转、词条面板、中文 404),任一步失败都会让这次运行变红。它需要仓库 secret `CLOUDFLARE_API_TOKEN`(权限 `Workers Scripts: Edit`;账号 ID 不是凭据,已经写在仓库里),缺这个 secret 时发布步骤会明确失败、不会静默跳过。手动发布仍然可用:在有 Cloudflare 凭据的机器上 `bunx wrangler login` 之后 `bun run deploy`,出错用 `bunx wrangler rollback` 退回上一个版本。
发布前先跑 `bun test`。其中 [`tests/deploy-assets.test.ts`](./tests/deploy-assets.test.ts) 守住这条链路:构建产物覆盖 `courseData` 里的每一节课(缺课、`dist/` 里残留上一次的旧页面都会失败)、课程地址的末尾斜杠跳转(静态资源的 `html_handling`)与 Worker 的中文 404 仍然在,以及部署目标(Worker 名、`dist` 目录、自定义域名)与文档写的是同一个。发布默认是自动的:main 上的每次推送都由 [`.github/workflows/test-and-deploy.yml`](./.github/workflows/test-and-deploy.yml) 接手——先跑 `bun test`,通过后 `bun run deploy` 发布,最后抽检线上(每一节课、末尾斜杠跳转、词条面板、中文 404),任一步失败都会让这次运行变红。它需要 `CLOUDFLARE_API_TOKEN`(权限 `Workers Scripts: Edit`;账号 ID 不是凭据,已经写在仓库里)——仓库级或组织级共享的 secret 都可以,缺它时发布步骤会明确失败、不会静默跳过。手动发布仍然可用:在有 Cloudflare 凭据的机器上 `bunx wrangler login` 之后 `bun run deploy`,出错用 `bunx wrangler rollback` 退回上一个版本。

发布后可以直接拿同一套浏览器复验打线上——`CSP_E2E_ORIGIN` 会复用已在运行的服务、不再自启开发服务器:

Expand Down
2 changes: 1 addition & 1 deletion docs/feature-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
| 键盘可达与焦点可见 | 已完成 | 全部 40 课都由 `bun run e2e:keyboard` 在无头 Chrome 里发真实按键事件复验(328 项检查:结构检查每课 8 项 + S1-02 与 S3-01 的键盘深路径每课 4 项),覆盖 Tab 绕圈全程可见焦点环、无正数 tabindex 打乱顺序、音效开关 Space 可切换、词条 Enter/Escape 与焦点归还、步进门闩挡得住、提交后焦点交给结果区;`tests/keyboard-access-contract.test.ts` 在 `bun test` 里逐课锁住两处焦点恢复动作(作答重画题面、提交成功),焦点环观感与读屏语气仍待人工确认 |
| 可复制的代码模板与错误对照 | 下一步 | 帮助初学者辨识常见 C++ 错误;不在浏览器端执行不受控代码 |
| 教师备课打印版 | 下一步 | 便于课堂使用;默认不包含学生账号或行为追踪 |
| 可选的公开静态发布 | 已完成 | 课程站点发布在 <https://cplus.talkincode.net>,由 Cloudflare Worker `csp-cpp-courseware` 托管静态资源;`bun run build` 从仓库内容重建 `dist/`,`bun run deploy` 先构建再发布,线上内容就是仓库的构建结果;课程地址的末尾斜杠跳转由静态资源的 `html_handling` 负责(Worker 看不到这类请求),Worker 只把 404 换成中文说明。main 上的推送由 `.github/workflows/test-and-deploy.yml` 自动发布(先 `bun test`,再 `bun run deploy`,最后抽检线上每一节课、末尾斜杠跳转、词条面板与中文 404),需要仓库 secret `CLOUDFLARE_API_TOKEN`。零账号、零排行榜、零在线判题、零个人画像的边界不变 |
| 可选的公开静态发布 | 已完成 | 课程站点发布在 <https://cplus.talkincode.net>,由 Cloudflare Worker `csp-cpp-courseware` 托管静态资源;`bun run build` 从仓库内容重建 `dist/`,`bun run deploy` 先构建再发布,线上内容就是仓库的构建结果;课程地址的末尾斜杠跳转由静态资源的 `html_handling` 负责(Worker 看不到这类请求),Worker 只把 404 换成中文说明。main 上的推送由 `.github/workflows/test-and-deploy.yml` 自动发布(先 `bun test`,再 `bun run deploy`,最后抽检线上每一节课、末尾斜杠跳转、词条面板与中文 404),需要 `CLOUDFLARE_API_TOKEN`(仓库级或组织级共享 secret 均可)。零账号、零排行榜、零在线判题、零个人画像的边界不变 |

## 不做

Expand Down
Loading