diff --git a/Dockerfile b/Dockerfile index 355772e..3b822c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,32 @@ -FROM alpine +FROM --platform=$BUILDPLATFORM golang as builder -RUN apk add --no-cache ca-certificates +ARG TARGETOS +ARG TARGETARCH +ARG VERSION +ARG BUILD_DATE -COPY prometheus-docker-labels-discovery /prometheus-docker-labels-discovery +COPY . /src + +WORKDIR /src + +RUN env GOOS=${TARGETOS} GOARCH=${TARGETARCH} CGO_ENABLED=0 go mod download && \ + export GIT_COMMIT=$(git rev-parse HEAD) && \ + export GIT_DIRTY=$(test -n "`git status --porcelain`" && echo "+CHANGES" || true) && \ + env GOOS=${TARGETOS} GOARCH=${TARGETARCH} CGO_ENABLED=0 \ + go build -o prometheus-docker-labels-discovery \ + -ldflags "-X github.com/sqooba/go-common/version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} \ + -X github.com/sqooba/go-common/version.BuildDate=${BUILD_DATE} \ + -X github.com/sqooba/go-common/version.Version=${VERSION}" \ + . + +FROM --platform=$BUILDPLATFORM gcr.io/distroless/base + +COPY --from=builder /src/prometheus-docker-labels-discovery /prometheus-docker-labels-discovery # Because of access to docker.sock, it's easier to run it as root... #USER nobody ENTRYPOINT ["/prometheus-docker-labels-discovery"] EXPOSE 8080 + +#HEALTHCHECK --interval=60s --timeout=10s --retries=1 --start-period=30s CMD ["/prometheus-docker-labels-discovery", "--health-check"] diff --git a/Makefile b/Makefile index bcd07cd..e196518 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,13 @@ -VERSION=v1.0.1 +VERSION=v1.0.2 GOOS=linux GOCMD=go GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean GOTEST=$(GOCMD) test GOLINT=golangci-lint run +BUILD_PLATFORM=linux/amd64 +PACKAGE_PLATFORM=$(BUILD_PLATFORM),linux/arm64,linux/arm/v7 VERSION_MAJOR=$(shell echo $(VERSION) | cut -f1 -d.) VERSION_MINOR=$(shell echo $(VERSION) | cut -f2 -d.) BINARY_NAME=prometheus-docker-labels-discovery @@ -27,21 +29,32 @@ lint: build: GOOS=${GOOS} $(GOBUILD) \ -ldflags "-X version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} \ - -X version.BuildDate=${BUILD_DATE} \ - -X version.Version=${VERSION}" \ + -X github.com/sqooba/go-common/version.BuildDate=${BUILD_DATE} \ + -X github.com/sqooba/go-common/version.Version=${VERSION}" \ -o ${BINARY_NAME} . + package: - docker build -f Dockerfile \ - -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION) \ - -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR).$(VERSION_MINOR) \ - -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR) \ - . + docker buildx build -f Dockerfile \ + --platform $(BUILD_PLATFORM) \ + --build-arg VERSION=$(VERSION) \ + --build-arg BUILD_DATE=$(BUILD_DATE) \ + -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION) \ + -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR).$(VERSION_MINOR) \ + -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR) \ + --load --no-cache \ + . test: go test ./... release: - docker push ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION) - docker push ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR).$(VERSION_MINOR) - docker push ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR) + docker buildx build -f Dockerfile \ + --platform $(PACKAGE_PLATFORM) \ + --build-arg VERSION=$(VERSION) \ + --build-arg BUILD_DATE=$(BUILD_DATE) \ + -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION) \ + -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR).$(VERSION_MINOR) \ + -t ${DOCKER_REGISTRY}${GO_PACKAGE}:$(VERSION_MAJOR) \ + --push \ + . diff --git a/prom_file_handler.go b/prom_file_handler.go index 8f85f4f..4bc431a 100644 --- a/prom_file_handler.go +++ b/prom_file_handler.go @@ -15,7 +15,7 @@ type promHandler struct { func newPromFileHandler(config envConfig) (*promHandler, error) { if !strings.HasSuffix(config.PrometheusConfigFilePath, ".json") { - return nil, fmt.Errorf("file dose not have .json extension") + return nil, fmt.Errorf("file does not have .json extension") } err := syscall.Access(config.PrometheusConfigFilePath, syscall.O_RDWR)