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 repos
Production (89.116.31.109) /opt/runners/<repo>/ self-hosted, production All 4 repos

Total: 8 runners (4 staging + 4 production). Cost: $0 (self-hosted = free on GitHub).

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