Align build tooling
This commit is contained in:
23
Dockerfile
23
Dockerfile
@@ -1,14 +1,25 @@
|
|||||||
FROM golang:1.24.1-alpine AS builder
|
FROM golang:1.24-alpine AS builder
|
||||||
|
|
||||||
|
ARG SOURCE_VERSION
|
||||||
|
ARG SOURCE_COMMIT
|
||||||
|
ARG GOPROXY
|
||||||
|
ARG GONOSUMDB
|
||||||
|
ENV GOPROXY=${GOPROXY}
|
||||||
|
ENV GONOSUMDB=${GONOSUMDB}
|
||||||
|
|
||||||
|
RUN go env GOPROXY
|
||||||
|
RUN test -n "$GOPROXY" || (echo "GOPROXY not set" && exit 1)
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY go.mod go.sum ./
|
COPY go.mod go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bumpversion ./src
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
|
||||||
|
-ldflags "-X main.AppVersion=${SOURCE_VERSION} -X main.AppCommit=${SOURCE_COMMIT}" \
|
||||||
|
-o bumpversion ./src
|
||||||
|
|
||||||
FROM gcr.io/distroless/static
|
FROM gcr.io/distroless/static
|
||||||
|
WORKDIR /app
|
||||||
WORKDIR /
|
COPY --from=builder /app/bumpversion /app/bumpversion
|
||||||
COPY --from=builder /app/bumpversion .
|
ENTRYPOINT ["/app/bumpversion"]
|
||||||
ENTRYPOINT ["/bumpversion"]
|
|
||||||
CMD ["--version"]
|
CMD ["--version"]
|
||||||
|
|||||||
50
Makefile
50
Makefile
@@ -3,10 +3,12 @@ PACKAGE := bumpversion
|
|||||||
SHELL := /bin/bash
|
SHELL := /bin/bash
|
||||||
REGISTRY := registry.halfakop.ru
|
REGISTRY := registry.halfakop.ru
|
||||||
REPOSITORY := $(NAMESPACE)/$(PACKAGE)
|
REPOSITORY := $(NAMESPACE)/$(PACKAGE)
|
||||||
|
PLATFORM ?= --platform=linux/amd64
|
||||||
|
|
||||||
SOURCE_VERSION ?= $(shell cat VERSION)
|
SOURCE_VERSION ?= $(shell cat VERSION)
|
||||||
SOURCE_COMMIT ?= $(shell git rev-parse --short=8 HEAD)
|
SOURCE_COMMIT ?= $(shell git rev-parse --short=8 HEAD)
|
||||||
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed s,feature/,,g)
|
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed s,feature/,,g)
|
||||||
|
LDFLAGS := -X main.AppVersion=$(SOURCE_VERSION) -X main.AppCommit=$(SOURCE_COMMIT)
|
||||||
|
|
||||||
IMAGE_NAME_TAGGED = $(REPOSITORY):$(SOURCE_VERSION)
|
IMAGE_NAME_TAGGED = $(REPOSITORY):$(SOURCE_VERSION)
|
||||||
EXEC=$(PACKAGE).run
|
EXEC=$(PACKAGE).run
|
||||||
@@ -14,34 +16,62 @@ EXEC=$(PACKAGE).run
|
|||||||
all: help
|
all: help
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "app - build the application"
|
@printf "\nMain make targets:\n"
|
||||||
@echo "tests - run tests"
|
@printf " make app - Download deps, fix, build app (binary: %s)\n" "$(EXEC)"
|
||||||
@echo "run - run application locally"
|
@printf " make test - Run unit tests\n"
|
||||||
@echo "clean - clean build environment"
|
@printf " make test-integration - Run tests that require Postgres (testcontainers)\n"
|
||||||
|
@printf " make run - Build then run locally\n"
|
||||||
|
@printf " make clean - Clean build artifacts\n"
|
||||||
|
@printf " make release - Clean, build image, login, push\n"
|
||||||
|
@printf "\nVariables:\n"
|
||||||
|
@printf " NAMESPACE=%s\n" "$(NAMESPACE)"
|
||||||
|
@printf " PACKAGE=%s\n" "$(PACKAGE)"
|
||||||
|
@printf " IMAGE_NAME_TAGGED=%s\n" "$(IMAGE_NAME_TAGGED)"
|
||||||
|
@printf " EXEC=%s\n\n" "$(EXEC)"
|
||||||
|
|
||||||
|
download:
|
||||||
|
@echo "Download dependencies"
|
||||||
|
@go mod download
|
||||||
|
|
||||||
fix:
|
fix:
|
||||||
|
@echo "Fix code"
|
||||||
@go fix ./...
|
@go fix ./...
|
||||||
|
|
||||||
app: fix
|
app: download fix
|
||||||
@go build -o ./${EXEC} ./src
|
@echo "Build application"
|
||||||
|
@go build -ldflags "$(LDFLAGS)" -o ./${EXEC} ./src
|
||||||
|
|
||||||
tests: build
|
tests: app
|
||||||
|
@echo "Run tests"
|
||||||
@go test ./...
|
@go test ./...
|
||||||
|
|
||||||
|
test:
|
||||||
|
@echo "Run unit tests"
|
||||||
|
@go test -count=1 ./...
|
||||||
|
|
||||||
|
test-integration:
|
||||||
|
@echo "Run integration tests (requires Docker for Postgres)"
|
||||||
|
@go test -tags=integration -count=1 ./...
|
||||||
|
|
||||||
run:
|
run:
|
||||||
|
@echo "Run application"
|
||||||
@./${EXEC}
|
@./${EXEC}
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@echo "Clean build environment"
|
||||||
@rm -rf ./${EXEC}%
|
@rm -rf ./${EXEC}%
|
||||||
|
|
||||||
release: title clean build login push
|
release: clean build login push
|
||||||
|
|
||||||
build:
|
build:
|
||||||
docker build --compress \
|
DOCKER_BUILDKIT=0 \
|
||||||
|
docker build $(PLATFORM) --progress=plain --compress \
|
||||||
-t $(IMAGE_NAME_TAGGED) \
|
-t $(IMAGE_NAME_TAGGED) \
|
||||||
-t $(REGISTRY)/$(IMAGE_NAME_TAGGED) \
|
-t $(REGISTRY)/$(IMAGE_NAME_TAGGED) \
|
||||||
--build-arg SOURCE_VERSION=$(SOURCE_VERSION) \
|
--build-arg SOURCE_VERSION=$(SOURCE_VERSION) \
|
||||||
--build-arg SOURCE_COMMIT=$(SOURCE_COMMIT) \
|
--build-arg SOURCE_COMMIT=$(SOURCE_COMMIT) \
|
||||||
|
--build-arg GOPROXY=$(GOPROXY) \
|
||||||
|
--build-arg GONOSUMDB=$(GONOSUMDB) \
|
||||||
${DOCKER_OPTS} \
|
${DOCKER_OPTS} \
|
||||||
-f Dockerfile .
|
-f Dockerfile .
|
||||||
|
|
||||||
@@ -54,4 +84,4 @@ login:
|
|||||||
push:
|
push:
|
||||||
docker push $(REGISTRY)/$(IMAGE_NAME_TAGGED)
|
docker push $(REGISTRY)/$(IMAGE_NAME_TAGGED)
|
||||||
|
|
||||||
.PHONY: tests release build login push
|
.PHONY: tests test test-integration release build login push download fix app clean run help
|
||||||
|
|||||||
Reference in New Issue
Block a user