1 Build System
Virgil edited this page 2026-03-11 12:03:21 +00:00

Build System

Module: forge.lthn.ai/core/go-build/pkg/build

Project Type Detection

Discover() scans for marker files in priority order:

Marker Type Priority
wails.json ProjectTypeWails 1 (most specific)
go.mod ProjectTypeGo 2
package.json ProjectTypeNode 3
composer.json ProjectTypePHP 4

Helper functions: IsGoProject(), IsWailsProject(), IsNodeProject(), IsPHPProject(), IsCPPProject().

Builders

All implement Builder interface: Name() string, Detect(fs, dir) (bool, error), Build(ctx, cfg, targets) ([]Artifact, error).

Builder Constructor Description
Go NewGoBuilder() Cross-compiles Go binaries
Wails NewWailsBuilder() Wails desktop apps
Docker NewDockerBuilder() Docker image builds
LinuxKit NewLinuxKitBuilder() LinuxKit VM images
CPP NewCppBuilder() C++ with CMake
Taskfile NewTaskfileBuilder() Taskfile-based builds

Configuration

.core/build.yaml structure:

version: 1
project:
  name: my-app
  main: ./cmd/app
  binary: my-app
build:
  cgo: false
  flags: ["-trimpath"]
  ldflags: ["-s", "-w"]
targets:
  - os: linux
    arch: amd64
  - os: darwin
    arch: arm64
sign:
  enabled: false

LoadConfig() reads this file; DefaultConfig() provides sensible defaults (4 targets: linux/amd64, linux/arm64, darwin/arm64, windows/amd64).

Post-Build

  • ArchiveAll() — Creates .tar.gz (unix) or .zip (windows) archives
  • ChecksumAll() — Computes SHA-256 checksums
  • WriteChecksumFile() — Writes CHECKSUMS.txt

Code Signing

pkg/build/signing/ provides:

  • Signer interface — Sign(file) error, Verify(file) (bool, error)
  • Implementations: CodesignSigner (macOS), GPGSigner, SigntoolSigner (Windows)