Script to calculate the version of an OPNFV object 35/3035/10
authorjose.lausuch <jose.lausuch@ericsson.com>
Wed, 4 Nov 2015 15:34:43 +0000 (16:34 +0100)
committerFatih Degirmenci <fatih.degirmenci@ericsson.com>
Tue, 10 Nov 2015 23:26:14 +0000 (23:26 +0000)
This script calculates and outputs the version of the given object:
- docker images
- artifacts

JIRA: RELENG-52

Change-Id: I770dc0acc60ced19e77746584d4d3c484f55223e
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
utils/calculate_version.sh [new file with mode: 0755]

diff --git a/utils/calculate_version.sh b/utils/calculate_version.sh
new file mode 100755 (executable)
index 0000000..aac212d
--- /dev/null
@@ -0,0 +1,131 @@
+#!/bin/bash
+
+#
+# Authors:
+#      Jose Lausuch <jose.lausuch@ericsson.com>
+#      Fatih Degirmenci <fatih.degirmenci@ericsson.com>
+#
+# Calculates and generates the version tag for the OPNFV objects:
+#     - Docker images
+#     - ISOs
+#     - Artifcats
+#
+
+info ()  {
+    logger -s -t "Calculate_version.info" "$*"
+}
+
+
+error () {
+    logger -s -t "Calculate_version.error" "$*"
+    exit 1
+}
+
+
+#Functions which calculate the version
+function docker_version() {
+    docker_image=$1
+    url_repo="https://registry.hub.docker.com/v2/repositories/${docker_image}/"
+    url_tag="https://registry.hub.docker.com/v2/repositories/${docker_image}/tags/"
+    status=$(curl -s --head -w %{http_code} ${url_repo} -o /dev/null)
+    if [ "${status}" != "200" ]; then
+        error "Cannot access ${url_repo}. Does the image ${docker_image} exist?"
+    fi
+    tag_json=$(curl $url_tag 2>/dev/null | python -mjson.tool | grep ${BASE_VERSION} | head -1)
+    #e.g. tag_json= "name": "brahmaputra.0.2",
+    if [ "${tag_json}" == "" ]; then
+        error "The Docker Image ${docker_image} does not have a TAG with base version ${BASE_VERSION}"
+    fi
+    tag=$(echo $tag_json | awk '{print $2}' | sed 's/\,//' | sed 's/\"//g')
+    #e.g.: tag=brahmaputra.0.2
+    tag_current_version=$(echo $tag | sed 's/.*\.//')
+    tag_new_version=$(($tag_current_version+1))
+    #e.g.: tag=brahmaputra.0.3
+    echo ${BASE_VERSION}.${tag_new_version}
+}
+
+
+function artifact_version() {
+    # To be done
+    echo ""
+}
+
+
+STORAGE_TYPES=(docker artifactrepo)
+TYPE=""
+NAME=""
+
+
+usage="Calculates the version text of one of the following objects.
+
+usage:
+    bash $(basename "$0") [-h|--help] -t|--type docker|artifactrepo -n|--name <object_name>
+
+where:
+    -h|--help      show this help text
+    -t|--type      specify the storage location
+    -n|--name      name of the repository/object
+
+examples:
+    $(basename "$0") -t docker -n opnfv/functest
+    $(basename "$0") -t artifactrepo -n fuel"
+
+
+
+
+# Parse parameters
+while [[ $# > 0 ]]
+    do
+    key="$1"
+    case $key in
+        -h|--help)
+            echo "$usage"
+            exit 0
+            shift
+        ;;
+        -t|--type)
+            TYPE="$2"
+            shift
+        ;;
+        -n|--name)
+            NAME="$2"
+            shift
+        ;;
+        *)
+            error "unknown option $1"
+            exit 1
+        ;;
+    esac
+    shift # past argument or value
+done
+
+if [ -z "$BASE_VERSION" ]; then
+    error "Base version must be specified as environment variable. Ex.: export BASE_VERSION='brahmaputra.0'"
+fi
+
+if [ "${TYPE}" == "" ]; then
+    error "Please specify the type of object to get the version from. $usage"
+fi
+
+if [ "${NAME}" == "" ]; then
+    error "Please specify the name for the given storage type. $usage"
+fi
+
+not_in=1
+for i in "${STORAGE_TYPES[@]}"; do
+    if [[ "${TYPE}" == "$i" ]]; then
+        not_in=0
+    fi
+done
+if [ ${not_in} == 1 ]; then
+    error "Unknown type: ${TYPE}. Available storage types are: [${STORAGE_TYPES[@]}]"
+fi
+
+
+#info "Calculating version for object '${TYPE}' with arguments '${INFO}'..."
+if [ "${TYPE}" == "docker" ]; then
+    docker_version $NAME
+
+elif [ "${TYPE}" == "artifactrepo" ]; then
+    artifact_version $NAME
+fi