# 贡献指南 感谢关注 Prism!本仓库托管于 [git.rc707blog.top](https://git.rc707blog.top/rose_cat707/Prism)。 ## 开发环境 ### 依赖 - Go 1.25+(见 `go.mod`) - Node.js 20+(仅前端开发/构建) 国内网络可使用仓库内已配置的镜像: - Go:`go.env` → `GOPROXY=https://goproxy.cn,direct` - npm:`web/.npmrc` → `registry.npmmirror.com` 海外用户可将 `GOPROXY` 改为 `https://proxy.golang.org,direct`,npm 使用默认 registry 即可。 ### 启动 ```bash # 终端 1:后端 make run # 终端 2:前端(Vite 代理 /api → :8080) make dev-web ``` 浏览器访问 http://localhost:5173 ,默认密码 `admin`。 ### 测试与构建 ```bash make test # 运行 Go 单元测试 make build # 构建含前端的单二进制 dist/prism ``` ## 提交规范 - 一个 PR 聚焦一个主题,避免混合无关重构 - 涉及 API 变更时同步更新 `internal/api/openapi/spec.yaml` - 涉及 UI 变更请参考 `UI-DESIGN-SYSTEM.md` - 确保 `go test ./...` 通过 ## CI / 镜像发布 仓库使用 **Gitea Actions**(`.gitea/workflows/ci.yml`): | 触发 | 行为 | |------|------| | Pull Request | 仅运行 `go test ./...` | | 推送到 `main` / `master` | 测试 + 构建并推送 `latest` 与 `sha-xxxxxxx` 镜像 | | 推送 tag `v*` | 测试 + 额外推送版本 tag 镜像 | 镜像发布到 Gitea Container Registry: ``` git.rc707blog.top/{owner}/prism:{tag} ``` ### 维护者:配置 CI Secret 在仓库 **Settings → Secrets → Actions** 添加: | Secret | 说明 | |--------|------| | `REGISTRY_TOKEN` | 具有 `write:package` 权限的 Personal Access Token | > **注意:** Secret 名称不能以 `GITEA_` 或 `GITHUB_` 开头(Gitea 保留前缀),因此使用 `REGISTRY_TOKEN` 而非 `GITEA_TOKEN`。 > Gitea Actions 的 job token 暂不支持直接推送软件包,需使用 PAT。见 [Gitea 文档](https://docs.gitea.com/usage/actions/comparison#package-repository-authorization)。 ### Runner 配置 CI 使用 **`runs-on: ubuntu-latest`**(须与 Runners 页「**标签**」列一致)。 1. **Settings → Actions → Runners** 确认 runner **在线**,标签含 `ubuntu-latest` 2. 标签映射的 job 镜像须含 **Node.js**(否则 `actions/checkout` 会报 `node not in PATH`) 3. **构建镜像**:runner 须挂载 `/var/run/docker.sock`(见 [.gitea/act-runner/README.md](.gitea/act-runner/README.md)) 4. CI 使用 shell 安装 Go(阿里云 / golang.google.cn 镜像),避免 `setup-go` 从 GitHub 下载超时 ## 目录结构 ``` cmd/prism/ 进程入口 internal/api/ HTTP 层、OpenAPI、嵌入静态资源 internal/store/ SQLite 与迁移 internal/service/ 业务编排 internal/configbuilder/ Mihomo YAML 合成 web/ Vue 3 管理台 .gitea/workflows/ CI 工作流 ``` ## 许可 提交代码即表示你同意在 [MIT License](LICENSE) 下授权你的贡献。嵌入的 Mihomo 内核遵循其自身许可,见 [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)。