EvoX Genesis
EvoX Genesis는 고수준 목표를 재귀적 소프트웨어 세계로 전환해, 유한 에이전트가 개발하고 승인된 결과만 유지됩니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Mirror of gitlab.com/ciburst/ciburst. Serverless GitLab runners in your own cloud account.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Serverless GitLab runners in your own cloud account.
ciburst runs your GitLab CI jobs in your own Scaleway account: each job in its own image, billed per second, and a VM only for the jobs that need Docker. Between pipelines it scales to zero: nothing runs.
Site: ciburst.zwa.la, built from this README and docs/.
Design: docs/SPEC.md. Operations: docs/RUNBOOK.md. Providers: docs/PROVIDERS.md. AI agents: AGENTS.md.
Example: ciburst-adopt-demo, a small project before and after adopting ciburst. Its second commit, Adopt ciburst, is the whole change, and its pipelines show which job ran on a VM and which in a lane.
Status: 1.0.0. The component is in the GitLab CI/CD Catalog: @1 is the newest 1.x release and runs the cli image of that release; @main runs the image edge.
A job that needs no Docker daemon runs as a Scaleway Serverless Job in its own image. Most images start in 5 to 28 s; the run is billed per second and ends 60 s after its job, unless another job of its image comes.
A job with services: or docker build gets a slot on a VM with GitLab's Docker executor and runs as on GitLab's own runners. Two jobs share a VM; another VM starts only when a job would wait longer than a VM takes to boot.
Every part scales to zero: the dispatcher is a Scaleway Function that GitLab's job events wake, a lane ends 60 s after its last job, and an idle VM ends itself at minute 55 of the hour it is paid for. A month of 3,000 job-minutes costs about 2.24 EUR in lanes, against 23.23 EUR on GitLab's hosted runners.
Runners, caches and the dispatcher run in your Scaleway account, set up from your own pipeline: one include, four CI/CD variables and one manual job. The demo project shows the whole change in one commit. ciburst is open source under Apache-2.0.
ignoreJobs runs on other runners and starts nothing; a job that a lane of its ciburst.json names runs in that lane; every other job runs on the VM runner. ciburst check --suggest prints lanes for the jobs that need no Docker daemon.warmStart, on by default; it costs one VM-hour, 0.03 EUR, when the pipeline ends before that job runs).maxQueueS (default 90 s, about one VM boot), judged by how long the running jobs usually take. With no VM running, jobs that wait together share new VMs (two slots each, so five jobs start three VMs).gitlab-runner run for its slots, serving every project of the setup, and reports its state to the dispatcher. An idle VM ends at minute 55; a sweep every 30 minutes removes VMs that stopped reporting.image: runs in ubuntu:24.04.waitTimeoutS (60 s by default) before it exits. The first 200,000 vCPU-seconds and 400,000 GB-seconds of each month are free, about 28 hours at 2 vCPU and 4 GB.git and curl adds 2 to 4 s on Alpine and about 21 s on Debian and Ubuntu slim images.linux/amd64 only.Failed to create cache.Compared per job-minute for a small runner (providers' price pages, 2026-10-25, 1 EUR = 1.1193 USD; sources in docs/SPEC.md section 16):
| Option | EUR per job-minute | Billing |
|---|---|---|
| GitLab.com hosted, small (2 vCPU, 8 GB) | 0.0089 after 400 free minutes a month | per minute |
| AWS CodeBuild GitLab runner, small | 0.0045 | per job, rounded up to minutes |
| Self-built on AWS spot, m6i.large | 0.0009, plus about 10 EUR a month for the manager | per second |
| RocketRunner small, one always-on VM | 9.46 EUR a month flat | per minute, capped |
| ciburst VM slot, half a DEV1-M, half the paid hour used | 0.00045 | per started hour |
| ciburst VMs, measured: the drill consumer's 3 pipelines on one DEV1-L per job | 0.0046 | per started hour, VMs busy about 20 % of it |
| ciburst lane, 2 vCPU | 0.0017, free up to about 1,700 minutes a month | per second |
A month of 3,000 job-minutes: GitLab hosted 23.23 EUR, self-built AWS spot 12.95, RocketRunner 9.46, ciburst lanes 2.24, ciburst VM slots 1.36. A VM slot has 1.5 shared vCPU and 2 GB, GitLab's small runner 2 vCPU and 8 GB.
VMs reach their per-minute price only when pipelines keep them busy through their paid hours. A project with a few pipelines a day pays mostly for idle minutes until minute 55; its Docker-free jobs cost less in lanes, which bill per second and start inside the free tier.
You need a Scaleway account with a payment method and the Owner role in the GitLab project. The commit Adopt ciburst of ciburst-adopt-demo shows the repository side on a real project: the include, a ciburst.json with two lanes, and the lane jobs' tags.
IAMManager, ProjectManager, InstancesFullAccess, ServerlessJobsFullAccess, FunctionsFullAccess and ObjectStorageFullAccess; then an API key for it.
Check: you hold its access key, its secret key and the organization id.api and create_runner, with an expiry.
Check: the token lists both scopes.CIBURST_SCW_ACCESS_KEY, CIBURST_SCW_SECRET_KEY, CIBURST_SCW_ORGANIZATION_ID, CIBURST_GITLAB_TOKEN; each protected, visibility "Masked and hidden", environment scope ciburst. The default branch must be protected.
Check: four variables with environment ciburst..gitlab-ci.yml on the default branch:
include:
- component: gitlab.com/ciburst/ciburst/ciburst@1
Every job without its own tags now runs on the VM runner. Docker-in-Docker jobs extend .ciburst-docker. Jobs that must stay on GitLab's runners keep tags: [saas-linux-small-amd64] and go into ignoreJobs of ciburst.json (below), or their pending events start VMs.
Check: the pipeline shows the manual jobs ciburst-setup, ciburst-check, ciburst-destroy and ciburst-invite; the other jobs wait.ciburst-setup.
Check: the waiting jobs start on the runner ci-<project id>-vm. Running it again changes nothing.Customize with ciburst.json at the repository root, then run ciburst-setup again. Each top-level key replaces the default's whole value; a key left out of vm keeps its default (docs/SPEC.md section 5.4). Example, the Amsterdam region, one job per VM, and a job that stays on GitLab's runners:
{
"provider": { "type": "scaleway", "region": "nl-ams" },
"vm": { "slots": 1 },
"ignoreJobs": ["pages"]
}
Undo: add the project variable CIBURST_DESTROY with the deployment's name (ci-<project id> unless ciburst.json sets name), protected, environment scope ciburst, then run ciburst-destroy.
Check: the log ends with destroyed <name>; the webhook, the runners, the output variables and the Scaleway project are gone. Then remove the include and ciburst.json, and delete the five variables. Removing the include first leaves the webhook behind, and every later job still starts a VM.
One setup serves many projects, from any group or organization: they share its dispatcher and its VM runner, so a VM's paid hour serves all of them. Each project keeps its own lanes and ignoreJobs. Jobs of all projects share the VMs, and VM jobs run privileged: join only projects you trust.
ciburst-setup (the host): add the project variable CIBURST_INVITE with the joining project's id or path (protected, environment scope ciburst), run ciburst-invite and download join-code.txt from its artifacts (Maintainers and Owners can; the code never enters the log). The code is valid for 7 days; treat it as a secret.
Check: the log reads join code for project <id>, valid until <time>, in the artifact join-code.txt.role: member:
include:
- component: gitlab.com/ciburst/ciburst/ciburst@1
inputs:
role: member
ciburst.json with only lanes and ignoreJobs (section Lanes); fleet settings such as vm or provider belong to the host and are refused.ciburst: CIBURST_JOIN (the code) and CIBURST_GITLAB_TOKEN (a personal access token of an Owner of this project with api and create_runner). No Scaleway credentials.ciburst-join (about a minute).
Check: its log prints lane <tag> (<image>) per lane and ends with joined fleet <name>; Settings, CI/CD, Runners lists <name>-vm and one runner per lane; the next pipeline runs on them.A change of the member's lanes or ignoreJobs takes effect with the next ciburst-join, with a code that has not expired.
Leave: run ciburst-leave in the member; it removes the member's lanes, runners, webhook and record. The host's ciburst-destroy refuses while members are joined.
A lane is one project's Scaleway Serverless Jobs definition for one image and size, with its own runner and tag in that project. Each run starts from the lane's image, installs git and curl when the image lacks them, fetches the pinned gitlab-runner from the deployment's bucket and runs the job with the shell executor. A lane takes only its own project's jobs.
services:, Docker-in-Docker, docker build or testcontainers, and steady load that keeps paid VM hours busy.Example ciburst.json: a lane for the jobs lint, typecheck and every unit-*.
{
"lanes": [
{ "tag": "node24", "image": "node:24-bookworm-slim", "jobs": ["lint", "typecheck", "unit-*"], "vcpu": 2, "memoryMiB": 4096, "maxRuns": 10 }
]
}
jobs patterns match the job name (* any characters, ? one character); a pattern belongs to one lane. Each lane job carries the lane's tag instead of the component's default, and its image: equals the lane's image, because the lane run ignores image: and runs the lane's:
unit-api:
image: node:24-bookworm-slim
tags: [node24]
script:
- npm ci
- npm test
Lane images: linux/amd64 with /bin/sh, public or in the deployment's Scaleway registry. RPM-based images (UBI, Fedora) and images that run as a non-root user must already contain git and curl. A run gets up to 6 vCPU, 16 GB memory, 10 GB disk and 24 hours, with at most 400 runs per organization at once; it has no Docker daemon and no privileged mode, root has no capabilities (chown fails: extract archives with tar --no-same-owner), and /tmp lives in memory.
ciburst check --suggest proposes lanes: per image of the Docker-free jobs on the VM runner, a lane for ciburst.json and the tags: line each job needs, and the ignoreJobs list of the jobs that run on other runners. ciburst check and the ciburst-check job report a lane job with services:, a Docker image, a docker command, or an image other than its lane's. Details: docs/RUNBOOK.md, Lanes.
AGENTS.md tells coding agents how to adopt ciburst in a repository, how to join a project to an existing setup, and how to work on this one. Prompt for an agent in your project:
Adopt ciburst in this GitLab project as https://gitlab.com/ciburst/ciburst/-/blob/main/AGENTS.md describes. Change only the repository, do not handle secrets, and list the tokens and CI variables I have to create.
.local/ (gitignored): config.json from config.example.json; scaleway.env with SCW_ACCESS_KEY, SCW_SECRET_KEY, SCW_DEFAULT_ORGANIZATION_ID; gitlab.env with GITLAB_TOKEN.scripts/agent-binary.sh builds the VM agent into .local/ciburst-vm-agent.cargo run -p ciburst -- plan --config .local/config.json, then apply. Details: docs/RUNBOOK.md, Developer setup.Without a cloud: cargo run -p ciburst -- apply --config test/config.fake.json --skip-gitlab runs against in-memory fakes.
Without a clone: cargo install --git https://gitlab.com/ciburst/ciburst --tag <version> --locked ciburst builds the command line of a release, enough for check, status and invite; apply also needs that release's ciburst-vm-agent (Linux x86_64, linked on the release page), passed with --agent.
| Command | Effect |
|---|---|
plan | every step apply would run |
apply | checks that the VM runner can start a VM, creates or updates everything, then starts the jobs that wait |
status | dispatcher URL, live runs of the VM runner and of each project's lanes, the members, the last 20 runs; with a GitLab token each webhook's state and its last 20 deliveries |
check [--ref <ref>] [--suggest] | lints each project's pipeline against its own lanes and ignoreJobs and exits 1 on a problem; --suggest prints lanes for the Docker-free jobs and exits 0, or 1 when a pipeline cannot be read |
rotate runner|hook|key|cache|vm | replaces that secret and redeploys |
invite <project> | a join code for another project |
destroy --yes <name> | removes every resource of the deployment |
Global options: --ci (pipeline mode), --config <path>, --local <dir>, --agent <path>, --skip-gitlab. join and leave run only with --ci, in a member's pipeline.
Rust 1.96.0 (rust-toolchain.toml). Before a commit: cargo fmt --all --check, cargo clippy --workspace --all-targets --all-features -- -D warnings, cargo test --workspace --all-features, cargo deny check, scripts/shellcheck.sh, scripts/check-pins.sh; scripts/test-linux.sh for Linux-only code, images/test/lane-bootstrap.sh after a change to the lane bootstrap. The site: cargo run -p ciburst-site -- public builds it from this README, AGENTS.md and docs/ (docs/SPEC.md section 11.5); cargo run -p ciburst-site -- --flow rewrites the animation docs/flow.svg. The logo: cargo run -p ciburst-brand -- svg writes brand/, cargo run -p ciburst-brand -- png target/brand renders it as PNG (section 11.6). New providers: docs/PROVIDERS.md. Contributions: CONTRIBUTING.md (Developer Certificate of Origin, git commit -s); conduct: CODE_OF_CONDUCT.md; vulnerabilities: SECURITY.md.
Apache-2.0, see LICENSE and NOTICE.