Bring another provider.
Three methodsThe controller owns GitHub, concurrency, budgets, and cleanup policy. An adapter only translates one disposable worker into provider infrastructure.
The interface
type Compute interface {
Launch(context.Context, Lease) (Worker, error)
Inventory(context.Context) ([]Worker, error)
Destroy(context.Context, string) error
}What the adapter owns
Image selection, machine shape, region, bootstrap, provider authentication, ownership metadata, and provider state translation.
Acceptance bar
- One JIT configuration starts exactly one isolated worker.
- Inventory returns owned workers and excludes everything else.
- Destroy is forced, idempotent, and safe after a partial launch.
- No provider or controller credential enters job code.
- Controller restart can adopt and later remove every worker.
Read the full adapter contract and use the Fly and Hetzner tests as executable examples.