penguin/flatgit

flatgit showcase

Makefile

raw ยท 1522 bytes

include build.env
-include build.env.work
export

OUT_DIR := out
BIN_DIR := bin

IMAGE_NAME ?= penguinade/flatgit
IMAGE_TAG ?= dev

VERSION ?= dev
GIT_REV := $(shell git rev-parse HEAD)

BUILDINFO_FILE := internal/buildinfo/buildinfo_gen.go
BUILDX_BUILDER ?= container-builder

all: test build

ensure-buildx:
	@if ! docker buildx inspect $(BUILDX_BUILDER) >/dev/null 2>&1; then \
		echo "Creating buildx builder $(BUILDX_BUILDER)..."; \
		docker buildx create \
			--name $(BUILDX_BUILDER) \
			--driver docker-container \
			--driver-opt network=host \
			--bootstrap --use; \
	else \
		echo "Using existing buildx builder $(BUILDX_BUILDER)"; \
		docker buildx use $(BUILDX_BUILDER); \
	fi

.buildinfo:
	@mkdir -p $(dir $(BUILDINFO_FILE))
	@printf '%s\n' \
		'package buildinfo' \
		'' \
		'const (' \
		'    Version     = "$(VERSION)"' \
		'    GitRevision = "$(GIT_REV)"' \
		'    Timestamp   = "'$$(TZ=UTC date +%Y%m%d.%H%M%S)'"' \
		')' \
	> $(BUILDINFO_FILE)

build: .buildinfo
	mkdir -p "$(OUT_DIR)" "$(BIN_DIR)"
	go build -o "$(BIN_DIR)/flatgit" ./cmd/flatgit

push: .buildinfo
	docker buildx build \
		--platform linux/amd64,linux/arm64 \
		--build-arg APT_PROXY=$(APT_PROXY) \
		-f dockerfiles/runtime.Dockerfile \
		-t $(IMAGE_NAME):$(IMAGE_TAG) \
		--push .

test:
	go test ./...

fmt:
	gofmt -w ./cmd ./internal

run: build
	$(BIN_DIR)/flatgit daemon -c examples/tinyproxy.json

vet:
	go vet ./...

clean:
	rm -f "$(BIN_DIR)/flatgit"
	rm -rf dist

.PHONY: all build test fmt vet clean run push ensure-buildx