Merge pull request #1 from apache/airflow-modifications

Airflow modifications of the pgbouncer exporter
diff --git a/Dockerfile b/Dockerfile
index 0f1a02c..fde2b62 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,9 +1,42 @@
-FROM iron/go
-MAINTAINER Juraj Bubniak <juraj.bubniak@gmail.com>
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+ARG ALPINE_VERSION="3.12"
+
+FROM alpine:${ALPINE_VERSION} AS builder
+
+ARG PGBOUNCER_EXPORTER_VERSION
+ARG AIRFLOW_PGBOUNCER_EXPORTER_VERSION
+ARG GO_VERSION
+ARG COMMIT_SHA
+
+LABEL org.apache.airflow.component="pgbouncer-exporter"
+LABEL org.apache.airflow.pgbouncer_exporter.version="${PGBOUNCER_EXPORTER_VERSION}"
+LABEL org.apache.airflow.go.version="${GO_VERSION}"
+LABEL org.apache.airflow.airflow_pgbouncer_exporter.version="${AIRFLOW_PGBOUNCER_EXPORTER_VERSION}"
+LABEL org.apache.airflow.commit_sha="${COMMIT_SHA}"
+
+MAINTAINER "Apache Airflow Community <dev@airflow.apache.org>"
+
+RUN set -ex \
+    && echo http://dl-cdn.alpinelinux.org/alpine/v3.7/main > /etc/apk/repositories \
+    && echo http://dl-cdn.alpinelinux.org/alpine/v3.7/community >> /etc/apk/repositories \
+    && apk upgrade --no-cache libressl libressl-dev
 
 COPY pgbouncer_exporter /bin
 
-HEALTHCHECK CMD ["pgbouncer_exporter", "health"]
+HEALTHCHECK CMD ["/bin/pgbouncer_exporter", "health"]
 
-ENTRYPOINT ["pgbouncer_exporter"]
+ENTRYPOINT ["/bin/pgbouncer_exporter"]
 CMD ["server"]
diff --git a/build_and_push.sh b/build_and_push.sh
new file mode 100755
index 0000000..299b5b1
--- /dev/null
+++ b/build_and_push.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+set -eu
+DOCKERHUB_USER=${DOCKERHUB_USER:="apache"}
+DOCKERHUB_REPO=${DOCKERHUB_REPO:="airflow"}
+PGBOUNCER_EXPORTER_VERSION="0.5.0"
+AIRFLOW_PGBOUNCER_EXPORTER_VERSION="2020.07.10"
+EXPECTED_GO_VERSION="1.14.4"
+COMMIT_SHA=$(git rev-parse HEAD)
+
+cd "$( dirname "${BASH_SOURCE[0]}" )" || exit 1
+
+CURRENT_GO_VERSION=$("go${EXPECTED_GO_VERSION}" version 2>/dev/null | awk '{ print $3 }' 2>/dev/null)
+
+if [[ ${CURRENT_GO_VERSION} == "" ]]; then
+  CURRENT_GO_VERSION=$(go version 2>/dev/null | awk '{ print $3 }' 2>/dev/null)
+  GO_BIN=$(command -v go 2>/dev/null)
+else
+  GO_BIN=$(command -v go${EXPECTED_GO_VERSION} 2>/dev/null)
+fi
+
+if [[ ${CURRENT_GO_VERSION} == "" ]]; then
+  echo "ERROR! You have no go installed"
+  echo
+  echo "Please install go${EXPECTED_GO_VERSION} to build the package"
+  echo
+  echo "You need to have golang installed. Follow https://golang.org/doc/install"
+  echo
+fi
+
+if [[ ${CURRENT_GO_VERSION} != "go${EXPECTED_GO_VERSION}" ]]; then
+  echo "ERROR! You have unexpected version of go in the path ${CURRENT_GO_VERSION}"
+  echo
+  echo "Make sure you have go${EXPECTED_GO_VERSION} installed:"
+  echo
+  echo "   go get golang.org/dl/go${EXPECTED_GO_VERSION}"
+  echo
+  echo "   go${EXPECTED_GO_VERSION} download"
+  echo
+  echo "You might need to add ${HOME}/go/bin to your PATH"
+  echo
+  exit 1
+fi
+
+
+# Needs to be set for alpine images to run net package of GO
+export CGO_ENABLED=0
+rm pgbouncer_exporter
+
+"${GO_BIN}" get ./...
+"${GO_BIN}" build
+
+TAG="${DOCKERHUB_USER}/${DOCKERHUB_REPO}:airflow-pgbouncer-exporter-${AIRFLOW_PGBOUNCER_EXPORTER_VERSION}-${PGBOUNCER_EXPORTER_VERSION}"
+
+docker build . \
+    --pull \
+    --build-arg "PGBOUNCER_EXPORTER_VERSION=${PGBOUNCER_EXPORTER_VERSION}" \
+    --build-arg "AIRFLOW_PGBOUNCER_EXPORTER_VERSION=${AIRFLOW_PGBOUNCER_EXPORTER_VERSION}"\
+    --build-arg "COMMIT_SHA=${COMMIT_SHA}" \
+    --build-arg "GO_VERSION=${CURRENT_GO_VERSION}" \
+    --tag "${TAG}"
+
+docker push "${TAG}"