@@ -49,10 +49,15 @@ def skip_brew_upload = stream_info.skip_brew_upload ?: false
49
49
def src_config_ref = stream_info.source_config.ref
50
50
def src_config_url = stream_info.source_config.url
51
51
52
+ def basearches = params.ARCHES.split() as Set
53
+ def timeout_mins = 300
54
+
55
+ def cosa_img = params.COREOS_ASSEMBLER_IMAGE
56
+
52
57
lock(resource: "build-node-image") {
53
58
// building actually happens on builders so we don't need much resources
54
59
cosaPod(image: params.COREOS_ASSEMBLER_IMAGE,
55
- memory: "512Mi ", cpu: "1", kvm: false ,
60
+ memory: "2.5Gi ", kvm: true ,
56
61
serviceAccount: "jenkins",
57
62
secrets: ["brew-keytab", "brew-ca:ca.crt:/etc/pki/ca.crt",
58
63
"koji-conf:koji.conf:/etc/koji.conf",
@@ -149,6 +154,76 @@ lock(resource: "build-node-image") {
149
154
"--add-openshift-build-labels"] + label_args)
150
155
}
151
156
}
157
+ stage("Run Tests") {
158
+ withCredentials([file(credentialsId: 'oscontainer-push-registry-secret', variable: 'REGISTRY_AUTH_FILE')]) {
159
+ def openshift_stream = params.RELEASE.split("-")[0]
160
+ def rhel_stream = params.RELEASE.split("-")[1]
161
+
162
+ parallel basearches.collectEntries { arch ->
163
+ [arch, {
164
+ // Define the sequence of cosa commands as a closure to avoid repetition.
165
+ def executeCosaCommands = { boolean isRemote ->
166
+ // The 'cosa init' command can exit with an error due to a known issue (coreos/coreos-assembler#4239).
167
+ // Piping to 'true' ignores any non-zero exit code from 'cosa init', preventing the pipeline from failing.
168
+ shwrap("""
169
+ set +o pipefail
170
+ cosa init https://github.com/openshift/os --branch release-${openshift_stream} --force | true
171
+ """)
172
+ // The 'cosa shell' prefix directs commands to the correct execution environment:
173
+ // the remote session if active, or the local container otherwise.
174
+ def s3_dir = pipeutils.get_s3_streams_dir(pipecfg, rhel_stream)
175
+ pipeutils.shwrapWithAWSBuildUploadCredentials("""
176
+ cosa shell mkdir -p tmp
177
+ cosa buildfetch \
178
+ --arch=$arch --artifact qemu --url=s3://${s3_dir}/builds \
179
+ --aws-config-file \${AWS_BUILD_UPLOAD_CONFIG} --find-build-for-arch
180
+ """)
181
+
182
+ def build_id = shwrapCapture("""
183
+ link=\$(cosa shell realpath builds/latest)
184
+ cosa shell basename \$link
185
+ """)
186
+ shwrap("cosa decompress --build $build_id")
187
+ def skopeo_arch_override = (arch == "x86_64") ? "amd64" : arch
188
+ shwrap("cosa shell skopeo copy --override-arch ${skopeo_arch_override} --authfile $REGISTRY_AUTH_FILE docker://${registry_staging_repo}@${node_image_manifest_digest} oci-archive:./openshift-${arch}.ociarchive")
189
+ kola(
190
+ cosaDir: WORKSPACE,
191
+ build: build_id,
192
+ arch: arch,
193
+ skipUpgrade: true,
194
+ extraArgs: "--tag openshift --oscontainer openshift-${arch}.ociarchive --denylist-stream ${params.RELEASE}"
195
+ )
196
+ kola(
197
+ cosaDir: WORKSPACE,
198
+ build: build_id,
199
+ arch: arch,
200
+ skipUpgrade: true,
201
+ extraArgs: "-b rhcos --tag openshift --oscontainer openshift-${arch}.ociarchive --denylist-stream ${params.RELEASE}"
202
+ )
203
+ }
204
+
205
+ // Conditional execution based on architecture
206
+ if (arch != 'x86_64') {
207
+ // Conditionally create the remote session only if the architecture is NOT x86_64.
208
+ pipeutils.withPodmanRemoteArchBuilder(arch: arch) {
209
+ def session = pipeutils.makeCosaRemoteSession(
210
+ expiration: "${timeout_mins}m",
211
+ image: cosa_img,
212
+ workdir: WORKSPACE
213
+ )
214
+ withEnv(["COREOS_ASSEMBLER_REMOTE_SESSION=${session}"]) {
215
+ // Execute the commands within the remote session context.
216
+ executeCosaCommands(true)
217
+ }
218
+ }
219
+ } else {
220
+ // For x86_64, execute the commands directly without a remote session.
221
+ executeCosaCommands(false)
222
+ }
223
+ }]
224
+ }
225
+ }
226
+ }
152
227
if (!skip_brew_upload){
153
228
stage("Brew Upload") {
154
229
// Use the staging since we already have the digests
0 commit comments