12
12
docker_file :
13
13
required : true
14
14
type : string
15
+ platforms :
16
+ required : false
17
+ type : string
18
+ default : " linux/amd64,linux/arm64"
15
19
secrets :
16
20
dockerhub_username :
17
21
required : true
@@ -73,10 +77,23 @@ jobs:
73
77
echo "latest_tag=${{ inputs.docker_org }}/${{ inputs.docker_image }}:latest" >> $GITHUB_OUTPUT
74
78
fi
75
79
76
- # Only build when we will publish, so either a main merge with next-version or a release
77
- - name : Build Docker image
78
- if : github.event_name == 'push' && steps.version_check.outputs.is_next_version == 'true' || github.event_name == 'release'
79
- run : docker build -t ${{ steps.get_tags.outputs.version_tag }} -f ${{ inputs.docker_file }} .
80
+ # Set up QEMU for multi-architecture builds
81
+ - name : Set up QEMU
82
+ uses : docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0
83
+
84
+ # Set up Docker Buildx for multi-architecture builds
85
+ - name : Set up Docker Buildx
86
+ uses : docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1
87
+ with :
88
+ install : true
89
+ driver : docker-container
90
+ driver-opts : |
91
+ image=moby/buildkit:latest
92
+ network=host
93
+
94
+ # List available platforms
95
+ - name : List docker buildx available platforms
96
+ run : docker buildx inspect --bootstrap
80
97
81
98
# Only log in to dockerhub when we will publish, so either a main merge with next-version or a release
82
99
- name : Login to DockerHub
@@ -86,20 +103,41 @@ jobs:
86
103
username : ${{ secrets.dockerhub_username }}
87
104
password : ${{ secrets.dockerhub_token }}
88
105
89
- # Push for main merges with next version
90
- - name : Push Docker tags (for push events with next version )
106
+ # Build (and push) for main merges with next version
107
+ - name : Build and push Docker image ( push event )
91
108
if : github.event_name == 'push' && steps.version_check.outputs.is_next_version == 'true'
92
- run : |
93
- docker push ${{ steps.get_tags.outputs.version_tag }}
94
- docker tag ${{ steps.get_tags.outputs.version_tag }} ${{ steps.get_tags.outputs.sha_tag }}
95
- docker push ${{ steps.get_tags.outputs.sha_tag }}
109
+ uses : docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
110
+ with :
111
+ context : .
112
+ file : ${{ inputs.docker_file }}
113
+ push : true
114
+ tags : |
115
+ ${{ steps.get_tags.outputs.version_tag }}
116
+ ${{ steps.get_tags.outputs.sha_tag }}
117
+ platforms : ${{ inputs.platforms }}
96
118
97
- # Push for releases
98
- - name : Push Docker tags (for release events )
119
+ # Build (and push) for releases
120
+ - name : Build and push Docker image ( release event )
99
121
if : github.event_name == 'release'
100
- run : |
101
- docker push ${{ steps.get_tags.outputs.version_tag }}
102
- docker tag ${{ steps.get_tags.outputs.version_tag }} ${{ steps.get_tags.outputs.latest_tag }}
103
- docker push ${{ steps.get_tags.outputs.latest_tag }}
104
- docker tag ${{ steps.get_tags.outputs.version_tag }} ${{ steps.get_tags.outputs.next_tag }}
105
- docker push ${{ steps.get_tags.outputs.next_tag }}
122
+ uses : docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
123
+ with :
124
+ context : .
125
+ file : ${{ inputs.docker_file }}
126
+ push : true
127
+ tags : |
128
+ ${{ steps.get_tags.outputs.version_tag }}
129
+ ${{ steps.get_tags.outputs.latest_tag }}
130
+ ${{ steps.get_tags.outputs.next_tag }}
131
+ platforms : ${{ inputs.platforms }}
132
+
133
+ # Build for verification
134
+ - name : Build Docker image (verification)
135
+ if : github.event_name == 'push' && steps.version_check.outputs.is_next_version == 'false'
136
+ uses : docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
137
+ with :
138
+ context : .
139
+ file : ${{ inputs.docker_file }}
140
+ push : false
141
+ tags : |
142
+ ${{ steps.get_tags.outputs.version_tag }}
143
+ platforms : linux/amd64 # only verify for fastest platform
0 commit comments