Skip to content

Example: Build Container image with Podman (Rocky Linux 9) #2

@Cyclenerd

Description

@Cyclenerd

This GitHub Action example workflow automates the creation of a GitHub Actions Runner on Hetzner Cloud, builds a Container image with Podman using that runner, and then automatically deletes the runner to avoid unnecessary costs. It utilizes the Cyclenerd/hcloud-github-runner GitHub Action for managing the runner lifecycle and leverages the podman build command for efficient image building and pushing to the GitHub Container Registry.

Image used: rocky-9 Rocky Linux 9

name: "Podman"

on:
  workflow_dispatch:

jobs:
  create-runner:
    name: Create Runner
    runs-on: ubuntu-24.04
    outputs:
      label: ${{ steps.create-runner.outputs.label }}
      server_id: ${{ steps.create-runner.outputs.server_id }}
    steps:
      - name: Create runner
        id: create-runner
        uses: Cyclenerd/hcloud-github-runner@v1
        with:
          mode: create
          github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          hcloud_token: ${{ secrets.HCLOUD_TOKEN }}
          server_type: cx22
          # Use Rocky Linux 9 base image
          image: rocky-9
          # Install Podman
          pre_runner_script: |
            dnf install podman -y
          # Add SSH key to disable root password generation and email notifications
          # ssh_key: 123

  build:
    name: Build Image
    needs:
      - create-runner # required to get output from the create-runner job
    runs-on: ${{ needs.create-runner.outputs.label }}
    steps:
      - name: Checkout 🛎️
        uses: actions/checkout@v4
      - name: Login to GitHub container registry 🏭
        # https://docs.docker.com/reference/cli/docker/login/
        run: podman login ghcr.io -u "${{ github.repository_owner }}" -p "${{ secrets.github_token }}"
      - name: Build Container image 🧪
        # Replace "ghcr.io/cyclenerd/hcloud-github-runner:example"
        run: |
          podman build . \
            --file "Dockerfile" \
            --tag "ghcr.io/cyclenerd/hcloud-github-runner:example"
      - name: Push Container image 📤
        # Replace "ghcr.io/cyclenerd/hcloud-github-runner:example"
        run: podman push "ghcr.io/cyclenerd/hcloud-github-runner:example"

  delete-runner:
    name: Delete Runner
    needs:
      - create-runner # required to get output from the create-runner job
      - build # required to wait when the main job is done
    runs-on: ubuntu-24.04
    if: ${{ always() }} # required to stop the runner even if the error happened in the previous jobs
    steps:
      - name: Delete runner
        uses: Cyclenerd/hcloud-github-runner@v1
        with:
          mode: delete
          github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          hcloud_token: ${{ secrets.HCLOUD_TOKEN }}
          name: ${{ needs.create-runner.outputs.label }}
          server_id: ${{ needs.create-runner.outputs.server_id }}

Metadata

Metadata

Assignees

No one assigned

    Labels

    exampleExample GitHub Action

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions