Files
chuan e47e4a7c03
Release / release (push) Successful in 36s
Cache locale baseline for CI builds
2026-05-18 01:53:47 +08:00

5.5 KiB
Raw Permalink Blame History

Gitea 主题项目规则

项目目标

本项目用于创建 Gitea 使用的主题样式和模板覆盖。样式使用 Bun + TypeScript token + Lightning CSS + Preview 的组合:TypeScript 负责组织 token 和样式片段,Lightning CSS 负责最终 CSS 转换和压缩,Preview 用于快速查看基础效果。

目录职责

themes/ 放颜色主题源数据,方便快速扩展新主题。当前维护 themes/github-light/themes/github-dark/,颜色、语义变量、目标变量、主题元信息都从这里维护;构建时不直接读取 .gitea

styles/tokens/ 负责把当前 themes/ 主题渲染成 Gitea 可识别的 CSS 变量,并承载必需变量校验、派生 token、兼容别名和输出格式控制。这里不应该直接维护一套颜色表,也不应该出现具体页面选择器。

styles/primitives/ 放全站基础控件规则,例如 .ui.button.ui.inputinput[type="checkbox"].ui.dropdown.tippy-box。这一层可以使用 token,但不应该处理具体页面布局。

styles/components/ 放 Gitea 可复用业务组件样式,例如顶部导航、仓库列表、热力图、动态列表、登录表单、clone 面板。它比 primitive 更具体,但还不是页面级。

styles/pages/ 放某个页面的布局修复和局部覆盖,例如 dashboard 首页、explore 仓库页、org/create 页面、登录页布局。这里可以写具体页面选择器,但改动范围必须尽量局部。

templates/ 放 Gitea 模板覆盖文件。模板修改应尽量保持最小化,避免把样式逻辑写进模板。

options/locale/ 放当前 Gitea 版本的官方 locale 基线。options/locale-overrides/ 放本项目新增或修改的 locale 增量 key。Gitea 运行时需要完整 locale 文件,所以构建时会合并基线和增量覆盖并输出到 .gitea/custom/options/locale/

src/ 放构建辅助代码、类型和聚合逻辑。这里不直接承载某个具体页面的样式规则。

.gitea/ 放 Gitea custom 目录和源代码参考资源。构建产物会输出到 .gitea/custom/public/assets/css/theme-github-dev.css.gitea/custom/public/assets/css/theme-github-dev-dark.css

dist/ 放本地构建产物,主要用于检查和 Preview。

分层原则

一个规则只应该属于一个层级。按钮、输入框、下拉菜单等基础控件问题放到 primitives/;仓库列表、导航栏、动态流等可复用业务块放到 components/;只在某个页面成立的间距、布局和覆盖放到 pages/

低层不能依赖高层。tokens/ 不能依赖 primitives/components/pages/primitives/ 不能依赖页面结构;components/ 不应该修复具体页面布局。

避免重复定义颜色、阴影、圆角和间距。颜色主题值优先在 themes/ 中新增或修改,再通过 styles/tokens/ 输出为官方兼容的 var(--color-*)

页面级选择器必须足够具体,避免影响全站控件。例如登录页按钮间距问题应该放在登录页或登录组件范围内,不应该修改所有 .ui.button

命名规则

主题 CSS 变量优先保持 Gitea 官方兼容命名,例如 --color-primary--color-body--color-input-background。只有新增且无法映射到官方变量的项目私有变量,才使用自定义前缀。

主题名与 Gitea CSS 文件名保持一致。当前主题名是 github-devgithub-dev-dark,输出文件分别是 theme-github-dev.csstheme-github-dev-dark.css。不要使用 giteagitea-autoarc-green 这类内置主题名,避免 Gitea 加载内置 hashed 资源而不是 custom 主题文件。

样式模块默认导出字符串常量,由 styles/index.tstokens -> primitives -> components -> pages 顺序聚合。styles/tokens/index.ts 必须通过 render-theme.ts 输出当前主题,不直接拼接主题源数据。

构建与预览

使用 bun run build 构建未压缩 CSS。

使用 bun run build:min 构建压缩 CSS。

使用 bun run dev 监听样式、主题和 src 文件变化。

使用 bun run preview 启动本地预览页面。

使用 bun run locale:sync 从本地 options/locale/ 基线合并 options/locale-overrides/。需要刷新官方基线时,运行 bun scripts/locale.ts --remote

使用 bun run test 构建 light/dark 两套主题并检查必要输出是否存在。

使用 bun run compose:up 启动 Gitea 开发容器,使用 bun run compose:down 停止容器。

修改流程

官方样式基线和源码映射见 docs/official-style-map.md。当前项目先拆分官方 theme-gitea-light.css,再在当前仓库内维护 GitHub Light 风格的主题增量。

新增视觉值时,先判断是否应该成为 token。颜色和主题值放到 themes/;派生变量、Gitea 兼容别名和必需变量校验放到 styles/tokens/

修改控件外观时,优先检查 styles/primitives/,确保不会破坏页面级布局。

修改业务组件时,优先放到 styles/components/,并使用组件范围选择器约束影响面。

修改单个页面问题时,放到 styles/pages/,并写明页面级父选择器。

修改模板时,先确认 Gitea 原始模板结构,再把覆盖文件放入 templates/bun run build 会同步到 .gitea/custom/templates/

修改翻译时,只改 options/locale-overrides/ 里的增量 key。不要手工编辑 options/locale/locale_*.json;它是当前 Gitea 版本的官方基线缓存,仅在升级 Gitea 版本或显式远程刷新时更新。