1313 # GitHub Container Registry
1414 GHCR_REGISTRY : ghcr.io
1515 # github.repository as <account>/<repo>
16- GHCR_IMAGE_NAME : ${{ github.repository }}/kafka
17- # Docker Hub image name
16+ GHCR_KAFKA_IMAGE_NAME : ${{ github.repository }}/kafka
17+ GHCR_JMX_IMAGE_NAME : ${{ github.repository }}/jmx-javaagent
18+ # Docker Hub image name (only for Kafka)
1819 DOCKERHUB_IMAGE : adobe/kafka
1920
2021jobs :
3435 run : |
3536 echo "built_at=$(date --rfc-3339=date)" >> $GITHUB_OUTPUT
3637
37- build-kafka :
38+ build-and-push- kafka-image :
3839 runs-on : ubuntu-latest
3940 needs : prepare
4041 permissions :
@@ -47,40 +48,122 @@ jobs:
4748 uses : docker/setup-qemu-action@v3
4849 - name : Set up Docker Buildx
4950 uses : docker/setup-buildx-action@v3
51+ - name : Extract Kafka version from tag
52+ id : kafka_version
53+ run : |
54+ KAFKA_VERSION=$(echo "${{ needs.prepare.outputs.tag }}" | sed 's/kafka-//')
55+ echo "kafka_version=$KAFKA_VERSION" >> $GITHUB_OUTPUT
56+ - name : Check if Kafka image already exists
57+ id : image_exists
58+ run : |
59+ IMAGE_NAME="${{ env.GHCR_REGISTRY }}/${{ env.GHCR_KAFKA_IMAGE_NAME }}:${{ steps.kafka_version.outputs.kafka_version }}"
60+ echo "Checking if image exists: $IMAGE_NAME"
61+
62+ # Try to inspect the manifest using docker
63+ if docker manifest inspect "$IMAGE_NAME" > /dev/null 2>&1; then
64+ echo "exists=true" >> $GITHUB_OUTPUT
65+ echo "Image $IMAGE_NAME already exists, skipping build"
66+ else
67+ echo "exists=false" >> $GITHUB_OUTPUT
68+ echo "Image $IMAGE_NAME does not exist, will build"
69+ fi
5070 - name : Login to DockerHub Registry
51- if : startsWith(github.ref, 'refs/tags/')
71+ if : startsWith(github.ref, 'refs/tags/') && github.repository == 'adobe/koperator' && steps.image_exists.outputs.exists == 'false'
5272 uses : docker/login-action@v3
5373 with :
5474 username : ${{ secrets.DOCKER_USERNAME }}
5575 password : ${{ secrets.DOCKER_PASSWORD }}
5676 - name : Log into GitHub Container Registry ${{ env.GHCR_REGISTRY }}
57- if : startsWith(github.ref, 'refs/tags/')
77+ if : startsWith(github.ref, 'refs/tags/') && steps.image_exists.outputs.exists == 'false'
5878 uses : docker/login-action@v3
5979 with :
6080 registry : ${{ env.GHCR_REGISTRY }}
6181 username : ${{ github.actor }}
6282 password : ${{ secrets.GITHUB_TOKEN }}
6383 - name : Extract Docker metadata
84+ if : steps.image_exists.outputs.exists == 'false'
6485 id : meta
6586 uses : docker/metadata-action@v5
6687 with :
6788 images : |
68- ${{ env.DOCKERHUB_IMAGE }}
69- ${{ env.GHCR_REGISTRY }}/${{ env.GHCR_IMAGE_NAME }}
89+ ${{ github.repository == 'adobe/koperator' && env.DOCKERHUB_IMAGE || '' }}
90+ ${{ env.GHCR_REGISTRY }}/${{ env.GHCR_KAFKA_IMAGE_NAME }}
7091 tags : |
7192 type=match,pattern=kafka-(.*),group=1
7293 labels : |
7394 org.opencontainers.image.description=Apache Kafka with OpenJDK 21
7495 - name : Build and push kafka image
96+ if : startsWith(github.ref, 'refs/tags/') && steps.image_exists.outputs.exists == 'false'
7597 uses : docker/build-push-action@v6
7698 with :
7799 context : docker/kafka
78100 platforms : linux/amd64,linux/arm64
79- push : ${{ startsWith(github.ref, 'refs/tags/') }}
101+ push : true
80102 tags : ${{ steps.meta.outputs.tags }}
81103 labels : ${{ steps.meta.outputs.labels }}
82104 annotations : ${{ steps.meta.outputs.annotations }}
83105 build-args : |
84106 VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
85107 BUILT_AT=${{ needs.prepare.outputs.built_at }}
86108 COMMIT=${{ github.sha }}
109+
110+ build-and-push-jmx-agent-image :
111+ runs-on : ubuntu-latest
112+ needs : prepare
113+ permissions :
114+ contents : read
115+ packages : write
116+ steps :
117+ - name : Checkout code
118+ uses : actions/checkout@v5
119+ - name : Set up QEMU
120+ uses : docker/setup-qemu-action@v3
121+ - name : Set up Docker Buildx
122+ uses : docker/setup-buildx-action@v3
123+ - name : Extract JMX exporter version from Dockerfile
124+ id : jmx_exporter_version
125+ run : |
126+ JMX_VERSION=$(grep "ARG JMX_EXPORTER_VERSION=" docker/jmx_exporter/Dockerfile | cut -d'=' -f2 | cut -d' ' -f1)
127+ echo "jmx_version=$JMX_VERSION" >> $GITHUB_OUTPUT
128+ - name : Check if JMX exporter image already exists
129+ id : image_exists
130+ run : |
131+ IMAGE_NAME="${{ env.GHCR_REGISTRY }}/${{ env.GHCR_JMX_IMAGE_NAME }}:${{ steps.jmx_exporter_version.outputs.jmx_version }}"
132+ echo "Checking if image exists: $IMAGE_NAME"
133+
134+ # Try to inspect the manifest using docker
135+ if docker manifest inspect "$IMAGE_NAME" > /dev/null 2>&1; then
136+ echo "exists=true" >> $GITHUB_OUTPUT
137+ echo "Image $IMAGE_NAME already exists, skipping build"
138+ else
139+ echo "exists=false" >> $GITHUB_OUTPUT
140+ echo "Image $IMAGE_NAME does not exist, will build"
141+ fi
142+ - name : Log into GitHub Container Registry ${{ env.GHCR_REGISTRY }}
143+ if : startsWith(github.ref, 'refs/tags/') && steps.image_exists.outputs.exists == 'false'
144+ uses : docker/login-action@v3
145+ with :
146+ registry : ${{ env.GHCR_REGISTRY }}
147+ username : ${{ github.actor }}
148+ password : ${{ secrets.GITHUB_TOKEN }}
149+ - name : Extract Docker metadata for JMX exporter
150+ if : steps.image_exists.outputs.exists == 'false'
151+ id : meta
152+ uses : docker/metadata-action@v5
153+ with :
154+ images : |
155+ ${{ env.GHCR_REGISTRY }}/${{ env.GHCR_JMX_IMAGE_NAME }}
156+ tags : |
157+ type=raw,value=${{ steps.jmx_exporter_version.outputs.jmx_version }}
158+ labels : |
159+ org.opencontainers.image.description=Prometheus JMX Exporter for Kafka monitoring
160+ - name : Build and push JMX exporter image
161+ if : startsWith(github.ref, 'refs/tags/') && steps.image_exists.outputs.exists == 'false'
162+ uses : docker/build-push-action@v6
163+ with :
164+ context : docker/jmx_exporter
165+ platforms : linux/amd64,linux/arm64
166+ push : true
167+ tags : ${{ steps.meta.outputs.tags }}
168+ labels : ${{ steps.meta.outputs.labels }}
169+ annotations : ${{ steps.meta.outputs.annotations }}
0 commit comments