Skip to content

Commit c6494d6

Browse files
committed
Separate task(s) for pre-fetching
This logically separates the part that should be implemented in cachi2 in the future, per: https://rpm-software-management.github.io/mock/feature-hermetic-builds
1 parent d5dfd01 commit c6494d6

File tree

5 files changed

+223
-49
lines changed

5 files changed

+223
-49
lines changed

pipeline/build-rpm-package.yaml

Lines changed: 136 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,8 @@ spec:
242242
value: $(tasks.get-rpm-sources.results.skip-mpc-tasks.deps-x86_64)
243243
- name: script-environment-image
244244
value: $(params.script-environment-image)
245-
- name: dependencies-artifact
246-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
245+
- name: sources-with-lookaside-artifact
246+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
247247
- name: ociStorage
248248
value: $(params.ociStorage).calculation-x86_64
249249
- name: ociArtifactExpiresAfter
@@ -259,7 +259,7 @@ spec:
259259
value: task/calculate-deps.yaml
260260
- name: rpmbuild-x86-64
261261
runAfter:
262-
- calculate-deps-x86-64
262+
- prefetch-deps-x86-64
263263
timeout: "72h"
264264
params:
265265
- name: package-name
@@ -274,10 +274,12 @@ spec:
274274
value: $(params.script-environment-image)
275275
- name: hermetic
276276
value: $(params.hermetic)
277-
- name: dependencies-artifact
278-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
279-
- name: calculation-artifact
280-
value: $(tasks.calculate-deps-x86-64.results.calculation-artifact)
277+
- name: sources-with-lookaside-artifact
278+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
279+
- name: lockfile-artifact
280+
value: $(tasks.calculate-deps-x86-64.results.lockfile-artifact)
281+
- name: build-deps-artifact
282+
value: $(tasks.prefetch-deps-x86-64.results.build-deps-artifact)
281283
- name: ociStorage
282284
value: $(params.ociStorage).rpmbuild-x86_64
283285
- name: ociArtifactExpiresAfter
@@ -305,8 +307,8 @@ spec:
305307
value: $(tasks.get-rpm-sources.results.skip-mpc-tasks.deps-aarch64)
306308
- name: script-environment-image
307309
value: $(params.script-environment-image)
308-
- name: dependencies-artifact
309-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
310+
- name: sources-with-lookaside-artifact
311+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
310312
- name: ociStorage
311313
value: $(params.ociStorage).calculation-aarch64
312314
- name: ociArtifactExpiresAfter
@@ -322,7 +324,7 @@ spec:
322324
value: task/calculate-deps.yaml
323325
- name: rpmbuild-aarch64
324326
runAfter:
325-
- calculate-deps-aarch64
327+
- prefetch-deps-aarch64
326328
timeout: "72h"
327329
params:
328330
- name: package-name
@@ -337,10 +339,12 @@ spec:
337339
value: $(params.script-environment-image)
338340
- name: hermetic
339341
value: $(params.hermetic)
340-
- name: dependencies-artifact
341-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
342-
- name: calculation-artifact
343-
value: $(tasks.calculate-deps-aarch64.results.calculation-artifact)
342+
- name: sources-with-lookaside-artifact
343+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
344+
- name: lockfile-artifact
345+
value: $(tasks.calculate-deps-aarch64.results.lockfile-artifact)
346+
- name: build-deps-artifact
347+
value: $(tasks.prefetch-deps-aarch64.results.build-deps-artifact)
344348
- name: ociStorage
345349
value: $(params.ociStorage).rpmbuild-aarch64
346350
- name: ociArtifactExpiresAfter
@@ -368,8 +372,8 @@ spec:
368372
value: $(tasks.get-rpm-sources.results.skip-mpc-tasks.deps-s390x)
369373
- name: script-environment-image
370374
value: $(params.script-environment-image)
371-
- name: dependencies-artifact
372-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
375+
- name: sources-with-lookaside-artifact
376+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
373377
- name: ociStorage
374378
value: $(params.ociStorage).calculation-s390x
375379
- name: ociArtifactExpiresAfter
@@ -385,7 +389,7 @@ spec:
385389
value: task/calculate-deps.yaml
386390
- name: rpmbuild-s390x
387391
runAfter:
388-
- calculate-deps-s390x
392+
- prefetch-deps-s390x
389393
timeout: "72h"
390394
params:
391395
- name: package-name
@@ -400,10 +404,12 @@ spec:
400404
value: $(params.script-environment-image)
401405
- name: hermetic
402406
value: $(params.hermetic)
403-
- name: dependencies-artifact
404-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
405-
- name: calculation-artifact
406-
value: $(tasks.calculate-deps-s390x.results.calculation-artifact)
407+
- name: sources-with-lookaside-artifact
408+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
409+
- name: lockfile-artifact
410+
value: $(tasks.calculate-deps-s390x.results.lockfile-artifact)
411+
- name: build-deps-artifact
412+
value: $(tasks.prefetch-deps-s390x.results.build-deps-artifact)
407413
- name: ociStorage
408414
value: $(params.ociStorage).rpmbuild-s390x
409415
- name: ociArtifactExpiresAfter
@@ -431,8 +437,8 @@ spec:
431437
value: $(tasks.get-rpm-sources.results.skip-mpc-tasks.deps-ppc64le)
432438
- name: script-environment-image
433439
value: $(params.script-environment-image)
434-
- name: dependencies-artifact
435-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
440+
- name: sources-with-lookaside-artifact
441+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
436442
- name: ociStorage
437443
value: $(params.ociStorage).calculation-ppc64le
438444
- name: ociArtifactExpiresAfter
@@ -446,9 +452,109 @@ spec:
446452
value: $(params.self-ref-revision)
447453
- name: pathInRepo
448454
value: task/calculate-deps.yaml
449-
- name: rpmbuild-ppc64le
455+
- name: prefetch-deps-x86-64
456+
runAfter:
457+
- calculate-deps-x86-64
458+
params:
459+
- name: script-environment-image
460+
value: $(params.script-environment-image)
461+
- name: sources-with-lookaside-artifact
462+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
463+
- name: ociStorage
464+
value: $(params.ociStorage).rpmdeps-x86_64
465+
- name: ociArtifactExpiresAfter
466+
value: 14d
467+
- name: lockfile-artifact
468+
value: $(tasks.calculate-deps-x86-64.results.lockfile-artifact)
469+
- name: hermetic
470+
value: $(params.hermetic)
471+
taskRef:
472+
resolver: git
473+
params:
474+
- name: url
475+
value: $(params.self-ref-url)
476+
- name: revision
477+
value: $(params.self-ref-revision)
478+
- name: pathInRepo
479+
value: task/prefetch-rpmbuild-deps.yaml
480+
- name: prefetch-deps-aarch64
481+
runAfter:
482+
- calculate-deps-aarch64
483+
params:
484+
- name: script-environment-image
485+
value: $(params.script-environment-image)
486+
- name: sources-with-lookaside-artifact
487+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
488+
- name: ociStorage
489+
value: $(params.ociStorage).rpmdeps-aarch64
490+
- name: ociArtifactExpiresAfter
491+
value: 14d
492+
- name: lockfile-artifact
493+
value: $(tasks.calculate-deps-aarch64.results.lockfile-artifact)
494+
- name: hermetic
495+
value: $(params.hermetic)
496+
taskRef:
497+
resolver: git
498+
params:
499+
- name: url
500+
value: $(params.self-ref-url)
501+
- name: revision
502+
value: $(params.self-ref-revision)
503+
- name: pathInRepo
504+
value: task/prefetch-rpmbuild-deps.yaml
505+
- name: prefetch-deps-s390x
506+
runAfter:
507+
- calculate-deps-s390x
508+
params:
509+
- name: script-environment-image
510+
value: $(params.script-environment-image)
511+
- name: sources-with-lookaside-artifact
512+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
513+
- name: ociStorage
514+
value: $(params.ociStorage).rpmdeps-s390x
515+
- name: ociArtifactExpiresAfter
516+
value: 14d
517+
- name: lockfile-artifact
518+
value: $(tasks.calculate-deps-s390x.results.lockfile-artifact)
519+
- name: hermetic
520+
value: $(params.hermetic)
521+
taskRef:
522+
resolver: git
523+
params:
524+
- name: url
525+
value: $(params.self-ref-url)
526+
- name: revision
527+
value: $(params.self-ref-revision)
528+
- name: pathInRepo
529+
value: task/prefetch-rpmbuild-deps.yaml
530+
- name: prefetch-deps-ppc64le
450531
runAfter:
451532
- calculate-deps-ppc64le
533+
params:
534+
- name: script-environment-image
535+
value: $(params.script-environment-image)
536+
- name: sources-with-lookaside-artifact
537+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
538+
- name: ociStorage
539+
value: $(params.ociStorage).rpmdeps-ppc64le
540+
- name: ociArtifactExpiresAfter
541+
value: 14d
542+
- name: lockfile-artifact
543+
value: $(tasks.calculate-deps-ppc64le.results.lockfile-artifact)
544+
- name: hermetic
545+
value: $(params.hermetic)
546+
taskRef:
547+
resolver: git
548+
params:
549+
- name: url
550+
value: $(params.self-ref-url)
551+
- name: revision
552+
value: $(params.self-ref-revision)
553+
- name: pathInRepo
554+
value: task/prefetch-rpmbuild-deps.yaml
555+
- name: rpmbuild-ppc64le
556+
runAfter:
557+
- prefetch-deps-ppc64le
452558
timeout: "72h"
453559
params:
454560
- name: package-name
@@ -463,10 +569,12 @@ spec:
463569
value: $(params.script-environment-image)
464570
- name: hermetic
465571
value: $(params.hermetic)
466-
- name: dependencies-artifact
467-
value: $(tasks.get-rpm-sources.results.dependencies-artifact)
468-
- name: calculation-artifact
469-
value: $(tasks.calculate-deps-ppc64le.results.calculation-artifact)
572+
- name: sources-with-lookaside-artifact
573+
value: $(tasks.get-rpm-sources.results.sources-with-lookaside-artifact)
574+
- name: lockfile-artifact
575+
value: $(tasks.calculate-deps-ppc64le.results.lockfile-artifact)
576+
- name: build-deps-artifact
577+
value: $(tasks.prefetch-deps-ppc64le.results.build-deps-artifact)
470578
- name: ociStorage
471579
value: $(params.ociStorage).rpmbuild-ppc64le
472580
- name: ociArtifactExpiresAfter

