Skip to content

Remove --skip-unavailable from EL9 #4

Remove --skip-unavailable from EL9

Remove --skip-unavailable from EL9 #4

name: Build and Push
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
schedule:
- cron: '13 4 * * *'
permissions:
contents: read
packages: write
env:
CACHE_URL: ghcr.io/${{ github.repository }}/cache
jobs:
generate-matrices:
name: generate-matrices
runs-on: ubuntu-latest
outputs:
build_matrix: ${{ steps.write.outputs.build_matrix }}
manifest_matrix: ${{ steps.write.outputs.manifest_matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Generate matrices
run: |
pip install pyyaml
python3 gen-cicd.py --out-dir .github/matrices
- name: Set matrix outputs
id: write
run: |
echo "build_matrix<<ENDOFBUILDMATRIX" >> "$GITHUB_OUTPUT"
cat .github/matrices/build-matrix.json >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "ENDOFBUILDMATRIX" >> "$GITHUB_OUTPUT"
echo "manifest_matrix<<ENDOFMANIFESTMATRIX" >> "$GITHUB_OUTPUT"
cat .github/matrices/manifest-matrix.json >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "ENDOFMANIFESTMATRIX" >> "$GITHUB_OUTPUT"
build-and-push:
name: b-${{ matrix.containerfile }}-${{ matrix.from_tag }}-${{ matrix.arch }}
runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
needs: generate-matrices
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.generate-matrices.outputs.build_matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Buildah
run: |
sudo apt-get -qq update
sudo apt-get -qq install -y buildah
- name: Login to container registry
env:
REPO_USERNAME: ${{ secrets.REPO_USERNAME }}
REPO_PASSWORD: ${{ secrets.REPO_PASSWORD }}
run: |
if [ -n "$REPO_USERNAME" ] && [ -n "$REPO_PASSWORD" ]; then
echo "$REPO_PASSWORD" | buildah login -u "$REPO_USERNAME" --password-stdin quay.io
else
echo "No registry credentials; push may fail"
fi
- name: Login to ghcr.io
env:
CACHE_USERNAME: ${{ github.actor }}
CACHE_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "$CACHE_PASSWORD" | buildah login -u "$CACHE_USERNAME" --password-stdin ghcr.io
- name: Build and push image
env:
TO_IMAGE: ${{ matrix.to_image }}
CACHE_URL: ${{ env.CACHE_URL }}
TO_TAG: ${{ matrix.to_tag }}
ARCH: ${{ matrix.arch }}
CONTAINERFILE: ${{ matrix.containerfile }}
FROM_IMAGE: ${{ matrix.from_image }}
FROM_TAG: ${{ matrix.from_tag }}
run: |
IMAGE="$TO_IMAGE:$TO_TAG-$ARCH"
CACHE_IMAGE="$CACHE_URL:$TO_TAG-$ARCH"
buildah pull "$CACHE_IMAGE" 2>/dev/null || true
buildah rmi "$IMAGE" 2>/dev/null || true
buildah build --layers --arch="$ARCH" \
--build-arg CONTAINERFILE="Containerfile.$CONTAINERFILE" \
--from "$FROM_IMAGE:$FROM_TAG" \
-f "Containerfile.$CONTAINERFILE" \
-t "$IMAGE" .
buildah push "$IMAGE"
buildah push "$IMAGE" "$CACHE_IMAGE"
generate-manifests:
name: mf-${{ matrix.tag }}
runs-on: ubuntu-latest
needs: [generate-matrices, build-and-push]
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.generate-matrices.outputs.manifest_matrix) }}
steps:
- name: Install Buildah
run: |
sudo apt-get -qq update
sudo apt-get -qq install -y buildah
- name: Login to container registry
env:
REPO_USERNAME: ${{ secrets.REPO_USERNAME }}
REPO_PASSWORD: ${{ secrets.REPO_PASSWORD }}
run: |
if [ -n "$REPO_USERNAME" ] && [ -n "$REPO_PASSWORD" ]; then
echo "$REPO_PASSWORD" | buildah login -u "$REPO_USERNAME" --password-stdin quay.io
else
echo "No registry credentials; push may fail"
fi
- name: Login to ghcr.io
env:
CACHE_USERNAME: ${{ github.actor }}
CACHE_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "$CACHE_PASSWORD" | buildah login -u "$CACHE_USERNAME" --password-stdin ghcr.io
- name: Create and push multi-arch manifest
env:
IMAGE: ${{ matrix.image }}
TAG: ${{ matrix.tag }}
ARCHES: ${{ matrix.arches }}
CACHE_URL: ${{ env.CACHE_URL }}
run: |
echo "Creating manifest for $IMAGE:$TAG"
buildah manifest rm "$IMAGE:$TAG" 2>/dev/null || true
buildah manifest create "$IMAGE:$TAG"
for arch in $ARCHES; do
buildah manifest add "$IMAGE:$TAG" "docker://$CACHE_URL:$TAG-$arch"
done
buildah manifest push --all "$IMAGE:$TAG" "docker://$IMAGE:$TAG"