penguin/flatgit

flatgit showcase

commit 34c40f8839cd8ead6a3e4900d67abf0feea76ea7

author斟酌 鵬兄 <tgckpg@gmail.com>
date2026-06-18T20:38:42Z
subjectmakefile adds docker push
commit 34c40f8839cd8ead6a3e4900d67abf0feea76ea7
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2026-06-18T20:38:42Z

    makefile adds docker push
---
 .gitignore                          |  1 +
 Makefile                            | 27 +++++++++++++++++++++++-
 build.env                           |  3 +++
 dockerfiles/dev.Dockerfile          |  4 ----
 dockerfiles/runtime.Dockerfile      | 41 +++++++++++++++++++++++++++++++++++++
 go.sum                              |  0
 internal/buildinfo/buildinfo_gen.go |  4 ++--
 7 files changed, 73 insertions(+), 7 deletions(-)

diff --git a/.gitignore b/.gitignore
index 7c0e8d3..8b87ab2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 /dist/
 out/
 bin/
+build.env.work
 *.test
 *.out
 *.swp
diff --git a/Makefile b/Makefile
index 54020d2..213aaf3 100644
--- a/Makefile
+++ b/Makefile
@@ -5,13 +5,30 @@ 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' \
@@ -28,6 +45,14 @@ 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 ./...
 
@@ -44,4 +69,4 @@ clean:
 	rm -f "$(BIN_DIR)/flatgit"
 	rm -rf dist
 
-.PHONY: all build test fmt vet clean run
+.PHONY: all build test fmt vet clean run push ensure-buildx
diff --git a/build.env b/build.env
index 4663905..05dcac8 100644
--- a/build.env
+++ b/build.env
@@ -1 +1,4 @@
+IMAGE_NAME=penguinade/flatgit
+IMAGE_TAG=dev
+
 APT_PROXY=
diff --git a/dockerfiles/dev.Dockerfile b/dockerfiles/dev.Dockerfile
deleted file mode 100644
index e0e141b..0000000
--- a/dockerfiles/dev.Dockerfile
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM golang:1.26-alpine
-RUN apk add --no-cache git make
-WORKDIR /src
-CMD ["sh"]
diff --git a/dockerfiles/runtime.Dockerfile b/dockerfiles/runtime.Dockerfile
new file mode 100644
index 0000000..0364b34
--- /dev/null
+++ b/dockerfiles/runtime.Dockerfile
@@ -0,0 +1,41 @@
+FROM golang:1.26-trixie AS build
+
+ARG TARGETOS
+ARG TARGETARCH
+
+WORKDIR /src
+
+COPY go.mod go.sum ./
+
+RUN --mount=type=cache,target=/go/pkg/mod \
+    go mod download
+
+COPY "internal" ./internal
+COPY "cmd" ./cmd
+
+RUN --mount=type=cache,target=/go/pkg/mod \
+    --mount=type=cache,target=/root/.cache/go-build \
+	mkdir bin && \
+    CGO_ENABLED=0 \
+    GOOS=$TARGETOS \
+    GOARCH=$TARGETARCH \
+	go build -trimpath -o "bin/flatgit" ./cmd/flatgit
+
+RUN mkdir -p /out/tmp && chmod 1777 /out/tmp
+
+FROM debian:trixie-slim AS runtime
+
+ARG TARGETOS
+ARG TARGETARCH
+ARG APT_PROXY
+
+RUN if [ -n "${APT_PROXY}" ]; then \
+      echo "Acquire::http::Proxy \"http://${APT_PROXY}\";" > /etc/apt/apt.conf.d/01proxy; \
+    fi
+
+COPY --from=build /src/bin/flatgit /usr/local/bin/flatgit
+COPY --from=build /out/tmp /tmp
+
+RUN flatgit version
+
+ENTRYPOINT ["/usr/local/bin/flatgit"]
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..e69de29
diff --git a/internal/buildinfo/buildinfo_gen.go b/internal/buildinfo/buildinfo_gen.go
index ecb2443..f11f874 100644
--- a/internal/buildinfo/buildinfo_gen.go
+++ b/internal/buildinfo/buildinfo_gen.go
@@ -2,6 +2,6 @@ package buildinfo
 
 const (
     Version     = "dev"
-    GitRevision = "e9ca3ccc17250e570d1f9ba87f5c98acbb761637"
-    Timestamp   = "20260618.200301"
+    GitRevision = "b5be7ec12ae5b4b0075f0f9bea40aca17fa904ff"
+    Timestamp   = "20260618.203511"
 )