mirror of
https://github.com/joomla-docker/docker-joomla.git
synced 2025-01-24 15:48:27 +00:00
changes the whole generate-stackbrew-library.sh to now make use of the new versions.json architecture
This commit is contained in:
parent
1504169114
commit
ee137cbaeb
@ -1,126 +1,185 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
set -eu
|
set -Eeuo pipefail
|
||||||
|
|
||||||
# Latest available version based on https://downloads.joomla.org/technical-requirements
|
|
||||||
defaultPhpVersion='php7.3'
|
|
||||||
defaultVariant='apache'
|
|
||||||
|
|
||||||
self="$(basename "$BASH_SOURCE")"
|
self="$(basename "$BASH_SOURCE")"
|
||||||
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
||||||
|
|
||||||
phpVersions=( php*.*/ )
|
if [ "$#" -eq 0 ]; then
|
||||||
phpVersions=( "${phpVersions[@]%/}" )
|
versions="$(jq -r 'keys | map(@sh) | join(" ")' versions.json)"
|
||||||
|
eval "set -- $versions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# sort version numbers with highest first
|
||||||
|
IFS=$'\n'
|
||||||
|
set -- $(sort -rV <<<"$*")
|
||||||
|
unset IFS
|
||||||
|
|
||||||
# get the most recent commit which modified any of "$@"
|
# get the most recent commit which modified any of "$@"
|
||||||
fileCommit() {
|
fileCommit() {
|
||||||
git log -1 --format='format:%H' HEAD -- "$@"
|
git log -1 --format='format:%H' HEAD -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# get the most recent commit which modified "$1/Dockerfile" or any file COPY'd from "$1/Dockerfile"
|
# get the most recent commit which modified "$1/Dockerfile" or any file COPY'd from "$1/Dockerfile"
|
||||||
dirCommit() {
|
dirCommit() {
|
||||||
local dir="$1"; shift
|
local dir="$1"
|
||||||
(
|
shift
|
||||||
cd "$dir"
|
(
|
||||||
fileCommit \
|
cd "$dir"
|
||||||
Dockerfile \
|
fileCommit \
|
||||||
$(git show HEAD:./Dockerfile | awk '
|
Dockerfile \
|
||||||
|
$(git show HEAD:./Dockerfile | awk '
|
||||||
toupper($1) == "COPY" {
|
toupper($1) == "COPY" {
|
||||||
for (i = 2; i < NF; i++) {
|
for (i = 2; i < NF; i++) {
|
||||||
|
if ($i ~ /^--from=/) {
|
||||||
|
next
|
||||||
|
}
|
||||||
print $i
|
print $i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
')
|
')
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gawkParents='
|
||||||
|
{ cmd = toupper($1) }
|
||||||
|
cmd == "FROM" {
|
||||||
|
print $2
|
||||||
|
next
|
||||||
|
}
|
||||||
|
cmd == "COPY" {
|
||||||
|
for (i = 2; i < NF; i++) {
|
||||||
|
if ($i ~ /^--from=/) {
|
||||||
|
gsub(/^--from=/, "", $i)
|
||||||
|
print $i
|
||||||
|
next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'
|
||||||
|
|
||||||
getArches() {
|
getArches() {
|
||||||
local repo="$1"; shift
|
local repo="$1"
|
||||||
local officialImagesUrl='https://github.com/docker-library/official-images/raw/master/library/'
|
shift
|
||||||
|
|
||||||
eval "declare -g -A parentRepoToArches=( $(
|
local parentRepoToArchesStr
|
||||||
find -name 'Dockerfile' -exec awk '
|
parentRepoToArchesStr="$(
|
||||||
toupper($1) == "FROM" && $2 !~ /^('"$repo"'|scratch|microsoft\/[^:]+)(:|$)/ {
|
find -name 'Dockerfile' -exec gawk "$gawkParents" '{}' + |
|
||||||
print "'"$officialImagesUrl"'" $2
|
sort -u |
|
||||||
|
gawk -v officialImagesUrl='https://github.com/docker-library/official-images/raw/master/library/' '
|
||||||
|
$1 !~ /^('"$repo"'|scratch|.*\/.*)(:|$)/ {
|
||||||
|
printf "%s%s\n", officialImagesUrl, $1
|
||||||
}
|
}
|
||||||
' '{}' + \
|
' |
|
||||||
| sort -u \
|
xargs -r bashbrew cat --format '["{{ .RepoName }}:{{ .TagName }}"]="{{ join " " .TagEntry.Architectures }}"'
|
||||||
| xargs bashbrew cat --format '[{{ .RepoName }}:{{ .TagName }}]="{{ join " " .TagEntry.Architectures }}"'
|
)"
|
||||||
) )"
|
eval "declare -g -A parentRepoToArches=( $parentRepoToArchesStr )"
|
||||||
}
|
}
|
||||||
getArches 'joomla'
|
getArches 'joomla'
|
||||||
|
|
||||||
|
# get the Joomla maintainers of these docker images
|
||||||
|
joomlaMaintainers="$(jq -cr '. | map(.firstname + " " + .lastname + " <" + .email + "> (@" + .github + ")") | join(",\n ")' maintainers.json)"
|
||||||
|
|
||||||
cat <<-EOH
|
cat <<-EOH
|
||||||
# this file is generated via https://github.com/joomla-docker/docker-joomla/blob/$(fileCommit "$self")/$self
|
# this file is generated via https://github.com/joomla-docker/docker-joomla/blob/$(fileCommit "$self")/$self
|
||||||
|
|
||||||
Maintainers: Harald Leithner <harald.leithner@community.joomla.org> (@HLeithner)
|
Maintainers: $joomlaMaintainers
|
||||||
GitRepo: https://github.com/joomla-docker/docker-joomla.git
|
GitRepo: https://github.com/joomla-docker/docker-joomla.git
|
||||||
EOH
|
EOH
|
||||||
|
|
||||||
# prints "$2$1$3$1...$N"
|
# prints "$2$1$3$1...$N"
|
||||||
join() {
|
join() {
|
||||||
local sep="$1"; shift
|
local sep="$1"
|
||||||
local out; printf -v out "${sep//%/%%}%s" "$@"
|
shift
|
||||||
echo "${out#$sep}"
|
local out
|
||||||
|
printf -v out "${sep//%/%%}%s" "$@"
|
||||||
|
echo "${out#$sep}"
|
||||||
}
|
}
|
||||||
|
|
||||||
for phpVersion in "${phpVersions[@]}"; do
|
for version; do
|
||||||
for variant in apache fpm fpm-alpine; do
|
export version
|
||||||
dir="$phpVersion/$variant"
|
# get this Joomla versions PHP versions
|
||||||
[ -f "$dir/Dockerfile" ] || continue
|
phpVersions="$(jq -r '.[env.version].phpVersions | map(@sh) | join(" ")' versions.json)"
|
||||||
|
eval "phpVersions=( $phpVersions )"
|
||||||
|
# get this Joomla versions default PHP version
|
||||||
|
defaultPhpVersion="$(jq -r '.[env.version].php' versions.json)"
|
||||||
|
# get this Joomla versions variants
|
||||||
|
variants="$(jq -r '.[env.version].variants | map(@sh) | join(" ")' versions.json)"
|
||||||
|
eval "variants=( $variants )"
|
||||||
|
# get this Joomla versions default variant
|
||||||
|
defaultVariant="$(jq -r '.[env.version].variant' versions.json)"
|
||||||
|
# get the Joomla versions full version eg: 4.0.0
|
||||||
|
fullVersion="$(jq -r '.[env.version].version' versions.json)"
|
||||||
|
# check if this Joomla version is a Release Candidate
|
||||||
|
rcVersion="${version%-rc}"
|
||||||
|
versionAliases=()
|
||||||
|
while [ "$fullVersion" != "$rcVersion" -a "${fullVersion%[.]*}" != "$fullVersion" ]; do
|
||||||
|
versionAliases+=($fullVersion)
|
||||||
|
fullVersion="${fullVersion%[.]*}"
|
||||||
|
done
|
||||||
|
# get all that aliases of this Joomla version
|
||||||
|
aliases="$(jq -r '.[env.version].aliases | map(@sh) | join(" ")' versions.json)"
|
||||||
|
eval "aliases=( $aliases )"
|
||||||
|
# add the short version an all aliases found
|
||||||
|
versionAliases+=(
|
||||||
|
$version
|
||||||
|
${aliases[@]:-}
|
||||||
|
)
|
||||||
|
|
||||||
commit="$(dirCommit "$dir")"
|
for phpVersion in "${phpVersions[@]}"; do
|
||||||
|
phpVersion="php$phpVersion"
|
||||||
|
for variant in "${variants[@]}"; do
|
||||||
|
dir="$version/$phpVersion/$variant"
|
||||||
|
# check if the docker file exist, else skip
|
||||||
|
[ -f "$dir/Dockerfile" ] || continue
|
||||||
|
# get the commit hash from this docker file
|
||||||
|
commit="$(dirCommit "$dir")"
|
||||||
|
|
||||||
fullVersion="$(git show "$commit":"$dir/Dockerfile" | awk '$1 == "ENV" && $2 == "JOOMLA_VERSION" { print $3; exit }')"
|
phpVersionAliases=("${versionAliases[@]/%/-$phpVersion}")
|
||||||
if [[ "$fullVersion" != *.*.* && "$fullVersion" == *.* ]]; then
|
phpVersionAliases=("${phpVersionAliases[@]//latest-/}")
|
||||||
fullVersion+='.0'
|
|
||||||
fi
|
|
||||||
|
|
||||||
versionAliases=()
|
variantSuffixes=("$variant")
|
||||||
while [ "${fullVersion%[.-]*}" != "$fullVersion" ]; do
|
|
||||||
versionAliases+=( $fullVersion )
|
|
||||||
fullVersion="${fullVersion%[.-]*}"
|
|
||||||
done
|
|
||||||
versionAliases+=(
|
|
||||||
$fullVersion
|
|
||||||
latest
|
|
||||||
)
|
|
||||||
|
|
||||||
phpVersionAliases=( "${versionAliases[@]/%/-$phpVersion}" )
|
variantAliases=()
|
||||||
phpVersionAliases=( "${phpVersionAliases[@]//latest-/}" )
|
phpVersionVariantAliases=()
|
||||||
|
for variantSuffix in "${variantSuffixes[@]}"; do
|
||||||
|
variantAliases+=("${versionAliases[@]/%/-$variantSuffix}")
|
||||||
|
phpVersionVariantAliases+=("${phpVersionAliases[@]/%/-$variantSuffix}")
|
||||||
|
done
|
||||||
|
variantAliases=("${variantAliases[@]//latest-/}")
|
||||||
|
phpVersionVariantAliases=("${phpVersionVariantAliases[@]//latest-/}")
|
||||||
|
|
||||||
variantAliases=( "${versionAliases[@]/%/-$variant}" )
|
fullAliases=()
|
||||||
variantAliases=( "${variantAliases[@]//latest-/}" )
|
if [ "$phpVersion" = "php$defaultPhpVersion" ] && [ "$variant" = "$defaultVariant" ]; then
|
||||||
|
fullAliases+=("${versionAliases[@]}")
|
||||||
|
fullAliases+=("${variantAliases[@]}")
|
||||||
|
fullAliases+=("${phpVersionAliases[@]}")
|
||||||
|
fi
|
||||||
|
fullAliases+=("${phpVersionVariantAliases[@]}")
|
||||||
|
|
||||||
phpVersionVariantAliases=( "${versionAliases[@]/%/-$phpVersion-$variant}" )
|
variantParents="$(gawk "$gawkParents" "$dir/Dockerfile")"
|
||||||
phpVersionVariantAliases=( "${phpVersionVariantAliases[@]//latest-/}" )
|
variantArches=
|
||||||
|
for variantParent in $variantParents; do
|
||||||
|
parentArches="${parentRepoToArches[$variantParent]:-}"
|
||||||
|
if [ -z "$parentArches" ]; then
|
||||||
|
continue
|
||||||
|
elif [ -z "$variantArches" ]; then
|
||||||
|
variantArches="$parentArches"
|
||||||
|
else
|
||||||
|
variantArches="$(
|
||||||
|
comm -12 \
|
||||||
|
<(xargs -n1 <<<"$variantArches" | sort -u) \
|
||||||
|
<(xargs -n1 <<<"$parentArches" | sort -u)
|
||||||
|
)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
fullAliases=()
|
echo
|
||||||
|
cat <<-EOE
|
||||||
if [ "$phpVersion" = "$defaultPhpVersion" ]; then
|
Tags: $(join ', ' "${fullAliases[@]}")
|
||||||
fullAliases+=( "${variantAliases[@]}" )
|
Architectures: $(join ', ' $variantArches)
|
||||||
|
GitCommit: $commit
|
||||||
if [ "$variant" = "$defaultVariant" ]; then
|
Directory: $dir
|
||||||
fullAliases+=( "${versionAliases[@]}" )
|
EOE
|
||||||
fi
|
done
|
||||||
fi
|
done
|
||||||
|
|
||||||
fullAliases+=(
|
|
||||||
"${phpVersionVariantAliases[@]}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if [ "$variant" = "$defaultVariant" ]; then
|
|
||||||
fullAliases+=( "${phpVersionAliases[@]}" )
|
|
||||||
fi
|
|
||||||
|
|
||||||
variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$dir/Dockerfile")"
|
|
||||||
variantArches="${parentRepoToArches[$variantParent]}"
|
|
||||||
|
|
||||||
echo
|
|
||||||
cat <<-EOE
|
|
||||||
Tags: $(join ', ' "${fullAliases[@]}")
|
|
||||||
Architectures: $(join ', ' $variantArches)
|
|
||||||
GitCommit: $commit
|
|
||||||
Directory: $dir
|
|
||||||
EOE
|
|
||||||
done
|
|
||||||
done
|
done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user