| mode | Specify the operation mode:
- 'start' - to create a new Azure VM runner
- 'stop' - to terminate the previously created runner | yes | — |
| github-token | GitHub Personal Access Token with the 'repo' scope assigned. | yes | — |
| vm-size | Azure VM size (e.g., Standard_D2s_v3, Standard_D4s_v3). Required for 'start' mode unless using zones-config. | no | — |
| image-id | Custom Azure image resource ID. Use this OR image-publisher/offer/sku. | no | — |
| image-publisher | Azure Marketplace image publisher (e.g., Canonical). Use with image-offer and image-sku. | no | — |
| image-offer | Azure Marketplace image offer (e.g., 0001-com-ubuntu-server-jammy). | no | — |
| image-sku | Azure Marketplace image SKU (e.g., 22_04-lts-gen2). | no | — |
| image-version | Azure Marketplace image version. Defaults to 'latest'. | no | latest |
| subnet-id | Azure subnet resource ID. The subnet must exist in the specified resource group's VNet. Required for 'start' mode unless using zones-config. | no | — |
| network-security-group-id | Azure Network Security Group resource ID. The NSG should allow outbound traffic to GitHub (TCP/443). | no | — |
| assign-public-ip | Whether to assign a public IP address to the VM. Set to 'true' if the subnet doesn't have outbound internet via NAT gateway. | no | false |
| resource-group-name | Azure resource group where the VM will be created. Required for 'start' mode unless using zones-config. | no | — |
| location | Azure region (e.g., eastus, westeurope). Required for 'start' mode unless using zones-config. | no | — |
| vm-resource-id | Azure VM resource ID of the created runner. Required for 'stop' mode to terminate the VM. | no | — |
| label | Unique label assigned to the runner. Required for 'stop' mode to deregister the runner from GitHub. | no | — |
| pre-runner-script | Bash commands to run before the GitHub runner starts. Useful for installing dependencies (apt-get, yum, etc.). | no | — |
| packages | JSON array of packages to install via cloud-init. Example: '["git", "docker.io", "nodejs"]' | no | [] |
| runner-home-dir | Directory containing pre-installed actions-runner software. If set, skips runner download. Example: /home/runner/actions-runner | no | — |
| managed-identity-id | User-assigned managed identity resource ID to attach to the VM. Enables credential-free access to Azure resources. | no | — |
| ssh-public-key | SSH public key for VM authentication. Enables SSH access for debugging. Example: 'ssh-rsa AAAAB3NzaC1yc2E... user@host' | no | — |
| spot-instance | Use Azure Spot VM for cost savings (up to 90% discount). Note: Spot VMs can be evicted with 30 seconds notice. | no | false |
| spot-max-price | Maximum hourly price for Spot VM in USD. Set to -1 (default) for no price limit (pay up to on-demand price). | no | -1 |
| resource-tags | JSON object of tags to apply to Azure resources. Example: '{"Environment": "CI", "CostCenter": "Engineering"}' | no | {} |
| zones-config | JSON array of zone configurations for multi-region failover. Each object should contain: location, resourceGroupName, subnetId. Optional per-zone: networkSecurityGroupId, imageId, imagePublisher, imageOffer, imageSku. Example: '[{"location":"eastus","resourceGroupName":"rg-east","subnetId":"/subscriptions/.../subnets/default"}]' | no | — |
| startup-quiet-period-seconds | Seconds to wait after VM starts before checking runner registration. Allows time for cloud-init and pre-runner script to complete. | no | 30 |
| startup-retry-interval-seconds | Seconds between runner registration checks. | no | 10 |
| startup-timeout-minutes | Maximum minutes to wait for runner to register with GitHub. | no | 5 |
| run-runner-as-service | Run the GitHub runner as a systemd service instead of ./run.sh. | no | false |
| run-runner-as-user | Run the GitHub runner as this user instead of root. | no | — |
| os-disk-size-gb | OS disk size in GB. Defaults to image default (usually 30GB). | no | — |
| os-disk-type | OS disk type: Premium_LRS, StandardSSD_LRS, Standard_LRS. Premium requires VM sizes that support premium storage. | no | StandardSSD_LRS |