From a4d09c906381f4cde4490074a950a1aaa7679ade Mon Sep 17 00:00:00 2001 From: csh Date: Fri, 22 May 2026 09:45:35 +0800 Subject: [PATCH] =?UTF-8?q?:wrench:=20=E5=8F=82=E6=95=B0=E5=8C=96=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E9=85=8D=E7=BD=AE=E5=B9=B6=E8=A1=A5=E5=85=85=20preset?= =?UTF-8?q?=20env=20=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/changelog_and_release.yml | 2 +- .gitea/workflows/update_stats_badge.yaml | 4 +- .gitignore | 3 ++ DEPLOYMENT.md | 34 ++++++++++---- README.md | 1 + .../presets/buildx-archlinux/.env.example | 2 + .../buildx-archlinux/docker-compose.yml | 4 +- .../presets/buildx-ubuntu-22/.env.example | 2 + .../buildx-ubuntu-22/docker-compose.yml | 4 +- .../presets/standard-ubuntu-22/.env.example | 2 + .../standard-ubuntu-22/docker-compose.yml | 4 +- tests/template_defaults_test.sh | 46 +++++++++++++++++++ 12 files changed, 90 insertions(+), 18 deletions(-) create mode 100644 docker-runner/presets/buildx-archlinux/.env.example create mode 100644 docker-runner/presets/buildx-ubuntu-22/.env.example create mode 100644 docker-runner/presets/standard-ubuntu-22/.env.example create mode 100644 tests/template_defaults_test.sh diff --git a/.gitea/workflows/changelog_and_release.yml b/.gitea/workflows/changelog_and_release.yml index b802fa6..dafe06c 100644 --- a/.gitea/workflows/changelog_and_release.yml +++ b/.gitea/workflows/changelog_and_release.yml @@ -43,7 +43,7 @@ env: # ===== 服务器配置 ===== # Gitea 服务器地址(用于生成头像链接和 API 调用) - GITEA_SERVER: "https://git.mytsl.cn" + GITEA_SERVER: "${{ github.server_url }}" # ===== CHANGELOG 配置 ===== # CHANGELOG 变更列表标题 diff --git a/.gitea/workflows/update_stats_badge.yaml b/.gitea/workflows/update_stats_badge.yaml index defebfc..14ee533 100644 --- a/.gitea/workflows/update_stats_badge.yaml +++ b/.gitea/workflows/update_stats_badge.yaml @@ -59,13 +59,13 @@ env: # 平台类型: github 或 gitea PLATFORM: "gitea" # Git 服务器 URL(Gitea 示例: https://gitea.example.com) - GIT_SERVER_URL: "https://git.mytsl.cn" + GIT_SERVER_URL: "${{ github.server_url }}" # 仓库路径(格式: owner/repo) REPO_PATH: "${{ github.repository }}" # Raw 文件基础 URL # GitHub: https://raw.githubusercontent.com/{owner}/{repo}/{branch}/{path} # Gitea: https://gitea.example.com/{owner}/{repo}/raw/branch/{branch}/{path} - RAW_URL_BASE: 'https://git.mytsl.cn/${{ github.repository }}/raw/branch' + RAW_URL_BASE: '${{ github.server_url }}/${{ github.repository }}/raw/branch' # ========================================== # 🎨 语言分组配置 diff --git a/.gitignore b/.gitignore index 5595571..4b27ad7 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,6 @@ Sessionx.vim tags # Persistent undo [._]*.un~ + +# Environment files +.env diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index c004ee9..cca7c8b 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -118,7 +118,15 @@ docker-runner/ cd docker-runner/presets/standard-ubuntu-22/ ``` -#### 2. (可选)检查换行符 +#### 2. 准备实例配置 + +```bash +cp .env.example .env +``` + +按需编辑 `.env` 中的 `GITEA_INSTANCE` 和 `GITEA_TOKEN`。 + +#### 3. (可选)检查换行符 如果从 Windows 复制文件,建议检查换行符: @@ -126,14 +134,14 @@ cd docker-runner/presets/standard-ubuntu-22/ ../../common/check_crlf.sh ``` -#### 3. 构建并启动容器 +#### 4. 构建并启动容器 ```bash docker compose build docker compose up -d ``` -#### 4. 安装 Runner +#### 5. 安装 Runner ```bash docker compose exec gitea-runner /data/setup.sh @@ -141,7 +149,7 @@ docker compose exec gitea-runner /data/setup.sh 脚本会自动探测最新 `act_runner` 版本作为默认值,然后提示你确认架构。 -#### 5. 注册 Runner +#### 6. 注册 Runner ```bash docker compose exec gitea-runner /data/register.sh @@ -151,7 +159,7 @@ docker compose exec gitea-runner /data/register.sh Runner 注册后会自动启动,无需重启容器。新注册的 runner 默认并发为 `4`。 -#### 6. 验证运行状态 +#### 7. 验证运行状态 ```bash # 查看容器日志 @@ -175,7 +183,15 @@ cd docker-runner/presets/buildx-ubuntu-22/ cd docker-runner/presets/buildx-archlinux/ ``` -#### 2. (可选)配置代理 +#### 2. 准备实例配置 + +```bash +cp .env.example .env +``` + +按需编辑 `.env` 中的 `GITEA_INSTANCE` 和 `GITEA_TOKEN`。 + +#### 3. (可选)配置代理 如果需要代理,编辑 `docker-compose.yml` 取消注释并修改代理地址: @@ -185,14 +201,14 @@ environment: - https_proxy=http://host.docker.internal:20122 ``` -#### 3. 构建并启动 +#### 4. 构建并启动 ```bash docker compose build docker compose up -d ``` -#### 4. 验证 Buildx 初始化 +#### 5. 验证 Buildx 初始化 ```bash # 查看日志,应该看到: @@ -207,7 +223,7 @@ docker compose exec gitea-runner docker buildx ls # 应该看到 gitea-multiarch builder ``` -#### 5. 安装和注册 +#### 6. 安装和注册 ```bash docker compose exec gitea-runner /data/setup.sh diff --git a/README.md b/README.md index 3b71eaa..8243413 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - 大仓库会缓存到 `/data/git-mirrors//.git` - 每个 workflow job 使用独立临时目录 `/home/workspace/jobs////repo` - job 结束后会自动清理临时工作目录,mirror 缓存保留在 `runner-data/` +- 每个 preset 通过 `.env.example` 提供公司默认实例值,部署时复制为 `.env` 即可 ## 📂 文档导航 diff --git a/docker-runner/presets/buildx-archlinux/.env.example b/docker-runner/presets/buildx-archlinux/.env.example new file mode 100644 index 0000000..6d57191 --- /dev/null +++ b/docker-runner/presets/buildx-archlinux/.env.example @@ -0,0 +1,2 @@ +GITEA_INSTANCE=https://git.mytsl.cn +GITEA_TOKEN= diff --git a/docker-runner/presets/buildx-archlinux/docker-compose.yml b/docker-runner/presets/buildx-archlinux/docker-compose.yml index e1bb553..70b6843 100644 --- a/docker-runner/presets/buildx-archlinux/docker-compose.yml +++ b/docker-runner/presets/buildx-archlinux/docker-compose.yml @@ -21,8 +21,8 @@ services: # Arch Linux Buildx 配置 - 使用 tonistiigi/binfmt - ENABLE_BUILDX=true - BINFMT_METHOD=tonistiigi - - GITEA_INSTANCE=https://git.mytsl.cn - - GITEA_TOKEN= + - GITEA_INSTANCE=${GITEA_INSTANCE} + - GITEA_TOKEN=${GITEA_TOKEN} - DEFAULT_RUNNER_NAME=buildx-archlinux - DEFAULT_RUNNER_LABEL=archlinux:host://archlinux:latest,company-server:host://archlinux:latest,buildx-archlinux:host://archlinux:latest diff --git a/docker-runner/presets/buildx-ubuntu-22/.env.example b/docker-runner/presets/buildx-ubuntu-22/.env.example new file mode 100644 index 0000000..6d57191 --- /dev/null +++ b/docker-runner/presets/buildx-ubuntu-22/.env.example @@ -0,0 +1,2 @@ +GITEA_INSTANCE=https://git.mytsl.cn +GITEA_TOKEN= diff --git a/docker-runner/presets/buildx-ubuntu-22/docker-compose.yml b/docker-runner/presets/buildx-ubuntu-22/docker-compose.yml index 5fd12a4..e7fcbf7 100644 --- a/docker-runner/presets/buildx-ubuntu-22/docker-compose.yml +++ b/docker-runner/presets/buildx-ubuntu-22/docker-compose.yml @@ -20,8 +20,8 @@ services: # Buildx 配置 - 启用多架构构建 - ENABLE_BUILDX=true - - GITEA_INSTANCE=https://git.mytsl.cn - - GITEA_TOKEN= + - GITEA_INSTANCE=${GITEA_INSTANCE} + - GITEA_TOKEN=${GITEA_TOKEN} - DEFAULT_RUNNER_NAME=buildx-ubuntu-22 - DEFAULT_RUNNER_LABEL=ubuntu-22.04:host://ubuntu:22.04,company-server:host://ubuntu:22.04,buildx-ubuntu-22:host://ubuntu:22.04 diff --git a/docker-runner/presets/standard-ubuntu-22/.env.example b/docker-runner/presets/standard-ubuntu-22/.env.example new file mode 100644 index 0000000..6d57191 --- /dev/null +++ b/docker-runner/presets/standard-ubuntu-22/.env.example @@ -0,0 +1,2 @@ +GITEA_INSTANCE=https://git.mytsl.cn +GITEA_TOKEN= diff --git a/docker-runner/presets/standard-ubuntu-22/docker-compose.yml b/docker-runner/presets/standard-ubuntu-22/docker-compose.yml index 7fefb47..c935cde 100644 --- a/docker-runner/presets/standard-ubuntu-22/docker-compose.yml +++ b/docker-runner/presets/standard-ubuntu-22/docker-compose.yml @@ -18,8 +18,8 @@ services: # Standard 配置 - 不启用 Buildx - ENABLE_BUILDX=false - - GITEA_INSTANCE=https://git.mytsl.cn - - GITEA_TOKEN= + - GITEA_INSTANCE=${GITEA_INSTANCE} + - GITEA_TOKEN=${GITEA_TOKEN} - DEFAULT_RUNNER_NAME=standard-ubuntu-22 - DEFAULT_RUNNER_LABEL=ubuntu-22.04:host://ubuntu:22.04,company-server:host://ubuntu:22.04,standard-ubuntu-22:host://ubuntu:22.04 diff --git a/tests/template_defaults_test.sh b/tests/template_defaults_test.sh new file mode 100644 index 0000000..677a7c0 --- /dev/null +++ b/tests/template_defaults_test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +REPO_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd) + +fail() { + echo "FAIL: $*" >&2 + exit 1 +} + +test_preset_compose_uses_env_for_instance() { + local file + + for file in \ + "${REPO_ROOT}/docker-runner/presets/standard-ubuntu-22/docker-compose.yml" \ + "${REPO_ROOT}/docker-runner/presets/buildx-ubuntu-22/docker-compose.yml" \ + "${REPO_ROOT}/docker-runner/presets/buildx-archlinux/docker-compose.yml"; do + grep -q 'GITEA_INSTANCE=${GITEA_INSTANCE}' "${file}" || fail "${file} should read GITEA_INSTANCE from env" + grep -q 'GITEA_TOKEN=${GITEA_TOKEN}' "${file}" || fail "${file} should read GITEA_TOKEN from env" + done +} + +test_workflows_do_not_hardcode_company_server() { + ! rg -q 'https://git\.mytsl\.cn' "${REPO_ROOT}/.gitea/workflows/changelog_and_release.yml" || fail "changelog workflow should not hardcode company server" + ! rg -q 'https://git\.mytsl\.cn' "${REPO_ROOT}/.gitea/workflows/update_stats_badge.yaml" || fail "stats workflow should not hardcode company server" +} + +test_preset_env_examples_exist() { + local file + + for file in \ + "${REPO_ROOT}/docker-runner/presets/standard-ubuntu-22/.env.example" \ + "${REPO_ROOT}/docker-runner/presets/buildx-ubuntu-22/.env.example" \ + "${REPO_ROOT}/docker-runner/presets/buildx-archlinux/.env.example"; do + test -f "${file}" || fail "missing env example: ${file}" + grep -q '^GITEA_INSTANCE=https://git.mytsl.cn$' "${file}" || fail "${file} should include company default instance" + grep -q '^GITEA_TOKEN=$' "${file}" || fail "${file} should include empty token placeholder" + done +} + +test_preset_compose_uses_env_for_instance +test_workflows_do_not_hardcode_company_server +test_preset_env_examples_exist + +echo "template_defaults_test.sh: PASS"