docs/.template-helpers/generate-dockerfile-links-p...

75 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
set -eo pipefail
repo="$1"
if [ -z "$repo" ]; then
echo >&2 "usage: $0 repo"
echo >&2 " ie: $0 hylang"
exit 1
fi
IFS=$'\n'
lines=( $(curl -fsSL 'https://raw.githubusercontent.com/docker-library/official-images/master/library/'"$repo" | grep -vE '^$|^#') )
unset IFS
if [ "${#lines[@]}" -eq 0 ]; then
echo >&2 "Failed to read manifest file for $repo"
exit 1
fi
repoDirs=()
declare -A repoDirTags=()
latest=
uniqImages=()
for line in "${lines[@]}"; do
tag="$(echo "$line" | awk -F ': +' '{ print $1 }')"
if [ -z "$latest" -o "$tag" = 'latest' ]; then
latest="$tag"
fi
repoDir="$(echo "$line" | awk -F ': +' '{ print $2 }')"
if [ -z "${repoDirTags[$repoDir]}" ]; then
repoDirs+=( "$repoDir" )
uniqImages+=( "$repo:$tag" )
else
repoDirTags["$repoDir"]+=', '
fi
repoDirTags["$repoDir"]+='`'"$tag"'`'
done
IFS=','
imageLayers="https://imagelayers.io/?images=${uniqImages[*]}"
unset IFS
for repoDir in "${repoDirs[@]}"; do
if [[ "$repoDir" != *github.com* ]]; then
# skip non-github.com for now
continue
fi
# split out some data
gitUrl="${repoDir%%@*}"
commitDir="${repoDir#*@}"
commit="${commitDir%% *}"
dir="${commitDir#* }"
if [ "$dir" = "$commitDir" ]; then
dir=''
fi
# sanitize some data
gitUrl="${gitUrl#git://}"
gitUrl="${gitUrl%/}"
gitUrl="${gitUrl%.git}"
dir="${dir#/}"
dir="${dir%/}"
[ -z "$dir" ] || dir="$dir/"
url="https://$gitUrl/blob/$commit/${dir}Dockerfile"
echo $'-\t['"${repoDirTags["$repoDir"]}"' (*'"${dir}Dockerfile"'*)]('"$url"')'
done
echo
echo "[![](https://badge.imagelayers.io/$repo:$latest.svg)]($imageLayers)"
echo