ci: switch deploy+smoke jobs to self-hosted runner (peptide-vps) [v1.7.1] #21

Merged
peptiderepo merged 1 commits from claude/deploy-self-hosted-20260617 into main 2026-06-17 04:04:59 +00:00
peptiderepo commented 2026-06-17 03:51:01 +00:00 (Migrated from github.com)

What changed

Switch the three deploy/smoke runner targets from ubuntu-latest (GitHub-hosted) to [self-hosted, peptide-vps] (org runner on KVM8 VPS):

File Job Before After
.github/workflows/deploy-app.yml deploy-staging ubuntu-latest [self-hosted, peptide-vps]
.github/workflows/deploy-app.yml deploy-production ubuntu-latest [self-hosted, peptide-vps]
.github/workflows/smoke.yml smoke ubuntu-latest [self-hosted, peptide-vps]

Why smoke.yml was also changed: The smoke job in deploy-app.yml is a uses: delegation to peptide-e2e/.github/workflows/smoke.yml@main — it has no runs-on of its own. The runner is defined inside smoke.yml at the inner smoke job. Changing deploy-app.yml alone would have left the Playwright wp-login POSTs (the throttled path) running from GitHub-hosted IPs.

Callers' CI/validate jobs are not changed — they remain on ubuntu-latest.

Why

The KVM8 VPS runner (peptide-vps, org: peptide-repo) has a stable IP that is not in the Azure eastus2/ncus ranges that Hostinger blocks on SSH port 65002. The GitHub-hosted runner IP lottery has caused intermittent 4× retry exhaustion on every deploy. This is the transport fix from ADR 2026-06-16-standardized-cicd-and-testing.md.

Risk flags

  • Runner availability: If peptide-vps goes offline, all deploys queue (no fallback to GitHub-hosted). Mitigation: runner is systemd-supervised; Coolify on same box is the health signal.
  • Fork PRs: Org runner is already configured to require approval for fork/outside PRs — untrusted code cannot reach the self-hosted runner.
  • Playwright deps: Runner was provisioned with Node, Playwright Chromium deps, rsync, and ssh. No new install steps needed.
  • No logic changed: Only runs-on values touched. Rsync commands, retry logic, secrets, steps — all identical.

Test plan

After merge: trigger a low-stakes app deploy (e.g., peptide-repo-core patch) and confirm:

  1. deploy-staging job picks up on peptide-vps (check Actions runner label in job log)
  2. Smoke suite runs from peptide-vps (same runner label)
  3. deploy-production job picks up on peptide-vps
  4. Full deploy completes without rsync retry exhaustion

Bumps peptide-e2e to v1.7.1.

## What changed Switch the three deploy/smoke runner targets from `ubuntu-latest` (GitHub-hosted) to `[self-hosted, peptide-vps]` (org runner on KVM8 VPS): | File | Job | Before | After | |------|-----|--------|-------| | `.github/workflows/deploy-app.yml` | `deploy-staging` | `ubuntu-latest` | `[self-hosted, peptide-vps]` | | `.github/workflows/deploy-app.yml` | `deploy-production` | `ubuntu-latest` | `[self-hosted, peptide-vps]` | | `.github/workflows/smoke.yml` | `smoke` | `ubuntu-latest` | `[self-hosted, peptide-vps]` | **Why `smoke.yml` was also changed:** The `smoke` job in `deploy-app.yml` is a `uses:` delegation to `peptide-e2e/.github/workflows/smoke.yml@main` — it has no `runs-on` of its own. The runner is defined inside `smoke.yml` at the inner `smoke` job. Changing `deploy-app.yml` alone would have left the Playwright wp-login POSTs (the throttled path) running from GitHub-hosted IPs. Callers' CI/validate jobs are **not changed** — they remain on `ubuntu-latest`. ## Why The KVM8 VPS runner (`peptide-vps`, org: `peptide-repo`) has a stable IP that is not in the Azure eastus2/ncus ranges that Hostinger blocks on SSH port 65002. The GitHub-hosted runner IP lottery has caused intermittent 4× retry exhaustion on every deploy. This is the transport fix from ADR `2026-06-16-standardized-cicd-and-testing.md`. ## Risk flags - **Runner availability:** If `peptide-vps` goes offline, all deploys queue (no fallback to GitHub-hosted). Mitigation: runner is systemd-supervised; Coolify on same box is the health signal. - **Fork PRs:** Org runner is already configured to require approval for fork/outside PRs — untrusted code cannot reach the self-hosted runner. - **Playwright deps:** Runner was provisioned with Node, Playwright Chromium deps, rsync, and ssh. No new install steps needed. - **No logic changed:** Only `runs-on` values touched. Rsync commands, retry logic, secrets, steps — all identical. ## Test plan After merge: trigger a low-stakes app deploy (e.g., `peptide-repo-core` patch) and confirm: 1. `deploy-staging` job picks up on `peptide-vps` (check Actions runner label in job log) 2. Smoke suite runs from `peptide-vps` (same runner label) 3. `deploy-production` job picks up on `peptide-vps` 4. Full deploy completes without rsync retry exhaustion Bumps peptide-e2e to v1.7.1.
Sign in to join this conversation.