#!/usr/bin/env bash set -Eeuo pipefail GLOBIGNORE=examples/:.*/:test/:main/:main-ubi/ err() { echo >&2 "ERROR: $*" exit 1 } declare -A aliases=( #[10.3]='10 latest' #[5.5]='5' ) # "latest", "10", "5", etc aliases are auto-detected in the loop below declare -A latest=() self="$(basename "$BASH_SOURCE")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" # needed by .architectures-lib # https://github.com/docker-library/bashbrew/releases command -v bashbrew >/dev/null || { err "bashbrew: command not found" } source '.architectures-lib' versions=( */ ) versions=( "${versions[@]%/}" ) # sort version numbers with highest first IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS # get the most recent commit which modified any of "$@" fileCommit() { git log -1 --format='format:%H' HEAD -- "$@" } # get the most recent commit which modified "$1/Dockerfile" or any file COPY'd from "$1/Dockerfile" dirCommit() { local dir="$1"; shift ( cd "$dir" fileCommit \ Dockerfile \ $(git show HEAD:./Dockerfile | awk ' toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } } ') ) } cat <<-EOH # this file is generated via https://github.com/MariaDB/mariadb-docker/blob/$(fileCommit "$self")/$self Maintainers: Daniel Black (@grooverdan), Daniel Bartholomew (@dbart), Faustin Lammler (@fauust) GitRepo: https://github.com/MariaDB/mariadb-docker.git Builder: buildkit EOH # prints "$2$1$3$1...$N" join() { local sep="$1"; shift local out; printf -v out "${sep//%/%%}%s" "$@" echo "${out#$sep}" } for version in "${versions[@]}"; do commit="$(dirCommit "$version")" fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ARG" && $2 ~ "MARIADB_VERSION=" { gsub(/^MARIADB_VERSION=|([0-9]+:)|[+].*$/, "", $2); print $2; exit }')" releaseStatus="$(grep -m1 'release-status:' "$version/Dockerfile" | cut -d':' -f2)" supportType="$(grep -m1 'support-type:' "$version/Dockerfile" | cut -d':' -f2)" case $releaseStatus in Unknown) releaseStatus=Stable ;& Stable) suffix= ;; *) suffix=-${releaseStatus,,*} esac # this is for new tagged disto versions # so won't attract non-distro tags # Not including ubi because UBI base images have # a filetime that exceeds MariaDB's releases. special= # non-ubi gets full version if [[ $version =~ .*ubi ]]; then ubi=-ubi else ubi= if [[ "$version" == *-* ]]; then # A 10.6-jammy for instance special=-${version#*-} fi fi versionAliases=( "${fullVersion}${ubi}${special}" ) case "${supportType}" in "Long Term Support") supportType=LTS ;; "Short Term Support") supportType=STS ;; *) supportType=Unknown supportType=STS esac if [ "$version" != "$fullVersion" ]; then versionAliases+=( "${version}" ) fi versionAliases+=( ${aliases[$version]:-} ) if [ "$releaseStatus" = 'Stable' ] && [ -z "$special" ]; then versions=( "${version%%.*}${ubi}" ) if [ -z "$ubi" ]; then versions+=( latest ) fi if [ "$supportType" = LTS ]; then versions+=( lts"${ubi}" ) fi for tryAlias in "${versions[@]}"; do if [ -z "${latest[$tryAlias]:-}" ]; then latest[$tryAlias]="$version" versionAliases+=( "$tryAlias" ) fi done fi from="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "FROM" { print $2; exit }')" if [[ "$from" =~ redhat/* ]]; then distro="${from#redhat/}" suite="${distro%%-*}" # -minimal/init... variantAliases=( "${versionAliases[@]/%/${suite#ubi}}" ) elif [ -z "$special" ]; then # already added distro="${from%%:*}" # "debian", "ubuntu" suite="${from#"$distro":}" # "jessie-slim", "xenial" suite="${suite%-slim}" # "jessie", "xenial" variantAliases=( "${versionAliases[@]/%/-${suite}}" ) else # special ones include their distro already variantAliases=() fi versionAliases=( "${variantAliases[@]//latest-/}" "${versionAliases[@]}" ) versionAliases=( "${versionAliases[@]/%/${suffix}}" ) arches=$(versionArches "$version") for arch in $arches; do case $suite in ubi*) # RPMify the arch case $arch in arm64v8) arch=aarch64 ;; amd64) arch=x86_64 ;; esac if ! curl --fail --silent --head "https://archive.mariadb.org/mariadb-${fullVersion}/yum/rhel/${suite#ubi}/${arch}/" > /dev/null 2>&1 ; then echo "$arch missing for $fullVersion" exit 1 fi ;; *) # Debify the arch case $arch in arm64v8) arch=arm64 ;; ppc64le) arch=ppc64el ;; esac if ! curl --fail --silent --head "https://archive.mariadb.org/mariadb-${fullVersion}/repo/${distro}/dists/${suite}/main/binary-${arch}/" > /dev/null 2>&1 ; then echo "$arch missing for $fullVersion" exit 1 fi ;; esac done echo cat <<-EOE Tags: $(join ', ' "${versionAliases[@]}") Architectures: $(join ', ' $arches) GitCommit: $commit Directory: $version EOE done