{"id":50463998,"url":"https://github.com/soulteary/runner-fleet","last_synced_at":"2026-06-01T06:04:14.694Z","repository":{"id":338909083,"uuid":"1159660951","full_name":"soulteary/runner-fleet","owner":"soulteary","description":"GitHub Actions Runner Manager, a lightweight toolkit to provision, scale, and manage a fleet of GitHub self-hosted runners with ease. / 轻量工具，一键部署、扩容并统一管理多台 GitHub 自托管 Runner。","archived":false,"fork":false,"pushed_at":"2026-02-24T06:32:28.000Z","size":608,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-24T12:51:17.387Z","etag":null,"topics":["cicd","github","github-actions","github-runner","github-runners","self-hosted","self-hosted-runner"],"latest_commit_sha":null,"homepage":"https://soulteary.com/2026/02/18/use-docker-to-natively-deploy-github-actions-runner-by-fleet.html","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soulteary.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-17T02:05:38.000Z","updated_at":"2026-02-24T06:32:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/soulteary/runner-fleet","commit_stats":null,"previous_names":["soulteary/runner-fleet"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/soulteary/runner-fleet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soulteary%2Frunner-fleet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soulteary%2Frunner-fleet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soulteary%2Frunner-fleet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soulteary%2Frunner-fleet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soulteary","download_url":"https://codeload.github.com/soulteary/runner-fleet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soulteary%2Frunner-fleet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33762215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cicd","github","github-actions","github-runner","github-runners","self-hosted","self-hosted-runner"],"created_at":"2026-06-01T06:04:13.765Z","updated_at":"2026-06-01T06:04:14.678Z","avatar_url":"https://github.com/soulteary.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Runner Fleet - GitHub Actions Runner Manager\n\n**文档 (Docs):** [中文](docs/zh/) · [Français](docs/fr/) · [Deutsch](docs/de/) · [한국어](docs/ko/) · [日本語](docs/ja/)\n\n![](.github/assets/fleet.jpg)\n\nHTTP management UI built with Golang Echo to view and manage multiple self-hosted GitHub Actions Runners on one machine. YAML-based config, no database required.\n\n![](.github/assets/preview.jpg)\n\n## Highlights\n\n- **Zero database**: YAML-only config, no external deps; config is your backup and easy to version.\n- **Web one-stop**: Add, register, start/stop, edit, and view status in the UI—no SSH or manual `config.sh`.\n- **Auto install \u0026 register**: In \"Quick Add\" enter a token to auto-download the runner, register, and start; paste `./config.sh --url ... --token ...` from GitHub to parse and fill the form.\n- **Container-first**: Docker / docker-compose out of the box; DinD and host-socket for in-job Docker; optional **container mode** (one runner per container) with Manager controlling lifecycle and status.\n- **Self-heal \u0026 troubleshoot**: ~15s after start, registered but stopped runners are started; periodic check every 5 minutes; in container mode, `status=unknown` shows a structured probe (error type, check/fix commands) for copy-paste troubleshooting or start/stop self-heal.\n- **Observable**: Registration result is written and shown in the UI; optional PAT (`.github_check_token`) to periodically verify runners appear in GitHub's list, synced to the UI.\n\n## Features\n\n- **View**: List all runners, status (installed/unregistered/missing dir), running or not; view full config per runner.\n- **Edit**: Change subpath, target type, target, labels (name is read-only).\n- **Quick Add**: Name + target (org/repo) + optional token; one-click add and optional auto-register.\n- **Delete**: Remove from config (does not delete disk).\n- **Start/Stop**: Start or stop registered runners.\n- **Container mode** (optional): One runner per container; Manager starts/stops via Docker; runner image tag uses `-runner` suffix.\n\n## Quick start\n\n```bash\nmkdir -p config \u0026\u0026 cp config.yaml.example config/config.yaml\n# Edit config/config.yaml: set runners.base_path to /app/runners\n# On host: mkdir -p runners \u0026\u0026 chown 1001:1001 config runners\n\ndocker network create runner-net 2\u003e/dev/null || true\ndocker compose up -d\n```\n\nOpen http://localhost:8080. The default image tag is the stable release (e.g. v1.0.0). For more options (docker run, DinD, container mode, using `main` or other tags) see the [User Guide](docs/guide.md). Health: `GET /health`; version: `GET /version`.\n\n## Use cases\n\n- **Personal / team**: One machine as self-hosted runners for multiple repos or orgs; manage via Web UI, no need to remember CLI.\n- **Internal CI**: Deploy on internal network; use DinD (isolated) or host-socket (shared with host) when jobs need Docker; runners recover after Manager or DinD restart.\n- **Isolation \u0026 traceability**: Container mode gives one container per runner with clear boundaries; combine with registration result and GitHub visibility check to verify runners.\n\n## Documentation\n\n- **[User Guide](docs/guide.md)** — Deployment (Docker/docker-compose), config, adding runners, security \u0026 troubleshooting\n- **[Development \u0026 Build](docs/development.md)** — Go build, local debug, HTTP API, Makefile\n\n## Other\n\nCI / images / releases: [.github/workflows](.github/workflows).\n\nMIT License — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoulteary%2Frunner-fleet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoulteary%2Frunner-fleet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoulteary%2Frunner-fleet/lists"}