Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/continuous-delivery-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ jobs:
echo "Release tag: ${{ github.event.release.tag_name }}"
echo "tag=ui-${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT"
echo "tag_dynamic=ui-dynamic-${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT"
echo "tag_stable=stable" >> "$GITHUB_OUTPUT"
else
echo "Not a PR branch"
echo "tag=ui" >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -212,6 +213,7 @@ jobs:
elif [ -n "${{ github.event.release.tag_name }}" ]; then
echo "Release tag: ${{ github.event.release.tag_name }}"
echo "tag=${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT"
echo "tag_stable=stable" >> "$GITHUB_OUTPUT"
else
echo "Not a PR branch"
echo "tag=latest" >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -260,6 +262,8 @@ jobs:
tags: |
ghcr.io/dan-online/autopulse:${{ steps.tag.outputs.tag }}${{ matrix.platform.tag }}
danonline/autopulse:${{ steps.tag.outputs.tag }}${{ matrix.platform.tag }}
${{ steps.tag.outputs.tag_stable && format('ghcr.io/dan-online/autopulse:{0}{1}', steps.tag.outputs.tag_stable, matrix.platform.tag) || '' }}
${{ steps.tag.outputs.tag_stable && format('danonline/autopulse:{0}{1}', steps.tag.outputs.tag_stable, matrix.platform.tag) || '' }}
labels: ${{ steps.meta.outputs.labels }}
Comment on lines +266 to 267
Copy link

Copilot AI Sep 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Empty strings in the tags list may cause issues with Docker buildx. Consider using a conditional block structure instead of inline conditionals that can produce empty strings.

Copilot uses AI. Check for mistakes.
platforms: ${{ matrix.platform.name }}
build-args: ${{ matrix.platform.build_args }}
Expand All @@ -274,6 +278,8 @@ jobs:
tags: |
ghcr.io/dan-online/autopulse:${{ steps.tag.outputs.tag }}-${{ matrix.feature }}${{ matrix.platform.tag }}
danonline/autopulse:${{ steps.tag.outputs.tag }}-${{ matrix.feature }}${{ matrix.platform.tag }}
${{ steps.tag.outputs.tag_stable && format('ghcr.io/dan-online/autopulse:{0}-{1}{2}', steps.tag.outputs.tag_stable, matrix.feature, matrix.platform.tag) || '' }}
${{ steps.tag.outputs.tag_stable && format('danonline/autopulse:{0}-{1}{2}', steps.tag.outputs.tag_stable, matrix.feature, matrix.platform.tag) || '' }}
labels: ${{ steps.meta.outputs.labels }}
Comment on lines +282 to 283
Copy link

Copilot AI Sep 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to the previous issue, empty strings in the tags list may cause problems. Consider restructuring to avoid potential empty tag entries.

Copilot uses AI. Check for mistakes.
platforms: ${{ matrix.platform.name }}
build-args: ${{ matrix.platform.build_args }}
Expand All @@ -295,6 +301,7 @@ jobs:
elif [ -n "${{ github.event.release.tag_name }}" ]; then
echo "Release tag: ${{ github.event.release.tag_name }}"
echo "tag=${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT"
echo "tag_stable=stable" >> "$GITHUB_OUTPUT"
else
echo "Not a PR branch"
echo "tag=latest" >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -323,6 +330,7 @@ jobs:
GHCR_BASE="ghcr.io/dan-online/autopulse"
DOCKERHUB_BASE="danonline/autopulse"
TAG="${{ steps.tag.outputs.tag }}"
TAG_STABLE="${{ steps.tag.outputs.tag_stable }}"

# First, create and push all manifests to GHCR
# Get digests from GHCR only
Expand Down Expand Up @@ -369,6 +377,35 @@ jobs:
--tag danonline/autopulse:${TAG}-sqlite \
ghcr.io/dan-online/autopulse:${TAG}-sqlite

if [ -n "$TAG_STABLE" ]; then
echo "Creating stable manifests..."
docker manifest create ${GHCR_BASE}:${TAG_STABLE} \
--amend ${GHCR_BASE}@${AMD64_DIGEST} \
--amend ${GHCR_BASE}@${ARM64_DIGEST}
docker manifest create ${GHCR_BASE}:${TAG_STABLE}-postgres \
--amend ${GHCR_BASE}@${POSTGRES_AMD64_DIGEST} \
--amend ${GHCR_BASE}@${POSTGRES_ARM64_DIGEST}
docker manifest create ${GHCR_BASE}:${TAG_STABLE}-sqlite \
--amend ${GHCR_BASE}@${SQLITE_AMD64_DIGEST} \
--amend ${GHCR_BASE}@${SQLITE_ARM64_DIGEST}

docker manifest push ${GHCR_BASE}:${TAG_STABLE}-postgres
docker manifest push ${GHCR_BASE}:${TAG_STABLE}-sqlite
docker manifest push ${GHCR_BASE}:${TAG_STABLE}

docker buildx imagetools create \
--tag danonline/autopulse:${TAG_STABLE} \
ghcr.io/dan-online/autopulse:${TAG_STABLE}

docker buildx imagetools create \
--tag danonline/autopulse:${TAG_STABLE}-postgres \
ghcr.io/dan-online/autopulse:${TAG_STABLE}-postgres

docker buildx imagetools create \
--tag danonline/autopulse:${TAG_STABLE}-sqlite \
ghcr.io/dan-online/autopulse:${TAG_STABLE}-sqlite
fi

echo "Copy images over to Docker Hub..."
# docker pull ${GHCR_BASE}:${TAG} -q
# docker pull ${GHCR_BASE}:${TAG}-postgres -q
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ The easiest way to get started with autopulse is to use the provided docker imag
- `latest` - full image with support for postgres/sqlite
- `latest-postgres` - smaller image that only supports Postgres
- `latest-sqlite` - smaller image that only supports SQLite
- `stable` - latest versioned release

- `ui` - self-hostable UI for autopulse

> All images are multi-arch and support `linux/amd64`, `linux/arm64`, however -amd64 and -arm64 suffixes can be used to specify the architecture
Expand Down
Loading