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
- main
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,164 +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 : [rolling]
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
109
- # platforms: linux/amd64,linux/arm64
110
-
111
- desktop :
112
- strategy :
113
- fail-fast : false
114
- matrix :
115
- ROS_DISTRO : [rolling]
116
- runs-on : ubuntu-latest
117
- permissions :
118
- packages : write
119
- contents : read
120
- steps :
121
- - name : Checkout repository
122
- uses : actions/checkout@v4
123
-
124
- - name : Log into registry
125
- if : env.PUSH == 'true'
126
-
127
- with :
128
- registry : ghcr.io
129
- username : ${{ github.actor }}
130
- password : ${{ secrets.GITHUB_TOKEN }}
69
+ type=raw,value=${{ matrix.ROS_DISTRO }}-ci
131
70
132
- - name : Extract Docker metadata
71
+ - name : Set Docker metadata for "robot"
133
72
if : env.PUSH == 'true'
134
- id : meta
73
+ id : meta-robot
135
74
136
75
with :
137
76
images : ghcr.io/${{ github.repository }}
77
+ bake-target : docker-metadata-action-robot
138
78
tags : |
139
- type=raw,value=${{ matrix.ROS_DISTRO }}-${{ github.job }}
140
-
141
- - name : Build and push Docker image
142
-
143
- with :
144
- context : .
145
- file : .docker/Dockerfile
146
- build-args : ROS_DISTRO=${{ matrix.ROS_DISTRO }}
147
- target : ${{ github.job }}
148
- tags : ${{ steps.meta.outputs.tags }}
149
- labels : ${{ steps.meta.outputs.labels }}
150
- push : ${{ env.PUSH }}
151
-
152
- desktop-nvidia :
153
- strategy :
154
- fail-fast : false
155
- matrix :
156
- ROS_DISTRO : [rolling]
157
- runs-on : ubuntu-latest
158
- permissions :
159
- packages : write
160
- contents : read
161
- steps :
162
- - name : Checkout repository
163
- uses : actions/checkout@v4
79
+ type=raw,value=${{ matrix.ROS_DISTRO }}-robot
164
80
165
- - name : Log into registry
81
+ - name : Set Docker metadata for "desktop"
166
82
if : env.PUSH == 'true'
167
-
83
+ id : meta-desktop
84
+
168
85
with :
169
- registry : ghcr.io
170
- username : ${{ github.actor }}
171
- 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
172
90
173
- - name : Extract Docker metadata
91
+ - name : Set Docker metadata for "desktop-nvidia"
174
92
if : env.PUSH == 'true'
175
- id : meta
93
+ id : meta-desktop-nvidia
176
94
177
95
with :
178
96
images : ghcr.io/${{ github.repository }}
97
+ bake-target : docker-metadata-action-desktop-nvidia
179
98
tags : |
180
- type=raw,value=${{ matrix.ROS_DISTRO }}-${{ github.job }}
181
-
182
- - name : Build and push Docker image
183
-
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 }}
184
107
with :
185
- context : .
186
- file : .docker/Dockerfile
187
- build-args : ROS_DISTRO=${{ matrix.ROS_DISTRO }}
188
- target : ${{ github.job }}
189
- tags : ${{ steps.meta.outputs.tags }}
190
- 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 }}
191
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