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 = (
2019-11-28 08:58:17 +01:00
[ 7.4] = '7 latest'
2019-11-28 16:41:13 +01:00
[ 7.5-rc] = 'rc'
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
)
2019-12-23 18:53:03 +01:00
defaultAlpineVersion = '3.11'
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 " ) " ) "
versions = ( */ )
versions = ( " ${ versions [@]%/ } " )
2016-06-09 20:56:08 +02:00
# 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
}
}
' )
)
}
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
for version in " ${ versions [@] } " ; do
2016-06-09 20:56:08 +02:00
versionAliases = (
$version
${ aliases [ $version ] :- }
)
2017-10-12 00:44:38 +02:00
# order here controls the order of the library/ file
for suite in \
2019-06-27 23:04:23 +02:00
buster stretch \
2019-12-23 18:53:03 +01:00
alpine{ 3.11,3.10} \
2016-03-18 22:37:47 +01:00
; do
2017-10-12 00:44:38 +02:00
for variant in \
cli \
apache \
fpm \
zts \
; do
dir = " $version / $suite / $variant "
[ -f " $dir /Dockerfile " ] || continue
commit = " $( dirCommit " $dir " ) "
fullVersion = " $( git show " $commit " :" $dir /Dockerfile " | awk '$1 == "ENV" && $2 == "PHP_VERSION" { print $3; exit }' ) "
baseAliases = ( $fullVersion " ${ versionAliases [@] } " )
variantAliases = ( " ${ baseAliases [@]/%/- $variant } " )
variantAliases = ( " ${ variantAliases [@]//latest-/ } " )
if [ " $variant " = 'cli' ] ; then
variantAliases += ( " ${ baseAliases [@] } " )
fi
2017-10-12 01:36:32 +02:00
suiteVariantAliases = ( " ${ variantAliases [@]/%/- $suite } " )
2018-08-16 21:24:00 +02:00
if [ " ${ suite #alpine } " = " ${ alpineVersions [ $version ] :- $defaultAlpineVersion } " ] ; then
2017-10-12 01:36:32 +02:00
variantAliases = ( " ${ variantAliases [@]/%/-alpine } " )
2019-06-27 23:04:23 +02:00
elif [ " $suite " != " ${ debianSuites [ $version ] :- $defaultDebianSuite } " ] ; then
2017-10-12 01:36:32 +02:00
variantAliases = ( )
2017-10-12 00:44:38 +02:00
fi
2017-12-13 02:55:00 +01:00
variantAliases = ( " ${ suiteVariantAliases [@] } " ${ variantAliases [@]+ " ${ variantAliases [@] } " } )
2017-10-12 01:06:34 +02:00
variantAliases = ( " ${ variantAliases [@]//latest-/ } " )
2017-10-12 00:44:38 +02:00
variantParent = " $( awk 'toupper($1) == "FROM" { print $2 }' " $dir /Dockerfile " ) "
variantArches = " ${ parentRepoToArches [ $variantParent ] } "
2020-04-17 18:30:35 +02:00
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
2017-10-12 00:44:38 +02:00
echo
cat <<-EOE
Tags: $( join ', ' " ${ variantAliases [@] } " )
Architectures: $( join ', ' $variantArches )
GitCommit: $commit
Directory: $dir
EOE
done
2014-08-21 01:50:02 +02:00
done
done