Files in the top-level directory from the latest check-in

  • .dockerignore
  • .env.example
  • .cursor
  • .fossil-settings
  • .github
  • config
  • deploy
  • priv
  • scripts
  • src
  • test
  • Caddyfile
  • compose.yml
  • Dockerfile
  • fossil-linux-x64-20260801193352.tar.gz
  • LICENSE
  • README.md
  • rebar.config
  • rebar.lock

Cambrian

Cambrian 是以 Fossil SCM 为唯一仓库事实源的自托管协作平台。平台提供账号、个人/组织 Namespace、仓库目录、协作元数据、套餐配额和 Web 界面;Fossil 自带的 Timeline、分支、标签、Ticket、Wiki、Forum 与仓库权限仍由 Fossil 管理。

当前边界

  • 仓库 canonical URL:/{用户名或组织名称}/{仓库名}。
  • 平台级 Timeline 和 Releases 已取消;仓库级 Fossil Timeline/下载继续保留。
  • Git 只读镜像由平台从 Fossil 导出,Clone/Fetch 可用,Push(git-receive-pack)明确拒绝;不会 autopush 到外部 Git 远端。
  • 平台管理四种基础仓库角色:Setup、Admin、Reader、Developer。组织 Owner → Setup,组织 Admin → Admin,普通成员 → Developer;更细 Fossil capability 在仓库内设置。
  • 套餐只做功能开关与配额管理,不接支付、结算或支付渠道。
  • 首次 Setup 支持 PostgreSQL 或 SQLite;SQLite 适合单节点,生产扩展优先 PostgreSQL。

开发与测试

要求 Erlang/OTP 27+、rebar3、Fossil CLI;Git CLI 仅用于读取镜像协议测试。复制 .env.example 并设置专用数据库:

cp .env.example .env
rebar3 compile
rebar3 eunit

完整应用测试需要 CAMBRIAN_TEST_DATABASE_URL 指向独立的 _test 数据库;当前沙盒无法访问远程 PostgreSQL 时,相关用例会失败/取消,不能当作通过证据。SQLite 可用 CAMBRIAN_DATABASE_URL=sqlite:///绝对路径。

公共 HTTP 默认 8820,内部 Fossil HTTP 默认 8821 且不得暴露。健康端点:/health/live、/health/ready。

生产启动设置 CAMBRIAN_ENV=prod:必须提供不少于 32 字符的 CAMBRIAN_SECRET,数据库须为 PostgreSQL(除非显式 CAMBRIAN_ALLOW_SQLITE=1)。发布产物:

rebar3 as prod release
CAMBRIAN_ENV=prod CAMBRIAN_ERL_COOKIE=<random> \
  _build/prod/rel/cambrian/bin/cambrian foreground

systemd 单元见 deploy/cambrian.service。容器镜像最后用 ARM 开发机交叉打包:

docker buildx build --platform linux/amd64 -t cambrian:latest --load .

分支策略

不得在 trunk 直接开发。每个 M 模块从 develop 创建独立分支,完成测试和代码评审后合入 develop。只有 M2–M8/M9 全部最终复评通过,才允许维护者把 develop 合入 trunk。

项目说明、需求、差距审计、开发计划和评审结果位于 docs/说明.md、docs/需求文档.md、docs/代码差距审计.md、docs/开发计划.md 和 docs/评审结果.md。

License: Apache-2.0.