# Makefile for hauler

# set shell
SHELL=/bin/bash

# set go variables
GO_FILES=./...
GO_COVERPROFILE=coverage.out
GO_VULNCHECKS=vulncheck.out
TRIVY_RESULTS=trivy.out

# set build variables
BIN_DIRECTORY=bin
DIST_DIRECTORY=dist

# local build of hauler for current platform
# references/configuration from .goreleaser.yaml
build:
	goreleaser build --clean --snapshot --timeout 60m --single-target

# local build of hauler for all platforms
# references/configuration from .goreleaser.yaml
build-all:
	goreleaser build --clean --snapshot --timeout 60m

# local release of hauler for all platforms
# references/configuration from .goreleaser.yaml
release:
	goreleaser release --clean --snapshot --timeout 60m

# install depedencies
install:
	go mod tidy
	go mod download
	CGO_ENABLED=0 go install ./cmd/...

# format go code
fmt:
	go fmt $(GO_FILES)

# vet go code
vet:
	go vet $(GO_FILES)

# test go code
test:
	go test $(GO_FILES) -cover -race -covermode=atomic -coverprofile=$(GO_COVERPROFILE)

# check for vulnerabilities
vulns:
	govulncheck $(GO_FILES) > $(GO_VULNCHECKS) 2>&1 || true
	curl -fsSL -o rancher.openvex.json https://media.githubusercontent.com/media/rancher/vexhub/refs/heads/main/reports/rancher.openvex.json || true
	trivy fs --vex rancher.openvex.json --skip-files rancher.openvex.json . > $(TRIVY_RESULTS) 2>&1 || true
	rm rancher.openvex.json || true

# cleanup artifacts
clean:
	rm -rf $(BIN_DIRECTORY) $(DIST_DIRECTORY) $(GO_COVERPROFILE) $(GO_VULNCHECKS) $(TRIVY_RESULTS)
