We had an API endpoint that set up environments. It claimed a pre-warmed org from a pool, authenticated two users, imported test data, installed a bundle, and published config. Six sequential shell calls. Runtime dependency on a server. Credentials scattered across process state. A pain to debug when it failed at step 4 of 6 at 2am. The fix wasn't to rewrite the API. It was to stop having an API at all. The move: GitHub Actions as the runtime The entire setup sequence now lives in a single GitHub Actions workflow file. No server, no queue, no process isolation hacks. The runner is the environment β ephemeral, observable, retryable. The key architectural shifts: 1. Parallelise everything that can be. The old endpoint ran sequentially because it was Node.js with a queue. GitHub Actions has native parallelism via step grouping. Auth for two users? One run block, two background processes, wait . Test data import for multiple data keys? Matrix strategy, each key in its own parallel job.β¦