konflux-ci/clair-in-ci-db/hermetic-build-deps
Claude Code and agent skill by konflux-ci/clair-in-ci-db
- community
Checking that the SKILL.md file is still in the repository.
Use when adding, updating, or troubleshooting RPM or artifact dependencies for the hermetic build. Covers rpms.in.yaml, rpms.lock.yaml, artifacts.lock.yaml, epel.repo, Cachi2 prefetching, and the Dockerfile install step.
Install
npx vskill@latest install konflux-ci/clair-in-ci-db/hermetic-build-depsSKILL.md
Hermetic Build Dependencies
Overview
This repo uses Konflux hermetic builds — the build-container task runs with no network access. All external dependencies (RPMs, GPG keys) must be prefetched by Cachi2 during the prefetch-dependencies task and made available offline. Four files control this system and must stay in sync.
When to Use
- Adding a new RPM package to the image
- Updating a pinned RPM version
- Prefetch-dependencies task is failing
- Understanding how Dockerfile installs relate to lock files
- Updating the EPEL GPG key or repository configuration
Dependency Files
| File | Purpose | Format | |
|---|---|---|---|
rpms.in.yaml | Declares which packages to install | packages: [jq] + repo config pointer | |
rpms.lock.yaml | Pinned RPM versions, repos, checksums | Auto-generated lock file | |
artifacts.lock.yaml | Pinned generic artifacts (GPG keys, individual RPMs) | Manual checksums for non-repo downloads | |
epel.repo | EPEL 8 yum/dnf repository configuration | Standard repo file format |
How They Work Together
In the Tekton Pipeline
The prefetch-input parameter tells Cachi2 what to prefetch:
type: rpm— readsrpms.in.yaml→ resolves viarpms.lock.yaml→ downloads RPMstype: generic— readsartifacts.lock.yaml→ downloads listed artifacts by URL + checksum
In the Dockerfile
Prefetched artifacts land in /cachi2/output/deps/:
Key points:
- GPG key is imported from the Cachi2 generic artifacts path
microdnf installuses exact version (jq-1.6-11.el8_10) matchingrpms.lock.yaml--setopt=tsflags=nodocsand--setopt=install_weak_deps=0minimize image size
Current Dependencies
RPMs (via rpms.in.yaml + rpms.lock.yaml)
| Package | Pinned Version | |
|---|---|---|
| jq | 1.6-11.el8_10 |
Generic Artifacts (via artifacts.lock.yaml)
| Artifact | Source | |
|---|---|---|
| RPM-GPG-KEY-EPEL-8 | dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8 | |
| jq-1.6-11.el8_10.x86_64.rpm | cdn-ubi.redhat.com (UBI 8 appstream) | |
| oniguruma-6.8.2-3.el8.x86_64.rpm | cdn-ubi.redhat.com (UBI 8 appstream, jq dependency) |
How to Add a New RPM
- Add the package name to
rpms.in.yaml:
``yaml packages: [jq, newpackage] ``
- Regenerate the lock file using
rpm-lockfile-prototype:
``bash rpm-lockfile-prototype --image <BASE_IMAGE> rpms.in.yaml ` This resolves packages against the base image, producing rpms.lock.yaml` with exact versions and checksums. See Konflux docs for details.
- If the RPM or its dependencies need to be pinned as generic artifacts, add entries to
artifacts.lock.yamlwith the download URL and SHA-256 checksum
- Update the Dockerfile to install the new package with its exact version:
``dockerfile microdnf -y --setopt=tsflags=nodocs install \ --setopt=install_weak_deps=0 \ jq-1.6-11.el8_10 \ newpackage-x.y-z.el8 ``
- Keep it as a single
RUNlayer to minimize image size
How to Update an Existing RPM Version
- Update the version in
rpms.lock.yaml(or regenerate with Cachi2) - Update the checksum in
artifacts.lock.yamlif the RPM is also listed there - Update the exact version string in the Dockerfile
microdnf installcommand - All three must match
Common Mistakes
| Problem | Fix | |
|---|---|---|
| prefetch-dependencies fails with checksum mismatch | Checksums in artifacts.lock.yaml or rpms.lock.yaml are stale — regenerate or update | |
| Build fails with "package not found" | RPM version in Dockerfile doesn't match rpms.lock.yaml pinned version | |
| GPG key import fails | artifacts.lock.yaml checksum for RPM-GPG-KEY-EPEL-8 is wrong or key URL changed | |
| New package not installed | Added to rpms.in.yaml but didn't regenerate rpms.lock.yaml | |
| Transitive dependency missing | Add the dependency RPM to artifacts.lock.yaml as a generic artifact (like oniguruma for jq) | |
| Hermetic build fails with network error | Verify all deps are in lock files — hermetic builds have no network access |
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/hermetic-build-deps/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/konflux-ci/clair-in-ci-db/hermetic-build-deps)