☰
Ontology Playground 的 5 层 CI/CD 流水线完整拆解
2026/10/20 1:56:48 网站建设 项目流程

Ontology Playground 的 5 层 CI/CD 流水线完整拆解

【免费下载链接】Ontology-PlaygroundFree, open-source web app for learning about ontologies and Microsoft Fabric IQ. Explore a catalogue of pre-built ontologies, design your own visually, export as RDF/XML, and share interactive diagrams. Zero backend, fully static.项目地址: https://gitcode.com/GitHub_Trending/on/Ontology-Playground

Ontology Playground 是一个零后端、纯静态的本体(Ontology)学习与可视化 Web 应用,却维护了一套 5 层的CI/CD 流水线:构建门禁、密钥扫描、双通道部署、PR 变更可视化、内容自动审核。以下逐层拆解 ​.github/workflows/ 里这些工作流背后的设计判断。

构建失败时,谁在守门

ci.yml 在每次 push 或 PR 指向 main 时触发,把验证拆成 15 个独立 step:npm ci --ignore-scripts锁定 package-lock.json 保证可复现构建;catalogue:build与learn:build把 RDF 数据和课程 Markdown 各自编译成前端产物;随后是validate(RDF 合法性)、tsc -b、lint、vitest、test:a11y(WCAG 2.1 AA 对比度)。最后还装 Chromium 跑大图谱性能预算,报告上传为Artifact留档。这个设计的精妙之处在于"哪一步坏就报哪一步"——CI 红了能直接定位是 RDF 校验、无障碍还是性能回归,不必本地复现。

密钥泄露如何从源头拦住

secret-scan.yml 做了两件容易省略的事。一是检出时用fetch-depth: 0拉完整提交历史——"提交后删除"是密钥泄露最常见的路径,漏掉全历史检查,扫描形同虚设。二是下载Gitleaks8.24.2 后,先执行sha256sum -c校验签名再运行,属于供应链防御。扫描本身只读contents: read权限,输出带--redact打码,敏感值不会出现在日志里。

两条部署通道在流水线里如何共存

工作流文件触发条件职责
deploy-ghpages.ymlpush 到 main主仓库发布到 GitHub Pages
azure-static-web-apps-green-plant-0bb1d2910.ymlpush main / PR 开启、更新、关闭Azure 部署 + PR 一次性预览环境
azure-static-web-apps-review.ymlpush 到review/**分支人工评审的临时预览

GitHub Pages 通道用pages: write+id-token: write走OIDC身份,密钥不落配置;concurrency组设为pages且cancel-in-progress: true,新提交会自动取消旧构建,避免旧包覆盖新包的竞态。VITE_BASE_PATH: /<仓库名>/让资源路径适配子目录部署,cp build/index.html build/404.html解决 SPA 深链刷新 404。Azure 通道在 PRclosed时执行action: "close"销毁预览环境,不留垃圾。两条通道都用github.repository判断只在主仓库运行,fork 用户天然不触发生产部署。

贡献者如何看到本体改动后的样子

这是整套流水线里最花哨的一段,拆成两个解耦的工作流。ontology-preview-render.yml 按路径过滤,只在 PR 触碰catalogue/**/*.rdf、metadata.json或图渲染组件时运行;直接检出 PR head 分支(兼容外部贡献者),对比 base 与 head 找出新增/修改的本体,起vite preview后用 scripts/render-ontology-previews.ts 渲染成 PNG。ontology-preview-comment.yml 监听它的workflow_run完成事件,把图片推到ontology-preview-assets分支托管,再在 PR 里查找或更新一条带标记的机器人评论——重复推送只更新原文,不刷屏。

两段式拆分的本质是权限隔离:渲染 job 只有contents: read,评论 job 才持有写权限,且要先校验 head sha 与 PR 唯一对应。把渲染逻辑塞进持写令牌的 job 里,等于让任何 PR 作者都能带着写权限执行任意渲染代码。

人工内容审核怎样跑进流水线

ontology-school-review-approval.yml 把课程审批自动化:审核 Issue 打ontology-school-approved标签关闭、或有权者评论#approved时触发;工作流校验评论者具备 push 权限后才解析 Issue 正文里的 Lesson Path,用sed删掉 content/learn/ 课程文件 frontmatter 中的reviewStatus: under-human-review行(幂等可重跑),重新编译后自动开出带标签的 PR。#approved是任何人都能发的评论,缺了这道权限前置校验,审核通道等于没设防。另外 ​.github/dependabot.yml 每周一更新 Actions 依赖,7 天冷却期避免刷屏。

👉 如果让你从零复刻这套设计,可迁移的原则有:每个可验证关注点独立成 step,失败即定位;权限按 job 最小化,读写分离;部署通道绑定 concurrency 防竞态,fork 靠仓库判断自动失效;把 PR 当作预览单元,让每个变更都有可看的产物;人审可以自动化,但触发器必须先过权限校验。

延伸阅读:docs/ontology-school-review-workflow.md、docs/github-oauth-setup.md

【免费下载链接】Ontology-PlaygroundFree, open-source web app for learning about ontologies and Microsoft Fabric IQ. Explore a catalogue of pre-built ontologies, design your own visually, export as RDF/XML, and share interactive diagrams. Zero backend, fully static.项目地址: https://gitcode.com/GitHub_Trending/on/Ontology-Playground

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询