Build Container Image #13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |