# [Use self-hosted Arm64-based runners in GitHub Actions for CI/CD](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/)
- [Background: GitHub Actions and CI/CD](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/background/)
- [Further Context](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/how-to-1/)
- [Setting up the DockerHub Repository](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/set-up-docker-repo/)
- [Prepare GitHub Repository](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/prepare-github-repo/)
- [Prepare the runner](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/prepare-runner/)
- [Create the Self-Hosted Runner in GitHub](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/create-self-hosted-runner-github/)
- [Running CI/CD pipeline](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/how-to-2/)
- [Summary](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/summary/)
- [Next Steps](https://learn.arm.com/learning-paths/laptops-and-desktops/self_hosted_cicd_github/_next-steps/)

## About this Learning Path

| Skill level: | Introductory |
|--------------|--------------|
| Reading time: | 20 min |
| Last updated: | 31 Jul 2026 |

| Author: | Dawid Borycki [GitHub](https://github.com/dawidborycki) |
|----------|--------------------------------------------------------|
| Arm IP: | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags: | Migration to Arm, Linux, dotnet, Visual Studio Code |

### Who is this for?

This Learning Path is for software developers and IT practitioners who want to learn how to use GitHub Actions for CI/CD purposes.

### What will you learn?

Upon completion of this Learning Path, you will be able to:

- Create a CI/CD pipeline in GitHub.
- Use a self-hosted runner.
- Build and push the Docker image to DockerHub.

### Prerequisites

Before starting, you will need the following:

- An Arm64-powered machine, either virtual or physical. This Learning Path demonstration uses an Arm64-powered VM with Ubuntu 22.04.
- A DockerHub account. You can [set up a free DockerHub account](https://hub.docker.com/signup).
- A GitHub account. You can [sign up for GitHub](https://github.com/signup).

### Summary

You’ll configure a GitHub Actions CI/CD pipeline on a self-hosted Arm64 Linux runner to build a .NET application and publish an Arm64 Docker image to Docker Hub. You’ll create the repository and secrets, and install Docker and the .NET SDK on Ubuntu 22.04. You’ll then run the workflow and verify the pushed image tag.

### Frequently asked questions

<details>
<summary>Do I need to create any GitHub secrets for DockerHub authentication?</summary>
Yes. Create two repository secrets: one for your Docker Hub username and one for your Docker Hub token so the workflow can log in and push the image.
</details>

<details>
<summary>Where can I find the exact `docker push` command for my new Docker Hub repository?</summary>
Docker Hub shows the push command after you create the repository. It looks like: `docker push <YOUR_ACCOUNT_NAME>/sampleapp:tagname`.
</details>

<details>
<summary>What software must I install on the self-hosted Arm64 runner before running the workflow?</summary>
Install the .NET SDK and Docker. The Learning Path provides Docker installation steps for Ubuntu 22.04.
</details>

<details>
<summary>Which project should I import into GitHub?</summary>
Use GitHub’s import tool with the repository URL `https://github.com/dawidborycki/arm-lp-ci-cd-net.git` and choose a name for your new repository.
</details>

<details>
<summary>What result should I expect when the pipeline finishes successfully?</summary>
The runner builds and pushes an Arm64 Docker image of the .NET application to your Docker Hub repository. The runner creates a new image tag in the repository you created.
</details>
