A self-hosted orchestration system crafted for power users. composia.xyz
Something went wrong. Try again.
YAML
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180name: composia-e2e
services: docker-dev: image: docker:29-dind privileged: true environment: DOCKER_TLS_CERTDIR: "" command: - --host=tcp://0.0.0.0:2375 - --host=unix:///var/run/docker.sock healthcheck: test: ["CMD", "docker", "info"] interval: 2s timeout: 5s retries: 30 networks: - composia-e2e
docker-fixture: image: docker:29-cli depends_on: docker-dev: condition: service_healthy environment: DOCKER_HOST: tcp://docker-dev:2375 command: - sh - -eu - -c - | docker network create composia-e2e-fixture >/dev/null 2>&1 || true docker volume create composia-e2e-fixture >/dev/null tar \ --exclude=dev \ --exclude=proc \ --exclude=sys \ --exclude=run \ --exclude=tmp \ -C / -c . | docker import - composia-e2e-fixture:latest >/dev/null docker rm -f composia-e2e-exec >/dev/null 2>&1 || true docker run -d \ --name composia-e2e-exec \ --network composia-e2e-fixture \ -v composia-e2e-fixture:/data \ composia-e2e-fixture:latest \ /bin/sh -c 'while true; do echo composia-e2e-fixture; sleep 30; done' >/dev/null networks: - composia-e2e
controller-dev: build: context: .. target: controller entrypoint: - sh - -eu - -c command: - | mkdir -p /tmp/repo-controller /tmp/state-controller /tmp/logs /tmp/secrets cat > /tmp/secrets/age.key <<'EOF' AGE-SECRET-KEY-1KTAWUUQUUMF6FTXQZ8R2EAHHS2PCMMMTNHZFE20UULV27XFURL3S9D40AT EOF cat > /tmp/secrets/age.recipients <<'EOF' age1wdc28dv5vcjz8yewrzemr0xmyhz6jvgan4s2mrzvd0f9sh6rm9rqhgkkkf EOF if [ ! -d /tmp/repo-controller/.git ]; then git init /tmp/repo-controller fi git -C /tmp/repo-controller config user.email "web-e2e@composia.local" git -C /tmp/repo-controller config user.name "Composia Web E2E" mkdir -p /tmp/repo-controller/host-service cat > /tmp/repo-controller/README.md <<'EOF' # Composia web e2e fixture EOF cat > /tmp/repo-controller/host-service/composia-meta.yaml <<'EOF' name: host-service nodes: - main infra: config: {} EOF cat > /tmp/repo-controller/host-service/docker-compose.yaml <<'EOF' # infra.config services do not need docker compose for this fixture EOF cat > /tmp/repo-controller/host-service/.secret.env.enc <<'EOF' -----BEGIN AGE ENCRYPTED FILE----- YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZMHBJYXFmYk4yV0RkK05C MXFTQWdtSGEwNGU4Y2tvWVE2U01ZOU92OGlFCkZPdkxSeEdDMVJCNHRyTUVlRTlD QTNYdXJlZGFyNm9zZ05BaEhjUndvS1kKLS0tICtnS0dyVmE0cU1URnRtNnZZQ0xM YnltUzVURWFsL2lEcWcrKzgyNW8zNHcKHTmcXdjNLWFhpOQH7en17M6IdPbXvosi cHzPaVi1VKe2BxooNSVhLFaAgo/ZhmgMfr3CYeeYIJrpS+nz -----END AGE ENCRYPTED FILE----- EOF if [ -n "$(git -C /tmp/repo-controller status --short)" ]; then git -C /tmp/repo-controller add . git -C /tmp/repo-controller commit -m "Seed web e2e repo" fi cat > /tmp/composia-e2e.yaml <<'EOF' controller: listen_addr: ":7001" repo_dir: "/tmp/repo-controller" state_dir: "/tmp/state-controller" log_dir: "/tmp/logs" access_tokens: - name: "web" token: "dev-admin-token" enabled: true secrets: provider: "age" identity_file: "/tmp/secrets/age.key" recipient_file: "/tmp/secrets/age.recipients" armor: true nodes: - id: "main" display_name: "Main" enabled: true token: "main-agent-token" agent: controller_addr: "http://controller-dev:7001" node_id: "main" token: "main-agent-token" repo_dir: "/tmp/repo-agent" state_dir: "/tmp/state-agent" EOF exec /sbin/tini -- /usr/local/bin/composia-controller -config /tmp/composia-e2e.yaml ports: - target: 7001 published: "${COMPOSIA_E2E_CONTROLLER_PORT:-7001}" networks: - composia-e2e
agent-dev: build: context: .. target: agent depends_on: controller-dev: condition: service_started docker-fixture: condition: service_completed_successfully environment: DOCKER_HOST: tcp://docker-dev:2375 entrypoint: - sh - -eu - -c command: - | mkdir -p /tmp/repo-agent /tmp/state-agent cat > /tmp/composia-e2e.yaml <<'EOF' controller: listen_addr: ":7001" repo_dir: "/tmp/repo-controller" state_dir: "/tmp/state-controller" log_dir: "/tmp/logs" access_tokens: - name: "web" token: "dev-admin-token" enabled: true nodes: - id: "main" display_name: "Main" enabled: true token: "main-agent-token" agent: controller_addr: "http://controller-dev:7001" node_id: "main" token: "main-agent-token" repo_dir: "/tmp/repo-agent" state_dir: "/tmp/state-agent" EOF exec /sbin/tini -- /usr/local/bin/composia-agent -config /tmp/composia-e2e.yaml networks: - composia-e2e
networks: composia-e2e: