Skip to content
This repository has been archived by the owner on Nov 5, 2024. It is now read-only.

Commit

Permalink
CD workflow improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
andyone committed May 8, 2024
1 parent 5b33aa2 commit 483e3cc
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 51 deletions.
81 changes: 36 additions & 45 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ jobs:
id: metadata
run: |
docker_file="ruby.docker"
base_image=$(grep 'FROM ' $docker_file | grep -v 'builder' | sed 's#${REGISTRY}/##' | tail -1 | cut -f2 -d' ')
base_image=$(grep 'FROM ' $docker_file | grep -v 'installer' | sed 's#${REGISTRY}/##' | tail -1 | cut -f2 -d' ')
if [[ -z "$base_image" ]] ; then
echo "::error::Can't extract base image info"
Expand All @@ -99,7 +99,7 @@ jobs:
- name: Check if build/rebuild is required
id: build_check
continue-on-error: true
run : |
run: |
# [build-check]
if [[ "${{github.event.inputs.force_rebuild}}" == "true" ]] ; then
Expand All @@ -108,32 +108,29 @@ jobs:
exit 0
fi
echo -e "::group::\033[34mDownloading built image…\033[0m"
echo -e "::group::\033[34mFetching manifest of image…\033[0m"
image_base_layers=$(docker manifest inspect "ghcr.io/${{env.IMAGE_NAME}}:${{matrix.version}}" -v 2>/dev/null | jq '.[0].OCIManifest.layers[].digest')
if ! docker pull ghcr.io/${{env.IMAGE_NAME}}:${{matrix.version}} ; then
if [[ -z "$image_base_layers" ]] ; then
echo "::warning::Rebuild ${{matrix.version}} (reason: new image)"
echo "build=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "::endgroup::"
echo -e "::group::\033[34mDownloading base image…\033[0m"
if ! docker pull ${{steps.metadata.outputs.baseimage}} ; then
echo "::error::Can't download image ${{steps.metadata.outputs.baseimage}}"
exit 1
fi
echo "::endgroup::"
echo -e "::group::\033[34mFetching manifest of base image…\033[0m"
base_layer=$(docker inspect "${{steps.metadata.outputs.baseimage}}" | jq -r '.[0].RootFS.Layers[-1]')
base_layer=$(docker manifest inspect "${{steps.metadata.outputs.baseimage}}" -v 2>/dev/null | jq '.SchemaV2Manifest.layers[-1].digest')
if [[ -z "$base_layer" ]] ; then
echo "::error::Can't extract layers info from base image"
echo "::error::Can't download image ${{steps.metadata.outputs.baseimage}} manifest"
exit 1
fi
if ! docker inspect "ghcr.io/${{env.IMAGE_NAME}}:${{matrix.version}}" | jq -r '.[0].RootFS.Layers' | grep -q "$base_layer" ; then
echo "::endgroup::"
if ! echo "$image_base_layers" | grep -q "$base_layer" ; then
echo "::warning::Rebuild image (reason: base image rebuilt)"
echo "build=true" >> $GITHUB_OUTPUT
exit 0
Expand Down Expand Up @@ -224,7 +221,7 @@ jobs:
id: metadata
run: |
docker_file="ruby-jemalloc.docker"
base_image=$(grep 'FROM ' $docker_file | grep -v 'builder' | sed 's#${REGISTRY}/##' | tail -1 | cut -f2 -d' ')
base_image=$(grep 'FROM ' $docker_file | grep -v 'installer' | sed 's#${REGISTRY}/##' | tail -1 | cut -f2 -d' ')
if [[ -z "$base_image" ]] ; then
echo "::error::Can't extract base image info"
Expand All @@ -241,7 +238,7 @@ jobs:
- name: Check if build/rebuild is required
id: build_check
continue-on-error: true
run : |
run: |
# [build-check]
if [[ "${{github.event.inputs.force_rebuild}}" == "true" ]] ; then
Expand All @@ -250,32 +247,29 @@ jobs:
exit 0
fi
echo -e "::group::\033[34mDownloading built image…\033[0m"
echo -e "::group::\033[34mFetching manifest of image…\033[0m"
image_base_layers=$(docker manifest inspect "ghcr.io/${{env.IMAGE_NAME}}:${{matrix.version}}-jemalloc" -v 2>/dev/null | jq '.[0].OCIManifest.layers[].digest')
if ! docker pull ghcr.io/${{env.IMAGE_NAME}}:${{matrix.version}}-jemalloc ; then
if [[ -z "$image_base_layers" ]] ; then
echo "::warning::Rebuild ${{matrix.version}} (reason: new image)"
echo "build=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "::endgroup::"
echo -e "::group::\033[34mDownloading base image…\033[0m"
echo -e "::group::\033[34mFetching manifest of base image…\033[0m"
if ! docker pull ${{steps.metadata.outputs.baseimage}} ; then
echo "::error::Can't download image ${{steps.metadata.outputs.baseimage}}"
exit 1
fi
echo "::endgroup::"
base_layer=$(docker inspect "${{steps.metadata.outputs.baseimage}}" | jq -r '.[0].RootFS.Layers[-1]')
base_layer=$(docker manifest inspect "${{steps.metadata.outputs.baseimage}}" -v 2>/dev/null | jq '.SchemaV2Manifest.layers[-1].digest')
if [[ -z "$base_layer" ]] ; then
echo "::error::Can't extract layers info from base image"
echo "::error::Can't download image ${{steps.metadata.outputs.baseimage}} manifest"
exit 1
fi
if ! docker inspect "ghcr.io/${{env.IMAGE_NAME}}:${{matrix.version}}-jemalloc" | jq -r '.[0].RootFS.Layers' | grep -q "$base_layer" ; then
echo "::endgroup::"
if ! echo "$image_base_layers" | grep -q "$base_layer" ; then
echo "::warning::Rebuild image (reason: base image rebuilt)"
echo "build=true" >> $GITHUB_OUTPUT
exit 0
Expand Down Expand Up @@ -362,7 +356,7 @@ jobs:
id: metadata
run: |
docker_file="jruby.docker"
base_image=$(grep 'FROM ' $docker_file | grep -v 'builder' | sed 's#${REGISTRY}/##' | tail -1 | cut -f2 -d' ')
base_image=$(grep 'FROM ' $docker_file | grep -v 'installer' | sed 's#${REGISTRY}/##' | tail -1 | cut -f2 -d' ')
if [[ -z "$base_image" ]] ; then
echo "::error::Can't extract base image info"
Expand All @@ -379,7 +373,7 @@ jobs:
- name: Check if build/rebuild is required
id: build_check
continue-on-error: true
run : |
run: |
# [build-check]
if [[ "${{github.event.inputs.force_rebuild}}" == "true" ]] ; then
Expand All @@ -388,32 +382,29 @@ jobs:
exit 0
fi
echo -e "::group::\033[34mDownloading built image…\033[0m"
echo -e "::group::\033[34mFetching manifest of image…\033[0m"
image_base_layers=$(docker manifest inspect "ghcr.io/${{env.IMAGE_NAME}}:jruby-${{matrix.version}}" -v 2>/dev/null | jq '.[0].OCIManifest.layers[].digest')
if ! docker pull ghcr.io/${{env.IMAGE_NAME}}:jruby-${{matrix.version}} ; then
if [[ -z "$image_base_layers" ]] ; then
echo "::warning::Rebuild ${{matrix.version}} (reason: new image)"
echo "build=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "::endgroup::"
echo -e "::group::\033[34mDownloading base image…\033[0m"
echo -e "::group::\033[34mFetching manifest of base image…\033[0m"
if ! docker pull ${{steps.metadata.outputs.baseimage}} ; then
echo "::error::Can't download image ${{steps.metadata.outputs.baseimage}}"
exit 1
fi
echo "::endgroup::"
base_layer=$(docker inspect "${{steps.metadata.outputs.baseimage}}" | jq -r '.[0].RootFS.Layers[-1]')
base_layer=$(docker manifest inspect "${{steps.metadata.outputs.baseimage}}" -v 2>/dev/null | jq '.SchemaV2Manifest.layers[-1].digest')
if [[ -z "$base_layer" ]] ; then
echo "::error::Can't extract layers info from base image"
echo "::error::Can't download image ${{steps.metadata.outputs.baseimage}} manifest"
exit 1
fi
if ! docker inspect "ghcr.io/${{env.IMAGE_NAME}}:jruby-${{matrix.version}}" | jq -r '.[0].RootFS.Layers' | grep -q "$base_layer" ; then
echo "::endgroup::"
if ! echo "$image_base_layers" | grep -q "$base_layer" ; then
echo "::warning::Rebuild image (reason: base image rebuilt)"
echo "build=true" >> $GITHUB_OUTPUT
exit 0
Expand Down
4 changes: 2 additions & 2 deletions jruby.docker
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ARG REGISTRY="docker.io"

