An AI-powered tool that generates human-readable summaries of git changes using tool calling with a self-hosted LLM

cleanup oci labels

evan.jarrett.net 3483d85d 20324ae6

verified
+45 -25
+6 -10
.tangled/workflows/release.yml
··· 25 25 buildah bud \ 26 26 --arch amd64 \ 27 27 --build-arg TARGETARCH=amd64 \ 28 - --build-arg VERSION=${TANGLED_REF_NAME} \ 29 - --build-arg CREATED=$(date -u +%Y-%m-%dT%H:%M:%SZ) \ 30 - --build-arg REVISION=${TANGLED_COMMIT_SHA} \ 31 - --build-arg TANGLED_REPO_DID=${TANGLED_REPO_DID} \ 32 - --build-arg TANGLED_REPO_NAME=${TANGLED_REPO_NAME} \ 28 + --label org.opencontainers.image.version="${TANGLED_REF_NAME}" \ 29 + --label org.opencontainers.image.created="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ 30 + --label org.opencontainers.image.revision="${TANGLED_COMMIT_SHA}" \ 33 31 --tag ${IMAGE_REGISTRY}/${TANGLED_REPO_HANDLE}/${TANGLED_REPO_NAME}:${TANGLED_REF_NAME}-amd64 \ 34 32 --file ./Dockerfile \ 35 33 . ··· 39 37 buildah bud \ 40 38 --arch arm64 \ 41 39 --build-arg TARGETARCH=arm64 \ 42 - --build-arg VERSION=${TANGLED_REF_NAME} \ 43 - --build-arg CREATED=$(date -u +%Y-%m-%dT%H:%M:%SZ) \ 44 - --build-arg REVISION=${TANGLED_COMMIT_SHA} \ 45 - --build-arg TANGLED_REPO_DID=${TANGLED_REPO_DID} \ 46 - --build-arg TANGLED_REPO_NAME=${TANGLED_REPO_NAME} \ 40 + --label org.opencontainers.image.version="${TANGLED_REF_NAME}" \ 41 + --label org.opencontainers.image.created="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ 42 + --label org.opencontainers.image.revision="${TANGLED_COMMIT_SHA}" \ 47 43 --tag ${IMAGE_REGISTRY}/${TANGLED_REPO_HANDLE}/${TANGLED_REPO_NAME}:${TANGLED_REF_NAME}-arm64 \ 48 44 --file ./Dockerfile \ 49 45 .
+6 -10
Dockerfile
··· 11 11 12 12 FROM alpine:3.20 13 13 14 - ARG VERSION=dev 15 - ARG CREATED 16 - ARG REVISION 17 - ARG TANGLED_REPO_DID 18 - ARG TANGLED_REPO_NAME 19 - 14 + # Static labels 20 15 LABEL org.opencontainers.image.title="git-summarizer" \ 21 16 org.opencontainers.image.description="AI-powered git change summarizer using agentic tool-calling with self-hosted LLMs" \ 22 - org.opencontainers.image.version="${VERSION}" \ 23 - org.opencontainers.image.created="${CREATED}" \ 24 - org.opencontainers.image.revision="${REVISION}" \ 25 17 org.opencontainers.image.licenses="MIT" \ 26 - org.opencontainers.image.source="https://tangled.sh/${TANGLED_REPO_DID}/${TANGLED_REPO_NAME}" 18 + org.opencontainers.image.authors="Evan Jarrett" \ 19 + org.opencontainers.image.source="https://tangled.org/evan.jarrett.net/git-summarize" \ 20 + org.opencontainers.image.documentation="https://tangled.org/evan.jarrett.net/git-summarize" 21 + 22 + # Dynamic labels are passed via --label flags at build time 27 23 28 24 RUN apk add --no-cache ca-certificates 29 25
+33 -5
Makefile
··· 1 - .PHONY: build run docker test clean 1 + .PHONY: build run docker docker-run docker-build docker-build-local setup-buildx test test-bluesky clean 2 + 3 + # Container tool and image configuration 4 + CONTAINER_TOOL ?= docker 5 + IMG ?= atcr.io/evan.jarrett.net/git-summarizer:latest 2 6 3 7 # Build binary 4 8 build: ··· 9 13 run: build 10 14 ./git-summarizer 11 15 12 - # Build docker image 16 + # Build docker image (legacy, use docker-build-local or docker-build instead) 13 17 docker: 14 - docker build -t git-summarizer:latest . 18 + $(CONTAINER_TOOL) build -t $(IMG) . 15 19 16 20 # Run docker locally 17 21 docker-run: 18 - docker run --network=host \ 22 + $(CONTAINER_TOOL) run --network=host \ 19 23 -e LLAMA_URL=https://llama.j5t.io \ 20 24 -e LLAMA_MODEL=qwen3-coder-30b \ 21 - git-summarizer:latest 25 + $(IMG) 26 + 27 + # Build and push multi-arch docker image (amd64 + arm64) 28 + docker-build: setup-buildx 29 + $(CONTAINER_TOOL) buildx build \ 30 + --builder git-summarizer-builder \ 31 + --platform=linux/amd64,linux/arm64 \ 32 + --push \ 33 + --tag $(IMG) \ 34 + . 35 + 36 + # Build docker image for local arch only (no push) 37 + docker-build-local: 38 + $(CONTAINER_TOOL) build -t $(IMG) . 39 + 40 + # Set up buildx builder for multi-arch builds 41 + setup-buildx: 42 + @echo "Setting up git-summarizer-builder..." 43 + -$(CONTAINER_TOOL) buildx rm git-summarizer-builder 2>/dev/null || true 44 + $(CONTAINER_TOOL) buildx create --name git-summarizer-builder \ 45 + --driver docker-container \ 46 + --driver-opt network=host \ 47 + --config /dev/stdin <<< 'debug = true' || true 48 + $(CONTAINER_TOOL) buildx inspect --bootstrap git-summarizer-builder 49 + @echo "✓ Builder setup complete!" 22 50 23 51 # Test with a public repo 24 52 test: