Skip to content
Agentmart
Submit a tool

rhdh-base-images

Analyzes and updates the `FROM` base images, Node headers, Go toolchain, and `rpms.lock.yaml` files in rhdh, rhdh-operator, and rhdh-must-gather; pin…

Skill by redhat-developer

IndexedApache-2.0★ 18
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/redhat-developer-rhdh-base-images

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Analyzes and updates the `FROM` base images, Node headers, Go toolchain, and `rpms.lock.yaml` files in rhdh, rhdh-operator, and rhdh-must-gather; pin plugin-catalog `builder.Containerfile` / `.nvm/` / `konflux.additional-tags`; and bump overlays `versions.json` `node` on `main` or a `release-1.10` branch. Use for weekly base-image maintenance, a UBI or RHEL bump, an RPM lockfile refresh, "which base images are out of date", node-v*-headers.tar.gz, catalog builder FROM, builder PipelineRun BASE_IMAGES, catalog release suffix, overlays Node version, UBI minor skew inside a Containerfile, or an OpenShift clients `N-el9-beta` / `4.21-el9-beta` RPM 404.

Use cases: devops

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Shell scripts

Network hosts it talks to 5

  • access.redhat.com · found in code
  • codeload.github.com · found in install command
  • github.com · found in code
  • gitlab.cee.redhat.com · found in code
  • mirror.openshift.com · found in code

Files it touches

  • ~/.claude/skills/rhdh-base-images

What's inside

Skill name
rhdh-base-images
Description
Analyzes and updates the `FROM` base images, Node headers, Go toolchain, and `rpms.lock.yaml` files in rhdh, rhdh-operator, and rhdh-must-gather; pin plugin-catalog `builder.Containerfile` / `.nvm/` / `konflux.additional-tags`; and bump overlays `versions.json` `node` on `main` or a `release-1.10` branch. Use for weekly base-image maintenance, a UBI or RHEL bump, an RPM lockfile refresh, "which base images are out of date", node-v*-headers.tar.gz, catalog builder FROM, builder PipelineRun BASE_IMAGES, catalog release suffix, overlays Node version, UBI minor skew inside a Containerfile, or an OpenShift clients `N-el9-beta` / `4.21-el9-beta` RPM 404.
License
Apache-2.0
Compatibility
bash, jq, skopeo, curl, git, python3; podman or docker for toolchain detection; gh or glab for PR/MR creation.
Instructions
125 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (6)

  • SKILL.md
  • openai.yaml · agents/
  • repos.md · references/
  • analyze-base-images.sh · scripts/
  • base-images-and-rpms.sh · scripts/
  • update-base-images.md · workflows/

SKILL.md (first lines)

# RHDH base images

Use the bundled scripts instead of reconstructing their repository-specific logic.

Repository checkouts are explicit inputs the user names. This skill never
discovers another skill's paths.

## Route

| Intent | Load or run |
|---|---|
| Read-only current/latest image scan | `workflows/update-base-images.md`, then `scripts/base-images-and-rpms.sh --analyze ...` |
| Explain repository rules | `references/repos.md` |
| Preview an update | `workflows/update-base-images.md`, then `scripts/base-images-and-rpms.sh --dry-run ...` |
| Update images, lockfiles, Node headers, catalog builder, overlays node, or Go toolchain | `workflows/update-base-images.md` |

A scan reports, per repository: every `FROM` image with its current and latest
tag, UBI minor skew within a file, Node or Go toolchain drift, the registries and
branches it read, and anything it could not read.

## Writing rules

Any checkout, branch, file edit, dependency install, commit, push, or PR is a
write. Run read-only discovery or `--dry-run` first, then follow
`/mutation-gate`: state each operation with its target repository and branch
(`rhdh:release-1.10`), the exact command, the change it will land, and what
happens to the remaining operations if it fails; get approval for that stated
set; execute; then report every operation as completed, failed, or skipped, with
the resources it changed and the risks that remain.

Installing `rpm-lockfile-prototype`, logging into registries, using `--push`, and
opening PRs are each their own operation. Default to local, no-push behavior; do
not push directly to protected branches. Verify the branch exists and the working
tree is clean before writing.

When the user asks to push and open a PR/MR after approval, invoke `/rhdh-pr-mr`
by name (or its `create-pr-mr.sh`) instead of hand-rolling `gh pr create` /
`glab mr create`. Pass `--issue` when a Jira key is already known; omit it to
skip linking. Midstream `updateBaseImages.sh` still uses distgit `createPR.sh`
until that path is migrated.

## Repository invariants

- Accepted branch selectors are `main` or `release-*`; map them to the documented
  GitLab scripts branch in `references/repos.md`.
- Keep base-image UBI minors aligned with RPM repository URLs.
- Before regenerating `rpms.lock.yaml`, bump OpenShift clients `N-el9-beta`
  `baseurl` values and matching `rhocp-N-for-rhel-9-$basearch-rpms` repoids in
  `rpms.in.yaml` to the latest **released** 4.y stream that still exists on
  mirror.openshift.com (for example `4.21-el9-beta` → `4.22-el9-beta`). Released
  4.y names come from the product life cycle API linked from
  https://access.redhat.com/support/policy/updates/openshift#dates. Do not move
  to an unreleased directory such as `4.23-el9-beta` or `5.1-el9-beta`. If the
  life cycle fetch fails, or no released 4.y directory is on the mirror, leave
  `rpms.in.yaml` unchanged. Skip when the file has no such repo.
- When a plugin-catalog checkout is in the run, rewrite
  `build/containerfiles/builder.Containerfile` `/rhocp/4.N/` path segments to
  that same latest released 4.y (for example `/rhocp/4.21/` → `/rhocp/4.22/`).
  Leave `ocp-tools` URLs unchanged. Do not rewrite when the life cycle fetch
  fails.
- When that Containerfile changes in the same run, increment its `release="N"`
  label and the matching `X.Y-N` token in `konflux.additional-tags` once
  (`release="3"` and `2.2-3` become `release="4"` and `2.2-4`). Leave
  `version=`, `rhdh.version=`, and `node-v*` to the node-header rewrite.
  Set `BASE_IMAGES` on every `.tekton/plugin-catalog-builder*.yaml`
  `build-source-image` task to the Containerfile `FROM` image, inserting the
  param when it is missing. Do not bump `release` when the Containerfile is
  unchanged.
- When the RPM Containerfile uses `dnf`/`microdnf install --installroot`
  (operator empty rootfs), regenerate the lockfile with
  `rpm-lockfile-prototype --bare` so the full closure (glibc, coreutils, bash)
  is locked. Do not pass `-f`; that loads the UBI rpmdb and omits those
  packages. Layered installs onto the base image still use `-f`. If the solve
  fails (`nothing provides`, `conflicting requests`), restore
  `rpms.lock.yaml` / `rpms.in.yaml` and do not push.
- On RHDH, update Node headers when the builder image changes Node. Then, when
  those checkouts are in scope, pin plugin-catalog
  `build/containerfiles/builder.Containerfile` FROM to the same UBI Node
  `tag@sha256`. Catalog headers follow the Node version that Containerfile
  will run: image `node --version`, or the newer `nodejs` RPM from
  `dnf repoquery` when the file `dnf`-installs `nodejs` before the headers
  `RUN`. Do not copy an older rhdh `.nvm/` over that version. Rewrite
  `konflux.additional-tags` `node-v*` to match the catalog `.nvmrc`, and set
  overlays `versions.json` `node` to the rhdh `.nvmrc` value.
  Catalog maps `release-1.Y` → GitLab `rhdh-1.Y-rhel-9` and
  `release-2.Y` → GitLab `release-2.Y` (using UBI10 / RHEL10). Catalog has no
  `rpms.lock.yaml`. Do not `[skip-build]` the catalog builder commit.
- On rhdh-operator `main`, raise `go.mod` to the Go toolset image when the
  image is newer. On rhdh-must-gather `main` and `release-2.*`, do the same
  from the root `Containerfile` `ubi9/go-toolset` or `ubi10/go-toolset` image,
  inserting a `toolchain` line when `go.mod` has none. Skip must-gather
  `release-1.*` (no Go module). Never lower `go` or `toolchain` to match an
  older image; a newer pin (for example from Renovate) is valid.
- Exclude RHDH `e2e-tests/` and `.ci/` from image scans.
- Ignore `rpm-lockfile-prototype` lines matching `No sources found for` or
  "no matching sources". Those source RPMs are often unpublished; the binary
  lockfile is still valid. Do not report them as unread, failed, or remaining
  risks.

Another skill invokes `/rhdh-base-images` by name and uses what it reports; it
never reaches for these script paths. `/rhdh-konflux-tasks` does this during a
stream Konflux bump so Node headers match the builder image; it passes named
checkouts and a `main` or `release-*` selector.

## Completion

An analysis is complete when every repository in scope is named with its current
and latest tag, UBI skew and toolchain drift are stated or stated as none, and
every registry, lockfile, or branch the scan could not read is named as unread
instead of reported as current. Filtered `No sources found for` /
"no matching sources" lines are not unread and are omitted from the report.

An update is complete when the target branch was verified to exist against a
clean working tree before any edit, every approved operation has been reported by
target and outcome, and the push and PR state is stated explicitly — including
"not pushed" when the default local behavior was kept. When Node headers /
`.nvmrc` changed, name the plugin-catalog FROM old→new, confirm
`grep konflux.additional-tags build/containerfiles/builder.Containerfile`
contains `node-v` matching `.nvmrc`, and name the overlays `versions.json`

From redhat-developer/rhdh-skills, Apache-2.0.

More from redhat-developer/rhdh-skills

Signals

Stars
18
Forks
40
Open issues
1
Last commit (this folder)
Oct 23, 2026 (6 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from redhat-developer

Cite this page

rhdh-base-images skill. Agent Mart. https://agentmart.dev/skills/redhat-developer-rhdh-base-images (last updated 2026-10-24)