1- name : Docker Build
1+ name : Build release images
22
33on :
44 schedule :
1010env :
1111 REGISTRY : ghcr.io
1212 PIPELINE_MANAGER_IMAGE : ghcr.io/${{ github.repository_owner }}/pipeline-manager
13- KAFKA_CONNECT_IMAGE : ghcr.io/${{ github.repository_owner }}/kafka-connect
1413
1514jobs :
1615 build-and-push-image :
17- runs-on : [self-hosted, skylake40]
16+ runs-on : ${{ matrix.runner }}
17+ strategy :
18+ matrix :
19+ include :
20+ - runner : [self-hosted, skylake40]
21+ os : linux
22+ arch : amd64
23+ - runner : blacksmith-8vcpu-ubuntu-2204-arm
24+ os : linux
25+ arch : arm64
1826 permissions :
1927 contents : read
2028 packages : write
2129
2230 steps :
2331 - name : Checkout repository
24- uses : actions/checkout@v3
32+ uses : actions/checkout@v4
2533 with :
2634 submodules : true
2735
2836 - name : Docker meta (pipeline-manager)
2937 id : meta_pipeline_manager
30- uses : docker/metadata-action@v4
38+ uses : docker/metadata-action@v5
3139 with :
3240 images : ${{ env.PIPELINE_MANAGER_IMAGE }}
3341 tags : |
3442 type=semver,pattern={{version}}
35-
36- - name : Docker meta (kafka-connect)
37- id : meta_kafka_connect
38- uses : docker/metadata-action@v4
39- with :
40- images : ${{ env.KAFKA_CONNECT_IMAGE }}
41- tags : |
42- type=semver,pattern={{version}}
43-
44- - name : Build Kafka Connect container
45- run : |
46- cd deploy && \
47- docker build -f Dockerfile.kafka-connect --target kafka-connect -t ${{ env.KAFKA_CONNECT_IMAGE }} .
43+ type=raw,value=latest
44+ # Single image description
45+ labels : |
46+ org.opencontainers.image.description=The Pipeline Manager lets you create and run pipelines inside Feldera instance
47+ # Multiarch manifest description
48+ annotations : |
49+ org.opencontainers.image.description=The Pipeline Manager lets you create and run pipelines inside Feldera instance
4850
4951 - name : Run standard demo that checks a couple endpoints are reachable
5052 run : |
@@ -56,31 +58,71 @@ jobs:
5658 --exit-code-from demo-standard --renew-anon-volumes
5759
5860 - name : Log in to the Container registry
59- uses : docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
61+ uses : docker/login-action@v3
6062 with :
6163 registry : ${{ env.REGISTRY }}
6264 username : ${{ github.actor }}
6365 password : ${{ secrets.GITHUB_TOKEN }}
6466
65- # Push untagged images when the workflow is not triggered by a release
66- - name : Push containers
67- if : github.event_name != 'release'
68- run : docker push ${{ env.PIPELINE_MANAGER_IMAGE }} && docker push ${{ env.KAFKA_CONNECT_IMAGE }}
69-
70- # Tagged pipeline-manager image
71- - name : Push (pipeline-manager)
72- uses : docker/build-push-action@v4
73- if : github.event_name == 'release'
67+ - name : Build and push pipeline-manager image
68+ id : build_pipeline_manager
69+ uses : docker/build-push-action@v6
7470 with :
7571 context : .
72+ platforms : ${{matrix.os}}/${{matrix.arch}}
7673 file : deploy/Dockerfile
7774 push : true
7875 tags : ${{ steps.meta_pipeline_manager.outputs.tags }}
7976 labels : ${{ steps.meta_pipeline_manager.outputs.labels }}
77+ annotations : ${{ steps.meta_pipeline_manager.outputs.annotations }}
78+
79+ - name : Export multiarch image digest
80+ id : export_image_digest
81+ run : |
82+ echo "digest-pipeline-manager-${{matrix.os}}-${{matrix.arch}}=${{ steps.build_pipeline_manager.outputs.digest }}" >> $GITHUB_OUTPUT
8083
81- - uses : actions/delete-package-versions@v4
84+ # - uses: actions/delete-package-versions@v4
85+ # with:
86+ # package-name: pipeline-manager
87+ # package-type: 'container'
88+ # min-versions-to-keep: 5
89+ # delete-only-untagged-versions: 'true'
90+
91+ outputs :
92+ digest-pipeline-manager-linux-amd64 : ${{ steps.export_image_digest.outputs.digest-pipeline-manager-linux-amd64 }}
93+ digest-pipeline-manager-linux-arm64 : ${{ steps.export_image_digest.outputs.digest-pipeline-manager-linux-arm64 }}
94+
95+ push-docker-manifest :
96+ needs : build-and-push-image
97+ runs-on : blacksmith-2vcpu-ubuntu-2204-arm
98+ permissions :
99+ contents : read
100+ packages : write
101+ steps :
102+ - name : Docker meta
103+ id : meta_pipeline_manager
104+ uses : docker/metadata-action@v5
105+ with :
106+ images : |
107+ ${{ env.PIPELINE_MANAGER_IMAGE }}
108+ tags : |
109+ type=semver,pattern={{version}}
110+ - name : Log in to Docker Hub
111+ uses : docker/login-action@v3
82112 with :
83- package-name : pipeline-manager
84- package-type : ' container'
85- min-versions-to-keep : 5
86- delete-only-untagged-versions : ' true'
113+ registry : ${{ env.REGISTRY }}
114+ username : ${{ github.actor }}
115+ password : ${{ secrets.GITHUB_TOKEN }}
116+ - name : Push latest manifest
117+ run : |
118+ docker manifest create ${{ env.PIPELINE_MANAGER_IMAGE }} \
119+ ${{ env.PIPELINE_MANAGER_IMAGE }}@${{needs.build-and-push-image.outputs.digest-pipeline-manager-linux-amd64}} \
120+ ${{ env.PIPELINE_MANAGER_IMAGE }}@${{needs.build-and-push-image.outputs.digest-pipeline-manager-linux-arm64}}
121+ docker manifest push ${{ env.PIPELINE_MANAGER_IMAGE }}:latest
122+ - name : Push versioned manifest
123+ if : github.event_name == 'release'
124+ run : |
125+ docker manifest create ${{ env.PIPELINE_MANAGER_IMAGE }} \
126+ ${{ env.PIPELINE_MANAGER_IMAGE }}@${{needs.build-and-push-image.outputs.digest-pipeline-manager-linux-amd64}} \
127+ ${{ env.PIPELINE_MANAGER_IMAGE }}@${{needs.build-and-push-image.outputs.digest-pipeline-manager-linux-arm64}}
128+ docker manifest push ${{ env.PIPELINE_MANAGER_IMAGE }}:${{ github.event.release.tag_name }}
0 commit comments