From 321b0a0dcbc8c8bc684f6da47f91a276f3f47134 Mon Sep 17 00:00:00 2001 From: Ivan Pushkin Date: Mon, 6 Dec 2021 15:40:47 +0300 Subject: [PATCH] Building --- Dockerfile | 34 ++++++++++++++++++++++++++++++++++ Makefile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 Dockerfile create mode 100644 Makefile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..33c7d11 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ + +# See Makefile +ARG IMAGE_GOLANG=golang:1.16.4-alpine3.13 +ARG IMAGE_ALPINE=alpine:3.13 + +FROM $IMAGE_ALPINE AS helper + +RUN adduser -u 10001 -h /dev/null -H -D -s /sbin/nologin snake + +RUN sed -i '/^snake/!d' /etc/passwd + +FROM $IMAGE_GOLANG AS builder + +ARG VERSION=unknown +ARG BUILD=unknown + +WORKDIR /go/src/snake-bot + +COPY . . + +ENV CGO_ENABLED=0 + +RUN go build -ldflags "-s -w -X main.Version=$VERSION -X main.Build=$BUILD" \ + -v -x -o /snake-bot ./cmd/snake-bot + +FROM scratch + +COPY --from=helper /etc/passwd /etc/passwd + +USER snake + +COPY --from=builder /snake-bot /usr/local/bin/snake-bot + +ENTRYPOINT ["snake-bot"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b8d2a77 --- /dev/null +++ b/Makefile @@ -0,0 +1,46 @@ + +EXECUTABLES=git go docker + +_=$(foreach exec,$(EXECUTABLES), \ + $(if $(shell which $(exec)), ok, $(error "No $(exec) in PATH"))) + +IMAGE=ivan1993spb/snake-bot + +IMAGE_GOLANG=golang:1.16.4-alpine3.13 +IMAGE_ALPINE=alpine:3.13 + +BINARY_NAME=snake-bot +VERSION=$(shell git describe --tags --abbrev=0 2>/dev/null || echo v0.0.0) +BUILD=$(shell git rev-parse --short HEAD) + +LDFLAGS=-ldflags "-s -w -X main.Version=$(VERSION) -X main.Build=$(BUILD)" +DOCKER_BUILD_ARGS=\ + --build-arg VERSION=$(VERSION) \ + --build-arg BUILD=$(BUILD) \ + --build-arg IMAGE_GOLANG=$(IMAGE_GOLANG) \ + --build-arg IMAGE_ALPINE=$(IMAGE_ALPINE) + +default: build + +docker/build: + @docker build $(DOCKER_BUILD_ARGS) -t $(IMAGE):$(VERSION) . + @docker tag $(IMAGE):$(VERSION) $(IMAGE):latest + @echo "Build $(BUILD) tagged $(IMAGE):$(VERSION)" + @echo "Build $(BUILD) tagged $(IMAGE):latest" + +docker/push: + @echo "Push build $(BUILD) with tag $(IMAGE):$(VERSION)" + @docker push $(IMAGE):$(VERSION) + @echo "Push build $(BUILD) with tag $(IMAGE):latest" + @docker push $(IMAGE):latest + +build: + @go build $(LDFLAGS) -v -o $(BINARY_NAME) ./cmd/snake-bot + +install: + @go install $(LDFLAGS) -v ./cmd/snake-bot + +coverprofile: + @go test -coverprofile=coverage.out ./... + @go tool cover -func=coverage.out + @go tool cover -html=coverage.out