Skip to content

docker in workflow

docker in workflow #28

Workflow file for this run

name: Build and Push Image
on:
schedule:
- cron: '30 14 * * *' # 14:30 UTC everyday (8:30 AM CST)
merge_group:
pull_request:
branches:
- main
- testing
paths-ignore:
- '**.md'
push:
branches:
- main
- testing
paths-ignore:
- '**.md'
workflow_dispatch:
concurrency:
cancel-in-progress: true
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
env:
IMAGE_NAME:
AKMODS_FLAVOR:
TEST_TAG: user/app:test
LATEST_TAG: user/app:latest
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
jobs:
push-ghcr:
name: Make
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
strategy:
fail-fast: false
matrix:
image_flavor: [asus]
base_name: [bluefin-dx]
major_version: [39]
include:
- major_version: 39
is_latest_version: true
is_stable_version: true
is_gts_version: false
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Install latest skopeo
run: |
sudo apt-get update -qq
sudo apt-get -qq -y install skopeo
- name: Verify base image
uses: EyeCantCU/cosign-action/[email protected]
with:
containers: silverblue-${{ matrix.image_flavor }}:${{ matrix.major_version }}
- name: Verify Chainguard images
if: matrix.base_name != 'bluefin'
uses: EyeCantCU/cosign-action/[email protected]
with:
containers: dive, flux, helm, ko, minio, kubectl
cert-identity: https://github.com/chainguard-images/images/.github/workflows/release.yaml@refs/heads/main
oidc-issuer: https://token.actions.githubusercontent.com
registry: cgr.dev/chainguard
- name: Maximize build space
uses: ublue-os/remove-unwanted-software@v6
- name: Check just syntax
uses: ublue-os/just-action@v1
- name: Matrix Variables
run: |
if [[ "${{ matrix.image_flavor }}" == "main" ]]; then
echo "IMAGE_NAME=${{ matrix.base_name }}" >> $GITHUB_ENV
else
echo "IMAGE_NAME=${{ format('{0}-{1}', matrix.base_name, matrix.image_flavor) }}" >> $GITHUB_ENV
fi
if [[ "${{ matrix.image_flavor }}" =~ "asus" ]]; then
echo "AKMODS_FLAVOR=asus" >> $GITHUB_ENV
elif [[ "${{ matrix.image_flavor }}" =~ "surface" ]]; then
echo "AKMODS_FLAVOR=surface" >> $GITHUB_ENV
else
echo "AKMODS_FLAVOR=main" >> $GITHUB_ENV
fi
- name: Generate tags
id: generate-tags
shell: bash
run: |
# Generate a timestamp for creating an image version history
TIMESTAMP="$(date +%Y%m%d)"
MAJOR_VERSION="${{ matrix.major_version }}"
COMMIT_TAGS=()
BUILD_TAGS=()
# Have tags for tracking builds during pull request
SHA_SHORT="${GITHUB_SHA::7}"
COMMIT_TAGS+=("pr-${{ github.event.number }}-${MAJOR_VERSION}")
COMMIT_TAGS+=("${SHA_SHORT}-${MAJOR_VERSION}")
if [[ "${{ matrix.is_latest_version }}" == "true" ]] && \
[[ "${{ matrix.is_stable_version }}" == "true" ]]; then
COMMIT_TAGS+=("pr-${{ github.event.number }}")
COMMIT_TAGS+=("${SHA_SHORT}")
fi
BUILD_TAGS=("${MAJOR_VERSION}" "${MAJOR_VERSION}-${TIMESTAMP}")
if [[ ${{ github.ref_name }} == "testing" ]]; then
BUILD_TAGS=("${MAJOR_VERSION}-testing" "${MAJOR_VERSION}-testing-${TIMESTAMP}")
if [[ "${{ matrix.is_latest_version }}" == "true" ]] && \
[[ "${{ matrix.is_stable_version }}" == "true" ]]; then
BUILD_TAGS+=("testing")
elif [[ "${{ matrix.is_gts_version }}" == "true" ]]; then
BUILD_TAGS+=("gts-testing")
fi
elif [[ "${{ matrix.is_latest_version }}" == "true" ]] && \
[[ "${{ matrix.is_stable_version }}" == "true" ]]; then
BUILD_TAGS+=("latest")
elif [[ "${{ matrix.is_gts_version }}" == "true" ]]; then
BUILD_TAGS+=("gts")
fi
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "Generated the following commit tags: "
for TAG in "${COMMIT_TAGS[@]}"; do
echo "${TAG}"
done
alias_tags=("${COMMIT_TAGS[@]}")
else
alias_tags=("${BUILD_TAGS[@]}")
fi
echo "Generated the following build tags: "
for TAG in "${BUILD_TAGS[@]}"; do
echo "${TAG}"
done
echo ${alias_tags[@]} | sed 's/ /, /g'
echo "alias_tags=${alias_tags[*]}" >> $GITHUB_OUTPUT
- name: Get Current Fedora Version
id: labels
shell: bash
run: |
set -eo pipefail
ver=$(skopeo inspect docker://ghcr.io/ublue-os/silverblue-${{ matrix.image_flavor }}:${{ matrix.major_version }} | jq -r '.Labels["org.opencontainers.image.version"]')
if [ -z "$ver" ] || [ "null" = "$ver" ]; then
echo "inspected image version must not be empty or null"
exit 1
fi
echo "VERSION=$ver" >> $GITHUB_OUTPUT
# Build metadata
- name: Image Metadata
uses: docker/metadata-action@v5
id: meta
with:
images: |
${{ env.IMAGE_NAME }}
labels: |
org.opencontainers.image.title=${{ env.IMAGE_NAME }}
org.opencontainers.image.version=${{ steps.labels.outputs.VERSION }}
io.artifacthub.package.logo-url=https://avatars.githubusercontent.com/u/120078124?s=200&v=4
org.opencontainers.image.description=An interpretation of the Ubuntu spirit built on Fedora technology
io.artifacthub.package.readme-url=https://raw.githubusercontent.com/ublue-os/bluefin/bluefin/README.md
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
password: ${{ secrets.GITHUB_TOKEN }}
username: ${{ github.repository_owner }}
- name: Build and export to Docker
id: build_image
uses: docker/build-push-action@v5
with:
context: .
load: true
push: false
file: ./Containerfile
cache-from: type=gha
cache-to: type=gha,mode=max
labels: ${{ steps.meta.outputs.labels }}
tags: ghcr.io/bayou-brogrammer/bluefin-dx-asus:latest
# tags: ${{ steps.generate-tags.outputs.alias_tags }}
build-args: |
IMAGE_NAME=${{ env.IMAGE_NAME }}
AKMODS_FLAVOR=${{ env.AKMODS_FLAVOR }}
IMAGE_FLAVOR=${{ matrix.image_flavor }}
IMAGE_VENDOR=${{ github.repository_owner }}
FEDORA_MAJOR_VERSION=${{ matrix.major_version }}
# Build image using Buildah action
# - name: Build Image
# id: build_image
# uses: redhat-actions/buildah-build@main
# with:
# oci: false
# image: ${{ env.IMAGE_NAME }}
# # labels: ${{ steps.meta.outputs.labels }}
# containerfiles: |
# ./Containerfile
# tags: |
# ${{ steps.generate-tags.outputs.alias_tags }}
# build-args: |
# IMAGE_NAME=${{ env.IMAGE_NAME }}
# IMAGE_FLAVOR=${{ matrix.image_flavor }}
# IMAGE_VENDOR=${{ github.repository_owner }}
# FEDORA_MAJOR_VERSION=${{ matrix.major_version }}
# AKMODS_FLAVOR=${{ env.AKMODS_FLAVOR }}
# # TODO(GH-280)
# # extra-args: |
# # --target=${{ matrix.target_name || matrix.base_name }}
# extra-args: |
# --target=${{ matrix.base_name }}
# Workaround bug where capital letters in your GitHub username make it impossible to push to GHCR.
# https://github.com/macbre/push-to-ghcr/issues/12
- name: Lowercase Registry
id: registry_case
uses: ASzc/change-string-case-action@v6
with:
string: ${{ env.IMAGE_REGISTRY }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push the image to GHCR (Image Registry)
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v5
id: push
with:
context: .
push: true
file: ./Containerfile
cache-from: type=gha
cache-to: type=gha,mode=max
labels: ${{ steps.meta.outputs.labels }}
tags: ghcr.io/bayou-brogrammer/bluefin-dx-asus:latest
# tags: ${{ steps.generate-tags.outputs.alias_tags }}
build-args: |
IMAGE_NAME=${{ env.IMAGE_NAME }}
AKMODS_FLAVOR=${{ env.AKMODS_FLAVOR }}
IMAGE_FLAVOR=${{ matrix.image_flavor }}
IMAGE_VENDOR=${{ github.repository_owner }}
FEDORA_MAJOR_VERSION=${{ matrix.major_version }}
# Push the image to GHCR (Image Registry)
# - name: Push To GHCR
# uses: redhat-actions/push-to-registry@v2
# id: push
# if: github.event_name != 'pull_request'
# env:
# REGISTRY_USER: ${{ github.actor }}
# REGISTRY_PASSWORD: ${{ github.token }}
# with:
# image: ${{ steps.build_image.outputs.image }}
# tags: ${{ steps.build_image.outputs.tags }}
# registry: ${{ steps.registry_case.outputs.lowercase }}
# username: ${{ env.REGISTRY_USER }}
# password: ${{ env.REGISTRY_PASSWORD }}
# Sign container
- uses: sigstore/[email protected]
if: github.event_name != 'pull_request'
- name: Sign container image
if: github.event_name != 'pull_request'
run: |
cosign sign -y --key env://COSIGN_PRIVATE_KEY ${{ steps.registry_case.outputs.lowercase }}/${{ env.IMAGE_NAME }}@${TAGS}
env:
TAGS: ${{ steps.push.outputs.digest }}
COSIGN_EXPERIMENTAL: false
COSIGN_PRIVATE_KEY: ${{ secrets.SIGNING_SECRET }}
- name: Echo outputs
if: github.event_name != 'pull_request'
run: |
echo "${{ toJSON(steps.push.outputs) }}"
check:
name: Check all builds successful
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
needs: [push-ghcr]
steps:
- name: Exit on failure
if: ${{ needs.push-ghcr.result == 'failure' }}
shell: bash
run: exit 1
- name: Exit
shell: bash
run: exit 0