Skip to content

Commit 1d82468

Browse files
committed
CI: add makefile
1 parent 9b0a0f0 commit 1d82468

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed

Makefile

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
PKG := github.com/lightningnetwork/lightning-onion
2+
TOOLS_DIR := tools
3+
4+
GOBUILD := GO111MODULE=on go build -v
5+
GOINSTALL := GO111MODULE=on go install -v
6+
7+
GOFILES = $(shell find . -type f -name '*.go')
8+
9+
RM := rm -f
10+
CP := cp
11+
MAKE := make
12+
XARGS := xargs -L 1
13+
14+
# GO_VERSION is the Go version used for the release build, docker files, and
15+
# GitHub Actions. This is the reference version for the project. All other Go
16+
# versions are checked against this version.
17+
GO_VERSION = 1.24.6
18+
19+
# Linting uses a lot of memory, so keep it under control by limiting the number
20+
# of workers if requested.
21+
ifneq ($(workers),)
22+
LINT_WORKERS = --concurrency=$(workers)
23+
endif
24+
25+
DOCKER_TOOLS = docker run \
26+
--rm \
27+
-v $(shell bash -c "mkdir -p /tmp/go-build-cache; echo /tmp/go-build-cache"):/root/.cache/go-build \
28+
-v $$(pwd):/build lightning-onion-tools
29+
30+
GREEN := "\\033[0;32m"
31+
NC := "\\033[0m"
32+
define print
33+
echo $(GREEN)$1$(NC)
34+
endef
35+
36+
#? default: Run `make build`
37+
default: build
38+
39+
#? all: Run `make build` and `make check`
40+
all: build check
41+
42+
# ============
43+
# INSTALLATION
44+
# ============
45+
46+
#? build: Compile and build lightning-onion
47+
build:
48+
@$(call print, "Compiling lightning-onion.")
49+
$(GOBUILD) $(PKG)/...
50+
51+
#? sphinx-cli: Build the sphinx-cli binary
52+
sphinx-cli:
53+
@$(call print, "Building sphinx-cli.")
54+
$(GOBUILD) -o sphinx-cli ./cmd/main.go
55+
56+
# =======
57+
# TESTING
58+
# =======
59+
60+
#? check: Run `make unit`
61+
check: unit
62+
63+
#? unit: Run unit tests
64+
unit:
65+
@$(call print, "Running unit tests.")
66+
go test -v ./...
67+
68+
#? unit-cover: Run unit coverage tests
69+
unit-cover:
70+
@$(call print, "Running unit coverage tests.")
71+
go test -coverprofile=coverage.txt -covermode=atomic ./...
72+
73+
#? unit-race: Run unit race tests
74+
unit-race:
75+
@$(call print, "Running unit race tests.")
76+
env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" go test -race ./...
77+
78+
# =========
79+
# UTILITIES
80+
# =========
81+
82+
#? fmt: Fix imports and format source code
83+
fmt: docker-tools
84+
@$(call print, "Fixing imports.")
85+
$(DOCKER_TOOLS) gosimports -w $(GOFILES)
86+
@$(call print, "Formatting source.")
87+
$(DOCKER_TOOLS) gofmt -l -w -s $(GOFILES)
88+
89+
#? check-go-version-yaml: Verify that the Go version is correct in all YAML files
90+
check-go-version-yaml:
91+
@$(call print, "Checking for target Go version (v$(GO_VERSION)) in YAML files (*.yaml, *.yml)")
92+
./scripts/check-go-version-yaml.sh $(GO_VERSION)
93+
94+
#? check-go-version-dockerfile: Verify that the Go version is correct in all Dockerfile files
95+
check-go-version-dockerfile:
96+
@$(call print, "Checking for target Go version (v$(GO_VERSION)) in Dockerfile files (*Dockerfile)")
97+
./scripts/check-go-version-dockerfile.sh $(GO_VERSION)
98+
99+
#? check-go-version: Verify that the Go version is correct in all project files
100+
check-go-version: check-go-version-dockerfile check-go-version-yaml
101+
102+
#? fmt-check: Make sure source code is formatted and imports are correct
103+
fmt-check: fmt
104+
@$(call print, "Checking fmt results.")
105+
if test -n "$$(git status --porcelain)"; then echo "code not formatted correctly, please run `make fmt` again!"; git status; git diff; exit 1; fi
106+
107+
#? lint-config-check: Verify golangci-lint configuration
108+
lint-config-check: docker-tools
109+
@$(call print, "Verifying golangci-lint configuration.")
110+
$(DOCKER_TOOLS) golangci-lint config verify -v
111+
112+
#? lint: Lint source and check errors
113+
lint: check-go-version lint-config-check
114+
@$(call print, "Linting source.")
115+
$(DOCKER_TOOLS) golangci-lint run -v $(LINT_WORKERS)
116+
117+
#? docker-tools: Build tools docker image
118+
docker-tools:
119+
@$(call print, "Building tools docker image.")
120+
docker build -q -t lightning-onion-tools -f $(TOOLS_DIR)/Dockerfile .
121+
122+
#? clean: Clean source
123+
clean:
124+
@$(call print, "Cleaning source.$(NC)")
125+
$(RM) coverage.txt
126+
127+
#? tidy-module: Run 'go mod tidy' for all modules
128+
tidy-module:
129+
@$(call print, "Running 'go mod tidy' for main module")
130+
go mod tidy
131+
@$(call print, "Running 'go mod tidy' for tools module")
132+
cd $(TOOLS_DIR) && go mod tidy
133+
134+
#? tidy-module-check: Run 'go mod tidy' for all modules and check results
135+
tidy-module-check: tidy-module
136+
if test -n "$$(git status --porcelain)"; then echo "modules not updated, please run `make tidy-module` again!"; git status; exit 1; fi
137+
138+
.PHONY: all \
139+
default \
140+
build \
141+
sphinx-cli \
142+
check \
143+
unit \
144+
unit-cover \
145+
unit-race \
146+
fmt \
147+
fmt-check \
148+
tidy-module \
149+
tidy-module-check \
150+
lint \
151+
lint-config-check \
152+
docker-tools \
153+
clean
154+
155+
#? help: Get more info on make commands
156+
help: Makefile
157+
@echo " Choose a command run in lightning-onion:"
158+
@sed -n 's/^#?//p' $< | column -t -s ':' | sort | sed -e 's/^/ /'
159+
160+
.PHONY: help

0 commit comments

Comments
 (0)