Skip to main content
scripts/vps-smoke.sh checks a real install end to end on a VPS you already have (a rented Linux server). It never creates or deletes cloud resources.

What it does

1

Install

Runs this tree’s install.sh over SSH at SMOKE_FROM_TAG.
2

Set up

Reads the one-time setup token, creates the admin, and mints an API token.
3

Deploy fixtures

Pushes three fixtures (Next.js, Go API, static, under test/fixtures/smoke) to a scratch branch, connects the git source with a GitHub token, and deploys each on <app>.<SMOKE_DOMAIN_BASE>.
4

Check TLS

Asserts each domain serves a verified TLS chain with at least 7 days before notAfter.
5

Redeploy and roll back

Pushes a second commit, redeploys, rolls back to the previous succeeded deploy, and checks the served body marker returns to the first commit.
6

Upgrade under load

Upgrades to SMOKE_TO_TAG while curling every /healthz about ten times a second, and fails on any non-2xx.
It prints a summary table and exits non-zero on any failure.

Prerequisites

  • An Ubuntu VPS reachable by SSH as root or a passwordless sudo user, ports 80, 443 and 8080 open.
  • A wildcard DNS A record for SMOKE_DOMAIN_BASE pointing at it.
  • A scratch GitHub repo and a token with contents write on it. The run pushes and deletes a smoke/<timestamp> branch.
  • On the runner: ssh, curl, jq, openssl, git, and Go (or SMOKE_CLI pointing at a levelrail-cli binary).

Run

--dry-run prints the planned steps without touching the network. Use a fresh VPS for each run, since install and admin creation are one-time. Optional environment variables:

CI

The VPS smoke workflow is workflow_dispatch only. It takes the values above as inputs and needs the SMOKE_GH_TOKEN and SMOKE_SSH_KEY secrets.
Last modified on October 12, 2026