docs(examples): add build-* configuration examples

Build configuration examples for testing and documentation:
- build-minimal.yaml - Auto-detect everything
- build-go-cli.yaml - Cross-platform CLI
- build-go-wails.yaml - Desktop app with frontend
- build-go-library.yaml - Library (no binary)
- build-docker.yaml - Multi-arch container
- build-docker-go.yaml - Go binary + Docker
- build-linuxkit.yaml - Immutable Linux images
- build-php-laravel.yaml - FrankenPHP + Laravel
- build-multi-binary.yaml - Multiple binaries
- build-full.yaml - All available options

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Snider 2026-01-29 00:45:17 +00:00
parent dba9088eeb
commit 05de92148b
10 changed files with 452 additions and 0 deletions

View file

@ -0,0 +1,42 @@
# Example: Go + Docker Build Configuration
# Build Go binary then containerize
version: 1
project:
name: myservice
binary: myservice
# First: build Go binary
build:
main: ./cmd/myservice
env:
CGO_ENABLED: "0"
GOOS: linux
ldflags:
- -s -w
- -X main.version={{.Version}}
targets:
- os: linux
arch: amd64
- os: linux
arch: arm64
# Then: build Docker image with the binary
docker:
dockerfile: Dockerfile
registry: ghcr.io
image: myorg/myservice
platforms:
- linux/amd64
- linux/arm64
tags:
- latest
- "{{.Version}}"
# Dockerfile should COPY the built binary:
#
# FROM alpine:latest
# COPY myservice /usr/local/bin/myservice
# ENTRYPOINT ["/usr/local/bin/myservice"]

View file

@ -0,0 +1,40 @@
# Example: Docker Build Configuration
# Multi-arch container image
version: 1
project:
name: myservice
type: docker
docker:
dockerfile: Dockerfile
context: .
registry: ghcr.io
image: myorg/myservice
platforms:
- linux/amd64
- linux/arm64
tags:
- latest
- "{{.Version}}"
- "{{.Version}}-alpine"
build_args:
APP_VERSION: "{{.Version}}"
BUILD_DATE: "{{.Date}}"
labels:
org.opencontainers.image.source: https://github.com/myorg/myservice
org.opencontainers.image.description: My Service
org.opencontainers.image.licenses: MIT
# Optional: build stage target
target: production
# Optional: cache settings
cache:
from: type=gha
to: type=gha,mode=max

View file

@ -0,0 +1,121 @@
# Example: Full Build Configuration
# All available options
version: 1
project:
name: myapp
binary: myapp
type: auto # auto, go, wails, docker, linuxkit, php
build:
# Go build settings
main: ./cmd/myapp
# Environment variables
env:
CGO_ENABLED: "0"
GOFLAGS: "-mod=readonly"
# Build flags
flags:
- -trimpath
- -v
# Linker flags
ldflags:
- -s -w
- -X main.version={{.Version}}
- -X main.commit={{.Commit}}
- -X main.date={{.Date}}
- -X main.builtBy=core
# Build tags
tags:
- production
- netgo
# Build targets
targets:
- os: linux
arch: amd64
- os: linux
arch: arm64
- os: linux
arch: "386"
- os: darwin
arch: amd64
- os: darwin
arch: arm64
- os: windows
arch: amd64
- os: windows
arch: arm64
- os: freebsd
arch: amd64
# Wails configuration (if type: wails)
wails:
frontend: ./frontend
install_cmd: install
build_cmd: build
dev_cmd: dev
# Docker configuration (if type: docker or docker output enabled)
docker:
dockerfile: Dockerfile
context: .
registry: ghcr.io
image: myorg/myapp
platforms:
- linux/amd64
- linux/arm64
tags:
- latest
- "{{.Version}}"
build_args:
VERSION: "{{.Version}}"
labels:
org.opencontainers.image.source: https://github.com/myorg/myapp
target: production
cache:
from: type=gha
to: type=gha,mode=max
# LinuxKit configuration (if type: linuxkit)
linuxkit:
config: .core/linuxkit/server.yml
formats:
- iso
- qcow2
- docker
platforms:
- linux/amd64
- linux/arm64
# Archive settings
archive:
format: tar.gz
format_windows: zip
name: "{{.Project}}-{{.Version}}-{{.OS}}-{{.Arch}}"
files:
- LICENSE
- README.md
- CHANGELOG.md
strip_parent: true
# Checksum settings
checksum:
algorithm: sha256
file: checksums.txt
# Hooks
hooks:
pre_build:
- go generate ./...
- go mod tidy
post_build:
- echo "Build complete"
# Output directory
output: dist

