Skip to content

About

Landscape2 is a tool that generates interactive landscapes websites

Resources

Code of conduct

Contributing

Stars

4 stars

Watchers

7 watching

Forks

Repository files navigation

中国开源地图

由开源社维护的中国开源项目发现网站,基于 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 专用许可、受限获取方式或实施政策存在未决问题时,相关条目保持待审核,不自动视为合格。

起源范围涵盖中国大陆、香港、澳门、台湾,按公开证据分别记录。历史起源与当前维护者、基金会归属分开维护;符合起源条件的条目迁移至海外组织后仍可收录。域名、中文名称、当前托管位置和个人姓名不能单独作为起源证据。

维护一个条目时依次完成:

  1. 编辑内容。 添加规范名称、别名、中文必填文案、可选英文文案、分类与原始入口。稳定 id 不随改名、分类或版本变化;多分类引用同一个条目,真实存在的旧链接通过 legacy_ids/legacy_links 映射。
  2. 补足依据。 记录公开证据的发布方、链接、支持的陈述和核验日期。许可绑定实际入口和版本/提交快照;多仓库、多资产的许可各自核验,不从一个仓库外推整个产品或项目群。不能确认维护状态时使用 unknown。
  3. 提交审核。 新条目从 draft/in_review 开始,由内容负责人核对起源、许可和公开信息,批准后填写 review 并改为 published。自动校验通过和 DCO 签署都不等于内容批准。
  4. 验证候选产物。 更新 content_version,运行 npm run validate、npm run build 和预览,检查页面、原始链接及 dist/data/site.json。内容负责人确认收录,发布负责人另行确认上线。
  5. 持续纠错。 已发布条目出现待复核问题可使用 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 5174

dev 先构建并准备数据,再启动 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/;失败保留原产物。这只保证本地输出替换,生产环境还需要完整版本切换、缓存策略和回滚演练:

  1. 保存候选产物,并记录源码 SHA、content_version、契约版本、工具链、目标地址和校验结果。
  2. 在预发布环境验证该份产物,确认页面与延迟加载数据不会混用新旧版本。
  3. 保留上一稳定版本,取得发布授权后整体切换;目标配置变化时重新构建、验收。
  4. 发布失败或需要回滚时恢复上一份完整产物,不只替换某个 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 和商标各自遵循适用条款;代码许可证不自动覆盖所有内容。内容复用许可及署名方式需要由运营方明确,不能把仓库许可证当作整站素材的统一授权。

About

Landscape2 is a tool that generates interactive landscapes websites

Resources

Code of conduct

Contributing

Stars

4 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages