blob: f964bf9d96b1da81a372a48d62125bb8f5c959f2 [file] [log] [blame]
Samuli Silvius9e9afd72018-12-21 14:23:51 +02001#! /usr/bin/env bash
2
3# COPYRIGHT NOTICE STARTS HERE
4#
Tomáš Levora8d272bd2019-03-12 15:06:35 +01005# Copyright 2018-2019 © Samsung Electronics Co., Ltd.
Samuli Silvius9e9afd72018-12-21 14:23:51 +02006#
7# Licensed under the Apache License, Version 2.0 (the "License");
8# you may not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS,
15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18#
19# COPYRIGHT NOTICE ENDS HERE
20
Samuli Silvius9e9afd72018-12-21 14:23:51 +020021### This script prepares Nexus repositories data blobs for ONAP
22
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020023## The script requires following dependencies are installed: nodejs, jq, docker, twine, expect
Mateusz Pilatb12b4402019-05-23 15:55:56 +020024## All required resources are expected in the upper directory created during
25## download procedure as DATA_DIR or in the directory given as --input-directory
26## All lists used must be in project data_lists directory or in the directory given
27## as --resource-list-directory
Samuli Silvius9e9afd72018-12-21 14:23:51 +020028
29# Fail fast settings
30set -e
31
Tomáš Levora8d272bd2019-03-12 15:06:35 +010032TIMESTAMP="date +'%Y-%m-%d_%H-%M-%S'"
33SCRIPT_LOG="/tmp/$(basename $0)_$(eval ${TIMESTAMP}).log"
34
35# Log everything
36exec &> >(tee -a "${SCRIPT_LOG}")
37
Samuli Silvius9e9afd72018-12-21 14:23:51 +020038# Nexus repository location
39NEXUS_DOMAIN="nexus"
Tomáš Levora8d272bd2019-03-12 15:06:35 +010040NEXUS_PORT="8081"
41NEXUS_DOCKER_PORT="8082"
42NPM_REGISTRY="http://${NEXUS_DOMAIN}:${NEXUS_PORT}/repository/npm-private/"
43PYPI_REGISTRY="http://${NEXUS_DOMAIN}:${NEXUS_PORT}/repository/pypi-private/"
44DOCKER_REGISTRY="${NEXUS_DOMAIN}:${NEXUS_DOCKER_PORT}"
45DEFAULT_REGISTRY="docker.io"
Samuli Silvius9e9afd72018-12-21 14:23:51 +020046
47# Nexus repository credentials
48NEXUS_USERNAME=admin
49NEXUS_PASSWORD=admin123
50NEXUS_EMAIL=admin@example.org
51
Tomáš Levora8d272bd2019-03-12 15:06:35 +010052# Setting paths
53LOCAL_PATH="$(readlink -f $(dirname ${0}))"
Mateusz Pilatb12b4402019-05-23 15:55:56 +020054
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020055# Defaults
Tomáš Levorae878f032019-06-13 13:31:01 +020056DOCKER_LOAD="false"
Tomáš Levora8d272bd2019-03-12 15:06:35 +010057DATA_DIR="$(realpath ${LOCAL_PATH}/../../resources)"
Mateusz Pilatb12b4402019-05-23 15:55:56 +020058NEXUS_DATA_DIR="${DATA_DIR}/nexus_data"
Tomáš Levora8d272bd2019-03-12 15:06:35 +010059LISTS_DIR="${LOCAL_PATH}/data_lists"
60
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020061# Required dependencies
62COMMANDS=(jq docker expect npm twine)
63
Mateusz Pilatb12b4402019-05-23 15:55:56 +020064usage () {
Tomáš Levora55b43662019-07-17 13:42:47 +020065 echo "
66 Usage: $(basename $0) [OPTION...] [FILE]...
Mateusz Pilatb12b4402019-05-23 15:55:56 +020067
Tomáš Levora55b43662019-07-17 13:42:47 +020068 This script prepares Nexus repositories data blobs for ONAP
69
70 Following dependencies are required: nodejs, jq, docker, twine, expect
71 By default, without any lists or dirs provided, the resources are expected as downloaded
72 during download process and default lists will be used to build the Nexus blob in the same
73 resources dir
74
75 Examples:
76 $(basename $0) --input-directory </path/to/downloaded/files/dir> -ld --output-directory
77 </path/to/output/dir> --resource-list-directory </path/to/dir/with/resource/list>
78 # Docker images, npms and pypi packages will be loaded from specified directory
79 # and the blob is created
80 $(basename $0) -d </path/to/docker/images/list> -d </path/to/another/docker/images/list>
81 -n </path/to/npm/list> -p </path/to/pip/list>
82 # Docker images, npms and pypi packages will be pushed to Nexus based and provided data
83 # lists (multiple lists can be provided)
84
85 -d | --docker use specific list of docker images to be pushed into Nexus
86 (in case of -ld used, this list will be used for loading of
87 the images)
88 -h | --help print this usage
89 -i | --input-directory use specific directory containing resources needed to
90 create nexus blob
91 The structure of this directory must organized as described
92 in build guide
93 -ld | --load-docker-images load docker images from resource directory
94 -n | --npm list of npm packages to be pushed into Nexus
95 -o | --output-directory use specific directory for the target blob
96 -p | --pypi use specific list of pypi packages to be pushed into Nexus
97 -rl | --resource-list-directory use specific directory with docker, pypi and npm lists
Mateusz Pilatb12b4402019-05-23 15:55:56 +020098 "
99 exit 1
100}
101
Tomáš Levora80594072019-07-11 10:38:23 +0200102publish_ports () {
103 for REGISTRY in $(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true) ${NEXUS_PORT}; do
104 if [[ ${REGISTRY} != *":"* ]]; then
105 if [[ ${PUBLISHED_PORTS} != *"80:${NEXUS_DOCKER_PORT}"* ]]; then
106 PUBLISHED_PORTS="${PUBLISHED_PORTS} -p 80:${NEXUS_DOCKER_PORT}"
107 fi
108 else
109 REGISTRY_PORT="$(sed 's/^.*\:\([[:digit:]]*\)$/\1/' <<< ${REGISTRY})"
110 if [[ ${PUBLISHED_PORTS} != *"${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"* ]]; then
111 PUBLISHED_PORTS="${PUBLISHED_PORTS} -p ${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"
112 fi
113 fi
114 done
115}
116
117simulated_hosts () {
118 SIMUL_HOSTS=($(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$// ; s/:.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true ) ${NEXUS_DOMAIN})
119 for HOST in "${SIMUL_HOSTS[@]}"; do
120 if ! grep -wq ${HOST} /etc/hosts; then
121 echo "127.0.0.1 ${HOST}" >> /etc/hosts
122 fi
123 done
124}
125
Tomáš Levorae878f032019-06-13 13:31:01 +0200126load_docker_images () {
127 for ARCHIVE in $(sed $'s/\r// ; /^#/d ; s/\:/\_/g ; s/\//\_/g ; s/$/\.tar/g' ${1} | awk '{ print $1 }'); do
128 docker load -i ${NXS_SRC_DOCKER_IMG_DIR}/${ARCHIVE}
129 done
130}
131
Tomáš Levora80594072019-07-11 10:38:23 +0200132push_npm () {
133 for ARCHIVE in $(sed $'s/\r// ; s/\\@/\-/g ; s/$/\.tgz/g' ${1}); do
134 npm publish --access public ${ARCHIVE} > /dev/null
135 echo "NPM ${ARCHIVE} pushed to Nexus"
136 done
137}
138
139push_pip () {
140 for PACKAGE in $(sed $'s/\r//; s/==/-/' ${NXS_PYPI_LIST}); do
141 twine upload -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" --repository-url ${PYPI_REGISTRY} ${PACKAGE}*
142 echo "PYPI ${PACKAGE} pushed to Nexus"
Tomáš Levora55b43662019-07-17 13:42:47 +0200143 done
Tomáš Levora80594072019-07-11 10:38:23 +0200144}
145
146docker_login () {
147 for REGISTRY in $(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY}) ${DOCKER_REGISTRY}; do
Tomáš Levora12fe9442019-08-27 14:16:07 +0200148 if ! grep -wqs ${REGISTRY} ~/.docker/config.json; then
Tomáš Levora55b43662019-07-17 13:42:47 +0200149 echo "Docker login to ${REGISTRY}"
Tomáš Levora80409ef2019-09-04 10:36:30 +0200150 echo -n "${NEXUS_PASSWORD}" | docker login -u "${NEXUS_USERNAME}" --password-stdin ${REGISTRY} > /dev/null
Tomáš Levora55b43662019-07-17 13:42:47 +0200151 fi
152 done
Tomáš Levora80594072019-07-11 10:38:23 +0200153}
154
155push_docker () {
156 for IMAGE in $(sed $'s/\r// ; /^#/d' ${1} | awk '{ print $1 }'); do
157 PUSH=""
158 if [[ ${IMAGE} != *"/"* ]]; then
159 PUSH="${DOCKER_REGISTRY}/library/${IMAGE}"
160 elif [[ ${IMAGE} == *"${DEFAULT_REGISTRY}"* ]]; then
161 if [[ ${IMAGE} == *"/"*"/"* ]]; then
162 PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'/' <<< ${IMAGE})"
163 else
164 PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'\/library/' <<< ${IMAGE})"
165 fi
166 elif [[ -z $(sed -n '/\.[^/].*\//p' <<< ${IMAGE}) ]]; then
167 PUSH="${DOCKER_REGISTRY}/${IMAGE}"
168 fi
169 if [[ ! -z ${PUSH} ]]; then
170 docker tag ${IMAGE} ${PUSH}
171 else
172 PUSH="${IMAGE}"
173 fi
174 docker push ${PUSH}
175 echo "${IMAGE} pushed as ${PUSH} to Nexus"
176 done
177}
178
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +0200179# Verify all dependencies are available in PATH
180FAILED_COMMANDS=()
Tomáš Levora55b43662019-07-17 13:42:47 +0200181for cmd in ${COMMANDS[*]}; do
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +0200182 command -v $cmd >/dev/null 2>&1 || FAILED_COMMANDS+=($cmd)
183done
Tomáš Levora55b43662019-07-17 13:42:47 +0200184
185if [ ${#FAILED_COMMANDS[*]} -gt 0 ]; then
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +0200186 echo "Following commands where not found in PATH and are required:"
187 echo ${FAILED_COMMANDS[*]}
188 echo "Aborting."
189 exit 1
190fi
191
Tomáš Levorae878f032019-06-13 13:31:01 +0200192while [ "${1}" != "" ]; do
193 case ${1} in
Tomáš Levora55b43662019-07-17 13:42:47 +0200194 -d | --docker ) shift
195 NXS_DOCKER_IMG_LISTS+=("${1}")
196 ;;
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200197 -i | --input-directory ) shift
Tomáš Levorae878f032019-06-13 13:31:01 +0200198 DATA_DIR="${1}"
199 ;;
200 -ld | --load-docker-images ) DOCKER_LOAD="true"
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200201 ;;
Tomáš Levora55b43662019-07-17 13:42:47 +0200202 -n | --npm ) shift
203 NXS_NPM_LISTS+=("${1}")
204 ;;
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200205 -o | --output-directory ) shift
Tomáš Levorae878f032019-06-13 13:31:01 +0200206 NEXUS_DATA_DIR="${1}"
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200207 ;;
Tomáš Levora55b43662019-07-17 13:42:47 +0200208 -p | --pypi ) shift
209 NXS_PYPI_LISTS+=("${1}")
210 ;;
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200211 -rl | --resource-list-directory ) shift
Tomáš Levorae878f032019-06-13 13:31:01 +0200212 LISTS_DIR="${1}"
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200213 ;;
214 -h | --help ) usage
215 ;;
216 *) usage
217 esac
218 shift
219done
220
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100221# Setup directories with resources for docker, npm and pypi
222NXS_SRC_DOCKER_IMG_DIR="${DATA_DIR}/offline_data/docker_images_for_nexus"
223NXS_SRC_NPM_DIR="${DATA_DIR}/offline_data/npm_tar"
224NXS_SRC_PYPI_DIR="${DATA_DIR}/offline_data/pypi"
225
Tomáš Levorafeaa6b42019-05-29 09:45:29 +0200226# Setup specific resources lists
Tomáš Levora55b43662019-07-17 13:42:47 +0200227NXS_INFRA_LIST="${LISTS_DIR}/infra_docker_images.list"
Tomáš Levorafeaa6b42019-05-29 09:45:29 +0200228NXS_DOCKER_IMG_LIST="${LISTS_DIR}/onap_docker_images.list"
Tomáš Levora55b43662019-07-17 13:42:47 +0200229NXS_RKE_DOCKER_IMG_LIST="${LISTS_DIR}/rke_docker_images.list"
Tomáš Levorafeaa6b42019-05-29 09:45:29 +0200230NXS_NPM_LIST="${LISTS_DIR}/onap_npm.list"
231NXS_PYPI_LIST="${LISTS_DIR}/onap_pip_packages.list"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100232
233# Setup Nexus image used for build and install infra
Tomáš Levora55b43662019-07-17 13:42:47 +0200234NEXUS_IMAGE="$(grep sonatype/nexus3 ${NXS_INFRA_LIST})"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100235NEXUS_IMAGE_TAR="${DATA_DIR}/offline_data/docker_images_infra/$(sed 's/\//\_/ ; s/$/\.tar/ ; s/\:/\_/' <<< ${NEXUS_IMAGE})"
236
Tomáš Levora55b43662019-07-17 13:42:47 +0200237# Set default lists if nothing specific defined by user
238if [ $((${#NXS_DOCKER_IMG_LISTS[@]} + ${#NXS_NPM_LISTS[@]} + ${#NXS_PYPI_LISTS[@]})) -eq 0 ]; then
239 NXS_DOCKER_IMG_LISTS=("${NXS_DOCKER_IMG_LIST}" "${NXS_RKE_DOCKER_IMG_LIST}")
240 NXS_NPM_LISTS[0]="${NXS_NPM_LIST}"
241 NXS_PYPI_LISTS[0]="${NXS_PYPI_LIST}"
242fi
243
Tomáš Levora80594072019-07-11 10:38:23 +0200244# Backup /etc/hosts
245HOSTS_BACKUP="$(eval ${TIMESTAMP}_hosts.bk)"
246cp /etc/hosts /etc/${HOSTS_BACKUP}
247
248# Backup the current docker registry settings
249if [ -f ~/.docker/config.json ]; then
250 DOCKER_CONF_BACKUP="$(eval ${TIMESTAMP}_config.json.bk)"
251 mv ~/.docker/config.json ~/.docker/${DOCKER_CONF_BACKUP}
252fi
253
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100254# Setup default ports published to host as docker registry
255PUBLISHED_PORTS="-p ${NEXUS_PORT}:${NEXUS_PORT} -p ${NEXUS_DOCKER_PORT}:${NEXUS_DOCKER_PORT}"
256
257# Setup additional ports published to host based on simulated docker registries
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100258# Setup simulated domain names to be able to push all to private Nexus repository
Tomáš Levora55b43662019-07-17 13:42:47 +0200259for DOCKER_IMG_LIST in "${NXS_DOCKER_IMG_LISTS[@]}"; do
260 publish_ports "${DOCKER_IMG_LIST}"
261 simulated_hosts "${DOCKER_IMG_LIST}"
262done
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200263
264# Nexus repository configuration setup
265NEXUS_CONFIG_GROOVY='import org.sonatype.nexus.security.realm.RealmManager
266import org.sonatype.nexus.repository.attributes.AttributesFacet
267import org.sonatype.nexus.security.user.UserManager
268import org.sonatype.nexus.repository.manager.RepositoryManager
269import org.sonatype.nexus.security.user.UserNotFoundException
270/* Use the container to look up some services. */
271realmManager = container.lookup(RealmManager.class)
272userManager = container.lookup(UserManager.class, "default") //default user manager
273repositoryManager = container.lookup(RepositoryManager.class)
274/* Managers are used when scripting api cannot. Note that scripting api can only create mostly, and that creation methods return objects of created entities. */
275/* Perform cleanup by removing all repos and users. Realms do not need to be re-disabled, admin and anonymous user will not be removed. */
276userManager.listUserIds().each({ id ->
277 if (id != "anonymous" && id != "admin")
278 userManager.deleteUser(id)
279})
280repositoryManager.browse().each {
281 repositoryManager.delete(it.getName())
282}
283/* Add bearer token realms at the end of realm lists... */
284realmManager.enableRealm("NpmToken")
285realmManager.enableRealm("DockerToken")
Tomáš Levora1d902342019-02-05 10:01:43 +0100286realmManager.enableRealm("PypiToken")
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200287/* Create the docker user. */
288security.addUser("docker", "docker", "docker", "docker@example.com", true, "docker", ["nx-anonymous"])
Tomáš Levora1d902342019-02-05 10:01:43 +0100289/* Create docker, npm and pypi repositories. Their default configuration should be compliant with our requirements, except the docker registry creation. */
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200290repository.createNpmHosted("npm-private")
Tomáš Levora1d902342019-02-05 10:01:43 +0100291repository.createPyPiHosted("pypi-private")
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200292def r = repository.createDockerHosted("onap", 8082, 0)
293/* force basic authentication true by default, must set to false for docker repo. */
294conf=r.getConfiguration()
295conf.attributes("docker").set("forceBasicAuth", false)
296repositoryManager.update(conf)'
297
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100298# Prepare the Nexus configuration
299NEXUS_CONFIG=$(echo "${NEXUS_CONFIG_GROOVY}" | jq -Rsc '{"name":"configure", "type":"groovy", "content":.}')
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200300
301#################################
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200302# Docker repository preparation #
303#################################
304
Tomáš Levorae878f032019-06-13 13:31:01 +0200305if [ "${DOCKER_LOAD}" == "true" ]; then
306 # Load predefined Nexus image
307 docker load -i ${NEXUS_IMAGE_TAR}
308 # Load all necessary images
Tomáš Levora55b43662019-07-17 13:42:47 +0200309 for DOCKER_IMG_LIST in "${NXS_DOCKER_IMG_LISTS[@]}"; do
310 load_docker_images "${DOCKER_IMG_LIST}"
311 done
Tomáš Levorae878f032019-06-13 13:31:01 +0200312fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200313
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200314################################
315# Nexus repository preparation #
316################################
317
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200318# Prepare nexus-data directory
319if [ -d ${NEXUS_DATA_DIR} ]; then
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100320 if [ "$(docker ps -q -f name="${NEXUS_DOMAIN}")" ]; then
321 echo "Removing container ${NEXUS_DOMAIN}"
322 docker rm -f $(docker ps -aq -f name="${NEXUS_DOMAIN}")
323 fi
324 pushd ${NEXUS_DATA_DIR}/..
325 NXS_BACKUP="$(eval ${TIMESTAMP})_$(basename ${NEXUS_DATA_DIR})_bk"
326 mv ${NEXUS_DATA_DIR} "${NXS_BACKUP}"
327 echo "${NEXUS_DATA_DIR} already exists - backing up to ${NXS_BACKUP}"
328 popd
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200329fi
330
331mkdir -p ${NEXUS_DATA_DIR}
332chown 200:200 ${NEXUS_DATA_DIR}
333chmod 777 ${NEXUS_DATA_DIR}
334
335# Save Nexus version to prevent/catch data incompatibility
Tomáš Levora70ec9f42019-07-09 15:33:48 +0200336# Adding commit informations to have link to data from which the blob was built
337cat >> ${NEXUS_DATA_DIR}/nexus.ver << INFO
338nexus_image=$(docker image ls ${NEXUS_IMAGE} --no-trunc --format "{{.Repository}}:{{.Tag}}\nnexus_image_digest={{.ID}}")
339$(for INDEX in ${!NXS_DOCKER_IMG_LISTS[@]}; do printf 'used_image_list%s=%s\n' "$INDEX" "$(sed 's/^.*\/\(.*\)$/\1/' <<< ${NXS_DOCKER_IMG_LISTS[$INDEX]})"; done)
340$(sed -n 's/^.*OOM\ commit\ /oom_repo_commit=/p' ${NXS_DOCKER_IMG_LISTS[@]})
341installer_repo_commit=$(git --git-dir="${LOCAL_PATH}/../.git" rev-parse HEAD)
342INFO
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200343
344# Start the Nexus
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100345NEXUS_CONT_ID=$(docker run -d --rm -v ${NEXUS_DATA_DIR}:/nexus-data:rw --name ${NEXUS_DOMAIN} ${PUBLISHED_PORTS} ${NEXUS_IMAGE})
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200346echo "Waiting for Nexus to fully start"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100347until curl -su ${NEXUS_USERNAME}:${NEXUS_PASSWORD} http://${NEXUS_DOMAIN}:${NEXUS_PORT}/service/metrics/healthcheck | grep '"healthy":true' > /dev/null ; do
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200348 printf "."
349 sleep 3
350done
351echo -e "\nNexus started"
352
353# Configure the nexus repository
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100354curl -sX POST --header 'Content-Type: application/json' --data-binary "${NEXUS_CONFIG}" http://${NEXUS_USERNAME}:${NEXUS_PASSWORD}@${NEXUS_DOMAIN}:${NEXUS_PORT}/service/rest/v1/script
355curl -sX POST --header "Content-Type: text/plain" http://${NEXUS_USERNAME}:${NEXUS_PASSWORD}@${NEXUS_DOMAIN}:${NEXUS_PORT}/service/rest/v1/script/configure/run > /dev/null
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200356
357###########################
358# Populate NPM repository #
359###########################
360
361# Configure NPM registry to our Nexus repository
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100362echo "Configure NPM registry to ${NPM_REGISTRY}"
363npm config set registry "${NPM_REGISTRY}"
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200364
365# Login to NPM registry
366/usr/bin/expect <<EOF
367spawn npm login
368expect "Username:"
369send "${NEXUS_USERNAME}\n"
370expect "Password:"
371send "${NEXUS_PASSWORD}\n"
372expect Email:
373send "${NEXUS_EMAIL}\n"
374expect eof
375EOF
376
377# Patch problematic package
Tomáš Levora1d902342019-02-05 10:01:43 +0100378pushd ${NXS_SRC_NPM_DIR}
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100379PATCHED_NPM="$(grep tsscmp ${NXS_NPM_LIST} | sed $'s/\r// ; s/\\@/\-/ ; s/$/\.tgz/')"
380if [[ ! -z "${PATCHED_NPM}" ]] && ! zgrep -aq "${NPM_REGISTRY}" "${PATCHED_NPM}" 2>/dev/null; then
381 tar xzf "${PATCHED_NPM}"
382 rm -f "${PATCHED_NPM}"
383 sed -i 's|\"registry\":\ \".*\"|\"registry\":\ \"'"${NPM_REGISTRY}"'\"|g' package/package.json
384 tar -zcf "${PATCHED_NPM}" package
385 rm -rf package
386fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200387
388# Push NPM packages to Nexus repository
Tomáš Levora55b43662019-07-17 13:42:47 +0200389for NPM_LIST in "${NXS_NPM_LISTS[@]}"; do
390 push_npm "${NPM_LIST}"
391done
Tomáš Levora1d902342019-02-05 10:01:43 +0100392popd
Tomáš Levora84e80d72019-09-04 10:05:55 +0200393npm logout
Tomáš Levora1d902342019-02-05 10:01:43 +0100394
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100395###############################
396## Populate PyPi repository #
397###############################
Tomáš Levora1d902342019-02-05 10:01:43 +0100398
399pushd ${NXS_SRC_PYPI_DIR}
Tomáš Levora55b43662019-07-17 13:42:47 +0200400for PYPI_LIST in "${NXS_PYPI_LISTS[@]}"; do
401 push_pip "${PYPI_LIST}"
402done
Tomáš Levora1d902342019-02-05 10:01:43 +0100403popd
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200404
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100405###############################
406## Populate Docker repository #
407###############################
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200408
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100409# Login to simulated docker registries
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100410# Push images to private nexus based on the list
411# Images from default registry need to be tagged to private registry
412# and those without defined repository in tag uses default repository 'library'
Tomáš Levora55b43662019-07-17 13:42:47 +0200413for DOCKER_IMG_LIST in "${NXS_DOCKER_IMG_LISTS[@]}"; do
414 docker_login "${DOCKER_IMG_LIST}"
415 push_docker "${DOCKER_IMG_LIST}"
416done
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200417
418##############################
419# Stop the Nexus and cleanup #
420##############################
421
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100422echo "Stopping Nexus and returning backups"
423
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200424# Stop the Nexus
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100425docker stop ${NEXUS_CONT_ID} > /dev/null
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200426
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100427# Return backed up configuration files
Tomáš Levora80594072019-07-11 10:38:23 +0200428mv -f "/etc/${HOSTS_BACKUP}" /etc/hosts
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200429
Tomáš Levora20d3b8a2019-07-09 14:07:08 +0200430if [ -f ~/.docker/${DOCKER_CONF_BACKUP} ]; then
431 mv -f ~/.docker/${DOCKER_CONF_BACKUP} ~/.docker/config.json
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100432fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200433
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100434# Return default settings
435npm config set registry "https://registry.npmjs.org"
436
437echo "Nexus blob is built"
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200438exit 0