View file

@ -0,0 +1,39 @@
# Example: Go CLI Build Configuration
# Cross-platform CLI tool
version: 1
project:
name: mycli
binary: mycli
build:
main: ./cmd/mycli
env:
CGO_ENABLED: "0"
flags:
- -trimpath
ldflags:
- -s -w
- -X main.version={{.Version}}
- -X main.commit={{.Commit}}
- -X main.date={{.Date}}
targets:
- os: linux
arch: amd64
- os: linux
arch: arm64
- os: darwin
arch: amd64
- os: darwin
arch: arm64
- os: windows
arch: amd64
archive:
format: tar.gz
format_windows: zip
files:
- LICENSE
- README.md

View file

@ -0,0 +1,23 @@
# Example: Go Library Build Configuration
# No binary output, just validation and testing
version: 1
project:
name: mylib
type: library # No binary build
build:
# Library-specific settings
env:
CGO_ENABLED: "0"
# Test configuration
test:
race: true
cover: true
packages:
- ./...
# No targets needed for library
# targets: []

View file

@ -0,0 +1,46 @@
# Example: Wails Desktop App Build Configuration
# Cross-platform desktop application with web frontend
version: 1
project:
name: myapp
binary: myapp
build:
main: .
env:
CGO_ENABLED: "1" # Required for Wails
ldflags:
- -s -w
- -X main.version={{.Version}}
# Wails-specific configuration
wails:
frontend: ./frontend
# Auto-detects: npm, pnpm, yarn, bun
install_cmd: install
build_cmd: build
targets:
# Desktop platforms only
- os: darwin
arch: amd64
- os: darwin
arch: arm64
- os: windows
arch: amd64
- os: linux
arch: amd64
# Platform-specific packaging
package:
darwin:
- dmg
- app
windows:
- nsis
- zip
linux:
- tar.gz
- appimage

View file

@ -0,0 +1,33 @@
# Example: LinuxKit Build Configuration
# Immutable Linux images
version: 1
project:
name: myserver
type: linuxkit
linuxkit:
config: .core/linuxkit/server.yml
formats:
- iso # Bootable ISO (BIOS/EFI)
- qcow2 # QEMU/KVM/Proxmox
- raw # Raw disk image
- vmdk # VMware
- docker # Docker-loadable tarball
platforms:
- linux/amd64
- linux/arm64
# Output naming
name: "{{.Project}}-{{.Version}}"
# The linuxkit config file (.core/linuxkit/server.yml) defines:
# - kernel version
# - init system
# - services to run
# - files to include
#
# See linuxkit-server.yml example

View file

@ -0,0 +1,7 @@
# Example: Minimal Build Configuration
# Auto-detects everything from project structure
version: 1
project:
name: myapp

View file

@ -0,0 +1,51 @@
# Example: Multi-Binary Build Configuration
# Multiple binaries from one repository
version: 1
project:
name: mytools
# Multiple build targets
builds:
- name: cli
binary: mytool
main: ./cmd/mytool
ldflags:
- -s -w
- -X main.version={{.Version}}
- name: server
binary: myserver
main: ./cmd/server
ldflags:
- -s -w
- -X main.version={{.Version}}
- name: worker
binary: myworker
main: ./cmd/worker
ldflags:
- -s -w
# Shared settings
build:
env:
CGO_ENABLED: "0"
flags:
- -trimpath
targets:
- os: linux
arch: amd64
- os: linux
arch: arm64
- os: darwin
arch: arm64
# Archive includes all binaries
archive:
format: tar.gz
files:
- LICENSE
- README.md

View file

@ -0,0 +1,50 @@
# Example: PHP/Laravel Build Configuration
# FrankenPHP container with Laravel app
version: 1
project:
name: mylaravel
type: php
php:
version: "8.4"
# Composer settings
composer:
install_args:
- --no-dev
- --optimize-autoloader
- --no-interaction
# Frontend build
frontend:
enabled: true
build_cmd: "npm run build"
# Octane configuration
octane:
server: frankenphp
workers: auto
max_requests: 500
# Docker output
docker:
dockerfile: Dockerfile
registry: ghcr.io
image: myorg/mylaravel
platforms:
- linux/amd64
- linux/arm64
tags:
- latest
- "{{.Version}}"
build_args:
PHP_VERSION: "8.4"
# Optional: LinuxKit for immutable deployment
linuxkit:
config: .core/linuxkit/server-php.yml
formats:
- qcow2
- iso