Skip to content

Update image-build-and-upload.yml #51

Update image-build-and-upload.yml

Update image-build-and-upload.yml #51

name: 🛠️ Build and upload all images
on:
push:
branches:
- "gha-setup"
jobs:
set-constants:
name: 🔠 Setting workflow constants
runs-on: ubuntu-24.04
outputs:
FLAVORS: '[ "f", "r", "s" ]'
VERSIONS: '[ "23.5", "23.6" ]'
LATEST_VERSION: "23.6"
RPM_ARCH: '[ "aarch64", "x86_64" ]'
IMAGE_ARCH: '[ "arm64", "amd64" ]'
steps:
- run: echo "setting constants"
download-install-files:
name: ⬇️ Download install binaries
environment: build
runs-on: ubuntu-24.04
needs: set-constants
strategy:
matrix:
versions: ${{ fromJSON(needs.set-constants.outputs.VERSIONS) }}
arch: ${{ fromJSON(needs.set-constants.outputs.RPM_ARCH) }}
steps:
- name: ⬇️ Download install file from web
run: |
mkdir -p ~/.ssh
ssh-keyscan ${{ secrets.FILE_SERVER }} >> ~/.ssh/known_hosts 2>/dev/null
eval $(ssh-agent)
ssh-add - <<< "${{ secrets.FILE_USER_AUTH }}"
scp ${{ secrets.FILE_USER }}@${{ secrets.FILE_SERVER }}:"oracle-database-free-23ai-${{ matrix.versions }}-1.0-1.el8.${{ matrix.arch }}.rpm" .
- name: 💾 Store install file
uses: actions/upload-artifact@v4
with:
retention-days: 1
name: oracle-database-free-23ai-${{ matrix.versions }}-1.0-1.el8.${{ matrix.arch }}.rpm
path: oracle-database-free-23ai-${{ matrix.versions }}-1.0-1.el8.${{ matrix.arch }}.rpm
build-images:
name: 🛠️ 🔬 Build and test images
runs-on: ${{ matrix.os }}
environment: build
needs: [ set-constants, download-install-files ]
strategy:
matrix:
os: [ubuntu-24.04, ubuntu-24.04-arm]
versions: ${{ fromJSON(needs.set-constants.outputs.VERSIONS) }}
flavors: ${{ fromJSON(needs.set-constants.outputs.FLAVORS) }}
steps:
- name: 📂 Checkout repo
uses: actions/checkout@v4
- name: 🔄 Generate environment variables
id: env_vars
run: |
if [ "${{ matrix.flavors }}" == "f" ]; then image_flavor="-full";
elif [ "${{ matrix.flavors }}" == "r" ]; then image_flavor="";
elif [ "${{ matrix.flavors }}" == "s" ]; then image_flavor="-slim";
else image_flavor="";
fi;
echo "IMAGE_FLAVOR=$image_flavor" >> "$GITHUB_OUTPUT"
os_arch=$(uname -m)
if [ "${os_arch}" == "aarch64" ]; then image_arch="arm64";
elif [ "${os_arch}" == "x86_64" ]; then image_arch="amd64";
else image_arch="";
fi;
echo "IMAGE_ARCH=$image_arch" >> "$GITHUB_OUTPUT"
echo "OS_ARCH=$os_arch" >> "$GITHUB_OUTPUT"
- name: ⏬ Install build dependencies
run: |
sudo apt-get -y update
sudo apt-get install -y buildah podman
sudo apt upgrade -y buildah podman
- name: ⬇️ Download stored install file
uses: actions/download-artifact@v4
with:
name: oracle-database-free-23ai-${{ matrix.versions }}-1.0-1.el8.${{ steps.env_vars.outputs.OS_ARCH }}.rpm
- name: 🛠️ Build container image for ${{ matrix.versions }}, flavor "${{ matrix.flavors }}"
run: ./buildContainerImage.sh -v "${{ matrix.versions }}" -${{ matrix.flavors }}
- name: 🛠️ Build faststartcontainer image for ${{ matrix.versions }}, flavor "${{ matrix.flavors }}"
run: ./buildContainerImage.sh -v "${{ matrix.versions }}" -${{ matrix.flavors }} -x
- name: 🔬 Test images
env:
IMAGE_FLAVOR: ${{ steps.env_vars.outputs.IMAGE_FLAVOR }}
IMAGE_ARCH: ${{ steps.env_vars.outputs.IMAGE_ARCH }}
run: |
cd tests
./test-container.sh "gvenzl/oracle-free:${{ matrix.versions }}${IMAGE_FLAVOR}-${IMAGE_ARCH}"
./test-container.sh "gvenzl/oracle-free:${{ matrix.versions }}${IMAGE_FLAVOR}-faststart-${IMAGE_ARCH}"
- name: 📤 Export images to local file system
env:
IMAGE_FLAVOR: ${{ steps.env_vars.outputs.IMAGE_FLAVOR }}
IMAGE_ARCH: ${{ steps.env_vars.outputs.IMAGE_ARCH }}
run: |
podman save -o "oracle-free-${{ matrix.versions }}${IMAGE_FLAVOR}-${IMAGE_ARCH}.tar" "localhost/gvenzl/oracle-free:${{ matrix.versions }}${IMAGE_FLAVOR}-${IMAGE_ARCH}"
podman save -o "oracle-free-${{ matrix.versions }}${IMAGE_FLAVOR}-faststart-${IMAGE_ARCH}.tar" "localhost/gvenzl/oracle-free:${{ matrix.versions }}${IMAGE_FLAVOR}-faststart-${IMAGE_ARCH}"
- name: ⬆️ Upload image non-faststart image for deploy job
uses: actions/upload-artifact@v4
with:
retention-days: 1
name: oracle-free-${{ matrix.versions }}${{ steps.env_vars.outputs.IMAGE_FLAVOR }}-${{ steps.env_vars.outputs.IMAGE_ARCH }}
path: oracle-free-${{ matrix.versions }}${{ steps.env_vars.outputs.IMAGE_FLAVOR }}-${{ steps.env_vars.outputs.IMAGE_ARCH }}.tar
- name: ⬆️ Upload image faststart image for deploy job
uses: actions/upload-artifact@v4
with:
retention-days: 1
name: oracle-free-${{ matrix.versions }}${{ steps.env_vars.outputs.IMAGE_FLAVOR }}-faststart-${{ steps.env_vars.outputs.IMAGE_ARCH }}
path: oracle-free-${{ matrix.versions }}${{ steps.env_vars.outputs.IMAGE_FLAVOR }}-faststart-${{ steps.env_vars.outputs.IMAGE_ARCH }}.tar
upload-platform-images:
name: ⬆️ 📋 Upload platform images to registries
environment: upload
runs-on: ubuntu-24.04
needs: [ set-constants, build-images ]
permissions:
packages: write
id-token: write
contents: read
attestations: write
strategy:
matrix:
versions: ${{ fromJSON(needs.set-constants.outputs.VERSIONS) }}
arch: ${{ fromJSON(needs.set-constants.outputs.IMAGE_ARCH) }}
flavor: [ "-full", "-slim", "" ] # "" is the "regular" image
steps:
- name: ⏬ Install build dependencies
run: sudo apt-get install -y buildah podman
- name: ⬇️ Download non-faststart image
uses: actions/download-artifact@v4
with:
name: oracle-free-${{ matrix.versions }}${{ matrix.flavor }}-${{ matrix.arch }}
- name: ⬇️ Download faststart image
uses: actions/download-artifact@v4
with:
name: oracle-free-${{ matrix.versions }}${{ matrix.flavor }}-faststart-${{ matrix.arch }}
- name: 📥 Import images
run: |
podman load -i oracle-free-${{ matrix.versions }}${{ matrix.flavor }}-${{ matrix.arch }}.tar
podman load -i oracle-free-${{ matrix.versions }}${{ matrix.flavor }}-faststart-${{ matrix.arch }}.tar
- name: Login to GHCR registry
uses: redhat-actions/podman-login@v1
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: ghcr.io/${{ github.repository_owner }}/test
- name: 🫸 Push non-faststart image to GitHub Container Registry
id: push-to-ghcr
uses: redhat-actions/push-to-registry@v2
with:
registry: ghcr.io/${{ github.repository_owner }}/test
image: oracle-free
tags: ${{ matrix.versions }}${{ matrix.flavor }}-${{ matrix.arch }}
- name: 🫸 Push faststart image to GitHub Container Registry
id: push-faststart-to-ghcr
uses: redhat-actions/push-to-registry@v2
with:
registry: ghcr.io/${{ github.repository_owner }}/test
image: oracle-free
tags: ${{ matrix.versions }}${{ matrix.flavor }}-faststart-${{ matrix.arch }}
upload-latest-tags:
name: ⬆️ 📋 Upload latest images to registries
runs-on: ubuntu-24.04
needs: [ set-constants, upload-platform-images ]
permissions:
packages: write
contents: read
strategy:
matrix:
arch: ${{ fromJSON(needs.set-constants.outputs.IMAGE_ARCH) }}
flavor: [ "-full", "-slim", "" ] # "" is the "regular" image
steps:
- name: ⏬ Install build dependencies
run: sudo apt-get install -y buildah podman
- name: ⬇️ Download non-faststart image
uses: actions/download-artifact@v4
with:
name: oracle-free-${{ fromJSON(needs.set-constants.outputs.LATEST_VERSION) }}${{ matrix.flavor }}-${{ matrix.arch }}
- name: ⬇️ Download faststart image
uses: actions/download-artifact@v4
with:
name: oracle-free-${{ fromJSON(needs.set-constants.outputs.LATEST_VERSION) }}${{ matrix.flavor }}-faststart-${{ matrix.arch }}
- name: 📥 Import images
run: |
podman load -i oracle-free-${{ fromJSON(needs.set-constants.outputs.LATEST_VERSION) }}${{ matrix.flavor }}-${{ matrix.arch }}.tar
podman load -i oracle-free-${{ fromJSON(needs.set-constants.outputs.LATEST_VERSION) }}${{ matrix.flavor }}-faststart-${{ matrix.arch }}.tar
- name: DEBUG
run: |
podman images
- name: Tag images
id: tag-images
env:
LATEST_VERSION: ${{ fromJSON(needs.set-constants.outputs.LATEST_VERSION) }}
FLAVOR: ${{ matrix.flavor }}
ARCH: ${{ matrix.arch }}
run: |
# Tag 23[-full | -slim][-faststart]
podman tag gvenzl/oracle-free:${LATEST_VERSION}${FLAVOR}-${ARCH} oracle-free:23${FLAVOR}-${ARCH}
podman tag gvenzl/oracle-free:${LATEST_VERSION}${FLAVOR}-faststart-${ARCH} oracle-free:23${FLAVOR}-faststart-${ARCH}
# Tag [-latest] or [-slim | -full]
if [[ "${FLAVOR}" == "" ]]; then # regular image
FLAVOR_NO_DASH="latest"
podman tag gvenzl/oracle-free:${LATEST_VERSION}-${ARCH} oracle-free:${FLAVOR_NO_DASH}-${ARCH}
podman tag gvenzl/oracle-free:${LATEST_VERSION}-faststart-${ARCH} oracle-free:${FLAVOR_NO_DASH}-faststart-${ARCH}
else
FLAVOR_NO_DASH=${FLAVOR:1}
podman tag gvenzl/oracle-free:${LATEST_VERSION}${FLAVOR}-${ARCH} oracle-free:${FLAVOR_NO_DASH}-${ARCH}
podman tag gvenzl/oracle-free:${LATEST_VERSION}${FLAVOR}-faststart-${ARCH} oracle-free:${FLAVOR_NO_DASH}-faststart-${ARCH}
fi;
# Store value for push
echo "FLAVOR_NO_DASH=${FLAVOR_NO_DASH}" >> $GITHUB_OUTPUT
- name: Login to GHCR registry
uses: redhat-actions/podman-login@v1
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: ghcr.io/${{ github.repository_owner }}/test
- name: 🫸 Push 23 non-faststart image to GitHub Container Registry
id: push-to-ghcr
uses: redhat-actions/push-to-registry@v2
with:
registry: ghcr.io/${{ github.repository_owner }}/test
image: oracle-free
tags: 23${{ matrix.flavor }}-${{ matrix.arch }}
- name: 🫸 Push 23 faststart image to GitHub Container Registry
id: push-faststart-to-ghcr
uses: redhat-actions/push-to-registry@v2
with:
registry: ghcr.io/${{ github.repository_owner }}/test
image: oracle-free
tags: 23${{ matrix.flavor }}-faststart-${{ matrix.arch }}
- name: 🫸 Push versionless image to GitHub Container Registry
id: push-versionless-to-ghcr
uses: redhat-actions/push-to-registry@v2
with:
registry: ghcr.io/${{ github.repository_owner }}/test
image: oracle-free
tags: ${{ steps.tag-images.outputs.FLAVOR_NO_DASH }}-${{ matrix.arch }}
- name: 🫸 Push versionless faststart image to GitHub Container Registry
id: push-versionless-faststart-to-ghcr
uses: redhat-actions/push-to-registry@v2
with:
registry: ghcr.io/${{ github.repository_owner }}/test
image: oracle-free
tags: ${{ steps.tag-images.outputs.FLAVOR_NO_DASH }}-faststart-${{ matrix.arch }}
upload-versioned-manifests-tags:
name: ⬆️ 📋 Upload versioned manifests to registries
runs-on: ubuntu-24.04
needs: [ set-constants, upload-latest-tags ]
strategy:
matrix:
version: ${{ fromJSON(needs.set-constants.outputs.VERSIONS) }}
image_flavor: [ "-full", "", "-slim" ]
image_faststart: [ "", "-faststart" ]
permissions:
packages: write
contents: read
steps:
- name: Push multi-arch manifest
uses: pixelfederation/gh-action-manifest-tool@v0.1.7
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
platforms: linux/amd64,linux/arm64
template: ghcr.io/${{ github.repository_owner }}/test/oracle-free:${{ matrix.version }}${{ matrix.image_flavor }}${{ matrix.image_faststart }}-ARCH
target: ghcr.io/${{ github.repository_owner }}/test/oracle-free:${{ matrix.version }}${{ matrix.image_flavor }}${{ matrix.image_faststart }}
upload-23-manifests-tags:
name: ⬆️ 📋 Upload 23 manifests to registries
runs-on: ubuntu-24.04
needs: [ set-constants, upload-latest-tags ]
strategy:
matrix:
image_flavor: [ "-full", "", "-slim" ]
image_faststart: [ "", "-faststart" ]
permissions:
packages: write
contents: read
steps:
- name: Push multi-arch manifest
uses: pixelfederation/gh-action-manifest-tool@v0.1.7
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
platforms: linux/amd64,linux/arm64
template: ghcr.io/${{ github.repository_owner }}/test/oracle-free:23${{ matrix.image_flavor }}${{ matrix.image_faststart }}-ARCH
target: ghcr.io/${{ github.repository_owner }}/test/oracle-free:23${{ matrix.image_flavor }}${{ matrix.image_faststart }}
upload-latest-manifests-tags:
name: ⬆️ 📋 Upload latest manifests to registries
runs-on: ubuntu-24.04
needs: [ set-constants, upload-latest-tags ]
strategy:
matrix:
image_flavor: [ "full", "latest", "slim" ]
image_faststart: [ "", "-faststart" ]
permissions:
packages: write
contents: read
steps:
- name: Push multi-arch manifest
uses: pixelfederation/gh-action-manifest-tool@v0.1.7
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
platforms: linux/amd64,linux/arm64
template: ghcr.io/${{ github.repository_owner }}/test/oracle-free:${{ matrix.image_flavor }}${{ matrix.image_faststart }}-ARCH
target: ghcr.io/${{ github.repository_owner }}/test/oracle-free:${{ matrix.image_flavor }}${{ matrix.image_faststart }}