由开源社维护的中国开源项目发现网站,基于 CNCF Landscape2 改造。本站保留项目的原始来源,分别记录历史起源、当前归属和资产许可;收录不代表认证、隶属或质量背书。
这份 README 是维护者入口,说明如何维护内容、开发、发布和同步上游。项目名单与证据以内容目录为准;单次迭代的评审、验收记录和设计文档不在这里持续累积,也不纳入源码提交。
网站前端使用 SolidJS、TypeScript 和 Vite。构建时使用 Rust 校验与转换内容,Node 脚本编排构建并补充本站元信息,最终生成完整的 dist/。上线后只需要静态托管,不需要 Rust 服务、数据库或 AWS。
内容目录 + 站点配置 + 关于页面 + 本地图片
↓
内容校验 → 公开投影 → 静态生成器
↓
本站标题、分享元信息与基础路径注入
↓
dist/ → 静态托管
本站完整构建入口是根目录的 npm run build。 直接运行 Cargo 构建命令不会执行最后的本站元信息与基础路径注入;ui/webapp/dist/ 是生成器使用的页面模板,也不是可直接发布的最终网站。build 分支用于保存生成产物,内容应在源码分支修改后重新构建。
默认构建读取 site/catalog.yml,使用 --site-profile 关闭首发范围之外的采集和产物,不需要 GitHub、Crunchbase 或 CLOMonitor 凭证。首次构建仍需联网下载 Rust、Yarn 依赖。保留的嵌入等 UI 包仍参与工具链编译,不等于这些能力已对访客开放。
| 需要修改什么 | 编辑位置 | 维护边界 |
|---|---|---|
| 条目、分类、标签、译文、来源与审核状态 | site/catalog.yml |
正式内容的唯一默认输入,不手改生成的 JSON |
| 条目图片 | site/assets/logos/ |
使用本地素材并在条目中记录来源;无 Logo 时使用占位图 |
| 站点中英文名称、标题与简介 | site/brand.json |
集中维护站点身份,英文文案不代表已实现完整语言切换 |
| 运营方、主题色、页头页脚、域名与子路径 | settings.yml |
foundation 是生成器沿用的字段名,本站配置为开源社 |
| 关于、起源说明、来源声明与纠错说明 | guide.yml |
内容公开到关于页面,不放内部审核材料 |
| 品牌 Logo、favicon、分享图 | site/assets/brand/ |
来源与加工记录见该目录的 README.md |
| 内容契约及公开字段投影 | crates/core/src/site_catalog.rs、crates/core/src/site_catalog/projection.rs |
改动需检查校验、引用、发布过滤和旧链接兼容性 |
| 本站生成适配与功能边界 | crates/cli/src/build/site_content.rs、crates/cli/src/build/site_profile.rs |
接入内容并约束首发产物,避免向上游通用模型散布本站规则 |
| 页面注册与界面能力 | ui/webapp/src/features/index.ts、ui/common/src/siteCapabilities.ts |
路由、导航和生成能力一起调整 |
| 构建、开发、预览和元信息 | scripts/site.mjs、scripts/site-brand.mjs |
保持本站入口与上游生成器边界清晰 |
| 持续集成与产物发布 | .github/workflows/ |
区分验证和发布权限,核对实际托管配置 |
data.yml 和 logos/ 是旧格式兼容输入,不参与默认本站构建。crates/core/testdata/site-catalog-v1.yml 是覆盖五类对象的合成夹具,不得作为真实收录名单发布。dist/、缓存和 ui/webapp/static/ 都是生成内容,不提交到源码分支。
收录支持五类对象;不同类型必须核验其实际入口与资产范围:
| 类型 | 主要入口 | 许可与资格核验 |
|---|---|---|
| 软件 | 官方源代码仓库 | 公开源码及覆盖所收录代码的 OSI 开源许可证 |
| 模型权重 | 官方权重发布入口 | 对应权重版本的许可,不能继承推理代码或训练工具的许可 |
| 数据集 | 官方数据入口 | 数据本体的范围、版本和许可,不能只核验采集工具 |
| 开放标准 | 官方规范正文 | 正文许可与实施/专利政策分别核验 |
| 社区/组织 | 官方身份入口 | 公开身份、活动与起源依据;组织身份许可证为 not_applicable |
模型、数据和标准资产若确实采用 OSI 许可证,可通过对应资产的许可核验;这不替代其他收录条件。非 OSI 专用许可、受限获取方式或实施政策存在未决问题时,相关条目保持待审核,不自动视为合格。
起源范围涵盖中国大陆、香港、澳门、台湾,按公开证据分别记录。历史起源与当前维护者、基金会归属分开维护;符合起源条件的条目迁移至海外组织后仍可收录。域名、中文名称、当前托管位置和个人姓名不能单独作为起源证据。
维护一个条目时依次完成:
- 编辑内容。 添加规范名称、别名、中文必填文案、可选英文文案、分类与原始入口。稳定
id不随改名、分类或版本变化;多分类引用同一个条目,真实存在的旧链接通过legacy_ids/legacy_links映射。 - 补足依据。 记录公开证据的发布方、链接、支持的陈述和核验日期。许可绑定实际入口和版本/提交快照;多仓库、多资产的许可各自核验,不从一个仓库外推整个产品或项目群。不能确认维护状态时使用
unknown。 - 提交审核。 新条目从
draft/in_review开始,由内容负责人核对起源、许可和公开信息,批准后填写review并改为published。自动校验通过和 DCO 签署都不等于内容批准。 - 验证候选产物。 更新
content_version,运行npm run validate、npm run build和预览,检查页面、原始链接及dist/data/site.json。内容负责人确认收录,发布负责人另行确认上线。 - 持续纠错。 已发布条目出现待复核问题可使用
needs_review;确认应撤回时使用withdrawn并填写最小公开说明,合并条目可指向替代 ID。网络暂时不可达不直接等同于归档或不合格。
publication_status 管发布状态,project_status 管维护状态,两者互不替代。只有 published/needs_review 进入公开地图与条目投影;草稿、待审条目、内部审核字段和仅被非公开条目引用的证据不进入产物。撤回条目只保留必要的链接记录。
dist/data/site.json 保存本站公开元数据与 ID 映射;data/base.json、data/full.json 供现有前端使用;sources/data.yml 只含过滤后的兼容输入。原始 catalog、settings、guide 不复制到发布目录,关于页公开内容生成于 data/guide.json。产物过滤不能使公开源码仓库中的材料保密,源码同样不得保存私人材料或凭证。
条目 Logo 支持本地 PNG、JPEG、WebP、GIF 或静态 SVG,实际内容必须匹配扩展名。SVG 支持静态形状、文字、渐变和本文件引用,不接受脚本、事件、内联 CSS、样式表、嵌入图片或外部资源。不合格的 SVG 应改用静态展示属性或转换为 PNG;声明的素材缺失、路径越界或校验失败会阻断构建。
品牌素材使用开源社认可的原始文件,保留比例和颜色,并记录来源及加工过程。页头使用蓝色横版,深色页脚使用白色横版;favicon 和分享图也随站点本地发布。替换图片后同步更新 settings.yml 中的路径和素材来源记录,检查桌面、移动、浏览器图标与分享预览。
站点身份修改时一起核对 site/brand.json、settings.yml 的页脚/简介和 guide.yml 的公开介绍;运营链接应指向本站仓库和开源社官网。保留 Landscape2 的合法来源与版权声明,以及项目自身真实的 CNCF 等基金会归属。
准备 Node.js 26.12.1(与 CI 一致)、Rust 1.99.1+、Yarn Classic 1.22.22,以及系统所需的本地编译工具。版本依据分别为根 package.json、Cargo.toml 和构建工作流。
在仓库根目录运行:
npm install --global yarn@1.22.22
npm run validate
npm run build
npm run preview构建会编译本仓库生成器,并按各 UI 包的锁文件安装和编译依赖。validate 检查站点设置、关于页、正式目录及合成夹具;需要检查旧格式输入时使用 npm run validate -- --legacy-data。
preview 读取最终 dist/,默认端口为 8000,并使用产物中的 base_path。按仓库默认配置,访问 http://127.0.0.1:8000/chinese-oss-landscape/。预览不会自动重建内容。
npm run dev
# 可选开发端口
npm run dev -- --port 5174dev 先构建并准备数据,再启动 Vite,默认访问 http://127.0.0.1:5173/。开发服务忽略发布子路径,前端支持热更新;修改内容、配置或图片后重新运行命令。修改共享组件时,可另开终端运行 yarn --cwd ui/common dev。
检查合成数据时显式指定输入,完成后恢复正式目录:
npm run build -- --content-file crates/core/testdata/site-catalog-v1.yml
npm run preview
# 停止预览后,恢复正式目录构建
npm run build按变更范围选择验证,不以更新 README 代替验收记录:
| 变更范围 | 相关验证 |
|---|---|
| 内容、配置、图片 | npm run validate、npm run build,预览分类、搜索、详情与原始链接 |
| 构建编排或站点元信息 | npm run test:site,并检查完整构建的 HTML、基础路径和图片 |
| 内容契约与发布投影 | cargo test --locked -p landscape2-core site_catalog,检查真实目录和合成边界样例 |
| 前端行为 | yarn --cwd ui/webapp test --run、yarn --cwd ui/webapp lint,检查桌面和移动页面 |
| Rust、共享组件或工具链 | 相应包的测试与静态检查,加上完整 npm run build;以 .github/workflows/ci.yml 为 CI 入口 |
先确定实际托管平台、域名、发布子路径和发布负责人,再修改 settings.yml。以下地址仅为格式示例,并非已经选定或授权使用的生产域名:
url: https://map.example.org
base_path: /chinese-oss-landscape在域名根目录部署时删除 base_path;在子路径部署时保留以 / 开头的路径。默认本地地址生成 noindex,不会输出正式 canonical 或 og:url。配置真实发布地址后,npm run build 才会生成包含子路径的 canonical、分享页 URL 和绝对分享图地址。
部署单位是 dist/ 的全部文件。静态托管需正确处理 SPA 路由回退,同时让不存在的 JS、JSON、图片等资源返回 404,不能把缺失资源伪装成 HTML。上线前验证首页、子页面刷新、详情直达、数据加载、图片与纠错入口;本地 Vite 预览规则不会自动成为生产服务器配置。
每次构建在临时目录完成,成功后整体替换 dist/;失败保留原产物。这只保证本地输出替换,生产环境还需要完整版本切换、缓存策略和回滚演练:
- 保存候选产物,并记录源码 SHA、
content_version、契约版本、工具链、目标地址和校验结果。 - 在预发布环境验证该份产物,确认页面与延迟加载数据不会混用新旧版本。
- 保留上一稳定版本,取得发布授权后整体切换;目标配置变化时重新构建、验收。
- 发布失败或需要回滚时恢复上一份完整产物,不只替换某个 JSON,也不临时重新构建旧代码。
构建工作流 在 main 推送或手动触发时构建本站,上传 landscape-site artifact,并将产物推送到 build 分支。它需要仓库内容写入权限,也会写入 .nojekyll 和用于 Pages 回退的 404.html。启用 GitHub Pages 或其他托管前应检查触发方式、发布权限和目标配置;该工作流本身不代表生产部署或域名使用已经获准。Pages 的回退方式也需在所选部署环境中验收。
本站维护入口是 kaiyuanshe/chinese-oss-landscape,CNCF Landscape2 是只读的引擎同步源。向本站贡献时从个人 fork 提交 PR,目标为本站 main,不要把本站内容和品牌修改直接送往 CNCF 仓库。
先核对远端 URL 与工作区,再 fetch 最新目标分支;从最新目标创建 feat/…、fix/… 等功能分支,已有分支在适当时 rebase 到最新目标。只向自己的 fork 推送;上游远端应禁用推送,默认推送目标设为个人 fork。PR 前检查提交范围,避免混入其他功能或历史提交。
每个提交使用 Conventional Commits,并按 DCO 要求 添加与贡献者身份一致的 Signed-off-by。委托代理提交时,应先确认本次完整提交消息和签署身份;内容收录批准、Git 签署确认和生产发布授权分别处理。设计、PRD 和逐轮审核记录放在源码仓库外,不进入提交或 PR。
吸收 CNCF 更新时,将引擎更新与本站内容变更分开评审,优先保持本站差异集中在 site/、配置、公开投影、脚本和功能注册入口。同步后重点核对:
- 上游数据结构、校验和序列化变化是否影响稳定 ID、公开字段与旧链接。
- UI 组件、路由、构建模板与依赖变化是否需要调整本站适配层。
- 被关闭或移除的采集、治理、游戏、AWS 部署、WASM 和发行工具链是否被重新引入。
- 锁文件与工具链更新后,内容校验、相关 Rust/UI 测试和完整静态构建是否仍通过。
这种分层减少耦合,不保证上游更新自动兼容或合并无冲突。不要用上游生成产物覆盖本站数据,也不要绕过 npm run build 的发布适配层。
按以下顺序拆分独立任务,每次明确输入、输出、兼容性和验收条件。这里描述长期方向,不维护逐轮完成清单。
| 阶段 | 重点 | 交付边界 |
|---|---|---|
| 内容底座 | 稳定 ID、五类内容、来源与许可、审核和发布过滤 | 可追溯内容与可验证的公开投影;不以凑齐数量降低收录条件 |
| 品牌与双语 | 开源社品牌、默认中文、英文切换、内容回退、URL 与偏好 | 站点身份一致;界面语言与原始项目名称分别处理 |
| 浏览、搜索与详情 | 分类/卡片、跨语言搜索、类型筛选、来源展示和稳定链接 | 用户能找到条目、理解其类型与依据并进入原始来源 |
| 维护与发布 | 收录及纠错流程、审核责任、数据复核、预发布与回滚 | 编辑者主要通过数据和素材完成维护,发布有完整版本与责任边界 |
| 可选扩展 | 统计、下载、PNG/PDF、嵌入、仓库快照或工具链轻量化 | 按具体需求单独立项,不与官网首发捆绑 |
首发以静态地图、搜索、条目详情与关于/纠错入口为中心。中英文品牌和内容字段已经预留,完整界面翻译与语言切换仍需按对应模块实现;类型专属详情和筛选也需与公开数据模型衔接。网站不是完整生态名录,不提供站内代码托管、账号系统、CMS、项目评分或实时第三方指标保证。
统计、融资治理、下载、嵌入和截图等可选能力在首发配置中关闭。启用扩展必须同时检查 UI、可直达路由、生成产物和数据公开边界,不能只打开一个导航开关。旧格式 --data-file 不具备本站内容审核过滤保证,不应替代正式目录发布入口。
本站保留 CNCF Landscape2 的来源、版权及 Apache-2.0 许可证。网站代码、编辑数据、引用资料、项目 Logo 和商标各自遵循适用条款;代码许可证不自动覆盖所有内容。内容复用许可及署名方式需要由运营方明确,不能把仓库许可证当作整站素材的统一授权。