mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
build(docker): OCI labels on the images, so Renovate links an update to its release notes
The image carries org.opencontainers.image.source, url, documentation, licenses, title, description and version; the release and pre-release workflows add the commit and the build time, and the multi-arch index gets source, version and licenses as annotations. (#1498)
This commit is contained in:
@@ -92,6 +92,12 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Image metadata
|
||||||
|
id: meta
|
||||||
|
run: |
|
||||||
|
echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Build and push by digest
|
- name: Build and push by digest
|
||||||
id: build
|
id: build
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
@@ -102,6 +108,9 @@ jobs:
|
|||||||
no-cache: true
|
no-cache: true
|
||||||
build-args: |
|
build-args: |
|
||||||
APP_VERSION=${{ needs.version-bump.outputs.version }}
|
APP_VERSION=${{ needs.version-bump.outputs.version }}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.revision=${{ steps.meta.outputs.revision }}
|
||||||
|
org.opencontainers.image.created=${{ steps.meta.outputs.created }}
|
||||||
|
|
||||||
- name: Export digest
|
- name: Export digest
|
||||||
run: |
|
run: |
|
||||||
@@ -163,7 +172,12 @@ jobs:
|
|||||||
digests+=("mauriceboe/trek@sha256:$(basename "$f")")
|
digests+=("mauriceboe/trek@sha256:$(basename "$f")")
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
# The labels live on each platform image; the index gets the ones a
|
||||||
|
# client reads before it picks a platform (#1498).
|
||||||
docker buildx imagetools create \
|
docker buildx imagetools create \
|
||||||
|
--annotation "index:org.opencontainers.image.source=https://github.com/liketrek/TREK" \
|
||||||
|
--annotation "index:org.opencontainers.image.version=$VERSION" \
|
||||||
|
--annotation "index:org.opencontainers.image.licenses=AGPL-3.0-only" \
|
||||||
-t "mauriceboe/trek:latest-pre" \
|
-t "mauriceboe/trek:latest-pre" \
|
||||||
-t "mauriceboe/trek:$MAJOR_TAG" \
|
-t "mauriceboe/trek:$MAJOR_TAG" \
|
||||||
-t "mauriceboe/trek:$VERSION" \
|
-t "mauriceboe/trek:$VERSION" \
|
||||||
|
|||||||
@@ -138,6 +138,12 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Image metadata
|
||||||
|
id: meta
|
||||||
|
run: |
|
||||||
|
echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Build and push by digest
|
- name: Build and push by digest
|
||||||
id: build
|
id: build
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
@@ -148,6 +154,9 @@ jobs:
|
|||||||
no-cache: true
|
no-cache: true
|
||||||
build-args: |
|
build-args: |
|
||||||
APP_VERSION=${{ needs.version-bump.outputs.version }}
|
APP_VERSION=${{ needs.version-bump.outputs.version }}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.revision=${{ steps.meta.outputs.revision }}
|
||||||
|
org.opencontainers.image.created=${{ steps.meta.outputs.created }}
|
||||||
|
|
||||||
- name: Export digest
|
- name: Export digest
|
||||||
run: |
|
run: |
|
||||||
@@ -207,7 +216,12 @@ jobs:
|
|||||||
digests+=("mauriceboe/trek@sha256:$(basename "$f")")
|
digests+=("mauriceboe/trek@sha256:$(basename "$f")")
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
# The labels live on each platform image; the index gets the ones a
|
||||||
|
# client reads before it picks a platform (#1498).
|
||||||
docker buildx imagetools create \
|
docker buildx imagetools create \
|
||||||
|
--annotation "index:org.opencontainers.image.source=https://github.com/liketrek/TREK" \
|
||||||
|
--annotation "index:org.opencontainers.image.version=$VERSION" \
|
||||||
|
--annotation "index:org.opencontainers.image.licenses=AGPL-3.0-only" \
|
||||||
-t "mauriceboe/trek:latest" \
|
-t "mauriceboe/trek:latest" \
|
||||||
-t "mauriceboe/trek:$MAJOR_TAG" \
|
-t "mauriceboe/trek:$MAJOR_TAG" \
|
||||||
-t "mauriceboe/trek:$VERSION" \
|
-t "mauriceboe/trek:$VERSION" \
|
||||||
|
|||||||
+11
@@ -123,6 +123,17 @@ ENV PORT=3000
|
|||||||
ARG APP_VERSION=dev
|
ARG APP_VERSION=dev
|
||||||
ENV APP_VERSION=${APP_VERSION}
|
ENV APP_VERSION=${APP_VERSION}
|
||||||
|
|
||||||
|
# OCI metadata: Renovate, Watchtower and the registries read the source label to
|
||||||
|
# link an image update to its release notes (#1498). The release workflows add
|
||||||
|
# the commit and the build time; a local build carries everything else.
|
||||||
|
LABEL org.opencontainers.image.title="TREK" \
|
||||||
|
org.opencontainers.image.description="Self-hosted collaborative travel planner" \
|
||||||
|
org.opencontainers.image.url="https://github.com/liketrek/TREK" \
|
||||||
|
org.opencontainers.image.source="https://github.com/liketrek/TREK" \
|
||||||
|
org.opencontainers.image.documentation="https://github.com/liketrek/TREK/wiki" \
|
||||||
|
org.opencontainers.image.licenses="AGPL-3.0-only" \
|
||||||
|
org.opencontainers.image.version="${APP_VERSION}"
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
||||||
|
|||||||
Reference in New Issue
Block a user