Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
Commit336d148unknown_key

Merge PR #59: vultr-deploy → hetzner-deploy rename

Merge PR #59: vultr-deploy → hetzner-deploy rename

refactor(deploy): rename vultr-deploy → hetzner-deploy</title>
<parameter name="body">Migration moved gluecron from Vultr (45.76.171.37) to Hetzner (178.104.208.252). The workflow + setup script still said 'vultr' which was misleading. Renamed: workflow file, display name, concurrency group, secret refs (VULTR_* → HETZNER_*), example IP. Owner needs to populate HETZNER_HOST/USER/SSH_KEY secrets before next deploy fires.</parameter>
</invoke>
CC LABS App committed on May 9, 2026Parents: b556c37 48aff3c
2 files changed+2727336d14842f2ff1651e7b2d27e135119977670020
2 changed files+27−27
Renamed.github/workflows/vultr-deploy.yml.github/workflows/hetzner-deploy.yml+17−17View fileUnifiedSplit
1name: Vultr Deploy (gluecron.com)
1name: Hetzner Deploy (gluecron.com)
22
33# Triggered on every push to main and on manual dispatch.
44# Steps:
1010# root-cause analysis to the workflow summary (and optionally a webhook)
1111#
1212# Secrets required:
13# VULTR_HOST — public IP/hostname of the box (e.g. 45.76.171.37)
14# VULTR_USER — ssh user (e.g. root)
15# VULTR_SSH_KEY — private deploy key (PEM/OpenSSH format)
13# HETZNER_HOST — public IP/hostname of the box (e.g. 178.104.208.252)
14# HETZNER_USER — ssh user (e.g. root)
15# HETZNER_SSH_KEY — private deploy key (PEM/OpenSSH format)
1616#
1717# Optional:
1818# ANTHROPIC_API_KEY — enables AI failure-diagnosis step
2424 workflow_dispatch: {}
2525
2626concurrency:
27 group: vultr-deploy
27 group: hetzner-deploy
2828 cancel-in-progress: false
2929
3030jobs:
4040 id: prev
4141 uses: appleboy/ssh-action@v1.2.0
4242 with:
43 host: ${{ secrets.VULTR_HOST }}
44 username: ${{ secrets.VULTR_USER }}
45 key: ${{ secrets.VULTR_SSH_KEY }}
43 host: ${{ secrets.HETZNER_HOST }}
44 username: ${{ secrets.HETZNER_USER }}
45 key: ${{ secrets.HETZNER_SSH_KEY }}
4646 script_stop: true
4747 script: |
4848 cd /opt/gluecron
5656 id: deploy
5757 uses: appleboy/ssh-action@v1.2.0
5858 with:
59 host: ${{ secrets.VULTR_HOST }}
60 username: ${{ secrets.VULTR_USER }}
61 key: ${{ secrets.VULTR_SSH_KEY }}
59 host: ${{ secrets.HETZNER_HOST }}
60 username: ${{ secrets.HETZNER_USER }}
61 key: ${{ secrets.HETZNER_SSH_KEY }}
6262 command_timeout: 8m
6363 script_stop: true
6464 script: |
9999 if: failure() && steps.smoke.conclusion == 'failure' && github.event_name == 'push'
100100 uses: appleboy/ssh-action@v1.2.0
101101 with:
102 host: ${{ secrets.VULTR_HOST }}
103 username: ${{ secrets.VULTR_USER }}
104 key: ${{ secrets.VULTR_SSH_KEY }}
102 host: ${{ secrets.HETZNER_HOST }}
103 username: ${{ secrets.HETZNER_USER }}
104 key: ${{ secrets.HETZNER_SSH_KEY }}
105105 script_stop: false
106106 script: |
107107 cd /opt/gluecron
118118 id: ctx
119119 uses: appleboy/ssh-action@v1.2.0
120120 with:
121 host: ${{ secrets.VULTR_HOST }}
122 username: ${{ secrets.VULTR_USER }}
123 key: ${{ secrets.VULTR_SSH_KEY }}
121 host: ${{ secrets.HETZNER_HOST }}
122 username: ${{ secrets.HETZNER_USER }}
123 key: ${{ secrets.HETZNER_SSH_KEY }}
124124 script_stop: false
125125 script: |
126126 echo "===== systemd status ====="
Modifiedscripts/setup-auto-deploy.ps1+10−10View fileUnifiedSplit
1212# What it does:
1313# 1. Verifies gh CLI is installed + authed
1414# 2. Generates a dedicated SSH deploy key (~/.ssh/gluecron_deploy_key)
15# 3. Uploads the public key to root@45.76.171.37 via your existing SSH access
15# 3. Uploads the public key to root@178.104.208.252 via your existing SSH access
1616# 4. Sets the three GitHub secrets the workflow needs
1717# 5. Triggers a test deploy + watches the run
1818# =============================================================================
2020$ErrorActionPreference = "Stop"
2121
2222$REPO = "ccantynz-alt/Gluecron.com"
23$HOST_ = "45.76.171.37"
23$HOST_ = "178.104.208.252"
2424$USER_ = "root"
2525$KEYDIR = Join-Path $HOME ".ssh"
2626$KEY = Join-Path $KEYDIR "gluecron_deploy_key"
5555 Write-Host " ✓ generated new key at $KEY" -ForegroundColor Green
5656}
5757
58# ─── 3. Authorize key on the Vultr box ──────────────────────────────────────
58# ─── 3. Authorize key on the Hetzner box ──────────────────────────────────────
5959Write-Host "[3/5] Authorizing key on $HOST_..."
6060$pubKey = Get-Content "$KEY.pub" -Raw
6161$pubKey = $pubKey.Trim()
7171
7272# ─── 4. Set GitHub secrets ──────────────────────────────────────────────────
7373Write-Host "[4/5] Setting GitHub Actions secrets on $REPO..."
74$HOST_ | gh secret set VULTR_HOST --repo $REPO
75$USER_ | gh secret set VULTR_USER --repo $REPO
76Get-Content $KEY -Raw | gh secret set VULTR_SSH_KEY --repo $REPO
77Write-Host " ✓ VULTR_HOST, VULTR_USER, VULTR_SSH_KEY set" -ForegroundColor Green
74$HOST_ | gh secret set HETZNER_HOST --repo $REPO
75$USER_ | gh secret set HETZNER_USER --repo $REPO
76Get-Content $KEY -Raw | gh secret set HETZNER_SSH_KEY --repo $REPO
77Write-Host " ✓ HETZNER_HOST, HETZNER_USER, HETZNER_SSH_KEY set" -ForegroundColor Green
7878
7979# ─── 5. Trigger first deploy + watch ────────────────────────────────────────
8080Write-Host "[5/5] Triggering test deploy..."
81gh workflow run vultr-deploy.yml --repo $REPO --ref main
81gh workflow run hetzner-deploy.yml --repo $REPO --ref main
8282Start-Sleep -Seconds 3
83$run = (gh run list --repo $REPO --workflow=vultr-deploy.yml --limit 1 --json databaseId | ConvertFrom-Json)[0]
83$run = (gh run list --repo $REPO --workflow=hetzner-deploy.yml --limit 1 --json databaseId | ConvertFrom-Json)[0]
8484Write-Host " ✓ Run #$($run.databaseId) started. Watching..." -ForegroundColor Green
8585Write-Host ""
8686gh run watch $run.databaseId --repo $REPO --exit-status
9696} else {
9797 Write-Host ""
9898 Write-Host "==> Run failed — check the Actions tab:" -ForegroundColor Red
99 Write-Host " https://github.com/$REPO/actions/workflows/vultr-deploy.yml"
99 Write-Host " https://github.com/$REPO/actions/workflows/hetzner-deploy.yml"
100100}
101101