Docker image building: only tag as 'latest' when it's actually the latest

tag '1' is not likewise corrected (yet); assumed to be basically unused
This commit is contained in:
Klaas van Schelven
2025-07-30 15:39:00 +02:00
parent 17a96a22a6
commit b4c9e735b9
3 changed files with 77 additions and 6 deletions

View File

@@ -21,9 +21,44 @@ if [[ $WHEEL_FILE == *"dev"* ]]; then
TAGS="-t bugsink/bugsink:dev" TAGS="-t bugsink/bugsink:dev"
else else
VERSION=$(echo $WHEEL_FILE | cut -d'-' -f2) VERSION=$(echo $WHEEL_FILE | cut -d'-' -f2)
TAGS="-t bugsink/bugsink:$VERSION -t bugsink/bugsink:$(echo $VERSION | awk -F. '{print $1"."$2}') -t bugsink/bugsink:$(echo $VERSION | awk -F. '{print $1}') -t bugsink/bugsink:latest -t bugsink/bugsink"
echo "This is a non-dev version, tags will be added: $TAGS" REPO="bugsink/bugsink"
# numeric tags for this build
TAG_LIST=(
"$REPO:$VERSION"
"$REPO:$(echo "$VERSION" | awk -F. '{print $1"."$2}')"
"$REPO:$(echo "$VERSION" | awk -F. '{print $1}')"
)
# Find highest published semver on Docker Hub (public repo; no auth needed)
HIGHEST_PUBLISHED=$(
curl -fsSL "https://hub.docker.com/v2/repositories/${REPO}/tags?page_size=100" \
| grep -o '"name":"[^"]*"' \
| cut -d'"' -f4 \
| grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \
| sort -V \
| tail -n1
)
# Decide whether were allowed to move :latest forward
ADD_LATEST=true
if [[ -n "$HIGHEST_PUBLISHED" ]]; then
# if VERSION < HIGHEST_PUBLISHED, do NOT set :latest
top=$(printf '%s\n%s\n' "$HIGHEST_PUBLISHED" "$VERSION" | sort -V | tail -n1)
if [[ "$top" != "$VERSION" ]]; then
ADD_LATEST=false
echo "Not tagging :latest: $VERSION < already published $HIGHEST_PUBLISHED"
fi
fi
# Build TAGS string
TAGS=""
for t in "${TAG_LIST[@]}"; do TAGS+=" -t $t"; done
if $ADD_LATEST; then
TAGS+=" -t $REPO:latest -t $REPO"
echo "Tagging as latest: $VERSION${HIGHEST_PUBLISHED:-<none>}"
fi
fi fi
docker build -f Dockerfile.fromwheel --build-arg WHEEL_FILE=$WHEEL_FILE $TAGS . docker build -f Dockerfile.fromwheel --build-arg WHEEL_FILE=$WHEEL_FILE $TAGS .

View File

@@ -21,8 +21,44 @@ if [[ $WHEEL_FILE == *"dev"* ]]; then
TAGS="-t bugsink/bugsink:dev" TAGS="-t bugsink/bugsink:dev"
else else
VERSION=$(echo $WHEEL_FILE | cut -d'-' -f2) VERSION=$(echo $WHEEL_FILE | cut -d'-' -f2)
TAGS="-t bugsink/bugsink:$VERSION -t bugsink/bugsink:$(echo $VERSION | awk -F. '{print $1"."$2}') -t bugsink/bugsink:$(echo $VERSION | awk -F. '{print $1}') -t bugsink/bugsink:latest -t bugsink/bugsink"
echo "This is a non-dev version, tags will be added: $TAGS" REPO="bugsink/bugsink"
# numeric tags for this build
TAG_LIST=(
"$REPO:$VERSION"
"$REPO:$(echo "$VERSION" | awk -F. '{print $1"."$2}')"
"$REPO:$(echo "$VERSION" | awk -F. '{print $1}')"
)
# Find highest published semver on Docker Hub (public repo; no auth needed)
HIGHEST_PUBLISHED=$(
curl -fsSL "https://hub.docker.com/v2/repositories/${REPO}/tags?page_size=100" \
| grep -o '"name":"[^"]*"' \
| cut -d'"' -f4 \
| grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \
| sort -V \
| tail -n1
)
# Decide whether were allowed to move :latest forward
ADD_LATEST=true
if [[ -n "$HIGHEST_PUBLISHED" ]]; then
# if VERSION < HIGHEST_PUBLISHED, do NOT set :latest
top=$(printf '%s\n%s\n' "$HIGHEST_PUBLISHED" "$VERSION" | sort -V | tail -n1)
if [[ "$top" != "$VERSION" ]]; then
ADD_LATEST=false
echo "Not tagging :latest: $VERSION < already published $HIGHEST_PUBLISHED"
fi
fi
# Build TAGS string
TAGS=""
for t in "${TAG_LIST[@]}"; do TAGS+=" -t $t"; done
if $ADD_LATEST; then
TAGS+=" -t $REPO:latest -t $REPO"
echo "Tagging as latest: $VERSION${HIGHEST_PUBLISHED:-<none>}"
fi
fi fi

View File

@@ -7,7 +7,7 @@
set -euo pipefail set -euo pipefail
# Extensions to include # Extensions to include
EXT_REGEX='\.(py|js|ts|sh|md|txt|html|css)$' EXT_REGEX='\.(py|js|ts|sh|md|txt|html|css|bash)$'
# Detect sed flavor # Detect sed flavor
if sed --version >/dev/null 2>&1; then if sed --version >/dev/null 2>&1; then