|
98 | 98 | RELAY_REF_INPUT: ${{ steps.relay.outputs.ref }} |
99 | 99 | EVENT_NAME: ${{ github.event_name }} |
100 | 100 | REF_NAME: ${{ github.ref_name }} |
| 101 | + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
101 | 102 | run: | |
102 | 103 | IMAGE="${REGISTRY}/${IMAGE_NAME}" |
103 | 104 | RELAY_REF="${RELAY_REF_INPUT}" |
@@ -127,11 +128,24 @@ jobs: |
127 | 128 | BRANCH_TAG=$(echo "${RELAY_REF}" | sed 's|/|-|g') |
128 | 129 | TAGS="${TAGS}"$'\n'"${IMAGE}:${BRANCH_TAG}" |
129 | 130 | if [[ "${RELAY_REF}" =~ ^v?([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then |
130 | | - VERSION="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${BASH_REMATCH[3]}" |
131 | | - MINOR="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}" |
132 | | - TAGS="${TAGS}"$'\n'"${IMAGE}:${VERSION}" |
133 | | - TAGS="${TAGS}"$'\n'"${IMAGE}:${MINOR}" |
134 | | - TAGS="${TAGS}"$'\n'"${IMAGE}:latest" |
| 131 | + MAJOR="${BASH_REMATCH[1]}" |
| 132 | + MINOR="${BASH_REMATCH[2]}" |
| 133 | + PATCH="${BASH_REMATCH[3]}" |
| 134 | + VERSION="${MAJOR}.${MINOR}.${PATCH}" |
| 135 | + TAGS="${TAGS}"$'\n'"${IMAGE}:${VERSION}"$'\n'"${IMAGE}:${MAJOR}.${MINOR}" |
| 136 | + # `latest` only if this is the highest semver published so far, |
| 137 | + # so a back-ported patch on an old minor line cannot clobber it. |
| 138 | + HIGHEST=$(gh api \ |
| 139 | + "orgs/chatmail/packages/container/docker/versions?per_page=100" \ |
| 140 | + --jq '[.[].metadata.container.tags[] |
| 141 | + | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$"))] |
| 142 | + | sort_by(split(".") | map(tonumber)) | last // empty' \ |
| 143 | + 2>/dev/null) || true |
| 144 | + if [ -z "$HIGHEST" ] || \ |
| 145 | + [ "$(printf '%s\n%s\n' "$HIGHEST" "$VERSION" \ |
| 146 | + | sort -V | tail -1)" = "$VERSION" ]; then |
| 147 | + TAGS="${TAGS}"$'\n'"${IMAGE}:latest" |
| 148 | + fi |
135 | 149 | fi |
136 | 150 | fi |
137 | 151 | echo "tags<<EOF" >> "$GITHUB_OUTPUT" |
|
0 commit comments