|
4 | 4 | CLI_GO_BUILD = CGO_ENABLED=0 $(GO) build |
5 | 5 | # renovate: datasource=docker |
6 | 6 | GO_IMAGE = docker.io/library/golang:1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb |
7 | | -TARGET=tetra |
| 7 | +TARGET = tetra |
| 8 | + |
| 9 | +RELEASE_FOLDER = release |
| 10 | +# Avoid shooting yourself in the foot with rm in cli-clean or |
| 11 | +# creating/overwriting files from the root folder |
| 12 | +ifeq ($(strip $(RELEASE_FOLDER)),) |
| 13 | +$(error RELEASE_FOLDER is not set or is empty) |
| 14 | +endif |
| 15 | + |
| 16 | +RELEASES := \ |
| 17 | + $(RELEASE_FOLDER)/$(TARGET)-darwin-arm64.tar.gz \ |
| 18 | + $(RELEASE_FOLDER)/$(TARGET)-darwin-amd64.tar.gz \ |
| 19 | + $(RELEASE_FOLDER)/$(TARGET)-linux-arm64.tar.gz \ |
| 20 | + $(RELEASE_FOLDER)/$(TARGET)-linux-amd64.tar.gz \ |
| 21 | + $(RELEASE_FOLDER)/$(TARGET)-windows-arm64.tar.gz \ |
| 22 | + $(RELEASE_FOLDER)/$(TARGET)-windows-amd64.tar.gz |
8 | 23 |
|
9 | 24 | RELEASE_UID ?= $(shell id -u) |
10 | 25 | RELEASE_GID ?= $(shell id -g) |
11 | 26 |
|
12 | 27 | ##@ CLI |
13 | 28 |
|
14 | 29 | .PHONY: cli-release |
15 | | -cli-release: ## Compile tetra CLI release binaries. |
| 30 | +cli-release: ## Compile tetra CLI release binaries with Docker |
16 | 31 | docker run \ |
17 | 32 | --rm \ |
18 | 33 | --workdir /tetragon \ |
19 | 34 | --volume `pwd`:/tetragon $(GO_IMAGE) \ |
20 | 35 | sh -c "apk add --no-cache make git setpriv && \ |
21 | 36 | /bin/setpriv --reuid=$(RELEASE_UID) --regid=$(RELEASE_GID) --clear-groups \ |
22 | | - make GOCACHE=/tmp/cache cli-local-release VERSION=${VERSION}" |
| 37 | + make -j$$(nproc) GOCACHE=/tmp/cache cli-local-release VERSION=${VERSION}" |
| 38 | + |
23 | 39 |
|
24 | 40 | .PHONY: cli-local-release |
25 | | -cli-local-release: cli-clean |
26 | | - set -o errexit; \ |
27 | | - for OS in darwin linux windows; do \ |
28 | | - EXT=; \ |
29 | | - ARCHS=; \ |
30 | | - case $$OS in \ |
31 | | - darwin) \ |
32 | | - ARCHS='arm64 amd64'; \ |
33 | | - ;; \ |
34 | | - linux) \ |
35 | | - ARCHS='arm64 amd64'; \ |
36 | | - ;; \ |
37 | | - windows) \ |
38 | | - ARCHS='arm64 amd64'; \ |
39 | | - EXT='.exe'; \ |
40 | | - ;; \ |
41 | | - esac; \ |
42 | | - for ARCH in $$ARCHS; do \ |
43 | | - echo Building release binary for $$OS/$$ARCH...; \ |
44 | | - test -d release/$$OS/$$ARCH|| mkdir -p release/$$OS/$$ARCH; \ |
45 | | - env GOOS=$$OS GOARCH=$$ARCH $(CLI_GO_BUILD) -ldflags="$(GO_BUILD_LDFLAGS)" -o release/$$OS/$$ARCH/$(TARGET)$$EXT ./cmd/tetra; \ |
46 | | - tar -czf release/$(TARGET)-$$OS-$$ARCH.tar.gz -C release/$$OS/$$ARCH $(TARGET)$$EXT; \ |
47 | | - (cd release && sha256sum $(TARGET)-$$OS-$$ARCH.tar.gz > $(TARGET)-$$OS-$$ARCH.tar.gz.sha256sum); \ |
48 | | - done; \ |
49 | | - rm -r release/$$OS; \ |
50 | | - done; \ |
| 41 | +cli-local-release: $(RELEASES) ## Compile tetra CLI release binaries locally |
| 42 | + |
| 43 | +$(RELEASE_FOLDER)/$(TARGET)-%.tar.gz: cli-clean |
| 44 | + @{ \ |
| 45 | + OS=$(word 1,$(subst -, ,$*)); \ |
| 46 | + ARCH=$(word 2,$(subst -, ,$*)); \ |
| 47 | + EXT=""; if [ "$$OS" = "windows" ]; then EXT=".exe"; fi; \ |
| 48 | + mkdir -p $(RELEASE_FOLDER)/$$OS/$$ARCH; \ |
| 49 | + echo "Building for $$OS/$$ARCH..."; \ |
| 50 | + env GOOS=$$OS GOARCH=$$ARCH $(CLI_GO_BUILD) -ldflags="$(GO_BUILD_LDFLAGS)" -o $(RELEASE_FOLDER)/$$OS/$$ARCH/$(TARGET)$$EXT ./cmd/tetra; \ |
| 51 | + tar -czf $@ -C $(RELEASE_FOLDER)/$$OS/$$ARCH $(TARGET)$$EXT; \ |
| 52 | + sha256sum $@ > [email protected]; \ |
| 53 | + } |
51 | 54 |
|
52 | 55 | .PHONY: cli-clean |
53 | | -cli-clean: |
54 | | - rm -rf ./release |
| 56 | +cli-clean: ## Clean CLI release binaries |
| 57 | + rm -rf ./$(RELEASE_FOLDER) |
0 commit comments