summaryrefslogtreecommitdiffstats
path: root/integration/src/main/scripts/release/mkdock.sh
blob: 0df4abad5d69930e3697aef539332b94ff74c4bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bash

#
# ============LICENSE_START================================================
# ONAP
# =========================================================================
# Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
# Modifications Copyright (C) 2022 Nordix Foundation.
# =========================================================================
# 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.
# ============LICENSE_END==================================================
#

#
# This creates the x.y.z-container.yaml file for releasing a docker image.
# It should be executed from somewhere within the "git" repo to be
# released.  Assumes the following:
#   - the latest commit is at the top of the "git log"
#   - the branch to be released is currently checked out
#   - the latest maven-docker-stage jenkins job is the one to be released
#   - the defaultbranch within the .gitreview file is set to the
#     branch to be released
#
# This uses xmllint, which is part of the libxml2-utils package.
#
# If behind a firewall, then http_proxy must be set so that curl
# can get through the firewall.
#

set -e

# Use the bash internal OSTYPE variable to check for MacOS
if [[ "$OSTYPE" == "darwin"* ]]
then
    SED="gsed"
else
    SED="sed"
fi

# shellcheck disable=SC2166
if [ $# -lt 1 -o "$1" = "-?" ]
then
    echo "arg(s): docker-container-name1 docker-container-name2 ..." >&2
    exit 1
fi

TOPDIR=$(git rev-parse --show-toplevel)
if [ -z "${TOPDIR}" ]; then
    echo "cannot determine top of 'git' repo" >&2
    exit 1
fi

BRANCH=$(awk -F= '$1 == "defaultbranch" { print $2 }' "${TOPDIR}/.gitreview")
if [ -z "${BRANCH}" ]; then
    echo "cannot extract default branch from ${TOPDIR}/.gitreview" >&2
    exit 1
fi
echo "Branch: ${BRANCH}"

PROJECT=$(awk -F= '$1 == "project" { print $2 }' "${TOPDIR}/.gitreview" |
            $SED 's/.git$//')
if [ -z "${PROJECT}" ]; then
    echo "cannot extract project from ${TOPDIR}/.gitreview" >&2
    exit 1
fi
echo "Project: ${PROJECT}"
DPROJ=$(echo "${PROJECT}" | $SED 's!/!-!')

RELEASE=$(
    xmllint --xpath \
        '/*[local-name()="project"]/*[local-name()="version"]/text()' \
        "${TOPDIR}/pom.xml" |
    $SED 's!-SNAPSHOT!!'
    )
if [ -z "${RELEASE}" ]; then
    echo "cannot extract release from ${TOPDIR}/pom.xml" >&2
    exit 1
fi
echo "Release: ${RELEASE}"

REF_ID=$(git log | grep commit | head -1 | awk '{ print $2 }')
if [ -z "${REF_ID}" ]; then
    echo "cannot extract ref from 'git log'" >&2
    exit 1
fi
echo "Ref: ${REF_ID}"

prefix='https://jenkins.onap.org/view/policy/job/'
STAGE_ID=$(
    curl --silent "${prefix}${DPROJ}-maven-docker-stage-${BRANCH}/" |
    grep "Last completed build" |
    $SED -e 's!.*Last completed build .#!!' -e 's!).*!!' |
    head -1
    )
if [ -z "${STAGE_ID}" ]; then
    echo "cannot extract last docker stage ID from jenkins" >&2
    exit 1
fi
STAGE_ID=${DPROJ}-maven-docker-stage-${BRANCH}/${STAGE_ID}
echo "Stage ID: ${STAGE_ID}"

prefix='https://jenkins.onap.org/view/policy/job/'
JOB_OUT=$(curl --silent "${prefix}${STAGE_ID}/consoleFull")
echo "${JOB_OUT}" | grep -q "Finished: SUCCESS"
# shellcheck disable=SC2181
if [ $? -ne 0 ]; then
    echo "last docker build has not completed successfully" >&2
    exit 1
fi

echo "Creating ${TOPDIR}/releases/${RELEASE}-container.yaml"
cat >"${TOPDIR}/releases/${RELEASE}-container.yaml" <<EOT
distribution_type: 'container'
container_release_tag: '${RELEASE}'
project: '${DPROJ}'
log_dir: '${STAGE_ID}'
ref: ${REF_ID}
containers:
EOT

for CONT_NAME in "$@"
do
    VERSION=$(
        echo "${JOB_OUT}" |
        awk "
            /Successfully tagged onap/ { found = 0 }
            /Successfully tagged onap\/${CONT_NAME}:/ { found = 1 }
            found == 1 && /Tag with/ { print }
        " |
        head -1 |
        $SED 's!.*Tag with!!' |
        cut -d, -f2
        )
    if [ -z "${VERSION}" ]; then
        echo "cannot extract ${CONT_NAME} version from jenkins build output" >&2
        exit 1
    fi
    echo "${CONT_NAME} version: ${VERSION}"

    cat >>"${TOPDIR}/releases/${RELEASE}-container.yaml" <<EOT_LOOP
    - name: '${CONT_NAME}'
      version: '${VERSION}'
EOT_LOOP
done