Overview
This PR (ci(sandbox): /sandbox comment command + pinned Open-sandboxes registry, #429) adds two small pieces of internal engineering tooling to Dentolize's homelab CI: a PR comment command that spins up or manages a preview sandbox, and a pinned GitHub issue that always lists every sandbox currently alive. Both are unreleased, internal-only additions — nothing here touches the Dentolize product that clinics use.
Scope note: this is not a dental-clinic feature. It's a developer- experience improvement to how the Dentolize engineering team reviews pull requests. It's documented here with the same walkthrough format used for product features because it changes how every future PR gets tested and demoed — which indirectly affects how fast product features ship.
The problem it solves
Dentolize already had automatic PR preview environments ("sandboxes") — see PR #428, which added an auto-create flow driven by a ## 🧪 Sandbox block in the PR description. That works, but it has two rough edges this PR closes:
- Creating/managing a sandbox required editing the PR body. Anyone who
just wanted to redeploy, reseed, or destroy a sandbox had to know about the ## 🧪 Sandbox block convention, or go find the Sandbox Ops workflow in the Actions tab and pick the right branch from a dropdown by hand.
- There was no single place to see what's currently running. Sandboxes
come and go as PRs open, get new commits, and close. Finding out "is there already a sandbox for this branch?" or "how many sandboxes are alive right now?" meant checking the Actions tab or asking on chat.
What this PR adds
/sandboxcomment command (.github/workflows/sandbox-command.yml) —
type /sandbox, /sandbox destroy, /sandbox reseed, /sandbox reset-data, or /sandbox docs as a comment on any PR. The workflow reacts to the comment, checks the commenter is a repo member, and dispatches the existing Sandbox Ops workflow on that PR's branch — no dropdown, no PR-body editing. See /sandbox — the comment command.
- 🗂 Open sandboxes registry (
.github/workflows/sandbox-registry.yml) — a
single pinned issue, kept up to date automatically, listing every live sandbox: status, branch, linked PR, web URL, commit, and age. Refreshed after every sandbox-related workflow run, every 30 minutes, and on demand. See Open sandboxes — the pinned registry issue.
What this PR does not change
Both workflows are thin triggers. All of the actual deploy / seed / destroy / docs logic already lived in sandbox-ops.yml (manual workflow_dispatch) and the sandbox CLI on the homelab runner (/opt/homelab/sandbox/bin/sandbox). This PR adds:
- one new event source for Sandbox Ops (a PR comment, instead of only the
Actions tab "Run workflow" button), and
- one new consumer of a
sandbox registryCLI subcommand that the PR
description says is "already deployed" on the runner host.
The sandbox registry CLI subcommand itself lives outside this repository (on the self-hosted runner, under /opt/homelab/sandbox), so it isn't part of this diff and can't be verified from /work/repo — see the note in Open sandboxes.
Where things live
| File | What it does |
|---|---|
.github/workflows/sandbox-command.yml | New. Listens for PR comments, dispatches Sandbox Ops. |
.github/workflows/sandbox-registry.yml | New. Builds/updates the pinned "🗂 Open sandboxes" issue. |
.github/workflows/sandbox-ops.yml | Unchanged. The actual reseed/reset-data/redeploy/destroy/update-docs executor. |
.github/workflows/sandbox.yml | Unchanged. Auto-deploys a sandbox on PR open/commit (from #428). |
.github/workflows/sandbox-gc.yml | Unchanged. Weekly report of sandboxes whose PR already closed. |