# Gitea Actions CI 模板(Go + Vue) 复制整个 `.gitea/` 目录到新仓库即可启用 CI:**Go 测试** + **多架构 Docker 镜像**推送到 Gitea Container Registry。 ## 项目约定 | 路径 | 说明 | |------|------| | `go.mod` | 仓库根目录,用于读取 Go 版本并跑测试 | | `Dockerfile` | 仓库根目录,docker job 构建镜像(Vue 构建通常在此多阶段完成) | | `web/` | 可选;若存在 `web/package.json`,test job 会尝试 `npm run build` | ## 一次性配置 1. **Runner**:部署 act_runner,标签含 `ubuntu-latest`,并挂载 `docker.sock`(见 [act-runner/README.md](act-runner/README.md))。 2. **Secret**:仓库 Settings → Actions → Secrets,添加 `REGISTRY_TOKEN`(PAT,`write:package` 权限)。 3. **Variable(推荐)**:若 runner 与 Gitea 同机、或 `gitea.server_url` 为内网地址,必须设置 `REGISTRY=你的公网域名`(如 `git.example.com`,**不要**填 `172.17.0.1:13827`)。 4. **Gitea Registry**:服务端 `[packages] ENABLED = true`,`ROOT_URL` 正确;穿透场景建议 `PUBLIC_URL_DETECTION = never`(Gitea 1.26+)。 `REGISTRY` 未设置时,会从 `GITEA_ROOT_URL` 或 `gitea.server_url` 推断;均为内网地址时 workflow 会提前失败并提示。 ## 可选 Variables 仓库 Settings → Actions → Variables(留空则用默认值): | 变量 | 默认 | 说明 | |------|------|------| | `REGISTRY` | 见下方推断顺序 | **公网** Registry 主机名,如 `git.example.com`(勿用内网 IP:13827) | | `GITEA_ROOT_URL` | (空) | 当 `gitea.server_url` 为内网时,可设 `https://git.example.com/` | | `IMAGE_NAME` | 仓库名小写 | 镜像名,非 owner/repo 全路径 | | `DOCKERFILE` | `Dockerfile` | Dockerfile 路径 | | `DOCKER_PLATFORMS` | `linux/amd64,linux/arm64` | buildx 平台 | | `WEB_DIR` | `web` | 前端目录 | | `GO_TEST_SCOPE` | `./...` | `go test` 包路径 | | `DOCKER_IMAGE_PREFIX` | (空,用 Docker Hub) | 基础镜像前缀,如 `docker.m.daocloud.io/library/` | | `NODE_VERSION` | `20.19.0` | 前端构建用 Node(Vite 8 需 20.19+) | | `GOPROXY` | `https://goproxy.cn,direct` | Go 模块代理 | | `GOSUMDB` | `sum.golang.google.cn` | Go checksum 数据库 | ## 触发与镜像 tag - **pull_request**:仅 `test` job - **push main/master**:`test` + 推送 `{registry}/{owner}/{image}:latest` 与 `:sha-xxxxxxx` - **push tag v\***:额外推送 `:v1.2.3` 等 示例(仓库 `rose_cat707/Prism`,Gitea 在 `git.example.com`): ```text git.example.com/rose_cat707/prism:latest git.example.com/rose_cat707/prism:sha-35b3b48 ``` ## 目录结构 ```text .gitea/ ├── README.md # 本文件 ├── workflows/ │ └── ci.yml # 主工作流 └── act-runner/ # runner 部署参考(可选) ├── README.md ├── config.yaml ├── docker-compose.yml └── .env.example ``` ## 本地验证 Registry ```bash host=$(echo "https://你的-gitea-地址/" | sed -e 's|^https://||' -e 's|/.*||') curl -s -D - "https://${host}/v2/" -o /dev/null | grep -i www-authenticate echo "$REGISTRY_TOKEN" | docker login "$host" -u 你的用户名 --password-stdin ``` `realm` 应指向公网 Gitea 域名,而非 `127.0.0.1`。 ## 常见 Registry 错误 | 报错 | 原因 | 处理 | |------|------|------| | `Get "https://172.17.0.1:13827/v2/"` HTTP/HTTPS | Variable `REGISTRY` 或 `gitea.server_url` 为内网地址 | 设 `REGISTRY=git.example.com` | | token 指向 `127.0.0.1` | Gitea `realm` 配置错误 | `PUBLIC_URL_DETECTION=never` + 正确 `ROOT_URL` |