# Deploy a GitHub Actions self-hosted runner on a Google Axion C4A virtual machine

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/servers-and-cloud-computing/github-on-arm/)
- [About Google Axion and GitHub Actions](https://learn.arm.com/learning-paths/servers-and-cloud-computing/github-on-arm/background/)
- [Create the instance](https://learn.arm.com/learning-paths/servers-and-cloud-computing/github-on-arm/instance/)
- [Set up a GitHub Self-Hosted Runner](https://learn.arm.com/learning-paths/servers-and-cloud-computing/github-on-arm/deploy/)
- [Deploy NGINX with the GitHub runner](https://learn.arm.com/learning-paths/servers-and-cloud-computing/github-on-arm/nginx-deployment/)
- [Next Steps](https://learn.arm.com/learning-paths/servers-and-cloud-computing/github-on-arm/_next-steps/)

## About this Learning Path

| Skill level:         | Introductory     |
|----------------------|------------------|
| Reading time:        | 15 min           |
| Last updated:        | 14 Sep 2026      |

| Author:              | Annie Tallund, Arm [GitHub](https://github.com/annietllnd) [LinkedIn](https://linkedin.com/in/annietallund) |
|----------------------|------------------|
| Arm IP:              | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| Tags:                | [CI-CD](https://learn.arm.com/tag/ci-cd) [Google Axion](https://learn.arm.com/tag/google-axion) [Linux](https://learn.arm.com/tag/linux) [GitHub Actions](https://learn.arm.com/tag/github-actions) [GitHub CLI](https://learn.arm.com/tag/github-cli) |

### Who is this for?
This is an introductory topic for developers who want to deploy a GitHub Actions self-hosted runner on an Arm-based Google Axion C4A instance.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Provision an Arm virtual machine on the Google Cloud Platform using the C4A Google Axion instance family.
- Set up and validate a GitHub Actions self-hosted runner on the Arm virtual machine (VM).
- Deploy a basic CI workflow with NGINX and verify execution on Arm infrastructure.

### Prerequisites
Before starting, you will need the following:
- A [Google Cloud Platform (GCP)](https://cloud.google.com/free?utm_source=google&hl=en) account with billing enabled
- A [GitHub account](https://github.com/signup)

### Summary
You’ll provision a Google Axion C4A VM and register it as a GitHub Actions self-hosted runner. First, you’ll install Git and GitHub CLI, authenticate to GitHub, create a workflow, and configure it to run on the Arm VM. Then, you’ll verify the runner by checking workflow logs and the NGINX service.

### Frequently asked questions
<details>
<summary>Which Google Cloud machine type should I choose for the VM?</summary>
Select the C4A family with the `c4a-standard-4` machine type (4 vCPUs, 16 GB memory).
</details>
<details>
<summary>What should I do on the instance before registering the GitHub Actions runner?</summary>
Install Git and GitHub CLI with the package manager, set your Git identity, then authenticate to GitHub. After that, register the runner so that it can accept jobs.
</details>
<details>
<summary>Where do I create the workflow file and how is it triggered?</summary>
Create `.github/workflows/deploy-nginx.yaml` in your repository. It runs on a push event to the main branch.
</details>
<details>
<summary>How do I know the job executed on the Arm self-hosted runner?</summary>
Treat `runs-on: self-hosted` as a match for any eligible self-hosted runner. It doesn’t select the C4A VM by architecture alone. Check the workflow logs and registered runner details to confirm that the job ran on the C4A instance.
</details>
<details>
<summary>How do I verify that the NGINX deployment completes?</summary>
Open the VM’s external IP address in a browser after the workflow completes. The NGINX welcome page should load, confirming that the workflow installed and started NGINX on the self-hosted Arm runner.
</details>
