Build source with docker technology
[anna.git] / tools / build-with-docker
diff --git a/tools/build-with-docker b/tools/build-with-docker
new file mode 100755 (executable)
index 0000000..e0227ac
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+#############
+# VARIABLES #
+#############
+
+REPO_DIR="$(git rev-parse --show-toplevel 2>/dev/null)"
+[ -z "$REPO_DIR" ] && { echo "You must execute under a valid git repository !" ; exit 1 ; }
+
+#############
+# FUNCTIONS #
+#############
+
+# $1: image directory
+build_image() {
+  local imgdir=$1
+
+  local imgname=$(basename ${imgdir})
+  local imgtag=${TAG}
+
+  echo "Building ${imgname}:${imgtag} ..."
+  cd ${imgdir}
+
+  # Dockerfile for other contexts:
+  local dck_opt=
+  local preferred=Dockerfile.$(arch)
+  [ -f ${preferred} ] && { dck_opt="-f ${preferred}" ; echo "Selected '${preferred}' for current architecture." ; }
+  [ -z "${dck_opt}" -a ! -f Dockerfile ] && { echo "No Dockerfile for this directory. Ignoring ..." ; cd - >/dev/null ; return 1 ; }
+
+  docker build -t ${imgname}:${imgtag} ${dck_opt} .
+  [ $? -ne 0 ] && { echo "An error ocurred. Aborting ..." ; cd - >/dev/null ; return 1 ; }
+  cd - >/dev/null
+}
+
+#############
+# EXECUTION #
+#############
+
+TAG=$(${REPO_DIR}/tools/version)
+
+# Build compilation image:
+build_image ${REPO_DIR}/docker-images/anna-build-nodb # this image has neither oracle nor mysql installed
+
+# Build source with previous compilation image:
+docker run --rm -it -u $(id -u):$(id -g) -v ${REPO_DIR}:/code -w /code anna-build-nodb:${TAG}
+