@@ -96,16 +96,39 @@ jobs:
9696 LATEST_MAJOR=$(echo "$LATEST_CLEAN" | cut -d. -f1)
9797 fi
9898
99- echo "New major: $NEW_MAJOR, Latest major : $LATEST_MAJOR "
99+ echo "Latest tag : $LATEST_CLEAN "
100100
101- REFS="${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO }}:${{ env.NEW_TAG }}\nghcr.io/${{ github.repository_owner }}/${{ env.REPO }}:${{ env.NEW_TAG }}"
102- if [ "$NEW_MAJOR" -gt "$LATEST_MAJOR" ]; then
103- echo "Tagging as latest (major increased)"
104- REFS="${REFS}\n${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO }}:latest\nghcr.io/${{ github.repository_owner }}/${{ env.REPO }}:latest"
101+ REF1="${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO }}:${{ env.NEW_TAG }}"
102+ REF2="ghcr.io/${{ github.repository_owner }}/${{ env.REPO }}:${{ env.NEW_TAG }}"
103+
104+ NEW_CLEAN="${{ env.NEW_TAG }}"
105+
106+ if [ -z "$LATEST_CLEAN" ]; then
107+ IS_GREATER=1
105108 else
106- echo "Not tagging as latest (major not increased)"
109+ # strip leading 'v' from both
110+ N="${NEW_CLEAN#v}"
111+ L="${LATEST_CLEAN#v}"
112+ MAX=$(printf '%s\n%s\n' "$L" "$N" | sort -V | tail -n1)
113+ if [ "$MAX" = "$N" ] && [ "$N" != "$L" ]; then
114+ IS_GREATER=1
115+ else
116+ IS_GREATER=0
117+ fi
107118 fi
108119
120+ if [ "$IS_GREATER" -eq 1 ]; then
121+ echo "New version is greater than latest; tagging as latest"
122+ REF3="${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO }}:latest"
123+ REF4="ghcr.io/${{ github.repository_owner }}/${{ env.REPO }}:latest"
124+ REFS="$(printf '%s\n%s\n%s\n%s' "$REF1" "$REF2" "$REF3" "$REF4")"
125+ else
126+ echo "Not tagging as latest (new <= latest)"
127+ REFS="$(printf '%s\n%s' "$REF1" "$REF2")"
128+ fi
129+
130+ echo "Generating image references:\n$REFS"
131+
109132 echo "image_references<<EOF" >> $GITHUB_OUTPUT
110133 printf "%s\n" "$REFS" >> $GITHUB_OUTPUT
111134 echo "EOF" >> $GITHUB_OUTPUT
0 commit comments