Build containers using rootless Podman in Github/Gitea Actions
Find a file
Foat Akhmadeev 336a9290bb strict mode
2024-12-17 14:45:52 +03:00
.github/workflows strict mode 2024-12-17 14:45:52 +03:00
scripts strict mode 2024-12-17 14:45:52 +03:00
action.yml strict mode 2024-12-17 14:45:52 +03:00
LICENSE Initial commit 2024-12-13 17:58:39 +03:00
README.md Added code 2024-12-16 13:11:33 +03:00

Podman (Login,Build,Push) GitHub Action

This repository provides a GitHub Action to build and push container images using Podman. It supports Podman login, building images from Dockerfiles, and pushing images to container registries.

Features

  • Build container images with Podman.
  • Push images to a container registry (e.g., ghcr.io, quay.io).
  • Flexible support for build arguments, labels, tags, and security options.
  • Designed to run in GitHub workflows for CI/CD automation.
  • Supports Gitea Actions with a shared storage between runs.

Directory Structure

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

Usage

Example Workflow

Add the following workflow file to .github/workflows/build.yml:

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 The container registry to push to (e.g., ghcr.io). No
login_username Registry username. No
login_password Registry password (use GitHub secrets). No
tags Tags for the image (space-separated or newline-separated). No
labels Additional metadata for the image (space-separated or newline-separated). No
build_args Build arguments (space-separated or newline-separated). No
extra_args Extra arguments for the podman build command (newline-separated). No
dockerfile Path to the Dockerfile. If set, the build step is performed. No
push Whether to push the image after building. No false
shared_path Path to a shared folder for cache files on the host filesystem (useful for self-hosted runners). No /tmp/shared
security Security options for the intermediate container (space-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.

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.