1
1
name : Docker
2
2
3
3
on :
4
- schedule :
5
- - cron : " 0 17 * * 6"
4
+ # Disable schedule for preliminary testing
5
+ # schedule:
6
+ # - cron: "0 17 * * 6"
6
7
push :
7
8
branches :
8
9
- humble
18
19
PUSH : ${{ (github.event_name != 'pull_request') && (github.repository == 'Robotic-Decision-Making-Lab/blue') }}
19
20
20
21
jobs :
21
- ci :
22
+ docker_build :
22
23
strategy :
23
24
fail-fast : false
24
25
matrix :
@@ -28,163 +29,106 @@ jobs:
28
29
packages : write
29
30
contents : read
30
31
steps :
31
- - name : Checkout repository
32
+ - name : Checkout
32
33
uses : actions/checkout@v4
33
34
34
- - name : Log into registry
35
- if : env.PUSH == 'true'
36
-
37
- with :
38
- registry : ghcr.io
39
- username : ${{ github.actor }}
40
- password : ${{ secrets.GITHUB_TOKEN }}
41
-
42
- - name : Extract Docker metadata
43
- if : env.PUSH == 'true'
44
- id : meta
45
-
46
- with :
47
- images : ghcr.io/${{ github.repository }}
48
- tags : |
49
- type=raw,value=${{ matrix.ROS_DISTRO }}-${{ github.job }}
50
-
51
- - name : Build and push Docker image
52
-
53
- with :
54
- context : .
55
- file : .docker/Dockerfile
56
- build-args : ROS_DISTRO=${{ matrix.ROS_DISTRO }}
57
- target : ${{ github.job }}
58
- tags : ${{ steps.meta.outputs.tags }}
59
- labels : ${{ steps.meta.outputs.labels }}
60
- push : ${{ env.PUSH }}
61
-
62
- robot :
63
- strategy :
64
- fail-fast : false
65
- matrix :
66
- ROS_DISTRO : [humble]
67
- runs-on : ubuntu-latest
68
- permissions :
69
- packages : write
70
- contents : read
71
- steps :
72
- - name : Checkout repository
73
- uses : actions/checkout@v4
74
-
75
- - name : Set up QEMU
76
-
35
+ - # Add support for more platforms with QEMU (optional)
36
+ # https://github.com/docker/setup-qemu-action
37
+ name : Set up QEMU
38
+ uses : docker/setup-qemu-action@v3
77
39
78
40
- name : Set up Docker Buildx
79
41
uses : docker/setup-buildx-action@v3
80
42
81
- - name : Log into registry
82
- if : env.PUSH == 'true'
43
+ - if : env.PUSH == 'true'
44
+ name : Log into registry
83
45
84
46
with :
85
47
registry : ghcr.io
86
48
username : ${{ github.actor }}
87
49
password : ${{ secrets.GITHUB_TOKEN }}
88
50
89
- - name : Extract Docker metadata
51
+ # buildx bake, unfortunately, requires lower-cased repository names
52
+ # This shell ... er, hack, creates a local variable containing
53
+ # a down-cased version of $GITHUB_REPOSITORY
54
+ #
55
+ - id : lowercase-repo
56
+ name : Repository to lowercase
57
+ run : |
58
+ echo "repository=${GITHUB_REPOSITORY@L}" >> $GITHUB_OUTPUT
59
+
60
+ # Set metadata for each stage-image separately
61
+ - name : Set Docker metadata for "ci"
90
62
if : env.PUSH == 'true'
91
- id : meta
63
+ id : meta-ci
92
64
93
65
with :
94
66
images : ghcr.io/${{ github.repository }}
67
+ bake-target : docker-metadata-action-ci
95
68
tags : |
96
- type=raw,value=${{ matrix.ROS_DISTRO }}-${{ github.job }}
97
-
98
- - name : Build and push Docker image
99
-
100
- with :
101
- context : .
102
- file : .docker/Dockerfile
103
- build-args : ROS_DISTRO=${{ matrix.ROS_DISTRO }}
104
- target : ${{ github.job }}
105
- tags : ${{ steps.meta.outputs.tags }}
106
- labels : ${{ steps.meta.outputs.labels }}
107
- push : ${{ env.PUSH }}
108
- platforms : linux/amd64,linux/arm64
109
-
110
- desktop :
111
- strategy :
112
- fail-fast : false
113
- matrix :
114
- ROS_DISTRO : [humble]
115
- runs-on : ubuntu-latest
116
- permissions :
117
- packages : write
118
- contents : read
119
- steps :
120
- - name : Checkout repository
121
- uses : actions/checkout@v4
122
-
123
- - name : Log into registry
124
- if : env.PUSH == 'true'
125
-
126
- with :
127
- registry : ghcr.io
128
- username : ${{ github.actor }}
129
- password : ${{ secrets.GITHUB_TOKEN }}
69
+ type=raw,value=${{ matrix.ROS_DISTRO }}-ci
130
70
131
- - name : Extract Docker metadata
71
+ - name : Set Docker metadata for "robot"
132
72
if : env.PUSH == 'true'
133
- id : meta
73
+ id : meta-robot
134
74
135
75
with :
136
76
images : ghcr.io/${{ github.repository }}
77
+ bake-target : docker-metadata-action-robot
137
78
tags : |
138
- type=raw,value=${{ matrix.ROS_DISTRO }}-${{ github.job }}
139
-
140
- - name : Build and push Docker image
141
-
142
- with :
143
- context : .
144
- file : .docker/Dockerfile
145
- build-args : ROS_DISTRO=${{ matrix.ROS_DISTRO }}
146
- target : ${{ github.job }}
147
- tags : ${{ steps.meta.outputs.tags }}
148
- labels : ${{ steps.meta.outputs.labels }}
149
- push : ${{ env.PUSH }}
150
-
151
- desktop-nvidia :
152
- strategy :
153
- fail-fast : false
154
- matrix :
155
- ROS_DISTRO : [humble]
156
- runs-on : ubuntu-latest
157
- permissions :
158
- packages : write
159
- contents : read
160
- steps :
161
- - name : Checkout repository
162
- uses : actions/checkout@v4
79
+ type=raw,value=${{ matrix.ROS_DISTRO }}-robot
163
80
164
- - name : Log into registry
81
+ - name : Set Docker metadata for "desktop"
165
82
if : env.PUSH == 'true'
166
-
83
+ id : meta-desktop
84
+
167
85
with :
168
- registry : ghcr.io
169
- username : ${{ github.actor }}
170
- password : ${{ secrets.GITHUB_TOKEN }}
86
+ images : ghcr.io/${{ github.repository }}
87
+ bake-target : docker-metadata-action-desktop
88
+ tags : |
89
+ type=raw,value=${{ matrix.ROS_DISTRO }}-desktop
171
90
172
- - name : Extract Docker metadata
91
+ - name : Set Docker metadata for "desktop-nvidia"
173
92
if : env.PUSH == 'true'
174
- id : meta
93
+ id : meta-desktop-nvidia
175
94
176
95
with :
177
96
images : ghcr.io/${{ github.repository }}
97
+ bake-target : docker-metadata-action-desktop-nvidia
178
98
tags : |
179
- type=raw,value=${{ matrix.ROS_DISTRO }}-${{ github.job }}
180
-
181
- - name : Build and push Docker image
182
-
99
+ type=raw,value=${{ matrix.ROS_DISTRO }}-desktop-nvidia
100
+
101
+ - if : github.event_name == 'push'
102
+ name : Build and push (non PR)
103
+
104
+ env :
105
+ BLUE_ROS_DISTRO : ${{ matrix.ROS_DISTRO }}
106
+ BLUE_GITHUB_REPO : ${{ steps.lowercase-repo.outputs.repository }}
183
107
with :
184
- context : .
185
- file : .docker/Dockerfile
186
- build-args : ROS_DISTRO=${{ matrix.ROS_DISTRO }}
187
- target : ${{ github.job }}
188
- tags : ${{ steps.meta.outputs.tags }}
189
- labels : ${{ steps.meta.outputs.labels }}
108
+ workdir : .docker
109
+ files : |
110
+ ./docker-bake.hcl
111
+ ${{ steps.meta-ci.outputs.bake-file }}
112
+ ${{ steps.meta-robot.outputs.bake-file }}
113
+ ${{ steps.meta-desktop.outputs.bake-file }}
114
+ ${{ steps.meta-desktop-nvidia.outputs.bake-file }}
190
115
push : ${{ env.PUSH }}
116
+ set : |
117
+ *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}:cache-${{ matrix.ROS_DISTRO }}
118
+ *.cache-to=type=registry,mode=max,ref=ghcr.io/${{ github.repository }}:cache-${{ matrix.ROS_DISTRO }}
119
+
120
+ # Pull request builds are not cached; and only built for AMD64
121
+ - if : github.event_name == 'pull_request'
122
+ name : Build and push (PR)
123
+
124
+ env :
125
+ BLUE_ROS_DISTRO : ${{ matrix.ROS_DISTRO }}
126
+ BLUE_GITHUB_REPO : ${{ steps.lowercase-repo.outputs.repository }}
127
+ with :
128
+ workdir : .docker
129
+ files : |
130
+ ./docker-bake.hcl
131
+ set : |
132
+ *.platform=linux/amd64
133
+ *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}:cache-${{ matrix.ROS_DISTRO }}
134
+ *.cache-to=
0 commit comments