{"id":50692220,"url":"https://github.com/openchami/image-thrillhouse","last_synced_at":"2026-06-09T04:01:25.940Z","repository":{"id":363452599,"uuid":"1212049259","full_name":"OpenCHAMI/image-thrillhouse","owner":"OpenCHAMI","description":"Test image builds based on go","archived":false,"fork":false,"pushed_at":"2026-06-09T02:14:30.000Z","size":2549,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T02:19:24.912Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenCHAMI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-16T02:30:49.000Z","updated_at":"2026-06-09T01:50:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/OpenCHAMI/image-thrillhouse","commit_stats":null,"previous_names":["openchami/image-thrillhouse"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/OpenCHAMI/image-thrillhouse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCHAMI%2Fimage-thrillhouse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCHAMI%2Fimage-thrillhouse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCHAMI%2Fimage-thrillhouse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCHAMI%2Fimage-thrillhouse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenCHAMI","download_url":"https://codeload.github.com/OpenCHAMI/image-thrillhouse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCHAMI%2Fimage-thrillhouse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34090751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-09T04:01:08.236Z","updated_at":"2026-06-09T04:01:25.934Z","avatar_url":"https://github.com/OpenCHAMI.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# image-thrillhouse\n\nA Go-based image builder that wraps `buildah` to create layered OS images with support for multiple package managers. It is the next-generation replacement for the Python-based image-builder tool used by [OpenCHAMI](https://openchami.org/).\n\n## Features\n\n- **Multiple package managers** — DNF, Zypper, APT (parent builds only), mmdebstrap (scratch builds only)\n- **Scratch \u0026 parent builds** — build from `scratch` or layer on top of an existing image\n- **Declarative YAML config** with a `validate` subcommand\n- **Multiple publishers** — local container storage, SquashFS, container registry, S3\n- **OpenSCAP scanning** — XCCDF benchmarks + OVAL vulnerability evaluation\n- **Structured logging** — JSON or text, configurable levels\n\n## Install\n\n### Container (recommended)\n\nThe pre-built unified image includes every supported package manager.\n\n```bash\npodman pull ghcr.io/openchami/image-thrillhouse:latest\n```\n\nSee [docs/container-usage.md](docs/container-usage.md) for the full `podman run` invocation and flag explanations.\n\n### RPM (RHEL / Rocky / AlmaLinux / Fedora)\n\nGrab the `.rpm` for your architecture from the [latest release](https://github.com/OpenCHAMI/image-thrillhouse/releases/latest) and install it:\n\n```bash\nsudo dnf install ./image-thrillhouse-\u003cversion\u003e.\u003carch\u003e.rpm\n```\n\n`buildah` is a hard dependency; `squashfs-tools` and `podman` are recommended/suggested.\n\n### Debian package (Debian / Ubuntu)\n\nGrab the `.deb` for your architecture from the [latest release](https://github.com/OpenCHAMI/image-thrillhouse/releases/latest) and install it:\n\n```bash\nsudo apt install ./image-thrillhouse_\u003cversion\u003e_\u003carch\u003e.deb\n```\n\n`buildah` is a hard dependency; `squashfs-tools` is recommended and `podman` is suggested.\n\n### From source\n\nFor development or unsupported platforms, see [docs/development.md](docs/development.md#building-from-source).\n\n## Quick start\n\nSave the following as `rocky-base.yaml`:\n\n```yaml\nmeta:\n  name: rocky-base\n  tags:\n    - \"9.5\"\n  from: scratch\n\nlayer:\n  manager:\n    name: dnf\n    options:\n      releasever: \"9\"            # required for DNF scratch builds\n    config: |\n      [main]\n      gpgcheck=1\n      reposdir=/etc/image-thrillhouse/yum.repos.d\n  repos:\n    - path: /etc/image-thrillhouse/yum.repos.d/rocky-baseos.repo\n      content: |\n        [rocky-baseos]\n        name=rocky-baseos\n        baseurl=https://dl.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os\n        enabled=1\n        gpgcheck=1\n        gpgkey=https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-9\n  actions:\n    install:\n      packages:\n        - kernel\n        - systemd\n\npublish:\n  - type: local\n```\n\nValidate, then build:\n\n```bash\nimage-thrillhouse validate --config rocky-base.yaml\nimage-thrillhouse build --config rocky-base.yaml --log-level info\n```\n\n`validate` checks YAML syntax, required fields, backend option names/values, and publisher config — useful in CI before a full build.\n\n## A second example: SquashFS output\n\nThe `publish` section is a list, so you can fan out to multiple targets in one build. To produce a bootable SquashFS file alongside the local image:\n\n```yaml\npublish:\n  - type: local\n  - type: squashfs\n    path: /output/images        # writes \u003cmeta.name\u003e-\u003cmeta.tags[0]\u003e.squashfs\n```\n\nFor registry and S3 targets, see [docs/configuration.md#publish](docs/configuration.md#publish).\n\n## Command-line usage\n\n```bash\nimage-thrillhouse build    --config \u003cpath\u003e   # build an image\nimage-thrillhouse validate --config \u003cpath\u003e   # validate config without building\nimage-thrillhouse version                    # print version info\n```\n\nGlobal flags:\n\n- `--log-level` — `debug` | `info` | `warn` | `error` (default `info`)\n- `--log-format` — `json` | `text` (default `json`)\n\n## Recommendations\n\n- **Start with `validate`.** Run `image-thrillhouse validate` in CI before any build — it catches typos in backend options and missing required fields before you pay for a long package download.\n- **Use the unified container.** It already has DNF, Zypper, APT, and mmdebstrap. Switching distros is a config change, not an image change. See [docs/container-usage.md](docs/container-usage.md#why-a-unified-image).\n- **Always set `releasever` for DNF scratch builds.** This is the most common scratch-build failure mode. See [docs/configuration.md](docs/configuration.md#backend-options).\n- **Use `remove_packages` to slim images.** Drop debug packages, docs, and unused firmware in the same step that installs the base — see [docs/configuration.md#package-removal](docs/configuration.md#package-removal).\n- **Pin image tags in production.** Use `ghcr.io/openchami/image-thrillhouse:v0.1.0` rather than `:latest` for reproducible builds.\n\n## Documentation\n\n- [Configuration reference](docs/configuration.md) — every field in the YAML, with examples\n- [Container usage](docs/container-usage.md) — running the pre-built image, flag explanations, multi-version DNF\n- [Package manager support](docs/package-managers.md) — backend feature matrix\n- [Example configs](docs/examples.md) — annotated index of `tests/` configs\n- [Development](docs/development.md) — building, testing, architecture, adding backends/publishers\n- [Troubleshooting](docs/troubleshooting.md) — common errors\n- [Migration from the Python image-builder](docs/migration-from-python.md)\n- [Unit testing guide](TESTING.md)\n\n## Related projects\n\n- [Buildah](https://buildah.io/) — container building tool\n- [Podman](https://podman.io/) — container runtime\n- [OpenCHAMI](https://openchami.org/) — HPC cluster management (original use case)\n\n## Contributing\n\nIssues and PRs are welcome. Areas of interest include additional package managers (pacman, apk, …), additional publishers (Azure, GCP, …), broader test coverage, and build-time optimization.\n\n## License\n\nSee [LICENSE](LICENSE).\n\n## LLM use acknowledgement\n\nThe majority of the documentation and some of the code was written by Claude Sonnet 4.5 (training cutoff September 29, 2025). All generated content has been verified and tested.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenchami%2Fimage-thrillhouse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenchami%2Fimage-thrillhouse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenchami%2Fimage-thrillhouse/lists"}