diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 4414117d08..a337006067 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -38,6 +38,22 @@ dirCommit() { ) } +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 ' + toupper($1) == "FROM" && $2 !~ /^('"$repo"'|scratch|microsoft\/[^:]+)(:|$)/ { + print "'"$officialImagesUrl"'" $2 + } + ' '{}' + \ + | sort -u \ + | xargs bashbrew cat --format '[{{ .RepoName }}:{{ .TagName }}]="{{ join " " .TagEntry.Architectures }}"' + ) )" +} +getArches 'php' + cat <<-EOH # this file is generated via https://github.com/docker-library/php/blob/$(fileCommit "$self")/$self @@ -64,37 +80,35 @@ for version in "${versions[@]}"; do ${aliases[$version]:-} ) - variant='cli' - variantAliases=( "${versionAliases[@]/%/-$variant}" ) - variantAliases=( "${variantAliases[@]//latest-/}" ) - variantAliases+=( "${versionAliases[@]}" ) - - echo - cat <<-EOE - Tags: $(join ', ' "${variantAliases[@]}") - GitCommit: $commit - Directory: $version - EOE - for variant in \ + '' \ alpine \ apache \ fpm fpm/alpine \ zts zts/alpine \ ; do - [ -f "$version/$variant/Dockerfile" ] || continue + dir="$version${variant:+/$variant}" + [ -f "$dir/Dockerfile" ] || continue + variant="${variant:-cli}" - commit="$(dirCommit "$version/$variant")" + commit="$(dirCommit "$dir")" slash='/' variantAliases=( "${versionAliases[@]/%/-${variant//$slash/-}}" ) variantAliases=( "${variantAliases[@]//latest-/}" ) + if [ "$variant" = 'cli' ]; then + variantAliases+=( "${versionAliases[@]}" ) + fi + + variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$dir/Dockerfile")" + variantArches="${parentRepoToArches[$variantParent]}" echo cat <<-EOE Tags: $(join ', ' "${variantAliases[@]}") + Architectures: $(join ', ' $variantArches) GitCommit: $commit - Directory: $version/$variant + Directory: $dir EOE done done