task/calculate-deps.yaml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ spec:
2929
name: script-environment-image
3030
type: string
3131
- description: The Trusted Artifact URI pointing to the artifact with the rpm deps and source.
32-
name: dependencies-artifact
32+
name: sources-with-lookaside-artifact
3333
type: string
3434
- name: ociStorage
3535
description: The OCI repository where the Trusted Artifacts are stored.
3636
type: string
3737
results:
38-
- name: calculation-artifact
38+
- name: lockfile-artifact
3939
description: The Trusted Artifact URI pointing to the artifact with the result of the deps calculation.
4040
type: string
4141
stepTemplate:
@@ -47,7 +47,7 @@ spec:
4747
image: quay.io/redhat-appstudio/build-trusted-artifacts:latest@sha256:9b180776a41d9a22a1c51539f1647c60defbbd55b44bbebdd4130e33512d8b0d
4848
args:
4949
- use
50-
- $(params.dependencies-artifact)=/var/workdir/source
50+
- $(params.sources-with-lookaside-artifact)=/var/workdir/source
5151
- name: mock-build
5252
image: "quay.io/redhat-appstudio/multi-platform-runner:01c7670e81d5120347cf0ad13372742489985e5f@sha256:246adeaaba600e207131d63a7f706cffdcdc37d8f600c56187123ec62823ff44"
5353
script: |
@@ -122,17 +122,10 @@ spec:
122122
remote_cmd tar xfO $HOMEDIR/results/chroot_scan.tar.gz
123123
$success
124124
125-
remote_cmd podman run -v "$HOMEDIR/results:/results" \
126-
--privileged --rm -ti "$mock_img" \
127-
mock-hermetic-repo \
128-
--lockfile /results/buildroot_lock.json \
129-
--output-repo /results/buildroot_repo
130-
131-
resultdir=$workdir/results/$arch/results
125+
resultdir=$workdir/lock-file
132126
mkdir -p "$resultdir"
133127
# Send only repo and lockfile, ignore other artifacts
134128
receive "$HOMEDIR/results/buildroot_lock.json" "$resultdir/buildroot_lock.json"
135-
receive "$HOMEDIR/results/buildroot_repo" "$resultdir"
136129
cat "$resultdir/buildroot_lock.json"
137130
volumeMounts:
138131
- mountPath: /ssh
@@ -147,7 +140,7 @@ spec:
147140
- create
148141
- --store
149142
- $(params.ociStorage)
150-
- $(results.calculation-artifact.path)=/var/workdir/results
143+
- $(results.lockfile-artifact.path)=/var/workdir/lock-file
151144
volumes:
152145
- name: ssh
153146
secret:

