167 lines
4.2 KiB
YAML
167 lines
4.2 KiB
YAML
version: '3'
|
|
|
|
vars:
|
|
GOCMD: go
|
|
BINARY_NAME: reticulum-go
|
|
BUILD_DIR: bin
|
|
MAIN_PACKAGE: ./cmd/reticulum-go
|
|
|
|
tasks:
|
|
default:
|
|
desc: Show available tasks
|
|
cmds:
|
|
- task --list
|
|
|
|
all:
|
|
desc: Clean, download dependencies, build and test
|
|
deps: [clean, deps, build, test]
|
|
|
|
build:
|
|
desc: Build release binary (no debug symbols, static)
|
|
env:
|
|
CGO_ENABLED: '0'
|
|
cmds:
|
|
- mkdir -p {{.BUILD_DIR}}
|
|
- '{{.GOCMD}} build -ldflags="-s -w" -o {{.BUILD_DIR}}/{{.BINARY_NAME}} {{.MAIN_PACKAGE}}'
|
|
|
|
debug:
|
|
desc: Build debug binary
|
|
cmds:
|
|
- mkdir -p {{.BUILD_DIR}}
|
|
- '{{.GOCMD}} build -o {{.BUILD_DIR}}/{{.BINARY_NAME}} {{.MAIN_PACKAGE}}'
|
|
|
|
build-experimental:
|
|
desc: Build binary with experimental features (GOEXPERIMENT=greenteagc)
|
|
env:
|
|
GOEXPERIMENT: greenteagc
|
|
cmds:
|
|
- mkdir -p {{.BUILD_DIR}}
|
|
- '{{.GOCMD}} build -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-experimental {{.MAIN_PACKAGE}}'
|
|
|
|
experimental:
|
|
desc: Alias for build-experimental
|
|
cmds:
|
|
- task: build-experimental
|
|
|
|
release:
|
|
desc: Build stripped static binary for release (alias for build)
|
|
cmds:
|
|
- task: build
|
|
|
|
fmt:
|
|
desc: Format Go code
|
|
cmds:
|
|
- '{{.GOCMD}} fmt ./...'
|
|
|
|
fmt-check:
|
|
desc: Check if code is formatted (useful for CI)
|
|
cmds:
|
|
- '{{.GOCMD}} fmt -d ./... > fmt.diff 2>&1 || true'
|
|
- 'test -s fmt.diff && (echo "Code is not formatted. Run ''task fmt'' to fix." && cat fmt.diff && rm -f fmt.diff && exit 1) || (rm -f fmt.diff && exit 0)'
|
|
|
|
vet:
|
|
desc: Run go vet
|
|
cmds:
|
|
- '{{.GOCMD}} vet ./...'
|
|
|
|
lint:
|
|
desc: Run revive linter
|
|
cmds:
|
|
- revive -config revive.toml -formatter friendly ./pkg/* ./cmd/* ./internal/*
|
|
|
|
check:
|
|
desc: Run fmt-check, vet, and lint
|
|
deps: [fmt-check, vet, lint]
|
|
|
|
bench:
|
|
desc: Run benchmarks with standard GC
|
|
cmds:
|
|
- '{{.GOCMD}} test -bench=. -benchmem ./...'
|
|
|
|
bench-experimental:
|
|
desc: Run benchmarks with experimental GC
|
|
env:
|
|
GOEXPERIMENT: greenteagc
|
|
cmds:
|
|
- '{{.GOCMD}} test -bench=. -benchmem ./...'
|
|
|
|
bench-compare:
|
|
desc: Run benchmarks with both GC settings
|
|
deps: [bench, bench-experimental]
|
|
|
|
clean:
|
|
desc: Remove build artifacts
|
|
cmds:
|
|
- '{{.GOCMD}} clean'
|
|
- rm -rf {{.BUILD_DIR}}
|
|
|
|
test:
|
|
desc: Run tests
|
|
cmds:
|
|
- '{{.GOCMD}} test -v ./...'
|
|
|
|
test-short:
|
|
desc: Run short tests
|
|
cmds:
|
|
- '{{.GOCMD}} test -short -v ./...'
|
|
|
|
coverage:
|
|
desc: Generate test coverage report
|
|
cmds:
|
|
- '{{.GOCMD}} test -coverprofile=coverage.out ./...'
|
|
- '{{.GOCMD}} tool cover -html=coverage.out'
|
|
|
|
deps:
|
|
desc: Download and verify dependencies
|
|
env:
|
|
GOPROXY: '{{.GOPROXY | default "https://proxy.golang.org,direct"}}'
|
|
cmds:
|
|
- '{{.GOCMD}} mod download'
|
|
- '{{.GOCMD}} mod verify'
|
|
|
|
mod-tidy:
|
|
desc: Tidy go.mod file
|
|
cmds:
|
|
- '{{.GOCMD}} mod tidy'
|
|
|
|
mod-verify:
|
|
desc: Verify dependencies
|
|
cmds:
|
|
- '{{.GOCMD}} mod verify'
|
|
|
|
build-linux:
|
|
desc: Build for Linux (amd64, arm64, arm, riscv64)
|
|
env:
|
|
CGO_ENABLED: '0'
|
|
cmds:
|
|
- mkdir -p {{.BUILD_DIR}}
|
|
- 'GOOS=linux GOARCH=amd64 {{.GOCMD}} build -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-linux-amd64 {{.MAIN_PACKAGE}}'
|
|
- 'GOOS=linux GOARCH=arm64 {{.GOCMD}} build -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-linux-arm64 {{.MAIN_PACKAGE}}'
|
|
- 'GOOS=linux GOARCH=arm {{.GOCMD}} build -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-linux-arm {{.MAIN_PACKAGE}}'
|
|
- 'GOOS=linux GOARCH=riscv64 {{.GOCMD}} build -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-linux-riscv64 {{.MAIN_PACKAGE}}'
|
|
|
|
build-all:
|
|
desc: Build for all Linux architectures
|
|
deps: [build-linux]
|
|
|
|
run:
|
|
desc: Run with go run
|
|
cmds:
|
|
- '{{.GOCMD}} run {{.MAIN_PACKAGE}}'
|
|
|
|
tinygo-build:
|
|
desc: Build binary with TinyGo compiler
|
|
cmds:
|
|
- mkdir -p {{.BUILD_DIR}}
|
|
- tinygo build -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-tinygo -size short {{.MAIN_PACKAGE}}
|
|
|
|
tinygo-wasm:
|
|
desc: Build WebAssembly binary with TinyGo compiler
|
|
cmds:
|
|
- mkdir -p {{.BUILD_DIR}}
|
|
- tinygo build -target wasm -o {{.BUILD_DIR}}/{{.BINARY_NAME}}.wasm {{.MAIN_PACKAGE}}
|
|
|
|
install:
|
|
desc: Install dependencies
|
|
cmds:
|
|
- '{{.GOCMD}} mod download' |