---
title: Charmhub | Deploy GitHub runner using Charmhub - The Open Operator Collection
description: Deploy the latest version of GitHub runner on any cloud.
url: https://charmhub.io/github-runner/configurations
---

# GitHub runner

[Canonical IS DevOps](https://charmhub.io/publisher/canonical-is-devops "View all packages from Canonical IS DevOps")

* [Canonical IS DevOps](https://charmhub.io/publisher/canonical-is-devops "View all packages from Canonical IS DevOps")

Platform:

24.04

22.04

20.04

stable 24801f1f

```
juju deploy github-runner
```

[Learn to deploy on juju >](https://juju.is/docs/juju/manage-applications)

* [allow-external-contributor](https://charmhub.io/github-runner/configurations#allow-external-contributor)
* [aproxy-exclude-addresses](https://charmhub.io/github-runner/configurations#aproxy-exclude-addresses)
* [aproxy-redirect-ports](https://charmhub.io/github-runner/configurations#aproxy-redirect-ports)
* [base-virtual-machines](https://charmhub.io/github-runner/configurations#base-virtual-machines)
* [dockerhub-mirror](https://charmhub.io/github-runner/configurations#dockerhub-mirror)
* [experimental-use-aproxy](https://charmhub.io/github-runner/configurations#experimental-use-aproxy)
* [flavor-label-combinations](https://charmhub.io/github-runner/configurations#flavor-label-combinations)
* [github-app-client-id](https://charmhub.io/github-runner/configurations#github-app-client-id)
* [github-app-installation-id](https://charmhub.io/github-runner/configurations#github-app-installation-id)
* [github-app-private-key-secret-id](https://charmhub.io/github-runner/configurations#github-app-private-key-secret-id)
* [group](https://charmhub.io/github-runner/configurations#group)
* [labels](https://charmhub.io/github-runner/configurations#labels)
* [manager-ssh-proxy-command](https://charmhub.io/github-runner/configurations#manager-ssh-proxy-command)
* [max-total-virtual-machines](https://charmhub.io/github-runner/configurations#max-total-virtual-machines)
* [openstack-clouds-yaml](https://charmhub.io/github-runner/configurations#openstack-clouds-yaml)
* [openstack-clouds-yaml-secret-id](https://charmhub.io/github-runner/configurations#openstack-clouds-yaml-secret-id)
* [openstack-flavor](https://charmhub.io/github-runner/configurations#openstack-flavor)
* [openstack-network](https://charmhub.io/github-runner/configurations#openstack-network)
* [otel-collector-endpoint](https://charmhub.io/github-runner/configurations#otel-collector-endpoint)
* [path](https://charmhub.io/github-runner/configurations#path)
* [pre-job-script](https://charmhub.io/github-runner/configurations#pre-job-script)
* [reconcile-interval](https://charmhub.io/github-runner/configurations#reconcile-interval)
* [runner-http-proxy](https://charmhub.io/github-runner/configurations#runner-http-proxy)
* [runner-manager-log-level](https://charmhub.io/github-runner/configurations#runner-manager-log-level)
* [test-mode](https://charmhub.io/github-runner/configurations#test-mode)
* [token](https://charmhub.io/github-runner/configurations#token)
* [token-secret-id](https://charmhub.io/github-runner/configurations#token-secret-id)
* [use-runner-proxy-for-tmate](https://charmhub.io/github-runner/configurations#use-runner-proxy-for-tmate)
* [virtual-machines](https://charmhub.io/github-runner/configurations#virtual-machines)

[Learn about configurations >](https://juju.is/docs/juju/configuration#heading--application-configuration)

* allow-external-contributor | boolean

  Default: True

  EXPERIMENTAL Whether to allow runs from forked repository from an external contributor. Enabling this option will enable all runs from forked repositories. By default, runs from contribution authors being in COLLABORATOR, MEMBER or OWNER status is allowed. See https://docs.github.com/en/graphql/reference/enums#commentauthorassociation.
* aproxy-exclude-addresses | string

  Default: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16

  A comma-separated list of IP addresses that should be excluded from redirection to aproxy. 127.0.0.0/8 are always excluded so you can omit if from the configuration.
* aproxy-redirect-ports | string

  Default: 80, 443

  A comma-separated list of ports or port ranges that should be redirected to aproxy.
* base-virtual-machines | int

  The number of virtual machine runners spawned by the charm per each combination of flavor and image.
* dockerhub-mirror | string

  The URL to the private docker registry configured as the dockerhub mirror to be used by the runners. If set a message will be displayed prior to job execution on self-hosted runner informing users to use the provided registry. You must use https:// as the protocol.
* experimental-use-aproxy | boolean

  (Experimental, may be removed) When set to true, aproxy (https://github.com/canonical/aproxy) will be installed within the runners. It will forward TCP traffic matching the 'aproxy-exclude-addresses' and 'aproxy-redirect-ports' settings to a proxy server configured by the Juju model config 'juju-http-proxy' (or, if this is not set, 'juju-https-proxy' will be used). This is useful when the charm is deployed in a network that requires a proxy to access the internet. Note that you should carefully choose values for the 'aproxy-exclude-addresses' and 'aproxy-redirect-ports' so that the network traffic from the runner to the HTTP proxy is not captured by aproxy. The simplest way to achieve this is to add the IP address of the HTTP proxy to 'aproxy-exclude-addresses' or exclude the HTTP proxy port from 'aproxy-redirect-ports'.
* flavor-label-combinations | string

  List of "flavor:label" entries separated by ",". The flavor will correspond to a OpenStack flavor and the label will be a label for the GitHub runner. Only one flavor-label combination is supported at the moment. A valid configuration looks like "m1.small:small".
* github-app-client-id | string

  GitHub App Client ID used instead of `token` for GitHub API authentication. This is the Client ID shown on the GitHub App settings page (e.g. "Iv23liXXXXXX"). The legacy numeric App ID is also accepted.
* github-app-installation-id | int

  GitHub App installation ID used instead of `token` for GitHub API authentication.
* github-app-private-key-secret-id | string

  Juju secret ID containing the PEM-encoded GitHub App private key under the `private-key` field. Use this together with `github-app-client-id` and `github-app-installation-id`.
* group | string

  Default: default

  The organization runner group to register the self-hosted runner under. This has no effect on runners under a repository.
* labels | string

  Additional comma separated labels to attach to self-hosted runners. By default, the labels "self-hosted", architecture (i.e. "x64", "arm64"), os (i.e. "linux"), os-flavor (i.e. "jammy") are set. Any labels provided via this configuration will be appended to the default values.
* manager-ssh-proxy-command | string

  Optional ProxyCommand used by the ssh connection which is used to access the virtual machine runners from the runner manager. It is equivalent to ProxyCommand in ssh-config, but without a shell. For example, a value could be something like: `bash -c "openssl s_client -quiet -connect 192.168.20.2:2222 -servername %h 2> /dev/null"`
* max-total-virtual-machines | int

  Maximum number of virtual machines managed by the charm. The charm will not spawn new runners beyond this limit. Set to 0 (default) for no cap.
* openstack-clouds-yaml | string

  (Compatibility fallback) The clouds.yaml yaml necessary for OpenStack integration. Prefer setting openstack-clouds-yaml-secret-id. The format for clouds.yaml is described in the docs: (https://docs.openstack.org/python-openstackclient/pike/configuration/index.html#clouds-yaml).
* openstack-clouds-yaml-secret-id | string

  Juju secret ID containing OpenStack clouds.yaml content under the `clouds-yaml` field. When set, this takes precedence over `openstack-clouds-yaml`.
* openstack-flavor | string

  (Deprecated, use flavor-label-list instead)
  The openstack flavor to use to spawn virtual machines. This controls the hardware resource
  of the virtual machines. See docs for details:
  (https://docs.openstack.org/nova/rocky/user/flavors.html).
* openstack-network | string

  The openstack network for virtual machines hosting the runners. The network must allow this
  application to be able to access the virtual machine though the IP assigned by the openstack
  network. See docs for details:
  (https://docs.openstack.org/neutron/latest/admin/intro-os-networking.html).
* otel-collector-endpoint | string

  The endpoint to send OpenTelemetry metrics to in the format "host:port". If not set, OpenTelemetry will be disabled.
* path | string

  The organization or the repository to register the self-hosted runners. For organization the path would be the name of the organization. For repository the path should be in the "{owner}/{repo}" format.
* pre-job-script | string

  Optional script (needs shebang) to execute in the pre-job phase of a spawned runner VM. This can e.g. be useful for specific infrastructure related configurations (e.g. usage of certain proxies or custom routes). Note that the user executing the script is the ubuntu user (which has sudo rights). Example script: #!/usr/bin/env bash cat > ~/.ssh/config <<EOF host github.com
  user git
  hostname github.com
  port 22
  proxycommand socat - PROXY:squid.internal:%h:%p,proxyport=3128
  EOF
* reconcile-interval | int

  Default: 5

  Minutes between each reconciliation of the current runners state and their targeted state. On reconciliation, the charm polls the state of runners and see if actions are needed. The value should be kept low, unless Github API rate limiting is encountered.
* runner-http-proxy | string

  The HTTP proxy value to use for the runners. If not specified, the model configuration option juju-http-proxy will be used instead.
* runner-manager-log-level | string

  Default: INFO

  The log level for the runner manager application. The value can be CRITICAL, FATAL, ERROR, WARNING, INFO, or DEBUG.
* test-mode | string

  When set to 'insecure', the charm test mode is activated, which may deactivate some security hardening measures.
* token | string

  (Compatibility fallback) The GitHub Personal Access Token for registering self-hosted runners. Prefer setting token-secret-id. The token requires 'repo' scope for repository runners and 'repo' + 'admin:org' scope for organization runners. For fine-grained token scopes, see https://charmhub.io/github-runner/docs/how-to-change-token.
* token-secret-id | string

  Juju secret ID containing the GitHub token under the `github-token` field. When set, this takes precedence over `token`.
* use-runner-proxy-for-tmate | boolean

  When set to true, the ssh connection from the runner to the tmate-ssh-server will be done using the proxy for the runner.
* virtual-machines | int

  (Deprecated, use base-virtual-machines or max-total-virtual-machines instead) The number of virtual machine runners. This charm will spawn or destroy virtual machines runners to match this setting. Setting virtual-machines to non-zero and any of base-virtual-machines or max-total-virtual-machines will block the charm.
