From d77b66bc77091dd22b0eca07c057e1f370d9bf79 Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Tue, 5 Mar 2024 11:16:26 +0100 Subject: [PATCH] Handle dependencies between base images --- example/prep.d/build_base_images.sh | 575 ++++++++++++++++++---------- templates/build_base_images.sh | 43 ++- variables.yml | 22 ++ 3 files changed, 428 insertions(+), 212 deletions(-) diff --git a/example/prep.d/build_base_images.sh b/example/prep.d/build_base_images.sh index 0a01dd6..222bee5 100755 --- a/example/prep.d/build_base_images.sh +++ b/example/prep.d/build_base_images.sh @@ -2,205 +2,378 @@ # vim: syntax=sh set -euo pipefail -if ! docker manifest inspect danielberteaud/alma:8.24.3-1 > /dev/null 2>&1; then - echo "Building alma:8.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/alma:8.24.3-1 -t danielberteaud/alma8:latest -t danielberteaud/alma:8 --build-arg=ALMA=8 output/images/alma &&\ - docker push danielberteaud/alma:8.24.3-1 &&\ - docker push danielberteaud/alma8:latest &&\ - docker push danielberteaud/alma:8 &&\ - echo "danielberteaud/alma:8.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/alma:8.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/alma:9.24.3-1 > /dev/null 2>&1; then - echo "Building alma:9.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/alma:9.24.3-1 -t danielberteaud/alma9:latest -t danielberteaud/alma:9 --build-arg=ALMA=9 output/images/alma &&\ - docker push danielberteaud/alma:9.24.3-1 &&\ - docker push danielberteaud/alma9:latest &&\ - docker push danielberteaud/alma:9 &&\ - echo "danielberteaud/alma:9.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/alma:9.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/alpine:24.3-1 > /dev/null 2>&1; then - echo "Building alpine:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/alpine:24.3-1 -t danielberteaud/alpine:latest output/images/alpine &&\ - docker push danielberteaud/alpine:24.3-1 &&\ - docker push danielberteaud/alpine:latest &&\ - echo "danielberteaud/alpine:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/alpine:24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/java:11.24.3-1 > /dev/null 2>&1; then - echo "Building java:11.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/java:11.24.3-1 -t danielberteaud/java11:latest -t danielberteaud/java:11 --build-arg=JAVA_VERSION=11 output/images/java &&\ - docker push danielberteaud/java:11.24.3-1 &&\ - docker push danielberteaud/java11:latest &&\ - docker push danielberteaud/java:11 &&\ - echo "danielberteaud/java:11.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/java:11.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/java:17.24.3-1 > /dev/null 2>&1; then - echo "Building java:17.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/java:17.24.3-1 -t danielberteaud/java17:latest -t danielberteaud/java:17 --build-arg=JAVA_VERSION=17 output/images/java &&\ - docker push danielberteaud/java:17.24.3-1 &&\ - docker push danielberteaud/java17:latest &&\ - docker push danielberteaud/java:17 &&\ - echo "danielberteaud/java:17.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/java:17.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/java:21.24.3-1 > /dev/null 2>&1; then - echo "Building java:21.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/java:21.24.3-1 -t danielberteaud/java21:latest -t danielberteaud/java:21 --build-arg=JAVA_VERSION=21 output/images/java &&\ - docker push danielberteaud/java:21.24.3-1 &&\ - docker push danielberteaud/java21:latest &&\ - docker push danielberteaud/java:21 &&\ - echo "danielberteaud/java:21.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/java:21.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/java:8.24.3-1 > /dev/null 2>&1; then - echo "Building java:8.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/java:8.24.3-1 -t danielberteaud/java8:latest -t danielberteaud/java:8 --build-arg=JAVA_VERSION=8 output/images/java &&\ - docker push danielberteaud/java:8.24.3-1 &&\ - docker push danielberteaud/java8:latest &&\ - docker push danielberteaud/java:8 &&\ - echo "danielberteaud/java:8.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/java:8.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/mariadb:24.3-1 > /dev/null 2>&1; then - echo "Building mariadb:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/mariadb:24.3-1 -t danielberteaud/mariadb:latest output/images/mariadb &&\ - docker push danielberteaud/mariadb:24.3-1 &&\ - docker push danielberteaud/mariadb:latest &&\ - echo "danielberteaud/mariadb:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/mariadb:24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/mariadb-client:24.3-1 > /dev/null 2>&1; then - echo "Building mariadb-client:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/mariadb-client:24.3-1 -t danielberteaud/mariadb-client:latest output/images/mariadb-client &&\ - docker push danielberteaud/mariadb-client:24.3-1 &&\ - docker push danielberteaud/mariadb-client:latest &&\ - echo "danielberteaud/mariadb-client:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/mariadb-client:24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/mongo:5.0.24.3-1 > /dev/null 2>&1; then - echo "Building mongo:5.0.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/mongo:5.0.24.3-1 -t danielberteaud/mongo:5.0 --build-arg=MONGO_MAJOR=5.0 output/images/mongo &&\ - docker push danielberteaud/mongo:5.0.24.3-1 &&\ - docker push danielberteaud/mongo:5.0 &&\ - echo "danielberteaud/mongo:5.0.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/mongo:5.0.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/pgbouncer:24.3-1 > /dev/null 2>&1; then - echo "Building pgbouncer:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/pgbouncer:24.3-1 -t danielberteaud/pgbouncer:latest output/images/pgbouncer &&\ - docker push danielberteaud/pgbouncer:24.3-1 &&\ - docker push danielberteaud/pgbouncer:latest &&\ - echo "danielberteaud/pgbouncer:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/pgbouncer:24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/pgcat:1.1.1-1 > /dev/null 2>&1; then - echo "Building pgcat:1.1.1-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/pgcat:1.1.1-1 -t danielberteaud/pgcat:latest output/images/pgcat &&\ - docker push danielberteaud/pgcat:1.1.1-1 &&\ - docker push danielberteaud/pgcat:latest &&\ - echo "danielberteaud/pgcat:1.1.1-1 pushed to remote repo" -else - echo "Image danielberteaud/pgcat:1.1.1-1 already available" -fi -if ! docker manifest inspect danielberteaud/php:82.24.3-1 > /dev/null 2>&1; then - echo "Building php:82.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/php:82.24.3-1 -t danielberteaud/php:82 -t danielberteaud/php82:latest --build-arg=PHP_VERSION=82 output/images/php &&\ - docker push danielberteaud/php:82.24.3-1 &&\ - docker push danielberteaud/php:82 &&\ - docker push danielberteaud/php82:latest &&\ - echo "danielberteaud/php:82.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/php:82.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/php:83.24.3-1 > /dev/null 2>&1; then - echo "Building php:83.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/php:83.24.3-1 -t danielberteaud/php:83 -t danielberteaud/php83:latest --build-arg=PHP_VERSION=83 output/images/php &&\ - docker push danielberteaud/php:83.24.3-1 &&\ - docker push danielberteaud/php:83 &&\ - docker push danielberteaud/php83:latest &&\ - echo "danielberteaud/php:83.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/php:83.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/postgres:15.24.3-1 > /dev/null 2>&1; then - echo "Building postgres:15.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/postgres:15.24.3-1 -t danielberteaud/postgres15:latest -t danielberteaud/postgres:15 --build-arg=PG_VERSION=15 output/images/postgres &&\ - docker push danielberteaud/postgres:15.24.3-1 &&\ - docker push danielberteaud/postgres15:latest &&\ - docker push danielberteaud/postgres:15 &&\ - echo "danielberteaud/postgres:15.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/postgres:15.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/postgres:16.24.3-1 > /dev/null 2>&1; then - echo "Building postgres:16.24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/postgres:16.24.3-1 -t danielberteaud/postgres16:latest -t danielberteaud/postgres:16 --build-arg=PG_VERSION=16 output/images/postgres &&\ - docker push danielberteaud/postgres:16.24.3-1 &&\ - docker push danielberteaud/postgres16:latest &&\ - docker push danielberteaud/postgres:16 &&\ - echo "danielberteaud/postgres:16.24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/postgres:16.24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/sqlite:24.3-1 > /dev/null 2>&1; then - echo "Building sqlite:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/sqlite:24.3-1 -t danielberteaud/sqlite:latest output/images/sqlite &&\ - docker push danielberteaud/sqlite:24.3-1 &&\ - docker push danielberteaud/sqlite:latest &&\ - echo "danielberteaud/sqlite:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/sqlite:24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/wait-for:24.3-1 > /dev/null 2>&1; then - echo "Building wait-for:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/wait-for:24.3-1 -t danielberteaud/wait-for:latest output/images/wait-for &&\ - docker push danielberteaud/wait-for:24.3-1 &&\ - docker push danielberteaud/wait-for:latest &&\ - echo "danielberteaud/wait-for:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/wait-for:24.3-1 already available" -fi -if ! docker manifest inspect danielberteaud/wkhtmltopdf:24.3-1 > /dev/null 2>&1; then - echo "Building wkhtmltopdf:24.3-1" - export BUILDKIT_PROGRESS=plain - docker build -t danielberteaud/wkhtmltopdf:24.3-1 -t danielberteaud/wkhtmltopdf:latest output/images/wkhtmltopdf &&\ - docker push danielberteaud/wkhtmltopdf:24.3-1 &&\ - docker push danielberteaud/wkhtmltopdf:latest &&\ - echo "danielberteaud/wkhtmltopdf:24.3-1 pushed to remote repo" -else - echo "Image danielberteaud/wkhtmltopdf:24.3-1 already available" -fi - +function build_alma8 { + if [ "${IMAGE_ALMA8_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/alma:8.24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/alma:8.24.3-1 > /dev/null 2>&1; then + echo "Building alma:8.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/alma:8.24.3-1 -t danielberteaud/alma8:latest -t danielberteaud/alma:8 --build-arg=ALMA=8 output/images/alma &&\ + docker push danielberteaud/alma:8.24.3-1 &&\ + docker push danielberteaud/alma8:latest &&\ + docker push danielberteaud/alma:8 &&\ + echo "danielberteaud/alma:8.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/alma:8.24.3-1 already available" + fi + IMAGE_ALMA8_AVAILABLE=1 +} +function build_alma9 { + if [ "${IMAGE_ALMA9_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/alma:9.24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/alma:9.24.3-1 > /dev/null 2>&1; then + echo "Building alma:9.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/alma:9.24.3-1 -t danielberteaud/alma9:latest -t danielberteaud/alma:9 --build-arg=ALMA=9 output/images/alma &&\ + docker push danielberteaud/alma:9.24.3-1 &&\ + docker push danielberteaud/alma9:latest &&\ + docker push danielberteaud/alma:9 &&\ + echo "danielberteaud/alma:9.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/alma:9.24.3-1 already available" + fi + IMAGE_ALMA9_AVAILABLE=1 +} +function build_alpine { + if [ "${IMAGE_ALPINE_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/alpine:24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/alpine:24.3-1 > /dev/null 2>&1; then + echo "Building alpine:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/alpine:24.3-1 -t danielberteaud/alpine:latest output/images/alpine &&\ + docker push danielberteaud/alpine:24.3-1 &&\ + docker push danielberteaud/alpine:latest &&\ + echo "danielberteaud/alpine:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/alpine:24.3-1 already available" + fi + IMAGE_ALPINE_AVAILABLE=1 +} +function build_java11 { + if [ "${IMAGE_JAVA11_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/java:11.24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/java:11.24.3-1 > /dev/null 2>&1; then + echo "Building java:11.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/java:11.24.3-1 -t danielberteaud/java11:latest -t danielberteaud/java:11 --build-arg=JAVA_VERSION=11 output/images/java &&\ + docker push danielberteaud/java:11.24.3-1 &&\ + docker push danielberteaud/java11:latest &&\ + docker push danielberteaud/java:11 &&\ + echo "danielberteaud/java:11.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/java:11.24.3-1 already available" + fi + IMAGE_JAVA11_AVAILABLE=1 +} +function build_java17 { + if [ "${IMAGE_JAVA17_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/java:17.24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/java:17.24.3-1 > /dev/null 2>&1; then + echo "Building java:17.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/java:17.24.3-1 -t danielberteaud/java17:latest -t danielberteaud/java:17 --build-arg=JAVA_VERSION=17 output/images/java &&\ + docker push danielberteaud/java:17.24.3-1 &&\ + docker push danielberteaud/java17:latest &&\ + docker push danielberteaud/java:17 &&\ + echo "danielberteaud/java:17.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/java:17.24.3-1 already available" + fi + IMAGE_JAVA17_AVAILABLE=1 +} +function build_java21 { + if [ "${IMAGE_JAVA21_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/java:21.24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/java:21.24.3-1 > /dev/null 2>&1; then + echo "Building java:21.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/java:21.24.3-1 -t danielberteaud/java21:latest -t danielberteaud/java:21 --build-arg=JAVA_VERSION=21 output/images/java &&\ + docker push danielberteaud/java:21.24.3-1 &&\ + docker push danielberteaud/java21:latest &&\ + docker push danielberteaud/java:21 &&\ + echo "danielberteaud/java:21.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/java:21.24.3-1 already available" + fi + IMAGE_JAVA21_AVAILABLE=1 +} +function build_java8 { + if [ "${IMAGE_JAVA8_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/java:8.24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/java:8.24.3-1 > /dev/null 2>&1; then + echo "Building java:8.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/java:8.24.3-1 -t danielberteaud/java8:latest -t danielberteaud/java:8 --build-arg=JAVA_VERSION=8 output/images/java &&\ + docker push danielberteaud/java:8.24.3-1 &&\ + docker push danielberteaud/java8:latest &&\ + docker push danielberteaud/java:8 &&\ + echo "danielberteaud/java:8.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/java:8.24.3-1 already available" + fi + IMAGE_JAVA8_AVAILABLE=1 +} +function build_mariadb { + if [ "${IMAGE_MARIADB_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/mariadb:24.3-1 already available" + return + fi + # Image mariadb depends on mariadb_client + build_mariadb_client + if ! docker manifest inspect danielberteaud/mariadb:24.3-1 > /dev/null 2>&1; then + echo "Building mariadb:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/mariadb:24.3-1 -t danielberteaud/mariadb:latest output/images/mariadb &&\ + docker push danielberteaud/mariadb:24.3-1 &&\ + docker push danielberteaud/mariadb:latest &&\ + echo "danielberteaud/mariadb:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/mariadb:24.3-1 already available" + fi + IMAGE_MARIADB_AVAILABLE=1 +} +function build_mariadb_client { + if [ "${IMAGE_MARIADB_CLIENT_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/mariadb-client:24.3-1 already available" + return + fi + # Image mariadb_client depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/mariadb-client:24.3-1 > /dev/null 2>&1; then + echo "Building mariadb-client:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/mariadb-client:24.3-1 -t danielberteaud/mariadb-client:latest output/images/mariadb-client &&\ + docker push danielberteaud/mariadb-client:24.3-1 &&\ + docker push danielberteaud/mariadb-client:latest &&\ + echo "danielberteaud/mariadb-client:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/mariadb-client:24.3-1 already available" + fi + IMAGE_MARIADB_CLIENT_AVAILABLE=1 +} +function build_mongo50 { + if [ "${IMAGE_MONGO50_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/mongo:5.0.24.3-1 already available" + return + fi + # Image mongo50 depends on alma8 + build_alma8 + if ! docker manifest inspect danielberteaud/mongo:5.0.24.3-1 > /dev/null 2>&1; then + echo "Building mongo:5.0.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/mongo:5.0.24.3-1 -t danielberteaud/mongo:5.0 --build-arg=MONGO_MAJOR=5.0 output/images/mongo &&\ + docker push danielberteaud/mongo:5.0.24.3-1 &&\ + docker push danielberteaud/mongo:5.0 &&\ + echo "danielberteaud/mongo:5.0.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/mongo:5.0.24.3-1 already available" + fi + IMAGE_MONGO50_AVAILABLE=1 +} +function build_pgbouncer { + if [ "${IMAGE_PGBOUNCER_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/pgbouncer:24.3-1 already available" + return + fi + # Image pgbouncer depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/pgbouncer:24.3-1 > /dev/null 2>&1; then + echo "Building pgbouncer:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/pgbouncer:24.3-1 -t danielberteaud/pgbouncer:latest output/images/pgbouncer &&\ + docker push danielberteaud/pgbouncer:24.3-1 &&\ + docker push danielberteaud/pgbouncer:latest &&\ + echo "danielberteaud/pgbouncer:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/pgbouncer:24.3-1 already available" + fi + IMAGE_PGBOUNCER_AVAILABLE=1 +} +function build_pgcat { + if [ "${IMAGE_PGCAT_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/pgcat:1.1.1-1 already available" + return + fi + # Image pgcat depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/pgcat:1.1.1-1 > /dev/null 2>&1; then + echo "Building pgcat:1.1.1-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/pgcat:1.1.1-1 -t danielberteaud/pgcat:latest output/images/pgcat &&\ + docker push danielberteaud/pgcat:1.1.1-1 &&\ + docker push danielberteaud/pgcat:latest &&\ + echo "danielberteaud/pgcat:1.1.1-1 pushed to remote repo" + else + echo "Image danielberteaud/pgcat:1.1.1-1 already available" + fi + IMAGE_PGCAT_AVAILABLE=1 +} +function build_php82 { + if [ "${IMAGE_PHP82_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/php:82.24.3-1 already available" + return + fi + # Image php82 depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/php:82.24.3-1 > /dev/null 2>&1; then + echo "Building php:82.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/php:82.24.3-1 -t danielberteaud/php:82 -t danielberteaud/php82:latest --build-arg=PHP_VERSION=82 output/images/php &&\ + docker push danielberteaud/php:82.24.3-1 &&\ + docker push danielberteaud/php:82 &&\ + docker push danielberteaud/php82:latest &&\ + echo "danielberteaud/php:82.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/php:82.24.3-1 already available" + fi + IMAGE_PHP82_AVAILABLE=1 +} +function build_php83 { + if [ "${IMAGE_PHP83_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/php:83.24.3-1 already available" + return + fi + # Image php83 depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/php:83.24.3-1 > /dev/null 2>&1; then + echo "Building php:83.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/php:83.24.3-1 -t danielberteaud/php:83 -t danielberteaud/php83:latest --build-arg=PHP_VERSION=83 output/images/php &&\ + docker push danielberteaud/php:83.24.3-1 &&\ + docker push danielberteaud/php:83 &&\ + docker push danielberteaud/php83:latest &&\ + echo "danielberteaud/php:83.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/php:83.24.3-1 already available" + fi + IMAGE_PHP83_AVAILABLE=1 +} +function build_postgres15 { + if [ "${IMAGE_POSTGRES15_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/postgres:15.24.3-1 already available" + return + fi + # Image postgres15 depends on alma9 + build_alma9 + if ! docker manifest inspect danielberteaud/postgres:15.24.3-1 > /dev/null 2>&1; then + echo "Building postgres:15.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/postgres:15.24.3-1 -t danielberteaud/postgres15:latest -t danielberteaud/postgres:15 --build-arg=PG_VERSION=15 output/images/postgres &&\ + docker push danielberteaud/postgres:15.24.3-1 &&\ + docker push danielberteaud/postgres15:latest &&\ + docker push danielberteaud/postgres:15 &&\ + echo "danielberteaud/postgres:15.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/postgres:15.24.3-1 already available" + fi + IMAGE_POSTGRES15_AVAILABLE=1 +} +function build_postgres16 { + if [ "${IMAGE_POSTGRES16_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/postgres:16.24.3-1 already available" + return + fi + # Image postgres16 depends on alma9 + build_alma9 + if ! docker manifest inspect danielberteaud/postgres:16.24.3-1 > /dev/null 2>&1; then + echo "Building postgres:16.24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/postgres:16.24.3-1 -t danielberteaud/postgres16:latest -t danielberteaud/postgres:16 --build-arg=PG_VERSION=16 output/images/postgres &&\ + docker push danielberteaud/postgres:16.24.3-1 &&\ + docker push danielberteaud/postgres16:latest &&\ + docker push danielberteaud/postgres:16 &&\ + echo "danielberteaud/postgres:16.24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/postgres:16.24.3-1 already available" + fi + IMAGE_POSTGRES16_AVAILABLE=1 +} +function build_sqlite { + if [ "${IMAGE_SQLITE_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/sqlite:24.3-1 already available" + return + fi + # Image sqlite depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/sqlite:24.3-1 > /dev/null 2>&1; then + echo "Building sqlite:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/sqlite:24.3-1 -t danielberteaud/sqlite:latest output/images/sqlite &&\ + docker push danielberteaud/sqlite:24.3-1 &&\ + docker push danielberteaud/sqlite:latest &&\ + echo "danielberteaud/sqlite:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/sqlite:24.3-1 already available" + fi + IMAGE_SQLITE_AVAILABLE=1 +} +function build_wait_for { + if [ "${IMAGE_WAIT_FOR_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/wait-for:24.3-1 already available" + return + fi + if ! docker manifest inspect danielberteaud/wait-for:24.3-1 > /dev/null 2>&1; then + echo "Building wait-for:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/wait-for:24.3-1 -t danielberteaud/wait-for:latest output/images/wait-for &&\ + docker push danielberteaud/wait-for:24.3-1 &&\ + docker push danielberteaud/wait-for:latest &&\ + echo "danielberteaud/wait-for:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/wait-for:24.3-1 already available" + fi + IMAGE_WAIT_FOR_AVAILABLE=1 +} +function build_wkhtmltopdf { + if [ "${IMAGE_WKHTMLTOPDF_AVAILABLE:-0}" = "1" ]; then + echo "Image danielberteaud/wkhtmltopdf:24.3-1 already available" + return + fi + # Image wkhtmltopdf depends on alpine + build_alpine + if ! docker manifest inspect danielberteaud/wkhtmltopdf:24.3-1 > /dev/null 2>&1; then + echo "Building wkhtmltopdf:24.3-1" + export BUILDKIT_PROGRESS=plain + docker build -t danielberteaud/wkhtmltopdf:24.3-1 -t danielberteaud/wkhtmltopdf:latest output/images/wkhtmltopdf &&\ + docker push danielberteaud/wkhtmltopdf:24.3-1 &&\ + docker push danielberteaud/wkhtmltopdf:latest &&\ + echo "danielberteaud/wkhtmltopdf:24.3-1 pushed to remote repo" + else + echo "Image danielberteaud/wkhtmltopdf:24.3-1 already available" + fi + IMAGE_WKHTMLTOPDF_AVAILABLE=1 +} +build_alma8 +build_alma9 +build_alpine +build_java11 +build_java17 +build_java21 +build_java8 +build_mariadb +build_mariadb_client +build_mongo50 +build_pgbouncer +build_pgcat +build_php82 +build_php83 +build_postgres15 +build_postgres16 +build_sqlite +build_wait_for +build_wkhtmltopdf diff --git a/templates/build_base_images.sh b/templates/build_base_images.sh index 1b2d73e..fb20d0a 100644 --- a/templates/build_base_images.sh +++ b/templates/build_base_images.sh @@ -4,27 +4,48 @@ set -euo pipefail [[- range $k, $v := .docker.base_images ]] -[[- $image := printf "%s/%s" ($.docker.repo | regexp.Replace "/$" "") $v.image ]] -if ! docker manifest inspect [[ $image ]] > /dev/null 2>&1; then - echo "Building [[ $v.image ]]" - export BUILDKIT_PROGRESS=plain - docker build -t [[ $image ]] +function build_[[ $k ]] { + [[- $image := printf "%s/%s" ($.docker.repo | regexp.Replace "/$" "") $v.image ]] + if [ "${IMAGE_[[ $k | toUpper ]]_AVAILABLE:-0}" = "1" ]; then + echo "Image [[ $image ]] already available" + return + fi + [[- if has $v "depends_on" ]] + [[- if isKind "string" $v.depends_on ]] + # Image [[ $k ]] depends on [[ $v.depends_on ]] + build_[[ $v.depends_on ]] + [[- else if isKind "slice" $v.depends_on ]] + [[- range $dep := $v.depends_on ]] + # Image [[ $k ]] depends on [[ $dep ]] + build_[[ $dep ]] + [[- end ]] + [[- end ]] + [[- end ]] + if ! docker manifest inspect [[ $image ]] > /dev/null 2>&1; then + echo "Building [[ $v.image ]]" + export BUILDKIT_PROGRESS=plain + docker build -t [[ $image ]] [[- if has $v "tags" ]] [[- range $index, $tag := $v.tags ]] -t [[ $.docker.repo | regexp.Replace "/$" "" ]]/[[ $tag ]][[ end ]] [[- end -]] [[- if has $v "build_args" ]] [[- range $arg, $val := $v.build_args ]] --build-arg=[[ $arg ]]=[[ $val ]][[ end ]] [[- end ]] output/images/[[ $v.image | regexp.Replace ":.*" "" ]] &&\ - docker push [[ $image ]] &&\ + docker push [[ $image ]] &&\ [[- if has $v "tags" ]] [[- range $index, $tag := $v.tags ]] - docker push [[ $.docker.repo | regexp.Replace "/$" "" ]]/[[ $tag ]] &&\ + docker push [[ $.docker.repo | regexp.Replace "/$" "" ]]/[[ $tag ]] &&\ [[- end ]] [[- end ]] - echo "[[ $image ]] pushed to remote repo" -else - echo "Image [[ $image ]] already available" -fi + echo "[[ $image ]] pushed to remote repo" + else + echo "Image [[ $image ]] already available" + fi + IMAGE_[[ $k | toUpper ]]_AVAILABLE=1 +} [[- end ]] +[[- range $k, $v := .docker.base_images ]] +build_[[ $k ]] +[[- end ]] diff --git a/variables.yml b/variables.yml index 1c24e54..a0e24ae 100644 --- a/variables.yml +++ b/variables.yml @@ -273,6 +273,8 @@ docker: tags: - postgres15:latest - postgres:15 + depends_on: + - alma9 postgres16: image: postgres:16.24.3-1 @@ -281,18 +283,24 @@ docker: tags: - postgres16:latest - postgres:16 + depends_on: + - alma9 # Mariadb client mariadb_client: image: mariadb-client:24.3-1 tags: - mariadb-client:latest + depends_on: + - alpine # MariaDB server mariadb: image: mariadb:24.3-1 tags: - mariadb:latest + depends_on: + - mariadb_client # MongoDB mongo50: @@ -301,24 +309,32 @@ docker: MONGO_MAJOR: "5.0" tags: - mongo:5.0 + depends_on: + - alma8 # SQLite sqlite: image: sqlite:24.3-1 tags: - sqlite:latest + depends_on: + - alpine # pgbouncer pgbouncer: image: pgbouncer:24.3-1 tags: - pgbouncer:latest + depends_on: + - alpine # pgcat pgcat: image: pgcat:1.1.1-1 tags: - pgcat:latest + depends_on: + - alpine # PHP php82: @@ -328,6 +344,8 @@ docker: tags: - php:82 - php82:latest + depends_on: + - alpine php83: image: php:83.24.3-1 @@ -336,10 +354,14 @@ docker: tags: - php:83 - php83:latest + depends_on: + - alpine # alpine based wkhtml2pdf wkhtmltopdf: image: wkhtmltopdf:24.3-1 tags: - wkhtmltopdf:latest + depends_on: + - alpine