#!/usr/bin/env bash _awkArch() { local version="$1"; shift local awkExpr="$1"; shift awk "$@" "/^#|^\$/ { next } $awkExpr" "$version/release-architectures" } apkArches() { local version="$1"; shift _awkArch "$version" '{ print $2 }' } hasBashbrewArch() { local version="$1"; shift local bashbrewArch="$1"; shift _awkArch "$version" 'BEGIN { exitCode = 1 } $1 == bashbrewArch { exitCode = 0 } END { exit exitCode }' -v bashbrewArch="$bashbrewArch" } apkToDockerArch() { local version="$1"; shift local apkArch="$1"; shift _awkArch "$version" '$2 == apkArch { print $3; exit }' -v apkArch="$apkArch" } _generateParentRepoToArches() { 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|.*\/.*)(:|$)/ { print "'"$officialImagesUrl"'" $2 } ' '{}' + \ | sort -u \ | xargs bashbrew cat --format '[{{ .RepoName }}:{{ .TagName }}]="{{ join " " .TagEntry.Architectures }}"' ) )" } _generateParentRepoToArches 'docker' parentArches() { local version="$1"; shift # "17.06", etc local parent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/Dockerfile")" echo "${parentRepoToArches[$parent]:-}" } versionArches() { local version="$1"; shift local parentArches="$(parentArches "$version")" local versionArches=() for arch in $parentArches; do if hasBashbrewArch "$version" "$arch"; then versionArches+=( "$arch" ) fi done echo "${versionArches[*]}" } versionChannel() { local version="$1"; shift # "17.06", "17.11-rc", etc local rcVersion="${version%-rc}" local channel='stable' if [ "$rcVersion" != "$version" ]; then channel='test' fi echo "$channel" }