Initial commit
This commit is contained in:
commit
a7514cca82
12 changed files with 988 additions and 0 deletions
168
README.md
Normal file
168
README.md
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
# Container Image Builder
|
||||
|
||||
Dagger-based pipeline for building extensible container images with two base variants (Ubuntu 24.04 and Chainguard) and customizable tool sets.
|
||||
|
||||
## Overview
|
||||
|
||||
This project provides a systematic way to build and maintain container images with:
|
||||
- **Multi-architecture support**: All images built for linux/amd64 and linux/arm64
|
||||
- **Two base image variants**: Ubuntu 24.04 and Chainguard (Wolfi-based)
|
||||
- **Core tools** available in all images: Git, jq, yq, Node.js (20/22/24)
|
||||
- **Specialized tools** as separate image variants: kustomize, Dagger, ESPHome, Zola, yamllint
|
||||
- **Automated dependency updates** via Renovate
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [Mise](https://mise.jdx.dev/) for tool management
|
||||
- Docker or compatible container runtime (for running Dagger)
|
||||
|
||||
## Setup
|
||||
|
||||
1. Install tools via Mise:
|
||||
```bash
|
||||
mise install
|
||||
```
|
||||
|
||||
This installs:
|
||||
- Dagger 0.19.8
|
||||
- Go 1.23
|
||||
|
||||
2. Verify installation:
|
||||
```bash
|
||||
dagger version
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Building Individual Tool Images
|
||||
|
||||
Build a specific tool image:
|
||||
|
||||
```bash
|
||||
# Ubuntu-based image (default: amd64)
|
||||
dagger call build-tool --tool=yamllint --config-file=tools.yaml --base=ubuntu
|
||||
|
||||
# Chainguard-based image (default: amd64)
|
||||
dagger call build-tool --tool=kustomize --config-file=tools.yaml --base=chainguard
|
||||
|
||||
# Build for arm64 platform
|
||||
dagger call build-tool --tool=yamllint --config-file=tools.yaml --platform=linux/arm64
|
||||
|
||||
# Build for amd64 platform (explicit)
|
||||
dagger call build-tool --tool=yamllint --config-file=tools.yaml --platform=linux/amd64
|
||||
```
|
||||
|
||||
### Verifying Tool Installation
|
||||
|
||||
```bash
|
||||
# Check yamllint version
|
||||
dagger call build-tool --tool=yamllint --config-file=tools.yaml \
|
||||
with-exec --args=yamllint,--version stdout
|
||||
|
||||
# Check multiple tools
|
||||
dagger call build-tool --tool=yamllint --config-file=tools.yaml \
|
||||
with-exec --args=jq,--version \
|
||||
with-exec --args=yq,--version \
|
||||
with-exec --args=node,--version stdout
|
||||
```
|
||||
|
||||
### Building All Images
|
||||
|
||||
Build and publish all images to a registry (multi-arch: amd64 + arm64):
|
||||
|
||||
```bash
|
||||
dagger call build-all --config-file=tools.yaml --registry=docker.io/myorg
|
||||
```
|
||||
|
||||
This creates multi-architecture images with the following naming scheme:
|
||||
- **Ubuntu base**: `ubuntu-runner:24.04` (amd64 + arm64)
|
||||
- **Ubuntu + tool**: `ubuntu-{tool}:{version}` (e.g., `ubuntu-esphome:2025.11.2`) (amd64 + arm64)
|
||||
- **Chainguard + tool**: `{tool}:{version}` (e.g., `esphome:2025.11.2`) (amd64 + arm64)
|
||||
|
||||
All images are published as multi-platform manifests supporting both linux/amd64 and linux/arm64.
|
||||
|
||||
## Configuration
|
||||
|
||||
### Adding New Tools
|
||||
|
||||
Edit `tools.yaml` to add new tools:
|
||||
|
||||
```yaml
|
||||
tools:
|
||||
newtool:
|
||||
version: "1.2.3"
|
||||
description: "Description of the new tool"
|
||||
```
|
||||
|
||||
Then update `dagger/main.go` to add installation logic in both `buildUbuntuTool()` and `buildChainguardTool()` functions.
|
||||
|
||||
### Updating Tool Versions
|
||||
|
||||
Tool versions are managed in `tools.yaml`. Renovate will automatically create PRs to update these versions.
|
||||
|
||||
## Architecture
|
||||
|
||||
- **`tools.yaml`**: Version configuration for all tools
|
||||
- **`dagger/main.go`**: Dagger pipeline implementation
|
||||
- **`renovate.json`**: Renovate configuration for automated updates
|
||||
- **`.mise.toml`**: Mise tool version management
|
||||
|
||||
## Available Tools
|
||||
|
||||
### Core Tools (all images)
|
||||
- Git
|
||||
- jq
|
||||
- yq
|
||||
- Node.js (20, 22, 24)
|
||||
|
||||
### Specialized Tools
|
||||
- **kustomize**: Kubernetes configuration customization
|
||||
- **dagger**: Application delivery as code
|
||||
- **esphome**: ESPHome firmware builder
|
||||
- **zola**: Static site generator
|
||||
- **yamllint**: YAML linter
|
||||
|
||||
## Renovate Integration
|
||||
|
||||
The project is configured with Renovate to automatically:
|
||||
- Monitor releases for all tools
|
||||
- Create PRs when new versions are available
|
||||
- Update both `tools.yaml` and `.mise.toml` files
|
||||
|
||||
## Development
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── dagger/
|
||||
│ ├── main.go # Dagger module implementation
|
||||
│ ├── go.mod
|
||||
│ └── go.sum
|
||||
├── tools.yaml # Tool version configuration
|
||||
├── renovate.json # Renovate configuration
|
||||
├── .mise.toml # Mise configuration
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
### Local Testing
|
||||
|
||||
Test building a single tool image locally:
|
||||
|
||||
```bash
|
||||
dagger call build-tool --tool=yamllint --config-file=tools.yaml
|
||||
```
|
||||
|
||||
## Image Tags
|
||||
|
||||
Images follow a consistent tagging scheme:
|
||||
|
||||
| Base | Tool | Tag Format | Example |
|
||||
|------|------|------------|---------|
|
||||
| Ubuntu | None | `ubuntu-runner:24.04` | Base Ubuntu image |
|
||||
| Ubuntu | Any | `ubuntu-{tool}:{version}` | `ubuntu-kustomize:5.5.0` |
|
||||
| Chainguard | Any | `{tool}:{version}` | `kustomize:5.5.0` |
|
||||
|
||||
## License
|
||||
|
||||
Apache-2.0
|
||||
Loading…
Add table
Add a link
Reference in a new issue