task/get-rpm-sources.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ spec:
3131
name: build-architectures
3232
type: array
3333
results:
34-
- name: dependencies-artifact
35-
description: The Trusted Artifact URI pointing to the artifact with the rpm deps and source.
34+
- name: sources-with-lookaside-artifact
35+
description: |
36+
The Trusted Artifact URI pointing to the artifact with git checkout and
37+
files from the lookaside cache.
3638
type: string
3739
- name: skip-mpc-tasks
3840
description: |
@@ -110,7 +112,7 @@ spec:
110112
- create
111113
- --store
112114
- $(params.ociStorage)
113-
- $(results.dependencies-artifact.path)=/var/workdir/source
115+
- $(results.sources-with-lookaside-artifact.path)=/var/workdir/source
114116
env:
115117
- name: IMAGE_EXPIRES_AFTER
116118
value: $(params.ociArtifactExpiresAfter)

task/prefetch-rpmbuild-deps.yaml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
apiVersion: tekton.dev/v1
3+
kind: Task
4+
metadata:
5+
annotations:
6+
tekton.dev/tags: rpm-build
7+
name: download-builddeps
8+
spec:
9+
description: |-
10+
Download all build-time dependencies for an RPM build, per given lockfile.
11+
params:
12+
- description: The Trusted Artifact URI pointing to the lockfile location.
13+
name: lockfile-artifact
14+
type: string
15+
- name: ociStorage
16+
description: The OCI repository where the Trusted Artifacts are stored.
17+
type: string
18+
- name: ociArtifactExpiresAfter
19+
description: How long Trusted Artifacts should be retained
20+
type: string
21+
- description: RPM Build environment OCI image to run scripts in
22+
name: script-environment-image
23+
type: string
24+
- description: Is the build hermetic?
25+
name: hermetic
26+
type: string
27+
results:
28+
- name: build-deps-artifact
29+
description: |
30+
The Trusted Artifact URI pointing to the artifact with the result of the
31+
build-time deps downloads.
32+
type: string
33+
stepTemplate:
34+
volumeMounts:
35+
- mountPath: /var/workdir
36+
name: workdir
37+
steps:
38+
- name: use-trusted-artifact
39+
image: quay.io/redhat-appstudio/build-trusted-artifacts:latest@sha256:9b180776a41d9a22a1c51539f1647c60defbbd55b44bbebdd4130e33512d8b0d
40+
args:
41+
- use
42+
- $(params.lockfile-artifact)=/var/workdir/lockfile
43+
- name: download
44+
image: $(params.script-environment-image)
45+
script: |
46+
set -ex
47+
outputdir=/var/workdir/build-deps
48+
mkdir -p "$outputdir"
49+
lockfile=/var/workdir/lockfile/buildroot_lock.json
50+
# non-hermetic mode = we don't prefetch
51+
test $(params.hermetic) = true || exit 0
52+
# no lockfile = calculate-deps skipped = architecture skipped
53+
test -f "$lockfile" || exit 0
54+
mock-hermetic-repo \
55+
--lockfile /var/workdir/lockfile/buildroot_lock.json \
56+
--output-repo "$outputdir"
57+
- name: create-trusted-artifact
58+
image: quay.io/redhat-appstudio/build-trusted-artifacts:latest@sha256:9b180776a41d9a22a1c51539f1647c60defbbd55b44bbebdd4130e33512d8b0d
59+
args:
60+
- create
61+
- --store
62+
- $(params.ociStorage)
63+
- $(results.build-deps-artifact.path)=/var/workdir/build-deps
64+
env:
65+
- name: IMAGE_EXPIRES_AFTER
66+
value: $(params.ociArtifactExpiresAfter)
67+
volumes:
68+
- name: workdir
69+
emptyDir: {}

0 commit comments

Comments
 (0)