Azure / Azure/git-ape

Support private (self-hosted) GitHub Actions runners for Git-Ape workflows

Open
#181 1 comment 0 reactions 1 assignee Claimed by @arnaudlh View on GitHub
enhancement
Dominant language
JavaScript
Stars
269
Forks
45
Avg merge
18h 41m
Merged PRs (30d)
11

Description

## Summary

Let users run the Git-Ape deployment workflows (`git-ape-plan` / `-deploy` / `-destroy` / `-verify`) on **private self-hosted runners** in their own Azure subscription, and migrate from public GitHub-hosted runners to private ones **without code changes**.

## Motivation

Some organizations cannot run deployment workflows on public GitHub-hosted runners — they need deployments to originate from inside their network (private endpoints, no public egress, policy restrictions). Git-Ape should support this while keeping the zero-infrastructure default for everyone else.

## Bootstrap model: start public, switch to private later

Private runners are themselves Azure resources deployed *by* a Git-Ape workflow, so the first deploy — including the one that creates the runner host — must run on a GitHub-hosted runner. Onboarding should therefore default to `ubuntu-latest`, with going private as a later, additive, reversible step driven by a single variable:

```yaml
runs-on: ${{ vars.GIT_APE_RUNNER_LABEL || 'ubuntu-latest' }}
```

| `GIT_APE_RUNNER_LABEL` | Effect |
|---|---|
| unset (default) | GitHub-hosted `ubuntu-latest`, no infrastructure |
| set to a label | Self-hosted runners registered with that label |

## Requirements

- [ ] Parametrize `runs-on` across all four Git-Ape workflow templates via `GIT_APE_RUNNER_LABEL` (default `ubuntu-latest`).
- [ ] Provide on-demand runner IaC for the common Azure hosts:
- **ACI** — Azure Container Instances (simplest; a handful of runners)
- **ACA** — Azure Container Apps (event-driven, ephemeral, scale-to-zero via the KEDA `github-runner` scaler)
- **AKS** — Azure Kubernetes Service (Actions Runner Controller)
- [ ] Support both **self-hosted (subscription)** and [**Hosted compute** topologies.](https://docs.github.com/en/enterprise-cloud@latest/admin/configuring-settings/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products-in-your-enterprise)
- [ ] Security baseline: user-assigned managed identity for Azure access (no keys); the GitHub registration credential sourced from Key Vault; ephemeral runners by default; runner label must match `GIT_APE_RUNNER_LABEL`.
- [ ] Integrate runner selection into the onboarding agent/skill (re-runnable later), and document the switch in `copilot-instructions.md` and the website docs.
- [ ] Note the drift workflow caveat (compiled gh-aw — needs recompile to change its runner).

## Out of scope

- Changing the continuous drift workflow's runner by default (it is a compiled gh-aw workflow; documented as a manual recompile).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.