Build containers using rootless Podman in Github/Gitea Actions
Find a file
2024-12-18 17:49:41 +03:00
github/workflows Updated readme and releases 2024-12-18 17:49:41 +03:00
scripts podman rootless build 2024-12-18 15:47:22 +03:00
action.yml Updated readme and releases 2024-12-18 17:49:41 +03:00
LICENSE Initial commit 2024-12-13 17:58:39 +03:00
README.md Updated readme and releases 2024-12-18 17:49:41 +03:00
RELEASES.md Updated readme and releases 2024-12-18 17:49:41 +03:00

Podman (Login, Build, Push) GitHub Action

This repository provides a GitHub Action to build and push container images using Podman. The action supports Podman login, building images from Dockerfiles, and pushing images to container registries. It is designed to work seamlessly within GitHub workflows to automate CI/CD pipelines.

Features

  • Build and Push: Build container images and optionally push them to a container registry.
  • Flexible Configuration: Support for build arguments, labels, tags, and security options.
  • CI/CD Ready: Designed for GitHub Actions workflows.
  • Shared Storage Support: Compatible with shared storage on self-hosted runners for caching.

Directory Structure

container-action
├── LICENSE                 # License information (MIT)
├── README.md               # This documentation
├── .github
│    └── workflows
│        └── verify.yml     # Example workflow for testing
├── scripts
│   └── run.sh              # Core script to handle Podman operations
└── action.yml              # GitHub Action definition

Usage

Example Workflow

To use this action in a workflow, create a file .github/workflows/build.yml with the following content:

name: Build and Push Container Image

on:
  push:
    branches:
      - main

jobs:
  build-push:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Use Podman Build and Push Action
        uses: frozen-tapestry/podman-build-push-action@v1
        with:
          login_registry: ghcr.io
          login_username: ${{ secrets.REGISTRY_USERNAME }}
          login_password: ${{ secrets.REGISTRY_PASSWORD }}
          tags: ghcr.io/your-namespace/your-image:latest
          dockerfile: path/to/Dockerfile
          push: true

Inputs

Input Description Required Default
login_registry Container registry to push to (e.g., quay.io). If not set, the image is only built locally. No
login_username Registry username. No
login_password Registry password (GitHub secret recommended). No
tags Tags for the image. Space-separated. e.g. quay.io/podman/stable:latest quay.io/podman/stable:nightly. No
labels List of additional metadata for an image. Space-separated. No
build_args Optional build arguments. Space-separated. e.g. MY_ENV_VAR=Test MY_ENV_VAR2=Test2. No
extra_args Extra arguments to be passed to Podman. Space-separated. e.g. -e=MY_ENV=Test -e=MY_ENV=Test2. No
dockerfile Path to the Dockerfile. If set, the build step is performed. No
push Whether to push the image after building. No false
security Security flags used for an intermediate container. Newline-separated. No --network=host

Development

Verify Workflow

The verify.yml workflow tests the action by:

  1. Creating a temporary Dockerfile.
  2. Building and pushing the container image.
  3. Running the container to validate its output.

You can use this workflow as a template for testing your own usage. It is located at .github/workflows/verify.yml.

Core Script

The main logic for building and pushing images resides in the scripts/run.sh file. It:

  • Logs into the container registry if credentials are provided.
  • Builds the container image with specified tags, labels, and build arguments.
  • Pushes the image if the push input is set to true.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contributions

Contributions, issues, and feature requests are welcome! Feel free to open a pull request or issue in this repository.