Skip to content

Commit 7a4df08

Browse files
committed
Add a workflow that republishes Electric Docker image to Docker Hub
1 parent 9c2bcf9 commit 7a4df08

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed

.github/workflows/ensure_sync_service_image.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
if: ${{ !env.TAG }}
7272
run: |
7373
echo "TAG=$(
74-
git log -1 --format='%H' -- packages/electric-telemetry/ packages/sync-service/
74+
git log -1 --format='%h' -- packages/electric-telemetry/ packages/sync-service/
7575
)" >> $GITHUB_ENV
7676
7777
- name: Determine ELECTRIC_VERSION to pass as a build-arg to the builder
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Publish Electric to Docker Hub
2+
3+
on:
4+
release:
5+
- released
6+
push:
7+
branches: ['main']
8+
paths:
9+
- 'packages/electric-telemetry/**'
10+
- 'packages/sync-service/**'
11+
# TMP for testing
12+
pull_request:
13+
paths:
14+
- 'packages/electric-telemetry/**'
15+
- 'packages/sync-service/**'
16+
17+
permissions:
18+
contents: read
19+
packages: read
20+
21+
jobs:
22+
ensure_sync_service_image:
23+
uses: ./.github/workflows/ensure_sync_service_image.yml
24+
25+
build_and_publish_canary_image:
26+
if: ${{ github.event_name = 'push' }}
27+
needs: [ensure_sync_service_image]
28+
runs-on: ubuntu-latest
29+
steps:
30+
- uses: docker/setup-buildx-action@v3
31+
32+
# # Login to GHCR so we can read/pull the source image if it's private.
33+
# # For public GHCR images, this is optional but harmless.
34+
# - name: Log in to GHCR
35+
# uses: docker/login-action@v3
36+
# with:
37+
# registry: ghcr.io
38+
# username: ${{ github.actor }}
39+
# password: ${{ secrets.GITHUB_TOKEN }}
40+
41+
# Login to Docker Hub (create a token in Docker Hub, store as secret).
42+
- name: Log in to Docker Hub
43+
uses: docker/login-action@v3
44+
with:
45+
registry: docker.io
46+
username: ${{ secrets.DOCKERHUB_USERNAME }}
47+
password: ${{ secrets.DOCKERHUB_TOKEN }}
48+
49+
- export SHORT_COMMIT_SHA=$(git rev-parse --short HEAD)
50+
- docker buildx build --platform linux/arm64/v8,linux/amd64 --push
51+
--build-context electric-telemetry=../electric-telemetry
52+
--build-arg ELECTRIC_VERSION=$${ELECTRIC_VERSION}
53+
-t $${ELECTRIC_IMAGE_NAME}:canary
54+
-t $${ELECTRIC_CANARY_IMAGE_NAME}:$${SHORT_COMMIT_SHA}
55+
-t $${ELECTRIC_CANARY_IMAGE_NAME}:latest
56+
57+
- name: Publish to electricsql/electric:canary and electricsql/electric-canary
58+
run: |
59+
set -euo pipefail
60+
61+
# Source is referenced by digest (immutable)
62+
SRC_IMAGE="${{ needs.ensure_sync_service_image.outputs.image }}"
63+
SRC_DIGEST="${{ needs.ensure_sync_service_image.outputs.digest }}"
64+
SRC_REF="${SRC_IMAGE}@${SRC_DIGEST}"
65+
66+
TARGETS=(
67+
"docker.io/electricsql/electric:canary"
68+
"docker.io/electricsql/electric-canary:latest"
69+
"docker.io/electricsql/electric-canary:${{ needs.ensure_sync_service_image.outputs.tag }}"
70+
)
71+
72+
for t in "${TARGETS[@]}"; do
73+
echo docker buildx imagetools create --tag "$t" "$SRC_REF"
74+
done

0 commit comments

Comments
 (0)