Skip to content

CI/CD Pipeline

All repositories use self-hosted GitHub Actions runners for zero-cost auto-deployment.

Runners

VPS Location Labels Repos served
Staging (94.136.188.221) /opt/runners/<repo>/ self-hosted, staging All 4 workflows
Production (147.93.168.216) /opt/runners/astradial-platform/ self-hosted, production All 4 workflows

Cost: $0 (self-hosted = free on GitHub).

Production runner re-registered 2026-07-05

The original prod runner died with the deleted Mumbai box (82.180.146.80, 2026-07-03). A single runner mumbai-prod-astradial-platform was registered on the new box 147.93.168.216 (/opt/runners/astradial-platform/, root systemd, v2.335.1). All four prod deploy workflows share runs-on: [self-hosted, production], so one runner serves all of them (deploys queue; serial is fine/safer for prod). Add more runners only if concurrent prod deploys become a need. Register with: RUNNER_ALLOW_RUNASROOT=1 ./config.sh --url https://github.com/astradial/astradial-platform --token <gh api …/registration-token> --name mumbai-prod-astradial-platform --labels production --unattended --replace && ./svc.sh install root && ./svc.sh start

Auto-deploy triggers

Event Result
Push to staging branch Auto-deploys to staging VPS
Push to main branch Auto-deploys to production VPS
PR merge → staging Same as push to staging
PR merge → main Same as push to main

Workflow files

Each repo has two workflow files:

.github/workflows/
├── deploy-staging.yml    # runs-on: [self-hosted, staging]
└── deploy-prod.yml       # runs-on: [self-hosted, production]

Deploy steps per repo

Repo Build step Reload command
astradial-editor npm ci + npm run build pm2 reload editor
astrapbx npm ci --omit=dev pm2 reload astrapbx
workflow-engine npm install --omit=dev pm2 reload workflow-engine
pipecat-flow uv sync systemctl restart pipecat-flow

Runner management

# Check runner status
systemctl status actions.runner.astradial-<repo>.<runner-name>

# Restart a stuck runner
systemctl restart actions.runner.astradial-<repo>.<runner-name>

# View all runners on a VPS
systemctl list-units "actions.runner.*"

# Check GitHub runner status
gh api /repos/astradial/<repo>/actions/runners