Reticulum-Go/taskfiles/build.yml

214 lines
7.3 KiB
YAML

version: '3'
vars:
LINUX_ARCHES: [amd64, arm64, arm, 386, riscv64, ppc64le, ppc64, mips, mipsle, mips64, mips64le, s390x]
WINDOWS_ARCHES: [amd64, arm64, 386]
DARWIN_ARCHES: [amd64, arm64]
FREEBSD_ARCHES: [amd64, 386, arm64, arm, riscv64]
OPENBSD_ARCHES: [amd64, 386, arm64, arm, ppc64, riscv64]
NETBSD_ARCHES: [amd64, 386, arm64, arm]
DRAGONFLY_ARCHES: [amd64]
SOLARIS_ARCHES: [amd64]
ILLUMOS_ARCHES: [amd64]
AIX_ARCHES: [ppc64]
ANDROID_ARCHES: [arm64]
# Prefer CLI/env VERSION (e.g. task build VERSION=v1.0.0). Do not use a
# dynamic sh: VERSION here: Task would export it and override CI env.
GIT_DESCRIBE:
sh: git describe --tags --always --dirty 2>/dev/null || echo dev
tasks:
build:
desc: Build release binary (no debug symbols, static)
env:
CGO_ENABLED: '0'
cmds:
- mkdir -p {{.BUILD_DIR}}
- |
V="${VERSION:-{{.VERSION}}}"
if [ -z "$V" ]; then
V="{{.GIT_DESCRIBE}}"
fi
{{.GOCMD}} build -ldflags="-s -w -X main.defaultVersion=${V}" -o {{.BUILD_DIR}}/{{.BINARY_NAME}} {{.MAIN_PACKAGE}}
build-utils:
desc: Alias for build (tools are subcommands of reticulum-go)
cmds:
- task: build
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
build-target:
internal: true
requires:
vars: [GOOS, GOARCH]
env:
CGO_ENABLED: '0'
cmds:
- mkdir -p {{.BUILD_DIR}}
- |
export GOOS="{{.GOOS}}" GOARCH="{{.GOARCH}}" VERSION="${VERSION:-{{.VERSION}}}" DEST_DIR="{{.BUILD_DIR}}"
if [ -z "${VERSION}" ]; then
VERSION="{{.GIT_DESCRIBE}}"
export VERSION
fi
sh scripts/ci/build-named-release-binary.sh
build-linux:
desc: Build for Linux (amd64 v1+v3, i686/386, arm64, arm, riscv64, ppc, mips, s390x)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh linux
build-windows:
desc: Build for Windows (amd64, arm64, 386)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh windows
build-windows-legacy:
desc: Build for Windows 7/8/8.1 using go-legacy-win7 (amd64, arm64)
env:
CGO_ENABLED: '0'
cmds:
- mkdir -p {{.BUILD_DIR}}
- |
V="${VERSION:-{{.VERSION}}}"
if [ -z "$V" ]; then
V="{{.GIT_DESCRIBE}}"
fi
GOOS=windows GOARCH=amd64 {{.GO_LEGACY_WIN7}} build -ldflags="-s -w -X main.defaultVersion=${V}" -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-windows-amd64-win7.exe {{.MAIN_PACKAGE}}
GOOS=windows GOARCH=arm64 {{.GO_LEGACY_WIN7}} build -ldflags="-s -w -X main.defaultVersion=${V}" -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-windows-arm64-win7.exe {{.MAIN_PACKAGE}}
build-windows-xp:
desc: Build for Windows XP/2003 using go-legacy-winxp (386, amd64)
env:
CGO_ENABLED: '0'
cmds:
- mkdir -p {{.BUILD_DIR}}
- |
V="${VERSION:-{{.VERSION}}}"
if [ -z "$V" ]; then
V="{{.GIT_DESCRIBE}}"
fi
GOOS=windows GOARCH=386 {{.GO_LEGACY_WINXP}} build -ldflags="-s -w -X main.defaultVersion=${V}" -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-windows-386-winxp.exe {{.MAIN_PACKAGE}}
GOOS=windows GOARCH=amd64 {{.GO_LEGACY_WINXP}} build -ldflags="-s -w -X main.defaultVersion=${V}" -o {{.BUILD_DIR}}/{{.BINARY_NAME}}-windows-amd64-winxp.exe {{.MAIN_PACKAGE}}
build-darwin:
desc: Build for MacOS (amd64, arm64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh darwin
build-freebsd:
desc: Build for FreeBSD (amd64, 386, arm64, arm, riscv64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh freebsd
build-openbsd:
desc: Build for OpenBSD (amd64, 386, arm64, arm, ppc64, riscv64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh openbsd
build-netbsd:
desc: Build for NetBSD (amd64, 386, arm64, arm)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh netbsd
build-dragonfly:
desc: Build for DragonFly BSD (amd64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh dragonfly
build-solaris:
desc: Build for Solaris (amd64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh solaris
build-illumos:
desc: Build for illumos (amd64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh illumos
build-aix:
desc: Build for AIX (ppc64)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh aix
build-android:
desc: Build for Android (arm64, CGO_ENABLED=0)
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh android
build-all:
desc: Build for all platforms and architectures
cmds:
- DEST_DIR="{{.BUILD_DIR}}" VERSION="${VERSION:-{{.VERSION}}}" sh scripts/build-release-targets.sh
build-wasm:
desc: Build WebAssembly binary with standard Go compiler
env:
CGO_ENABLED: '0'
GOOS: js
GOARCH: wasm
cmds:
- mkdir -p {{.BUILD_DIR}}
- '{{.GOCMD}} build -ldflags="-s -w" -o {{.BUILD_DIR}}/{{.BINARY_NAME}}.wasm ./cmd/reticulum-wasm'
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 ./cmd/reticulum-wasm
build-librns:
desc: Build librns shared library and C header (CGO required)
env:
CGO_ENABLED: '1'
cmds:
- mkdir -p {{.BUILD_DIR}}
- '{{.GOCMD}} build -buildmode=c-shared -o {{.BUILD_DIR}}/librns.so ./cmd/librns'
- cp include/rns.h {{.BUILD_DIR}}/rns.h
build-librns-targets:
desc: Cross-build librns for Linux, Android, and Windows (needs NDK and/or mingw/zig)
cmds:
- sh scripts/build-librns-targets.sh {{.CLI_ARGS}}
checksum:
desc: Generate SHA256 checksum for binary (uses BINARY_PATH env var if set, otherwise defaults to bin/reticulum-go)
cmds:
- |
BINARY_PATH="${BINARY_PATH:-{{.BUILD_DIR}}/{{.BINARY_NAME}}}"
if [ -f "$BINARY_PATH" ]; then
sha256sum "$BINARY_PATH" > "${BINARY_PATH}.sha256"
echo "Generated checksum: ${BINARY_PATH}.sha256"
else
echo "Error: Binary not found at $BINARY_PATH"
exit 1
fi