## BASE ########################################################################

FROM ${REGISTRY}/essentialkaos/oraclelinux:8 as base
FROM ${REGISTRY}/essentialkaos/oraclelinux:8 as installer_base

RUN dnf -y -q install https://yum.kaos.st/kaos-repo-latest.el8.noarch.rpm && \
dnf -y -q install rbenv rbinstall jre11 && \
Expand All @@ -13,7 +13,7 @@ RUN dnf -y -q install https://yum.kaos.st/kaos-repo-latest.el8.noarch.rpm && \

## INSTALLER ###################################################################

FROM base as installer
FROM installer_base as installer

ARG RUBY_VERSION=9.3.9.0

Expand Down
4 changes: 2 additions & 2 deletions ruby-jemalloc.docker
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ARG REGISTRY="docker.io"

## BASE ########################################################################

FROM ${REGISTRY}/essentialkaos/oraclelinux:8 as base
FROM ${REGISTRY}/essentialkaos/oraclelinux:8 as installer_base

RUN dnf -y -q install https://yum.kaos.st/kaos-repo-latest.el8.noarch.rpm && \
dnf -y -q install rbenv rbinstall libyaml jemalloc && \
Expand All @@ -13,7 +13,7 @@ RUN dnf -y -q install https://yum.kaos.st/kaos-repo-latest.el8.noarch.rpm && \

## INSTALLER ###################################################################

FROM base as installer
FROM installer_base as installer

ARG RUBY_VERSION=3.2.0
ARG WITH_STATIC=no
Expand Down
4 changes: 2 additions & 2 deletions ruby.docker
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ARG REGISTRY="docker.io"

## BASE ########################################################################

FROM ${REGISTRY}/essentialkaos/oraclelinux:8 as base
FROM ${REGISTRY}/essentialkaos/oraclelinux:8 as installer_base

RUN dnf -y -q install https://yum.kaos.st/kaos-repo-latest.el8.noarch.rpm && \
dnf -y -q install rbenv rbinstall libyaml && \
Expand All @@ -13,7 +13,7 @@ RUN dnf -y -q install https://yum.kaos.st/kaos-repo-latest.el8.noarch.rpm && \

## INSTALLER ###################################################################

FROM base as installer
FROM installer_base as installer

ARG RUBY_VERSION=3.2.0
ARG WITH_STATIC=no
Expand Down

0 comments on commit 483e3cc

Please sign in to comment.