CI Architecture Detection
CI Architecture Detection and Container Builds
This document explains how the CI workflow handles different runner architectures and modern container build approaches.
Architecture Support
The CI workflow automatically detects the runner architecture and downloads the appropriate binaries for:
- Hugo Extended: Required for Hugo modules and SCSS processing
- golangci-lint: Code quality linting
Supported Architectures
uname -m output |
Mapped to | Description |
|---|---|---|
x86_64 |
amd64 |
Intel/AMD 64-bit |
aarch64 |
arm64 |
ARM 64-bit |
arm64 |
arm64 |
ARM 64-bit (macOS) |
Detection Logic
Container Builds with Kaniko
The CI uses Kaniko for container image builds instead of Docker-in-Docker.
Why Kaniko?
Traditional Docker-in-Docker Issues:
- Requires Docker daemon in CI environment
- Complex permission management (privileged containers)
- systemd/service management problems in containers
- Reliability issues with daemon startup
Kaniko Advantages:
- ✅ No Docker daemon required
- ✅ Works in any container environment
- ✅ Simpler security model
- ✅ Built-in registry authentication
- ✅ Eliminates Docker-in-Docker complexity
Implementation
Download URLs
Hugo Extended
- x86_64:
https://github.com/gohugoio/hugo/releases/download/v{VERSION}/hugo_extended_{VERSION}_linux-amd64.tar.gz - ARM64:
https://github.com/gohugoio/hugo/releases/download/v{VERSION}/hugo_extended_{VERSION}_linux-arm64.tar.gz
golangci-lint
- x86_64:
https://github.com/golangci/golangci-lint/releases/download/v{VERSION}/golangci-lint-{VERSION}-linux-amd64.tar.gz - ARM64:
https://github.com/golangci/golangci-lint/releases/download/v{VERSION}/golangci-lint-{VERSION}-linux-arm64.tar.gz
Version Configuration
Binary versions are configured at the top of each installation step:
Testing
Use the provided test scripts to verify both approaches:
Benefits
Architecture Detection
- Multi-architecture support: Works on both x86_64 and ARM64 runners
- Faster builds: Downloads prebuilt binaries instead of compiling from source
- Reliable: Fails fast with clear error messages for unsupported architectures
- Maintainable: Architecture detection logic is centralized and consistent
Container Build Migration
- Eliminates Docker daemon issues: No more startup failures or permission problems
- Better CI reliability: Consistent builds across different CI environments
- Simplified security: No privileged containers or complex volume mounts required
- Faster feedback: Immediate build failures instead of timeout loops