From cf4aa9126aee1f551eca37dd5aa0585551e57185 Mon Sep 17 00:00:00 2001
From: Pedro <pedrogomesyoo@gmail.com>
Date: Mon, 2 Oct 2017 21:11:26 +0200
Subject: [PATCH] Implement standard release procedure for prometheus
 exporters. Use CircleCI to build new binaries using promu and release to
 github, docker and quay.

---
 .promu.yml | 13 ++++++++++++
 Dockerfile |  9 ++++----
 Makefile   | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++
 circle.yml | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 137 insertions(+), 5 deletions(-)
 create mode 100644 .promu.yml
 create mode 100644 Makefile
 create mode 100644 circle.yml

diff --git a/.promu.yml b/.promu.yml
new file mode 100644
index 0000000..668aa03
--- /dev/null
+++ b/.promu.yml
@@ -0,0 +1,13 @@
+repository:
+    path: github.com/Lusitaniae/apache_exporter
+build:
+    flags: -a -tags netgo
+    ldflags: |
+        -X {{repoPath}}/vendor/github.com/prometheus/common/version.Version={{.Version}}
+        -X {{repoPath}}/vendor/github.com/prometheus/common/version.Revision={{.Revision}}
+        -X {{repoPath}}/vendor/github.com/prometheus/common/version.Branch={{.Branch}}
+        -X {{repoPath}}/vendor/github.com/prometheus/common/version.BuildUser={{user}}@{{host}}
+        -X {{repoPath}}/vendor/github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}}
+tarball:
+    files:
+        - LICENSE
diff --git a/Dockerfile b/Dockerfile
index be75a7b..fad0bc6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,6 @@
-FROM golang:alpine
+FROM quay.io/prometheus/busybox:latest
 
-RUN apk add --no-cache ca-certificates git
-RUN go get github.com/neezgee/apache_exporter
+COPY apache_exporter /bin/apache_exporter
 
-EXPOSE 9117
-ENTRYPOINT ["/go/bin/apache_exporter"]
\ No newline at end of file
+ENTRYPOINT ["/bin/apache_exporter"]
+EXPOSE     9117
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..714b863
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,58 @@
+# Copyright 2015 The Prometheus Authors
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+GO    := GO15VENDOREXPERIMENT=1 go
+PROMU := $(GOPATH)/bin/promu
+pkgs   = $(shell $(GO) list ./... | grep -v /vendor/)
+
+PREFIX                  ?= $(shell pwd)
+BIN_DIR                 ?= $(shell pwd)
+DOCKER_IMAGE_NAME       ?= apache-exporter
+DOCKER_IMAGE_TAG        ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
+
+all: format build test
+
+test:
+	@echo ">> running tests"
+	@$(GO) test -short $(pkgs)
+
+style:
+	@echo ">> checking code style"
+	@! gofmt -d $(shell find . -path ./vendor -prune -o -name '*.go' -print) | grep '^'
+
+format:
+	@echo ">> formatting code"
+	@$(GO) fmt $(pkgs)
+
+vet:
+	@echo ">> vetting code"
+	@$(GO) vet $(pkgs)
+
+build: promu
+	@echo ">> building binaries"
+	@$(PROMU) build --prefix $(PREFIX)
+
+tarball: promu
+	@echo ">> building release tarball"
+	@$(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR)
+
+docker:
+	@echo ">> building docker image"
+	@docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" .
+
+promu:
+	@GOOS=$(shell uname -s | tr A-Z a-z) \
+		GOARCH=$(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m))) \
+		$(GO) get -u github.com/prometheus/promu
+
+.PHONY: all style format build test vet tarball docker promu
diff --git a/circle.yml b/circle.yml
new file mode 100644
index 0000000..9342790
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,62 @@
+machine:
+  environment:
+    DOCKER_IMAGE_NAME: lusotycoon/apache-exporter
+    QUAY_IMAGE_NAME: quay.io/lusitaniae/apache-exporter
+    DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.8-base
+    REPO_PATH: github.com/Lusitaniae/apache_exporter
+  pre:
+    - sudo curl -L -o /usr/bin/docker 'https://s3-external-1.amazonaws.com/circle-downloads/docker-1.9.1-circleci'
+    - sudo chmod 0755 /usr/bin/docker
+    - sudo curl -L 'https://github.com/aktau/github-release/releases/download/v0.6.2/linux-amd64-github-release.tar.bz2' | tar xvjf - --strip-components 3 -C $HOME/bin
+  services:
+    - docker
+
+dependencies:
+  pre:
+    - make promu
+    - docker info
+  override:
+    - promu crossbuild
+    - ln -s .build/linux-amd64/apache_exporter apache_exporter
+    - |
+      if [ -n "$CIRCLE_TAG" ]; then
+        make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG
+        make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG
+      else
+        make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME
+        make docker DOCKER_IMAGE_NAME=$QUAY_IMAGE_NAME
+      fi
+  post:
+    - mkdir $CIRCLE_ARTIFACTS/binaries/ && cp -a .build/* $CIRCLE_ARTIFACTS/binaries/
+    - docker images
+
+test:
+  override:
+    - docker run --rm -t -v "$(pwd):/app" "${DOCKER_TEST_IMAGE_NAME}" -i "${REPO_PATH}" -T
+
+deployment:
+  hub_branch:
+    branch: master
+    owner: Lusitaniae
+    commands:
+      - docker login -e $DOCKER_EMAIL -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
+      - docker login -e $QUAY_EMAIL -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
+      - docker push $DOCKER_IMAGE_NAME
+      - docker push $QUAY_IMAGE_NAME
+  hub_tag:
+    tag: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
+    owner: Lusitaniae
+    commands:
+      - promu crossbuild tarballs
+      - promu checksum .tarballs
+      - promu release .tarballs
+      - mkdir $CIRCLE_ARTIFACTS/releases/ && cp -a .tarballs/* $CIRCLE_ARTIFACTS/releases/
+      - docker login -e $DOCKER_EMAIL -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
+      - docker login -e $QUAY_EMAIL -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
+      - |
+        if [[ "$CIRCLE_TAG" =~ ^v[0-9]+(\.[0-9]+){2}$ ]]; then
+            docker tag "$DOCKER_IMAGE_NAME:$CIRCLE_TAG" "$DOCKER_IMAGE_NAME:latest"
+            docker tag "$QUAY_IMAGE_NAME:$CIRCLE_TAG" "$QUAY_IMAGE_NAME:latest"
+        fi
+      - docker push $DOCKER_IMAGE_NAME
+      - docker push $QUAY_IMAGE_NAME
-- 
GitLab