1
+ name : Docker Release-v2
2
+
3
+ on :
4
+ workflow_dispatch :
5
+ inputs :
6
+ TAG_NAME :
7
+ description : ' Tag name that the major tag will point to'
8
+ required : true
9
+ PRERELEASE :
10
+ description : ' Whether this is a prerelease'
11
+ type : boolean
12
+ required : true
13
+
14
+ release :
15
+ types : [published]
16
+ pull_request :
17
+ branches : [main]
18
+
19
+ concurrency :
20
+ group : ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
21
+ cancel-in-progress : true
22
+
23
+ env :
24
+ # TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }}
25
+ TAG_NAME : v1.27.1
26
+ IS_PRERELEASE : ${{ github.event.release.prerelease || github.event.inputs.PRERELEASE }}
27
+ IMAGE : ghcr.io/dragonflydb/dragonfly
28
+
29
+ jobs :
30
+ build_and_tag :
31
+ name : Build and Push ${{matrix.flavor}} ${{ matrix.os.arch }} image
32
+ strategy :
33
+ matrix :
34
+ flavor : [ubuntu]
35
+ os :
36
+ - image : ubuntu-24.04
37
+ arch : amd64
38
+ - image : ubuntu-24.04-arm
39
+ arch : arm64
40
+
41
+ runs-on : ${{ matrix.os.image }}
42
+ permissions :
43
+ contents : read
44
+ packages : write
45
+ id-token : write
46
+
47
+ steps :
48
+ - name : checkout
49
+ uses : actions/checkout@v4
50
+ with :
51
+ fetch-depth : 0
52
+ submodules : true
53
+ - name : Set up Docker Buildx
54
+ uses : docker/setup-buildx-action@v3
55
+ - name : Login to GitHub Container Registry
56
+ uses : docker/login-action@v3
57
+ with :
58
+ registry : ghcr.io
59
+ username : ${{ github.repository_owner }}
60
+ password : ${{ secrets.GITHUB_TOKEN }}
61
+
62
+ - name : Fetch release asset
63
+
64
+ with :
65
+ version : " tags/${{ env.TAG_NAME }}"
66
+ regex : true
67
+ file : " dragonfly-.*\\ .tar\\ .gz"
68
+ target : ' releases/'
69
+ token : ${{ secrets.GITHUB_TOKEN }}
70
+
71
+ - name : Extract artifacts
72
+ run : |
73
+ echo "Event prerelease ${{ github.event.release.prerelease }}"
74
+ echo "Input prerelease ${{ github.event.inputs.PRERELEASE }}"
75
+ ls -l
76
+ ls -l releases
77
+ for f in releases/*.tar.gz; do tar xvfz $f -C releases; done
78
+ rm releases/*.tar.gz
79
+
80
+ - name : Docker meta
81
+ id : metadata
82
+ uses : docker/metadata-action@v5
83
+ with :
84
+ images : |
85
+ ${{ env.IMAGE }}
86
+ flavor : |
87
+ latest=false
88
+ prefix=${{ matrix.flavor}}-
89
+ suffix=-${{ matrix.os.arch }}
90
+ tags : |
91
+ type=semver,pattern={{version}},enable=true,value=${{ env.TAG_NAME }}
92
+ type=semver,pattern={{raw}},enable=true,value=${{ env.TAG_NAME }}
93
+ type=ref,event=pr
94
+ labels : |
95
+ org.opencontainers.image.vendor=DragonflyDB LTD
96
+ org.opencontainers.image.title=Dragonfly Production Image
97
+ org.opencontainers.image.description=The fastest in-memory store
98
+
99
+ - name : Build image
100
+ id : build
101
+ uses : docker/build-push-action@v6
102
+ with :
103
+ context : .
104
+ push : true
105
+ provenance : false # Prevent pushing a docker manifest
106
+ tags : |
107
+ ${{ steps.metadata.outputs.tags }}
108
+ labels : ${{ steps.metadata.outputs.labels }}
109
+ file : tools/packaging/Dockerfile.${{ matrix.flavor }}-prod
110
+ cache-from : type=gha,scope=prod-${{ matrix.flavor }}
111
+ cache-to : type=gha,scope=prod-${{ matrix.flavor }},mode=max
112
+ load : true # Load the build images into the local docker.
113
+
114
+ - name : Test Image
115
+ uses : ./.github/actions/test-docker
116
+ timeout-minutes : 1
117
+ with :
118
+ image_id : ${{ env.IMAGE }}@${{ steps.build.outputs.digest }}
119
+ name : ${{ matrix.flavor }}-${{ matrix.os.arch }}
120
+
121
+ - id : output-sha
122
+ run : |
123
+ echo "sha_${{ matrix.os.arch }}=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT
124
+ outputs :
125
+ sha_amd : ${{ steps.output-sha.outputs.sha_amd64 }}
126
+ sha_arm : ${{ steps.output-sha.outputs.sha_arm64 }}
127
+
128
+ merge_manifest :
129
+ needs : [build_and_tag]
130
+ runs-on : ubuntu-latest
131
+ strategy :
132
+ matrix :
133
+ flavor : [ubuntu]
134
+ steps :
135
+ - name : Login to GitHub Container Registry
136
+ uses : docker/login-action@v3
137
+ with :
138
+ registry : ghcr.io
139
+ username : ${{ github.repository_owner }}
140
+ password : ${{ secrets.GITHUB_TOKEN }}
141
+
142
+ - name : Merge and Push
143
+ run : |
144
+ sha_amd=${{ env.IMAGE }}@${{ needs.build_and_tag.outputs.sha_amd }}
145
+ sha_arm=${{ env.IMAGE }}@${{ needs.build_and_tag.outputs.sha_arm }}
146
+ echo "shas: $sha_amd $sha_arm"
147
+
148
+ if [[ "${{ env.IS_PRERELEASE }}" == 'true' ]]; then
149
+ # Create and push the manifest like dragonfly:alpha-ubuntu
150
+ tag="${{ env.IMAGE }}:alpha-${{ matrix.flavor }}"
151
+ docker manifest create ${tag} --amend ${sha_amd} --amend ${sha_arm}
152
+ docker manifest push ${tag}
153
+ elif [[ "${{matrix.flavor}}" == 'ubuntu' ]]; then
154
+ tag="${{ env.IMAGE }}:latest"
155
+ # Create and push the manifest like dragonfly:latest
156
+ docker manifest create ${tag} --amend ${sha_amd} --amend ${sha_arm}
157
+ docker manifest push ${tag}
158
+ fi
159
+
160
+ # Create and push the manifest like dragonfly:v1.26.4
161
+ tag=${{ env.IMAGE }}:${{ env.TAG_NAME }}
162
+ docker manifest create ${tag} --amend ${sha_amd} --amend ${sha_arm}
163
+ docker manifest push ${tag}
0 commit comments