blob: 0df4abad5d69930e3697aef539332b94ff74c4bd [file] [log] [blame]
liamfallon5780bdf2021-11-29 13:26:27 +00001#!/bin/bash
2
3#
4# ============LICENSE_START================================================
5# ONAP
6# =========================================================================
7# Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
liamfallon81c2c512021-12-16 12:56:37 +00008# Modifications Copyright (C) 2022 Nordix Foundation.
liamfallon5780bdf2021-11-29 13:26:27 +00009# =========================================================================
10# Licensed under the Apache License, Version 2.0 (the "License");
11# you may not use this file except in compliance with the License.
12# You may obtain a copy of the License at
13#
14# http://www.apache.org/licenses/LICENSE-2.0
15#
16# Unless required by applicable law or agreed to in writing, software
17# distributed under the License is distributed on an "AS IS" BASIS,
18# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19# See the License for the specific language governing permissions and
20# limitations under the License.
21# ============LICENSE_END==================================================
22#
23
24#
25# This creates the x.y.z-container.yaml file for releasing a docker image.
26# It should be executed from somewhere within the "git" repo to be
27# released. Assumes the following:
28# - the latest commit is at the top of the "git log"
29# - the branch to be released is currently checked out
30# - the latest maven-docker-stage jenkins job is the one to be released
31# - the defaultbranch within the .gitreview file is set to the
32# branch to be released
33#
34# This uses xmllint, which is part of the libxml2-utils package.
35#
36# If behind a firewall, then http_proxy must be set so that curl
37# can get through the firewall.
38#
39
liamfallon81c2c512021-12-16 12:56:37 +000040set -e
41
liamfallonb76315a2022-01-12 13:24:54 +000042# Use the bash internal OSTYPE variable to check for MacOS
43if [[ "$OSTYPE" == "darwin"* ]]
44then
45 SED="gsed"
46else
47 SED="sed"
48fi
49
liamfallond7d9a662022-03-01 21:01:03 +000050# shellcheck disable=SC2166
liamfallon5780bdf2021-11-29 13:26:27 +000051if [ $# -lt 1 -o "$1" = "-?" ]
52then
53 echo "arg(s): docker-container-name1 docker-container-name2 ..." >&2
54 exit 1
55fi
56
57TOPDIR=$(git rev-parse --show-toplevel)
58if [ -z "${TOPDIR}" ]; then
59 echo "cannot determine top of 'git' repo" >&2
60 exit 1
61fi
62
63BRANCH=$(awk -F= '$1 == "defaultbranch" { print $2 }' "${TOPDIR}/.gitreview")
64if [ -z "${BRANCH}" ]; then
65 echo "cannot extract default branch from ${TOPDIR}/.gitreview" >&2
66 exit 1
67fi
liamfallond7d9a662022-03-01 21:01:03 +000068echo "Branch: ${BRANCH}"
liamfallon5780bdf2021-11-29 13:26:27 +000069
70PROJECT=$(awk -F= '$1 == "project" { print $2 }' "${TOPDIR}/.gitreview" |
liamfallonb76315a2022-01-12 13:24:54 +000071 $SED 's/.git$//')
liamfallon5780bdf2021-11-29 13:26:27 +000072if [ -z "${PROJECT}" ]; then
73 echo "cannot extract project from ${TOPDIR}/.gitreview" >&2
74 exit 1
75fi
liamfallond7d9a662022-03-01 21:01:03 +000076echo "Project: ${PROJECT}"
77DPROJ=$(echo "${PROJECT}" | $SED 's!/!-!')
liamfallon5780bdf2021-11-29 13:26:27 +000078
79RELEASE=$(
80 xmllint --xpath \
81 '/*[local-name()="project"]/*[local-name()="version"]/text()' \
82 "${TOPDIR}/pom.xml" |
liamfallonb76315a2022-01-12 13:24:54 +000083 $SED 's!-SNAPSHOT!!'
liamfallon5780bdf2021-11-29 13:26:27 +000084 )
85if [ -z "${RELEASE}" ]; then
86 echo "cannot extract release from ${TOPDIR}/pom.xml" >&2
87 exit 1
88fi
liamfallond7d9a662022-03-01 21:01:03 +000089echo "Release: ${RELEASE}"
liamfallon5780bdf2021-11-29 13:26:27 +000090
91REF_ID=$(git log | grep commit | head -1 | awk '{ print $2 }')
92if [ -z "${REF_ID}" ]; then
93 echo "cannot extract ref from 'git log'" >&2
94 exit 1
95fi
liamfallond7d9a662022-03-01 21:01:03 +000096echo "Ref: ${REF_ID}"
liamfallon5780bdf2021-11-29 13:26:27 +000097
98prefix='https://jenkins.onap.org/view/policy/job/'
99STAGE_ID=$(
liamfallond7d9a662022-03-01 21:01:03 +0000100 curl --silent "${prefix}${DPROJ}-maven-docker-stage-${BRANCH}/" |
liamfallon5780bdf2021-11-29 13:26:27 +0000101 grep "Last completed build" |
liamfallonb76315a2022-01-12 13:24:54 +0000102 $SED -e 's!.*Last completed build .#!!' -e 's!).*!!' |
liamfallon5780bdf2021-11-29 13:26:27 +0000103 head -1
104 )
105if [ -z "${STAGE_ID}" ]; then
106 echo "cannot extract last docker stage ID from jenkins" >&2
107 exit 1
108fi
109STAGE_ID=${DPROJ}-maven-docker-stage-${BRANCH}/${STAGE_ID}
liamfallond7d9a662022-03-01 21:01:03 +0000110echo "Stage ID: ${STAGE_ID}"
liamfallon5780bdf2021-11-29 13:26:27 +0000111
112prefix='https://jenkins.onap.org/view/policy/job/'
liamfallond7d9a662022-03-01 21:01:03 +0000113JOB_OUT=$(curl --silent "${prefix}${STAGE_ID}/consoleFull")
liamfallon5780bdf2021-11-29 13:26:27 +0000114echo "${JOB_OUT}" | grep -q "Finished: SUCCESS"
liamfallond7d9a662022-03-01 21:01:03 +0000115# shellcheck disable=SC2181
liamfallon5780bdf2021-11-29 13:26:27 +0000116if [ $? -ne 0 ]; then
117 echo "last docker build has not completed successfully" >&2
118 exit 1
119fi
120
liamfallond7d9a662022-03-01 21:01:03 +0000121echo "Creating ${TOPDIR}/releases/${RELEASE}-container.yaml"
liamfallon5780bdf2021-11-29 13:26:27 +0000122cat >"${TOPDIR}/releases/${RELEASE}-container.yaml" <<EOT
123distribution_type: 'container'
124container_release_tag: '${RELEASE}'
125project: '${DPROJ}'
126log_dir: '${STAGE_ID}'
127ref: ${REF_ID}
128containers:
129EOT
130
131for CONT_NAME in "$@"
132do
133 VERSION=$(
134 echo "${JOB_OUT}" |
135 awk "
136 /Successfully tagged onap/ { found = 0 }
137 /Successfully tagged onap\/${CONT_NAME}:/ { found = 1 }
138 found == 1 && /Tag with/ { print }
139 " |
140 head -1 |
liamfallonb76315a2022-01-12 13:24:54 +0000141 $SED 's!.*Tag with!!' |
liamfallon5780bdf2021-11-29 13:26:27 +0000142 cut -d, -f2
143 )
144 if [ -z "${VERSION}" ]; then
145 echo "cannot extract ${CONT_NAME} version from jenkins build output" >&2
146 exit 1
147 fi
liamfallond7d9a662022-03-01 21:01:03 +0000148 echo "${CONT_NAME} version: ${VERSION}"
liamfallon5780bdf2021-11-29 13:26:27 +0000149
150 cat >>"${TOPDIR}/releases/${RELEASE}-container.yaml" <<EOT_LOOP
151 - name: '${CONT_NAME}'
152 version: '${VERSION}'
153EOT_LOOP
154done