From 87eae9910eb7f5118feed6416ba1582c10d63e68 Mon Sep 17 00:00:00 2001 From: Jonathan Lebon Date: Tue, 17 Jun 2025 15:07:23 -0400 Subject: [PATCH] bootc-base-imagectl: support hidden manifests, hide minimal-plus We don't currently want the minimal-plus target to be user-facing. It's intended only for other Fedora variants. Let's support "hidden" manifests by having their names end in `.hidden.yaml`. Then, make `minimal-plus` hidden. I considered instead having them start with `.` to match well-established semantics, but I don't like either that this hides them from an `ls` in the git repo (or even with `-a`, puts them higher up whereas I want it to be close to `minimal.yaml`). I also considered leveraging the existing symlink hiding semantics, but it also felt awkward to rename a file and add a symlink to it just for the purpose of hiding it. --- .tekton/fedora-bootc-42-iot-pull-request.yaml | 2 +- .tekton/fedora-bootc-42-iot-push.yaml | 2 +- .tekton/fedora-bootc-42-minimal-plus-pull-request.yaml | 2 +- .tekton/fedora-bootc-42-minimal-plus-push.yaml | 2 +- .tekton/fedora-bootc-rawhide-iot-pull-request.yaml | 2 +- .tekton/fedora-bootc-rawhide-iot-push.yaml | 2 +- .../fedora-bootc-rawhide-minimal-plus-pull-request.yaml | 2 +- .tekton/fedora-bootc-rawhide-minimal-plus-push.yaml | 2 +- bootc-base-imagectl | 9 +++++++-- fedora-minimal-plus.yaml | 2 +- install-manifests | 6 +++++- minimal-plus.yaml => minimal-plus.hidden.yaml | 0 12 files changed, 21 insertions(+), 12 deletions(-) rename minimal-plus.yaml => minimal-plus.hidden.yaml (100%) diff --git a/.tekton/fedora-bootc-42-iot-pull-request.yaml b/.tekton/fedora-bootc-42-iot-pull-request.yaml index bc523bc..866fe38 100644 --- a/.tekton/fedora-bootc-42-iot-pull-request.yaml +++ b/.tekton/fedora-bootc-42-iot-pull-request.yaml @@ -10,7 +10,7 @@ metadata: pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch == "main" && ( "./iot.yaml".pathChanged() || "./iot/***".pathChanged() - || "./minimal-plus.yaml".pathChanged() || "./minimal-plus/***".pathChanged() + || "./minimal-plus.hidden.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || "./minimal.yaml".pathChanged() || "./minimal/***".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || ".tekton/fedora-bootc-42-iot-pull-request.yaml".pathChanged() || "Containerfile".pathChanged() ) diff --git a/.tekton/fedora-bootc-42-iot-push.yaml b/.tekton/fedora-bootc-42-iot-push.yaml index 8884b05..20e129d 100644 --- a/.tekton/fedora-bootc-42-iot-push.yaml +++ b/.tekton/fedora-bootc-42-iot-push.yaml @@ -9,7 +9,7 @@ metadata: pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch == "main" && ( "./iot.yaml".pathChanged() || "./iot/***".pathChanged() - || "./minimal-plus.yaml".pathChanged() || "./minimal-plus/***".pathChanged() + || "./minimal-plus.hidden.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || "./minimal.yaml".pathChanged() || "./minimal/***".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || ".tekton/fedora-bootc-42-iot-push.yaml".pathChanged() || "Containerfile".pathChanged() ) diff --git a/.tekton/fedora-bootc-42-minimal-plus-pull-request.yaml b/.tekton/fedora-bootc-42-minimal-plus-pull-request.yaml index 5f96be7..1071297 100644 --- a/.tekton/fedora-bootc-42-minimal-plus-pull-request.yaml +++ b/.tekton/fedora-bootc-42-minimal-plus-pull-request.yaml @@ -9,7 +9,7 @@ metadata: pipelinesascode.tekton.dev/cancel-in-progress: "true" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "main" && ( "./minimal-plus.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() + == "main" && ( "./minimal-plus.hidden.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || ".tekton/fedora-bootc-42-minimal-plus-pull-request.yaml".pathChanged() || "Containerfile".pathChanged() ) creationTimestamp: null diff --git a/.tekton/fedora-bootc-42-minimal-plus-push.yaml b/.tekton/fedora-bootc-42-minimal-plus-push.yaml index c9c9b8b..5d46709 100644 --- a/.tekton/fedora-bootc-42-minimal-plus-push.yaml +++ b/.tekton/fedora-bootc-42-minimal-plus-push.yaml @@ -8,7 +8,7 @@ metadata: pipelinesascode.tekton.dev/cancel-in-progress: "false" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch - == "main" && ( "./minimal-plus.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() + == "main" && ( "./minimal-plus.hidden.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || ".tekton/fedora-bootc-42-minimal-plus-push.yaml".pathChanged() || "Containerfile".pathChanged() ) creationTimestamp: null diff --git a/.tekton/fedora-bootc-rawhide-iot-pull-request.yaml b/.tekton/fedora-bootc-rawhide-iot-pull-request.yaml index 90df2d5..6fdd607 100644 --- a/.tekton/fedora-bootc-rawhide-iot-pull-request.yaml +++ b/.tekton/fedora-bootc-rawhide-iot-pull-request.yaml @@ -10,7 +10,7 @@ metadata: pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch == "main" && ( "./iot.yaml".pathChanged() || "./iot/***".pathChanged() - || "./minimal-plus.yaml".pathChanged() || "./minimal-plus/***".pathChanged() + || "./minimal-plus.hidden.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || "./minimal.yaml".pathChanged() || "./minimal/***".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || ".tekton/fedora-bootc-rawhide-iot-pull-request.yaml".pathChanged() || "Containerfile".pathChanged() ) diff --git a/.tekton/fedora-bootc-rawhide-iot-push.yaml b/.tekton/fedora-bootc-rawhide-iot-push.yaml index 80a2008..cc07c7b 100644 --- a/.tekton/fedora-bootc-rawhide-iot-push.yaml +++ b/.tekton/fedora-bootc-rawhide-iot-push.yaml @@ -9,7 +9,7 @@ metadata: pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch == "main" && ( "./iot.yaml".pathChanged() || "./iot/***".pathChanged() - || "./minimal-plus.yaml".pathChanged() || "./minimal-plus/***".pathChanged() + || "./minimal-plus.hidden.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || "./minimal.yaml".pathChanged() || "./minimal/***".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || ".tekton/fedora-bootc-rawhide-iot-push.yaml".pathChanged() || "Containerfile".pathChanged() ) diff --git a/.tekton/fedora-bootc-rawhide-minimal-plus-pull-request.yaml b/.tekton/fedora-bootc-rawhide-minimal-plus-pull-request.yaml index 965ee86..9db25d1 100644 --- a/.tekton/fedora-bootc-rawhide-minimal-plus-pull-request.yaml +++ b/.tekton/fedora-bootc-rawhide-minimal-plus-pull-request.yaml @@ -9,7 +9,7 @@ metadata: pipelinesascode.tekton.dev/cancel-in-progress: "true" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "main" && ( "./minimal-plus.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() + == "main" && ( "./minimal-plus.hidden.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || ".tekton/fedora-bootc-rawhide-minimal-plus-pull-request.yaml".pathChanged() || "Containerfile".pathChanged() ) creationTimestamp: null diff --git a/.tekton/fedora-bootc-rawhide-minimal-plus-push.yaml b/.tekton/fedora-bootc-rawhide-minimal-plus-push.yaml index 6dfb20c..403e24c 100644 --- a/.tekton/fedora-bootc-rawhide-minimal-plus-push.yaml +++ b/.tekton/fedora-bootc-rawhide-minimal-plus-push.yaml @@ -8,7 +8,7 @@ metadata: pipelinesascode.tekton.dev/cancel-in-progress: "false" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch - == "main" && ( "./minimal-plus.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() + == "main" && ( "./minimal-plus.hidden.yaml".pathChanged() || "./fedora-includes/generic.yaml".pathChanged() || "./minimal-plus/***".pathChanged() || ".tekton/fedora-bootc-rawhide-minimal-plus-push.yaml".pathChanged() || "Containerfile".pathChanged() ) creationTimestamp: null diff --git a/bootc-base-imagectl b/bootc-base-imagectl index f2dffae..4cdcc1e 100755 --- a/bootc-base-imagectl +++ b/bootc-base-imagectl @@ -17,7 +17,12 @@ def run_build_rootfs(args): Regenerates a base image using a build configuration. """ target = args.target - manifest_path = f'/{MANIFESTDIR}/{args.manifest}.yaml' + for fn in [f'{args.manifest}.yaml', f'{args.manifest}.hidden.yaml']: + manifest_path = f'/{MANIFESTDIR}/{fn}' + if os.path.exists(manifest_path): + break + else: + raise Exception(f"manifest not found: {args.manifest}") rpmostree_argv = ['rpm-ostree', 'compose', 'rootfs'] @@ -116,7 +121,7 @@ def run_list(args): d = '/' + MANIFESTDIR for ent in sorted(os.listdir(d)): name, ext = os.path.splitext(ent) - if ext != '.yaml': + if ext != '.yaml' or name.endswith('.hidden'): continue fullpath = os.path.join(d, ent) if os.path.islink(fullpath): diff --git a/fedora-minimal-plus.yaml b/fedora-minimal-plus.yaml index 15e1815..a1f9a23 120000 --- a/fedora-minimal-plus.yaml +++ b/fedora-minimal-plus.yaml @@ -1 +1 @@ -minimal-plus.yaml \ No newline at end of file +minimal-plus.hidden.yaml \ No newline at end of file diff --git a/install-manifests b/install-manifests index 88e75d7..f36a442 100755 --- a/install-manifests +++ b/install-manifests @@ -8,7 +8,11 @@ for image in minimal standard minimal-plus iot; do # Embed the generic defaults cp -a $image $manifestdir/ # And the top-level Fedora-specific manifests - cp -a $image.yaml $manifestdir/ + if [ -f $image.hidden.yaml ]; then + cp -a $image.hidden.yaml $manifestdir/ + else + cp -a $image.yaml $manifestdir/ + fi # And the legacy `fedora-` prefixed names cp -a fedora-$image.yaml $manifestdir/ done diff --git a/minimal-plus.yaml b/minimal-plus.hidden.yaml similarity index 100% rename from minimal-plus.yaml rename to minimal-plus.hidden.yaml