Skip to content

Commit 9439869

Browse files
committed
fix(tekton): move compression before build-image-index and fix long task names
- Move convert-compression task before build-image-index so each arch image is compressed before the manifest index is created - Change from matrix task to single task processing array to avoid extremely long TaskRun names that break the Konflux UI - Add unified multiarch-pipeline.yaml with optional compression support - Compression is now processed sequentially but with cleaner task names
1 parent 04340b5 commit 9439869

4 files changed

Lines changed: 922 additions & 96 deletions

.tekton/base-image-multiarch-pull-request-pipeline.yaml

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,13 @@ spec:
246246
operator: in
247247
values:
248248
- "true"
249-
# Convert compression for each arch image BEFORE creating manifest index
250-
- matrix:
251-
params:
252-
- name: IMAGE_REF
253-
value:
254-
- $(tasks.build-images.results.IMAGE_REF[*])
255-
name: convert-compression
249+
# Convert compression for all arch images BEFORE creating manifest index
250+
# Uses a single task to avoid extremely long TaskRun names from IMAGE_REF matrix
251+
- name: convert-compression
256252
params:
253+
- name: IMAGE_REFS
254+
value:
255+
- $(tasks.build-images.results.IMAGE_REF[*])
257256
- name: COMPRESSION_FORMAT
258257
value: $(params.compression-format)
259258
- name: FORCE_COMPRESSION
@@ -262,9 +261,9 @@ spec:
262261
- build-images
263262
taskSpec:
264263
params:
265-
- name: IMAGE_REF
266-
type: string
267-
description: The image reference to convert (format image:tag@sha256:digest)
264+
- name: IMAGE_REFS
265+
type: array
266+
description: Array of image references to convert
268267
- name: COMPRESSION_FORMAT
269268
type: string
270269
default: "zstd:chunked"
@@ -274,14 +273,15 @@ spec:
274273
default: "true"
275274
description: Force re-compression of all layers.
276275
results:
277-
- name: IMAGE_REF
278-
description: The converted image reference
276+
- name: IMAGE_REFS
277+
type: array
278+
description: Array of converted image references
279279
steps:
280280
- name: convert
281281
image: quay.io/konflux-ci/buildah-task:latest@sha256:5c5eb4117983b324f932f144aa2c2df7ed508174928a423d8551c4e11f30fbd9
282+
args:
283+
- $(params.IMAGE_REFS[*])
282284
env:
283-
- name: IMAGE_REF
284-
value: $(params.IMAGE_REF)
285285
- name: COMPRESSION_FORMAT
286286
value: $(params.COMPRESSION_FORMAT)
287287
- name: FORCE_COMPRESSION
@@ -290,45 +290,55 @@ spec:
290290
#!/bin/bash
291291
set -euo pipefail
292292
293-
# If no compression format specified, just pass through
294-
if [ -z "${COMPRESSION_FORMAT}" ]; then
295-
echo "[$(date --utc -Ins)] No compression conversion, passing through: ${IMAGE_REF}"
296-
echo -n "${IMAGE_REF}" > "$(results.IMAGE_REF.path)"
297-
exit 0
298-
fi
293+
# Collect all converted image refs
294+
CONVERTED_REFS=()
295+
296+
# Process each image reference passed as arguments
297+
for IMAGE_REF in "$@"; do
298+
# If no compression format specified, just pass through
299+
if [ -z "${COMPRESSION_FORMAT}" ]; then
300+
echo "[$(date --utc -Ins)] No compression, passing through: ${IMAGE_REF}"
301+
CONVERTED_REFS+=("${IMAGE_REF}")
302+
continue
303+
fi
304+
305+
echo "[$(date --utc -Ins)] Converting compression for: ${IMAGE_REF}"
306+
echo "Compression format: ${COMPRESSION_FORMAT}"
307+
echo "Force compression: ${FORCE_COMPRESSION}"
299308
300-
echo "[$(date --utc -Ins)] Converting compression for: ${IMAGE_REF}"
301-
echo "Compression format: ${COMPRESSION_FORMAT}"
302-
echo "Force compression: ${FORCE_COMPRESSION}"
309+
# Parse image reference: image:tag@sha256:digest
310+
IMAGE_BASE="${IMAGE_REF%@*}"
311+
echo "Image base: ${IMAGE_BASE}"
303312
304-
# Parse image reference: image:tag@sha256:digest
305-
IMAGE_BASE="${IMAGE_REF%@*}"
306-
echo "Image base: ${IMAGE_BASE}"
313+
# Pull the image
314+
echo "[$(date --utc -Ins)] Pulling image..."
315+
buildah pull "${IMAGE_REF}"
307316
308-
# Pull the image
309-
echo "[$(date --utc -Ins)] Pulling image..."
310-
buildah pull "${IMAGE_REF}"
317+
# Build push arguments
318+
PUSH_ARGS=(
319+
--compression-format "${COMPRESSION_FORMAT}"
320+
)
321+
if [ "${FORCE_COMPRESSION}" = "true" ]; then
322+
PUSH_ARGS+=(--force-compression)
323+
fi
311324
312-
# Build push arguments
313-
PUSH_ARGS=(
314-
--compression-format "${COMPRESSION_FORMAT}"
315-
)
316-
if [ "${FORCE_COMPRESSION}" = "true" ]; then
317-
PUSH_ARGS+=(--force-compression)
318-
fi
325+
# Re-push with new compression to the same tag
326+
echo "[$(date --utc -Ins)] Pushing with compression: ${COMPRESSION_FORMAT}"
327+
buildah push "${PUSH_ARGS[@]}" \
328+
--digestfile /tmp/new-digest \
329+
"${IMAGE_REF}" \
330+
"docker://${IMAGE_BASE}"
319331
320-
# Re-push with new compression to the same tag
321-
echo "[$(date --utc -Ins)] Pushing with compression: ${COMPRESSION_FORMAT}"
322-
buildah push "${PUSH_ARGS[@]}" \
323-
--digestfile /tmp/new-digest \
324-
"${IMAGE_REF}" \
325-
"docker://${IMAGE_BASE}"
332+
NEW_DIGEST=$(cat /tmp/new-digest)
333+
NEW_IMAGE_REF="${IMAGE_BASE}@${NEW_DIGEST}"
334+
echo "[$(date --utc -Ins)] New image ref: ${NEW_IMAGE_REF}"
326335
327-
NEW_DIGEST=$(cat /tmp/new-digest)
328-
NEW_IMAGE_REF="${IMAGE_BASE}@${NEW_DIGEST}"
329-
echo "[$(date --utc -Ins)] New image ref: ${NEW_IMAGE_REF}"
336+
CONVERTED_REFS+=("${NEW_IMAGE_REF}")
337+
done
330338
331-
echo -n "${NEW_IMAGE_REF}" > "$(results.IMAGE_REF.path)"
339+
# Write array result as JSON
340+
printf '%s\n' "${CONVERTED_REFS[@]}" | jq -R . | jq -s . > "$(results.IMAGE_REFS.path)"
341+
echo "[$(date --utc -Ins)] All conversions complete"
332342
securityContext:
333343
capabilities:
334344
add:
@@ -357,7 +367,7 @@ spec:
357367
- name: IMAGES
358368
value:
359369
# Use compressed image refs from convert-compression
360-
- $(tasks.convert-compression.results.IMAGE_REF[*])
370+
- $(tasks.convert-compression.results.IMAGE_REFS[*])
361371
- name: BUILDAH_FORMAT
362372
value: $(params.buildah-format)
363373
runAfter:

