18
18
type : boolean
19
19
required : false
20
20
default : false
21
- distro :
22
- description : Container image OS distribution
23
- type : choice
21
+ centos-stream-8 :
22
+ description : Build CentOS Stream 8 images?
23
+ type : boolean
24
+ required : false
25
+ default : true
26
+ rocky-linux-9 :
27
+ description : Build Rocky Linux 9 images?
28
+ type : boolean
29
+ required : false
30
+ default : true
31
+ ubuntu-focal :
32
+ description : Build Ubuntu Focal 20.04 images?
33
+ type : boolean
34
+ required : false
35
+ default : true
36
+ push :
37
+ description : Whether to push images
38
+ type : boolean
24
39
required : false
25
- default : centos
26
- options :
27
- - centos
28
- - ubuntu
29
- - rocky
40
+ default : true
30
41
31
42
env :
32
43
ANSIBLE_FORCE_COLOR : True
33
44
jobs :
45
+ generate-tag :
46
+ name : Generate container image tag
47
+ if : github.repository == 'stackhpc/stackhpc-kayobe-config'
48
+ runs-on : [self-hosted, stackhpc-kayobe-config-kolla-builder]
49
+ permissions : {}
50
+ outputs :
51
+ kolla_tag : ${{ steps.kolla_tag.outputs.kolla_tag }}
52
+ matrix : ${{ steps.set-matrix.outputs.matrix }}
53
+ openstack_release : ${{ steps.openstack_release.outputs.openstack_release }}
54
+ steps :
55
+ - name : Checkout
56
+ uses : actions/checkout@v3
57
+
58
+ - name : Determine OpenStack release
59
+ id : openstack_release
60
+ run : |
61
+ BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' .gitreview)
62
+ echo "openstack_release=${BRANCH}" | sed "s|stable/||" >> $GITHUB_OUTPUT
63
+
64
+ # Generate a tag to apply to all built container images.
65
+ # Without this, each kayobe * container image build command would use a different tag.
66
+ - name : Generate container image tag
67
+ id : kolla_tag
68
+ run : |
69
+ echo "kolla_tag=$(date +${{ steps.openstack_release.outputs.openstack_release }}-%Y%m%dT%H%M%S)" >> $GITHUB_OUTPUT
70
+
71
+ # Dynamically define job matrix.
72
+ # We need a separate matrix entry for each distribution, when the relevant input is true.
73
+ # https://stackoverflow.com/questions/65384420/how-do-i-make-a-github-action-matrix-element-conditional
74
+ - name : Generate build matrix
75
+ id : set-matrix
76
+ run : |
77
+ comma=""
78
+ echo -n "matrix={\"distro\": [" >> $GITHUB_OUTPUT
79
+ if [[ ${{ inputs.centos-stream-8 }} == 'true' ]]; then
80
+ echo -n "$comma\"centos\"" >> $GITHUB_OUTPUT
81
+ comma=", "
82
+ fi
83
+ if [[ ${{ inputs.rocky-linux-9 }} == 'true' ]]; then
84
+ echo -n "$comma\"rocky\"" >> $GITHUB_OUTPUT
85
+ comma=", "
86
+ fi
87
+ if [[ ${{ inputs.ubuntu-focal }} == 'true' ]]; then
88
+ echo -n "$comma\"ubuntu\"" >> $GITHUB_OUTPUT
89
+ comma=", "
90
+ fi
91
+ echo "]}" >> $GITHUB_OUTPUT
92
+
93
+ - name : Display container image tag
94
+ run : |
95
+ echo "${{ steps.kolla_tag.outputs.kolla_tag }}"
96
+
34
97
container-image-build :
35
98
name : Build Kolla container images
36
99
if : github.repository == 'stackhpc/stackhpc-kayobe-config'
37
100
runs-on : [self-hosted, stackhpc-kayobe-config-kolla-builder]
38
101
timeout-minutes : 720
102
+ permissions : {}
103
+ strategy :
104
+ matrix : ${{ fromJson(needs.generate-tag.outputs.matrix) }}
105
+ needs :
106
+ - generate-tag
39
107
steps :
40
108
- uses : actions/checkout@v3
41
109
with :
45
113
uses : actions/checkout@v3
46
114
with :
47
115
repository : stackhpc/kayobe
48
- ref : refs/heads/stackhpc/yoga
116
+ ref : refs/heads/stackhpc/${{ needs.generate-tag.outputs.openstack_release }}
49
117
path : src/kayobe
50
118
51
119
# FIXME: Failed in kolla-ansible : Ensure the latest version of pip is installed
@@ -101,57 +169,43 @@ jobs:
101
169
102
170
- name : Build and push kolla overcloud images
103
171
run : |
172
+ args="${{ github.event.inputs.regexes }}"
173
+ args="$args -e kolla_base_distro=${{ matrix.distro }}"
174
+ args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}"
175
+ if ${{ inputs.push }} == 'true'; then
176
+ args="$args --push"
177
+ fi
104
178
source venvs/kayobe/bin/activate &&
105
179
source src/kayobe-config/kayobe-env --environment ci-builder &&
106
- kayobe overcloud container image build ${{ github.event.inputs.regexes }} --push -e kolla_base_distro=${{ inputs.distro }}
180
+ kayobe overcloud container image build $args
107
181
env :
108
182
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
109
183
if : github.event.inputs.overcloud == 'true'
110
184
111
- - name : Display the overcloud container image tag
112
- run : |
113
- echo "$(cat ~/kolla_tag)"
114
- if : github.event.inputs.overcloud == 'true'
115
-
116
- - name : Get built overcloud container images
117
- run : |
118
- sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$(cat ~/kolla_tag)" > overcloud-container-images
119
- if : github.event.inputs.overcloud == 'true'
120
-
121
- - name : Upload overcloud-container-images artifact
122
- uses : actions/upload-artifact@v3
123
- with :
124
- name : Overcloud container images
125
- path : overcloud-container-images
126
- retention-days : 7
127
- if : github.event.inputs.overcloud == 'true'
128
-
129
185
- name : Build and push kolla seed images
130
186
run : |
187
+ args="kolla_base_distro=${{ matrix.distro }}"
188
+ args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}"
189
+ if ${{ inputs.push }} == 'true'; then
190
+ args="$args --push"
191
+ fi
131
192
source venvs/kayobe/bin/activate &&
132
193
source src/kayobe-config/kayobe-env --environment ci-builder &&
133
- kayobe seed container image build --push -e kolla_base_distro=${{ inputs.distro }}
194
+ kayobe seed container image build $args
134
195
env :
135
196
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
136
197
if : github.event.inputs.seed == 'true'
137
198
138
- - name : Display the seed container image tag
199
+ - name : Get built container images
139
200
run : |
140
- echo "$(cat ~/kolla_tag)"
141
- if : github.event.inputs.seed == 'true'
201
+ sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/${{ matrix.distro }}-*:${{ needs.generate-tag.outputs.kolla_tag }}" > ${{ matrix.distro }}-container-images
142
202
143
- - name : Get built seed container images
144
- run : |
145
- sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$(cat ~/kolla_tag)" > seed-container-images
146
- if : github.event.inputs.seed == 'true'
147
-
148
- - name : Upload seed-container-images artifact
203
+ - name : Upload container images artifact
149
204
uses : actions/upload-artifact@v3
150
205
with :
151
- name : Seed container images
152
- path : seed -container-images
206
+ name : ${{ matrix.distro }} container images
207
+ path : ${{ matrix.distro }} -container-images
153
208
retention-days : 7
154
- if : github.event.inputs.seed == 'true'
155
209
156
210
- name : Prune local Kolla container images over 1 week old
157
211
run : |
@@ -161,8 +215,9 @@ jobs:
161
215
name : Trigger container image repository sync
162
216
needs :
163
217
- container-image-build
164
- if : github.repository == 'stackhpc/stackhpc-kayobe-config'
218
+ if : github.repository == 'stackhpc/stackhpc-kayobe-config' && inputs.push
165
219
runs-on : ubuntu-latest
220
+ permissions : {}
166
221
steps :
167
222
# NOTE(mgoddard): Trigger another CI workflow in the
168
223
# stackhpc-release-train repository.
0 commit comments