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'
[ 8.0] = '8 latest'
2014-08-21 01:50:02 +02:00
)
2019-07-10 21:58:12 +02:00
defaultDebianSuite = 'buster'
2019-06-27 23:04:23 +02:00
declare -A debianSuites = (
2019-07-10 21:58:12 +02:00
#[7.4-rc]='buster'
2019-06-27 23:04:23 +02:00
)
2021-06-16 14:55:20 +02:00
defaultAlpineVersion = '3.14'
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
versions = " $( jq -r 'keys | map(@sh) | join(" ")' versions.json) "
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
export version
variants = " $( jq -r '.[env.version].variants | map(@sh) | join(" ")' versions.json) "
eval " variants=( $variants ) "
2016-06-09 20:56:08 +02:00
versionAliases = (
$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
fullVersion = " $( jq -r '.[env.version].version' versions.json) "
baseAliases = ( $fullVersion " ${ versionAliases [@] } " )
variantAliases = ( " ${ baseAliases [@]/%/- $variant } " )
variantAliases = ( " ${ variantAliases [@]//latest-/ } " )
if [ " $variant " = 'cli' ] ; then
variantAliases += ( " ${ baseAliases [@] } " )
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