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