Skip to content

Conversation

@bincyan
Copy link

@bincyan bincyan commented Dec 6, 2025

問題描述

此 PR 解決了 Issue #10,新增了支援為每個 repo 配置 N 個 workers 的部署腳本,預設值為 3 個 workers。

變更摘要

新增檔案

  1. deployment/gen-compose.sh - 可執行的部署腳本

    • 支援透過命令列參數配置 worker 數量
    • 預設生成 3 個 workers
    • 自動生成 docker-compose.yml 配置檔
  2. deployment/README.md - 完整的使用文件

主要功能

命令列選項

  • -w, --workers NUM: 指定每個 repo 的 worker 數量(預設:3)
  • -o, --output FILE: 指定輸出檔案名稱(預設:docker-compose.yml)
  • -h, --help: 顯示說明訊息

腳本特點

  • 輸入驗證:驗證 worker 數量為正整數

  • Docker Compose 生成

    • 為每個 worker 建立獨立的服務定義
    • 每個 worker 擁有:
      • 唯一的容器名稱(runner-worker-1, runner-worker-2 等)
      • 專屬的工作卷冊
      • Docker socket 存取權限
      • 環境變數配置
      • 自動重啟策略
  • 網路配置:建立 bridge 網路供 runners 通訊

  • 卷冊管理:為每個 worker 建立命名卷冊,確保資料持久性

使用範例

```bash

使用預設 3 個 workers 生成

./deployment/gen-compose.sh

生成 5 個 workers

./deployment/gen-compose.sh -w 5

生成 10 個 workers,自訂輸出檔案

./deployment/gen-compose.sh -w 10 -o runners.yml
```

測試執行

已完成以下測試:

  1. ✅ 說明命令測試:確認說明輸出正確顯示
  2. ✅ 預設配置測試:生成預設 3 個 workers 的配置檔
  3. ✅ 自訂 worker 數量測試:生成 5 個 workers 的配置檔
  4. ✅ 錯誤處理測試:
    • 無效的 worker 數量(0):正確拒絕
    • 非數字輸入:正確拒絕
  5. ✅ 輸出檔案驗證:確認生成的 YAML 結構正確

技術細節

生成的 Docker Compose 結構

  • 版本:3.8
  • 服務:N 個 worker 服務(可配置)
  • 映像:ghcr.io/actions/actions-runner:latest
  • 卷冊:每個 worker 一個命名卷冊
  • 網路:單一 bridge 網路供所有 workers 使用
  • 環境變數
    • 支援 .env 檔案進行敏感配置
    • 每個 worker 擁有唯一的 RUNNER_NAME
    • 配置為 root 執行(RUNNER_ALLOW_RUNASROOT=1)

關聯 Issue

Fixes #10


此 PR 由 beaver-the-worker worker-v0.2.6 自動產生

Implements gen-compose.sh to generate docker-compose configurations
for GitHub Actions self-hosted runners with support for N workers
per repository. Defaults to 3 workers as specified.

Features:
- Configurable worker count via -w/--workers parameter
- Custom output file support via -o/--output parameter
- Input validation for worker count
- Comprehensive README with usage examples

Fixes #10
@bincyan bincyan requested a review from a team as a code owner December 6, 2025 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant