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.