Merge pull request #134 from infosiftr/multi-version

Update repository structure for future multi-version support
This commit is contained in:
yosifkit 2017-04-05 15:45:14 -07:00 committed by GitHub
commit 253abcc461
9 changed files with 83 additions and 46 deletions

View File

@ -2,15 +2,16 @@ language: bash
services: docker services: docker
env: env:
- VARIANT=debian - VERSION=3.6 VARIANT=debian
- VARIANT=alpine - VERSION=3.6 VARIANT=alpine
install: install:
- git clone https://github.com/docker-library/official-images.git ~/official-images - git clone https://github.com/docker-library/official-images.git ~/official-images
before_script: before_script:
- env | sort - env | sort
- image="rabbitmq:$VARIANT" - cd "$VERSION"
- image="rabbitmq:$VERSION-$VARIANT"
script: script:
- travis_retry docker build -t "$image" "$VARIANT" - travis_retry docker build -t "$image" "$VARIANT"

View File

@ -1,11 +1,20 @@
#!/bin/bash #!/bin/bash
set -eu set -eu
declare -A aliases=(
[3.6]='3 latest'
)
defaultVariant='debian' defaultVariant='debian'
self="$(basename "$BASH_SOURCE")" self="$(basename "$BASH_SOURCE")"
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
versions=( */ )
versions=( "${versions[@]%/}" )
# sort version numbers with highest first
IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS
# get the most recent commit which modified any of "$@" # get the most recent commit which modified any of "$@"
fileCommit() { fileCommit() {
git log -1 --format='format:%H' HEAD -- "$@" git log -1 --format='format:%H' HEAD -- "$@"
@ -43,37 +52,38 @@ join() {
echo "${out#$sep}" echo "${out#$sep}"
} }
for variant in debian alpine; do for version in "${versions[@]}"; do
commit="$(dirCommit "$variant")" for variant in debian alpine; do
commit="$(dirCommit "$version/$variant")"
fullVersion="$(git show "$commit":"$variant/Dockerfile" | awk '$1 == "ENV" && $2 == "RABBITMQ_VERSION" { print $3; exit }')" fullVersion="$(git show "$commit":"$version/$variant/Dockerfile" | awk '$1 == "ENV" && $2 == "RABBITMQ_VERSION" { print $3; exit }')"
versionAliases=() versionAliases=()
while [ "${fullVersion%.*}" != "$fullVersion" ]; do while [ "$fullVersion" != "$version" -a "${fullVersion%[.-]*}" != "$fullVersion" ]; do
versionAliases+=( $fullVersion ) versionAliases+=( $fullVersion )
fullVersion="${fullVersion%.*}" fullVersion="${fullVersion%[.-]*}"
done done
versionAliases+=( versionAliases+=(
$fullVersion $version
latest ${aliases[$version]:-}
) )
variantAliases=( "${versionAliases[@]/%/-$variant}" )
variantAliases=( "${variantAliases[@]//latest-/}" )
if [ "$variant" = "$defaultVariant" ]; then if [ "$variant" = "$defaultVariant" ]; then
variantAliases=( "${versionAliases[@]}" ) variantAliases=( "${versionAliases[@]}" )
else
variantAliases=( "${versionAliases[@]/%/-$variant}" )
variantAliases=( "${variantAliases[@]//latest-/}" )
fi fi
echo echo
cat <<-EOE cat <<-EOE
Tags: $(join ', ' "${variantAliases[@]}") Tags: $(join ', ' "${variantAliases[@]}")
GitCommit: $commit GitCommit: $commit
Directory: $variant Directory: $version/$variant
EOE EOE
for subVariant in management; do for subVariant in management; do
commit="$(dirCommit "$variant/$subVariant")" commit="$(dirCommit "$version/$variant/$subVariant")"
subVariantAliases=( "${versionAliases[@]/%/-$subVariant}" ) subVariantAliases=( "${versionAliases[@]/%/-$subVariant}" )
subVariantAliases=( "${subVariantAliases[@]//latest-/}" ) subVariantAliases=( "${subVariantAliases[@]//latest-/}" )
@ -86,7 +96,8 @@ for variant in debian alpine; do
cat <<-EOE cat <<-EOE
Tags: $(join ', ' "${subVariantAliases[@]}") Tags: $(join ', ' "${subVariantAliases[@]}")
GitCommit: $commit GitCommit: $commit
Directory: $variant/$subVariant Directory: $version/$variant/$subVariant
EOE EOE
done done
done
done done

View File

@ -3,12 +3,37 @@ set -e
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
debianVersion="$(curl -sSL 'http://www.rabbitmq.com/debian/dists/testing/main/binary-amd64/Packages' | grep -m1 -A10 '^Package: rabbitmq-server$' | grep -m1 '^Version: ' | cut -d' ' -f2)" versions=( "$@" )
if [ ${#versions[@]} -eq 0 ]; then
versions=( */ )
fi
versions=( "${versions[@]%/}" )
rabbitmqVersion="${debianVersion%%-*}" travisEnv=
for version in "${versions[@]}"; do
# TODO figure out what multi-version looks like here? :(
debianVersion="$(curl -sSL 'http://www.rabbitmq.com/debian/dists/testing/main/binary-amd64/Packages' | grep -m1 -A10 '^Package: rabbitmq-server$' | grep -m1 '^Version: ' | cut -d' ' -f2)"
# https://github.com/docker-library/rabbitmq/pull/121#issuecomment-271816323
set -x rabbitmqVersion="${debianVersion%%-*}"
sed -ri \
if [[ "$rabbitmqVersion" != "$version".* ]]; then
echo >&2 "warning: $rabbitmqVersion doesn't appear to be $version -- skipping for now"
continue
fi
for variant in alpine debian; do
(
set -x
sed -ri \
-e 's/^(ENV RABBITMQ_VERSION) .*/\1 '"$rabbitmqVersion"'/' \ -e 's/^(ENV RABBITMQ_VERSION) .*/\1 '"$rabbitmqVersion"'/' \
-e 's/^(ENV RABBITMQ_DEBIAN_VERSION) .*/\1 '"$debianVersion"'/' \ -e 's/^(ENV RABBITMQ_DEBIAN_VERSION) .*/\1 '"$debianVersion"'/' \
*/Dockerfile "$version/$variant/Dockerfile"
)
travisEnv='\n - VERSION='"$version"' VARIANT='"$variant$travisEnv"
done
done
travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)"
echo "$travis" > .travis.yml