2018-05-22 23:23:27 +02:00
#!/usr/bin/env bash
set -Eeuo pipefail
2017-10-12 00:44:38 +02:00
2016-06-09 19:34:11 +02:00
declare -A aliases = (
2020-11-26 17:55:18 +01:00
[ 7.4] = '7'
2021-11-29 21:09:01 +01:00
[ 8.1] = '8 latest'
2014-08-21 01:50:02 +02:00
)
2021-08-17 02:38:24 +02:00
defaultDebianSuite = 'bullseye'
2019-06-27 23:04:23 +02:00
declare -A debianSuites = (
2021-08-17 02:38:24 +02:00
#[7.4]='buster'
2019-06-27 23:04:23 +02:00
)
2021-11-25 11:35:55 +01:00
defaultAlpineVersion = '3.15'
2018-08-16 21:24:00 +02:00
declare -A alpineVersions = (
# /usr/src/php/ext/openssl/openssl.c:551:12: error: static declaration of 'RSA_set0_key' follows non-static declaration
# https://github.com/docker-library/php/pull/702#issuecomment-413341743
2019-01-05 00:06:24 +01:00
#[7.0]='3.7'
2018-08-16 21:24:00 +02:00
)
2018-05-22 23:23:27 +02:00
2016-06-09 20:56:08 +02:00
self = " $( basename " $BASH_SOURCE " ) "
2014-08-21 01:50:02 +02:00
cd " $( dirname " $( readlink -f " $BASH_SOURCE " ) " ) "
2020-08-18 07:12:07 +02:00
if [ " $# " -eq 0 ] ; then
2022-01-27 00:45:04 +01:00
versions = " $( jq -r 'to_entries | map(if .value then .key | @sh else empty end) | join(" ")' versions.json) "
2020-08-18 07:12:07 +02:00
eval " set -- $versions "
fi
2014-08-21 01:50:02 +02:00
2016-06-09 20:56:08 +02:00
# sort version numbers with highest first
2020-08-18 07:12:07 +02:00
IFS = $'\n' ; set -- $( sort -rV <<< " $* " ) ; unset IFS
2016-06-09 20:56:08 +02:00
# 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
}
}
' )
)
}
2017-06-17 00:05:37 +02:00
getArches( ) {
local repo = " $1 " ; shift
local officialImagesUrl = 'https://github.com/docker-library/official-images/raw/master/library/'
eval " declare -g -A parentRepoToArches=( $(
find -name 'Dockerfile' -exec awk '
2019-02-05 00:28:30 +01:00
toupper( $1 ) = = "FROM" && $2 !~ /^( '"$repo"' | scratch| .*\/ .*) ( :| $) / {
2017-06-17 00:05:37 +02:00
print "'" $officialImagesUrl "'" $2
}
' ' { } ' + \
| sort -u \
| xargs bashbrew cat --format '[{{ .RepoName }}:{{ .TagName }}]="{{ join " " .TagEntry.Architectures }}"'
) ) "
}
getArches 'php'
2016-06-09 20:56:08 +02:00
cat <<-EOH
# this file is generated via https://github.com/docker-library/php/blob/$(fileCommit "$self")/$self
Maintainers: Tianon Gravi <admwiggin@gmail.com> ( @tianon) ,
Joseph Ferguson <yosifkit@gmail.com> ( @yosifkit)
GitRepo: https://github.com/docker-library/php.git
EOH
# prints "$2$1$3$1...$N"
join( ) {
local sep = " $1 " ; shift
local out; printf -v out " ${ sep //%/%% } %s " " $@ "
echo " ${ out # $sep } "
}
2014-08-21 01:50:02 +02:00
2020-08-18 07:12:07 +02:00
for version; do
2022-02-18 18:54:10 +01:00
rcVersion = " ${ version %-rc } "
export version rcVersion
2022-02-18 18:45:30 +01:00
if ! fullVersion = " $( jq -er '.[env.version] | if . then .version else empty end' versions.json) " ; then
continue
fi
2022-02-18 18:54:10 +01:00
if [ " $rcVersion " != " $version " ] && rcFullVersion = " $( jq -er '.[env.rcVersion] | if . then .version else empty end' versions.json) " ; then
# if this is a "-rc" release, let's make sure the release it contains isn't already GA (and thus something we should not publish anymore)
latestVersion = " $( { echo " $fullVersion " ; echo " $rcFullVersion " ; } | sort -V | tail -1) "
if [ [ " $fullVersion " = = " $rcFullVersion " * ] ] || [ " $latestVersion " = " $rcFullVersion " ] ; then
# "x.y.z-rc1" == x.y.z*
continue
fi
fi
2020-08-18 07:12:07 +02:00
variants = " $( jq -r '.[env.version].variants | map(@sh) | join(" ")' versions.json) "
eval " variants=( $variants ) "
2016-06-09 20:56:08 +02:00
versionAliases = (
2022-02-18 18:54:10 +01:00
$fullVersion
2016-06-09 20:56:08 +02:00
$version
${ aliases [ $version ] :- }
)
2020-08-18 07:12:07 +02:00
for dir in " ${ variants [@] } " ; do
suite = " $( dirname " $dir " ) " # "buster", etc
variant = " $( basename " $dir " ) " # "cli", etc
dir = " $version / $dir "
[ -f " $dir /Dockerfile " ] || continue
2022-02-18 18:54:10 +01:00
variantAliases = ( " ${ versionAliases [@]/%/- $variant } " )
2020-08-18 07:12:07 +02:00
variantAliases = ( " ${ variantAliases [@]//latest-/ } " )
if [ " $variant " = 'cli' ] ; then
2022-02-18 18:54:10 +01:00
variantAliases += ( " ${ versionAliases [@] } " )
2020-08-18 07:12:07 +02:00
fi
suiteVariantAliases = ( " ${ variantAliases [@]/%/- $suite } " )
if [ " ${ suite #alpine } " = " ${ alpineVersions [ $version ] :- $defaultAlpineVersion } " ] ; then
variantAliases = ( " ${ variantAliases [@]/%/-alpine } " )
elif [ " $suite " != " ${ debianSuites [ $version ] :- $defaultDebianSuite } " ] ; then
variantAliases = ( )
fi
variantAliases = ( " ${ suiteVariantAliases [@] } " ${ variantAliases [@]+ " ${ variantAliases [@] } " } )
variantAliases = ( " ${ variantAliases [@]//latest-/ } " )
variantParent = " $( awk 'toupper($1) == "FROM" { print $2 }' " $dir /Dockerfile " ) "
variantArches = " ${ parentRepoToArches [ $variantParent ] } "
if [ " $version " = '7.2' ] ; then
# PHP 7.2 doesn't compile on MIPS:
# /usr/src/php/ext/pcre/pcrelib/sljit/sljitNativeMIPS_common.c:506:3: error: a label can only be part of a statement and a declaration is not a statement
# sljit_sw fir;
# ^~~~~~~~
# According to https://github.com/openwrt/packages/issues/5333 + https://github.com/openwrt/packages/pull/5335,
# https://github.com/svn2github/pcre/commit/e5045fd31a2e171dff305665e2b921d7c93427b8#diff-291428aa92cf90de0f2486f9c2829158
# *might* fix it, but it's likely not worth it just for PHP 7.2 on MIPS (since 7.3 and 7.4 work fine).
variantArches = " $( echo " $variantArches " | sed -e 's/ mips64le / /g' ) "
fi
commit = " $( dirCommit " $dir " ) "
echo
cat <<-EOE
Tags: $( join ', ' " ${ variantAliases [@] } " )
Architectures: $( join ', ' $variantArches )
GitCommit: $commit
Directory: $dir
EOE
2014-08-21 01:50:02 +02:00
done
done