.tekton/base-image-multiarch-push-pipeline.yaml

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -309,14 +309,13 @@ spec:
309309
operator: in
310310
values:
311311
- "true"
312-
# Convert compression for each arch image BEFORE creating manifest index
313-
- matrix:
314-
params:
315-
- name: IMAGE_REF
316-
value:
317-
- $(tasks.build-images.results.IMAGE_REF[*])
318-
name: convert-compression
312+
# Convert compression for all arch images BEFORE creating manifest index
313+
# Uses a single task to avoid extremely long TaskRun names from IMAGE_REF matrix
314+
- name: convert-compression
319315
params:
316+
- name: IMAGE_REFS
317+
value:
318+
- $(tasks.build-images.results.IMAGE_REF[*])
320319
- name: COMPRESSION_FORMAT
321320
value: $(params.compression-format)
322321
- name: FORCE_COMPRESSION
@@ -325,9 +324,9 @@ spec:
325324
- build-images
326325
taskSpec:
327326
params:
328-
- name: IMAGE_REF
329-
type: string
330-
description: The image reference to convert (format image:tag@sha256:digest)
327+
- name: IMAGE_REFS
328+
type: array
329+
description: Array of image references to convert
331330
- name: COMPRESSION_FORMAT
332331
type: string
333332
default: "zstd:chunked"
@@ -337,14 +336,15 @@ spec:
337336
default: "true"
338337
description: Force re-compression of all layers.
339338
results:
340-
- name: IMAGE_REF
341-
description: The converted image reference
339+
- name: IMAGE_REFS
340+
type: array
341+
description: Array of converted image references
342342
steps:
343343
- name: convert
344344
image: quay.io/konflux-ci/buildah-task:latest@sha256:5c5eb4117983b324f932f144aa2c2df7ed508174928a423d8551c4e11f30fbd9
345+
args:
346+
- $(params.IMAGE_REFS[*])
345347
env:
346-
- name: IMAGE_REF
347-
value: $(params.IMAGE_REF)
348348
- name: COMPRESSION_FORMAT
349349
value: $(params.COMPRESSION_FORMAT)
350350
- name: FORCE_COMPRESSION
@@ -353,45 +353,55 @@ spec:
353353
#!/bin/bash
354354
set -euo pipefail
355355
356-
# If no compression format specified, just pass through
357-
if [ -z "${COMPRESSION_FORMAT}" ]; then
358-
echo "[$(date --utc -Ins)] No compression conversion, passing through: ${IMAGE_REF}"
359-
echo -n "${IMAGE_REF}" > "$(results.IMAGE_REF.path)"
360-
exit 0
361-
fi
356+
# Collect all converted image refs
357+
CONVERTED_REFS=()
358+
359+
# Process each image reference passed as arguments
360+
for IMAGE_REF in "$@"; do
361+
# If no compression format specified, just pass through
362+
if [ -z "${COMPRESSION_FORMAT}" ]; then
363+
echo "[$(date --utc -Ins)] No compression, passing through: ${IMAGE_REF}"
364+
CONVERTED_REFS+=("${IMAGE_REF}")
365+
continue
366+
fi
367+
368+
echo "[$(date --utc -Ins)] Converting compression for: ${IMAGE_REF}"
369+
echo "Compression format: ${COMPRESSION_FORMAT}"
370+
echo "Force compression: ${FORCE_COMPRESSION}"
362371
363-
echo "[$(date --utc -Ins)] Converting compression for: ${IMAGE_REF}"
364-
echo "Compression format: ${COMPRESSION_FORMAT}"
365-
echo "Force compression: ${FORCE_COMPRESSION}"
372+
# Parse image reference: image:tag@sha256:digest
373+
IMAGE_BASE="${IMAGE_REF%@*}"
374+
echo "Image base: ${IMAGE_BASE}"
366375
367-
# Parse image reference: image:tag@sha256:digest
368-
IMAGE_BASE="${IMAGE_REF%@*}"
369-
echo "Image base: ${IMAGE_BASE}"
376+
# Pull the image
377+
echo "[$(date --utc -Ins)] Pulling image..."
378+
buildah pull "${IMAGE_REF}"
370379
371-
# Pull the image
372-
echo "[$(date --utc -Ins)] Pulling image..."
373-
buildah pull "${IMAGE_REF}"
380+
# Build push arguments
381+
PUSH_ARGS=(
382+
--compression-format "${COMPRESSION_FORMAT}"
383+
)
384+
if [ "${FORCE_COMPRESSION}" = "true" ]; then
385+
PUSH_ARGS+=(--force-compression)
386+
fi
374387
375-
# Build push arguments
376-
PUSH_ARGS=(
377-
--compression-format "${COMPRESSION_FORMAT}"
378-
)
379-
if [ "${FORCE_COMPRESSION}" = "true" ]; then
380-
PUSH_ARGS+=(--force-compression)
381-
fi
388+
# Re-push with new compression to the same tag
389+
echo "[$(date --utc -Ins)] Pushing with compression: ${COMPRESSION_FORMAT}"
390+
buildah push "${PUSH_ARGS[@]}" \
391+
--digestfile /tmp/new-digest \
392+
"${IMAGE_REF}" \
393+
"docker://${IMAGE_BASE}"
382394
383-
# Re-push with new compression to the same tag
384-
echo "[$(date --utc -Ins)] Pushing with compression: ${COMPRESSION_FORMAT}"
385-
buildah push "${PUSH_ARGS[@]}" \
386-
--digestfile /tmp/new-digest \
387-
"${IMAGE_REF}" \
388-
"docker://${IMAGE_BASE}"
395+
NEW_DIGEST=$(cat /tmp/new-digest)
396+
NEW_IMAGE_REF="${IMAGE_BASE}@${NEW_DIGEST}"
397+
echo "[$(date --utc -Ins)] New image ref: ${NEW_IMAGE_REF}"
389398
390-
NEW_DIGEST=$(cat /tmp/new-digest)
391-
NEW_IMAGE_REF="${IMAGE_BASE}@${NEW_DIGEST}"
392-
echo "[$(date --utc -Ins)] New image ref: ${NEW_IMAGE_REF}"
399+
CONVERTED_REFS+=("${NEW_IMAGE_REF}")
400+
done
393401
394-
echo -n "${NEW_IMAGE_REF}" > "$(results.IMAGE_REF.path)"
402+
# Write array result as JSON
403+
printf '%s\n' "${CONVERTED_REFS[@]}" | jq -R . | jq -s . > "$(results.IMAGE_REFS.path)"
404+
echo "[$(date --utc -Ins)] All conversions complete"
395405
securityContext:
396406
capabilities:
397407
add:
@@ -420,7 +430,7 @@ spec:
420430
- name: IMAGES
421431
value:
422432
# Use compressed image refs from convert-compression
423-
- $(tasks.convert-compression.results.IMAGE_REF[*])
433+
- $(tasks.convert-compression.results.IMAGE_REFS[*])
424434
- name: BUILDAH_FORMAT
425435
value: $(params.buildah-format)
426436
runAfter:

0 commit comments

Comments
 (0)