Skip to content

Build Container Image #13

Build Container Image

Build Container Image #13

Workflow file for this run

name: Build Container Image
on:
workflow_dispatch:
inputs:
desktop:
description: "Desktop Environment"
required: true
default: "cosmic"
type: choice
options:
- kde
- gnome
- cosmic
edition:
description: "Edition"
required: true
default: "main"
type: choice
options:
- main
- dx
- gx
- swe
workflow_call:
env:
IMAGE_DESC: "Custom Fedora Atomic image with COSMIC™ desktop"
IMAGE_KEYWORDS: "bootc,ublue,universal-blue"
IMAGE_LOGO_URL: "https://avatars.githubusercontent.com/u/120078124?s=200&v=4"
IMAGE_NAME: "${{ github.event.repository.name }}"
IMAGE_REGISTRY: "ghcr.io/${{ github.repository_owner }}"
DEFAULT_TAG: "latest"
concurrency:
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
cancel-in-progress: true
jobs:
build_push:
name: Build and push image
runs-on: ubuntu-24.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Prepare environment
run: |
echo "IMAGE_REGISTRY=${IMAGE_REGISTRY,,}" >> ${GITHUB_ENV}
echo "IMAGE_NAME=${IMAGE_NAME,,}" >> ${GITHUB_ENV}
- name: Set Dynamic Variables
id: dynamic_vars
run: |
DESKTOP="${{ github.event.inputs.desktop }}"
EDITION="${{ github.event.inputs.edition }}"
BASE="base" # Defaultní hodnota
# Logika pro BASE
if [[ "$DESKTOP" == "kde" ]]; then
BASE="kinoite"
elif [[ "$DESKTOP" == "gnome" ]]; then
BASE="silverblue"
else
BASE="base"
fi
if [[ "$EDITION" == "main" ]]; then
FULL_NAME="${IMAGE_NAME}-${DESKTOP}"
else
FULL_NAME="${IMAGE_NAME}-${DESKTOP}-${EDITION}"
fi
echo "DESKTOP=$DESKTOP" >> $GITHUB_OUTPUT
echo "EDITION=$EDITION" >> $GITHUB_OUTPUT
echo "BASE=$BASE" >> $GITHUB_OUTPUT
echo "FULL_NAME=$FULL_NAME" >> $GITHUB_OUTPUT
echo "FULL_NAME: $FULL_NAME, BASE: $BASE" # Pro debug
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- name: Mount BTRFS for podman storage
uses: ublue-os/container-storage-action@main
- name: Get current date
id: date
run: |
echo "date_iso=$(date -u +%Y-%m-%d\T%H:%M:%S\Z)" >> $GITHUB_OUTPUT
echo "date_tag=$(date -u +%Y%m%d)" >> $GITHUB_OUTPUT
- name: Image Metadata
uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v5
id: metadata
with:
images: ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=${{ env.DEFAULT_TAG }}
type=raw,value=${{ steps.dynamic_vars.outputs.FULL_NAME }} # NOVÝ TAG
type=raw,value=${{ steps.dynamic_vars.outputs.FULL_NAME }}.${{ steps.date.outputs.date_tag }}
type=raw,value=${{ steps.date.outputs.date_tag }}
type=sha,enable=${{ github.event_name == 'pull_request' }}
type=ref,event=pr
labels: |
io.artifacthub.package.readme-url=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/refs/heads/main/README.md
org.opencontainers.image.description=${{ env.IMAGE_DESC }}
org.opencontainers.image.created=${{ steps.date.outputs.date_iso }}
org.opencontainers.image.documentation=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/refs/heads/main/README.md
org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/blob/main/Containerfile
type=raw,value=${{ steps.date.outputs.date_tag }}
org.opencontainers.image.description=${{ env.IMAGE_DESC }}
org.opencontainers.image.title=${{ steps.dynamic_vars.outputs.FULL_NAME }}
org.opencontainers.image.url=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
org.opencontainers.image.vendor=${{ github.repository_owner }}
org.opencontainers.image.version=${{ env.DEFAULT_TAG }}.${{ steps.date.outputs.date_tag }}
io.artifacthub.package.deprecated=false
io.artifacthub.package.keywords=${{ env.IMAGE_KEYWORDS }}
io.artifacthub.package.license=Apache-2.0
io.artifacthub.package.logo-url=${{ env.IMAGE_LOGO_URL }}
io.artifacthub.package.prerelease=false
containers.bootc=1
sep-tags: " "
sep-annotations: " "
- name: Build Image
id: build_image
uses: redhat-actions/buildah-build@7a95fa7ee0f02d552a32753e7414641a04307056 # v2
with:
containerfiles: |
./Containerfile
image: ${{ steps.dynamic_vars.outputs.FULL_NAME }}
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
oci: false
build-args: |
DESKTOP=${{ steps.dynamic_vars.outputs.DESKTOP }}
EDITION=${{ steps.dynamic_vars.outputs.EDITION }}
BASE=${{ steps.dynamic_vars.outputs.BASE }}
- name: Login to GitHub Container Registry
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push Main Image To GHCR
uses: redhat-actions/push-to-registry@5ed88d269cf581ea9ef6dd6806d01562096bee9c # v2
if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
id: push
env:
REGISTRY_USER: ${{ github.actor }}
REGISTRY_PASSWORD: ${{ github.token }}
with:
registry: ${{ env.IMAGE_REGISTRY }}
image: ${{ steps.dynamic_vars.outputs.FULL_NAME }}
tags: ${{ steps.metadata.outputs.tags }}
username: ${{ env.REGISTRY_USER }}
password: ${{ env.REGISTRY_PASSWORD }}
- name: Install Cosign
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
- name: Sign main container image
if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
run: |
IMAGE_FULL="${{ env.IMAGE_REGISTRY }}/${{ steps.dynamic_vars.outputs.FULL_NAME }}"
for tag in ${{ steps.metadata.outputs.tags }}; do
cosign sign -y --key env://COSIGN_PRIVATE_KEY $IMAGE_FULL:$tag
done
env:
TAGS: ${{ steps.push.outputs.digest }}
COSIGN_EXPERIMENTAL: false
COSIGN_PRIVATE_KEY: ${{ secrets.SIGNING_SECRET }}