Skip to main content
⚡ Open Source · MIT Licensed

Infinity CI

A self-hosted CI server, in the spirit of Jenkins / GitHub Actions

Start with a single binary and SQLite. Define workflows in YAML, dispatch jobs to any build machine with pull-based Agents, and get real-time updates on every page — no refresh buttons anywhere. The GitHub Actions experience, on your own hardware.

.NET 10Server / AgentReact 19Web UIgRPCDistributed agentsxterm.jsLive logs
Infinity CI · runs/UnityCIGame2/1
$ infinity run UnityCIGame2
─ DAG ─────────────────────────────
  ● start → prepare → build → deploy → ● 

09:01:02  ✔ prepare  python CI/platform/windows/prepare.py
09:01:08  ▶ build    python CI/platform/windows/build.py
         Unity 6000.0.23f1 -batchmode -nographics …
09:14:55  ✔ build    StandaloneWindows64
09:15:03  ✔ deploy   Builds/Windows/UnityCIGame.exe (95 MB)

✔ Run succeeded · WeCom notified

Built for build automation

From a solo developer's packaging script to continuous integration inside the enterprise network — one tool covers it all

🔀

Parallel DAG scheduling

Declare dependencies with needs to form a DAG. Jobs run in parallel, failed dependencies skip downstream jobs, and the run page renders a Blue Ocean-style graph.

📡

Distributed Agents

Agents dial out to the Master over a gRPC bidirectional stream: pull-based job claiming, heartbeat leases, auto-reconnect, and orphaned-job requeue — no inbound ports needed on build machines.

Real-time everywhere

Every page holds its own SignalR connection and updates live. A heartbeat watchdog retries with exponential backoff — the whole app has no manual refresh button.

🖥️

xterm.js color logs

Per-line timestamps, JSONL resume cursors, full ANSI color, per-step log downloads, and timeout kills of the entire process tree.

🗂️

Config as Git repos

Each job's YAML config is its own Git repository: saving in the web editor commits automatically, giving you history, rollback, and git clone for free.

🔔

Many ways to trigger

Manual runs with parameters, Git push webhooks (HMAC verification + branch globs), PR/MR triggers, and cron schedules — with commit status written back to GitHub/GitLab.

💬

Five notification channels

WeCom, DingTalk, Slack, generic webhooks, and SMTP email — filterable per channel, with color-coded success/failure cards.

🔐

Enterprise-grade access

Three-tier RBAC, per-project visibility, personal API tokens, and LDAP domain login with group mapping.

MIT

Fully open source under MIT

Use, modify, and distribute freely — including commercial use. Your CI, your rules.

View License

Up and running in 3 minutes

No database to install, no plugin ecosystem to babysit — two commands and you're live

cmd.exe
:: 启动 Server(Web :5000)
scripts\start-server.cmd

:: 在打包机上启动 Agent
scripts\start-agent.cmd \
  --Agent:EnrollToken=<令牌> \
  --Agent:AgentName=build-1

# 默认账号 admin / admin · 首次启动自动创建
workflow.yml
name: UnityCIGame2
jobs:
  prepare:
    runs_on: agent
    steps:
      - name: prepare
        command: python CI/platform/windows/prepare.py
  build:
    needs: [prepare]
    steps:
      - name: build
        command: python CI/platform/windows/build.py
  deploy:
    needs: [build]
    steps:
      - name: deploy
        command: python CI/platform/windows/deploy.py

Born for Unity builds

Not a single line of Unity-specific code inside the CI — build knowledge lives in your game repo, the engine only orchestrates

prepare.py

Agent self-check: prints build environment variables to confirm UNITY_PATH and working directory

build.py

Launches the Unity 6 command line (-batchmode -executeMethod), streaming logs to the web terminal line by line

deploy.py

Archives artifacts, pushes a WeCom notification, and writes build status back to the commit

The project stays where it is — CI comes to it: bind a task directly to a local Unity project directory, no need to push gigabytes into Git. From first script to a Windows build: one hour, measured.

Hand your packaging to Infinity CI

Deploy as a single EXE or in Docker. SQLite single-file storage — backing up is copying one directory