From 3ea8d815781e752618b4b528c28cfb8b59db2b61 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emmanuel=20BENO=C3=8ET?= <tseeker@nocternity.net>
Date: Fri, 19 Jul 2024 15:10:50 +0200
Subject: [PATCH] chore: build tarballs

---
 .gitignore |  1 +
 Makefile   | 42 +++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index ba077a4..e493dd6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 bin
+dist
diff --git a/Makefile b/Makefile
index 0136704..5a9371e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,8 @@
 BINNAME = gomonop
 BINDIR = $(CURDIR)/bin
+DISTDIR = $(CURDIR)/dist
 TARGETS = linux/amd64 linux/386 linux/arm linux/arm64
+STATICFILES = README.md
 
 SRC := $(shell find . -type f -name '*.go' -print) go.mod go.sum
 GOHOSTOS = $(shell go env GOHOSTOS)
@@ -26,6 +28,9 @@ LDFLAGS += -X nocternity.net/gomonop/pkg/version.status=${GIT_STATUS}
 .PHONY: all
 all: build
 
+# ---------------
+# Basic building
+
 .PHONY: build
 build: GOOS=$(GOHOSTOS)
 build: GOARCH=$(GOHOSTARCH)
@@ -47,12 +52,47 @@ $(BINDIR)/$(GOOS)-$(GOARCH)/$(BINNAME): $(SRC)
 test: build
 	@go test -v ./...
 
+# ----------------
+# Cross compiling
+
 .PHONY: build-cross
 build-cross:
 	@for target in $(TARGETS); do \
 		$(MAKE) build-target GOOS=`echo $$target | cut -d / -f 1` GOARCH=`echo $$target | cut -d / -f 2`; \
 	done
 
+# ----------
+# Packaging
+
+.PHONY: dist
+dist: GOOS=$(GOHOSTOS)
+dist: GOARCH=$(GOHOSTARCH)
+dist: dist-target
+
+.PHONY: dist-all
+dist-all:
+	@for target in $(TARGETS); do \
+		$(MAKE) dist-target GOOS=`echo $$target | cut -d / -f 1` GOARCH=`echo $$target | cut -d / -f 2`; \
+	done
+
+.PHONY: dist-target
+dist-target: build-target
+	@set -e; \
+	if [ -z "$(BINARY_VERSION)" ]; then \
+		echo "No version set"; \
+		exit 1; \
+	fi; \
+	mkdir -p $(DISTDIR)/$(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH); \
+	cp $(BINDIR)/$(GOOS)-$(GOARCH)/$(BINNAME) $(DISTDIR)/$(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH); \
+	for f in $(STATICFILES); do \
+		cp $$f $(DISTDIR)/$(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH); \
+	done; \
+	cd $(DISTDIR); \
+	tar cJf $(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH).tar.xz $(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH)
+
+# --------
+# Cleanup
+
 .PHONY: clean
 clean:
-	@rm -rf $(BINDIR)
+	@rm -rf $(BINDIR) $(DISTDIR)