From 6982ec198c82f99163ce3f074c73222aad55eda6 Mon Sep 17 00:00:00 2001 From: Luca Pasquali Date: Fri, 15 Jan 2021 18:20:44 +0100 Subject: [PATCH] .placeholder hooks custom_build.sh for custom builds and docker hub continuos realease --- .placeholder | 0 custom_build.sh | 191 ++++++++++++++++++++++++++++++++++++++++++++++++ hooks/build | 55 ++++++++++++++ hooks/push | 17 +++++ hooks/test | 11 +++ 5 files changed, 274 insertions(+) create mode 100644 .placeholder create mode 100755 custom_build.sh create mode 100644 hooks/build create mode 100644 hooks/push create mode 100644 hooks/test diff --git a/.placeholder b/.placeholder new file mode 100644 index 0000000..e69de29 diff --git a/custom_build.sh b/custom_build.sh new file mode 100755 index 0000000..5aa54f9 --- /dev/null +++ b/custom_build.sh @@ -0,0 +1,191 @@ +#!/bin/bash + +set -e +TAG=${1} +readonly GEOSERVER_VERSION=${2} +readonly GEOSERVER_MASTER_VERSION=${3} +readonly GEOSERVER_DATA_DIR_RELEASE=${4} +readonly PULL=${5} +readonly ALL_PARAMETERS=$* +readonly BASE_BUILD_URL="https://build.geoserver.org/geoserver" +readonly BASE_BUILD_URL_STABLE="https://netcologne.dl.sourceforge.net/project/geoserver/GeoServer" +readonly EXTRA_FONTS_URL="https://www.dropbox.com/s/hs5743lwf1rktws/fonts.tar.gz?dl=1" +readonly MARLIN_VERSION=0.9.2 +readonly ARTIFACT_DIRECTORY=./resources +readonly GEOSERVER_ARTIFACT_DIRECTORY=${ARTIFACT_DIRECTORY}/geoserver/ +readonly DATADIR_ARTIFACT_DIRECTORY=${ARTIFACT_DIRECTORY}/geoserver-datadir/ +readonly PLUGIN_ARTIFACT_DIRECTORY=${ARTIFACT_DIRECTORY}/geoserver-plugins +readonly FONTS_ARTIFACT_DIRECTORY=${ARTIFACT_DIRECTORY}/fonts/ +readonly MARLIN_ARTIFACT_DIRECTORY=${ARTIFACT_DIRECTORY}/marlin/ + +function help(){ + if [ "$#" -ne 6 ] ; then + echo "Usage: $0 [docker image tag] [geoserver version] [geoserver master version] [datadir| nodatadir] [pull|no pull];" + echo ""; + echo "[docker image tag] : the tag to be used for the docker iamge "; + echo "[geoserver version] : the release version of geoserver to be used; you can set it to master if you want the last release"; + echo "[geoserver master version] : if you use the master version for geoserver you need to set it to the numerical value for the next release;" + echo " if you use a released version you need to put it to the release number"; + echo "[datadir| nodatadir]: if this parameter is equal to nodatadir the datadir is not burned in the docker images "; + echo "[pull|no pull]: docker build use always a remote image or a local image"; + exit 1; + fi +} + +function clean_up_directory() { + rm -rf ${1}/* +} + +function download_from_url_to_a_filepath { + URL=${1} + FILE_PATH=${2} + FILE_DOWNLOADED=$(basename "${FILE_PATH}" ) + if [ -f "${FILE_PATH}" ]; then + rm -f "${FILE_PATH}" + fi + if [ ! -f "${FILE_PATH}" ]; then + curl -L "${URL}" --output "${FILE_PATH}" + echo "* ${FILE_DOWNLOADED} artefact dowloaded *" + else + echo "* ${FILE_DOWNLOADED} artefact already dowloaded *" + fi +} + +function download_plugin() { + TYPE=${1} + PLUGIN_NAME=${2} + + case ${GEOSERVER_VERSION} in + "${GEOSERVER_MASTER_VERSION::-2}.x") + PLUGIN_FULL_NAME=geoserver-${GEOSERVER_VERSION::-2}-SNAPSHOT-${PLUGIN_NAME}-plugin.zip + PLUGIN_ARTIFACT_URL=${BASE_BUILD_URL}/${GEOSERVER_VERSION}/${TYPE}-latest/${PLUGIN_FULL_NAME} + ;; + + "master") + PLUGIN_FULL_NAME=geoserver-${GEOSERVER_MASTER_VERSION::-2}-SNAPSHOT-${PLUGIN_NAME}-plugin.zip + PLUGIN_ARTIFACT_URL=${BASE_BUILD_URL}/${GEOSERVER_VERSION}/${TYPE}-latest/${PLUGIN_FULL_NAME} + ;; + + *) + PLUGIN_FULL_NAME=geoserver-${GEOSERVER_VERSION}-${PLUGIN_NAME}-plugin.zip + if [ "${TYPE}" == "ext" ]; then + NEWTYPE=extensions + PLUGIN_ARTIFACT_URL=${BASE_BUILD_URL_STABLE}/${GEOSERVER_VERSION}/${NEWTYPE}/${PLUGIN_FULL_NAME} + else + VERSION="${GEOSERVER_VERSION::-2}-SNAPSHOT" + PLUGIN_FULL_NAME=geoserver-${VERSION}-${PLUGIN_NAME}-plugin.zip + PLUGIN_ARTIFACT_URL=${BASE_BUILD_URL}/${GEOSERVER_VERSION::-2}.x/${TYPE}-latest/${PLUGIN_FULL_NAME} + fi + ;; + + esac + + + if [ ! -e "${PLUGIN_ARTIFACT_URL}" ]; then + mkdir -p "${PLUGIN_ARTIFACT_URL}" + fi + + + + download_from_url_to_a_filepath "${PLUGIN_ARTIFACT_URL}" "${PLUGIN_ARTIFACT_DIRECTORY}/${PLUGIN_FULL_NAME}" +} + +function download_fonts() { + if [ ! -e "${FONTS_ARTIFACT_DIRECTORY}" ]; then + mkdir -p "${FONTS_ARTIFACT_DIRECTORY}" + fi + download_from_url_to_a_filepath "${EXTRA_FONTS_URL}" "${FONTS_ARTIFACT_DIRECTORY}/fonts.tar.gz" +} + +function download_marlin() { + IFS='.' read -r -a marlin_v_arr <<< "$MARLIN_VERSION" + unset IFS + + marlin_major=${marlin_v_arr[0]} + marlin_minor=${marlin_v_arr[1]} + marlin_patch=${marlin_v_arr[2]} + + if [ ! -e "${MARLIN_ARTIFACT_DIRECTORY}" ]; then + mkdir -p "${MARLIN_ARTIFACT_DIRECTORY}" + fi + + marlin_url_1="https://github.com/bourgesl/marlin-renderer/releases/download/v${marlin_major}_${marlin_minor}_${marlin_patch}/marlin-${marlin_major}.${marlin_minor}.${marlin_patch}-Unsafe.jar" + marlin_url_2="https://github.com/bourgesl/marlin-renderer/releases/download/v${marlin_major}_${marlin_minor}_${marlin_patch}/marlin-${marlin_major}.${marlin_minor}.${marlin_patch}-Unsafe-sun-java2d.jar" + download_from_url_to_a_filepath "${marlin_url_1}" "${MARLIN_ARTIFACT_DIRECTORY}/marlin-${marlin_major}.${marlin_minor}.${marlin_patch}-Unsafe.jar" + download_from_url_to_a_filepath "${marlin_url_2}" "${MARLIN_ARTIFACT_DIRECTORY}/marlin-${marlin_major}.${marlin_minor}.${marlin_patch}-Unsafe-sun-java2d.jar" +} + +function download_geoserver() { + clean_up_directory ${GEOSERVER_ARTIFACT_DIRECTORY} + local VERSION=${1} + local GEOSERVER_FILE_NAME_NIGHTLY="geoserver-${VERSION}-latest-war.zip" + local GEOSERVER_FILE_NAME_STABLE="geoserver-${VERSION}-war.zip" + + if [[ ( "${VERSION}" =~ "x" ) || ( "${VERSION}" == "master" ) ]]; then + local GEOSERVER_ARTIFACT_URL=${BASE_BUILD_URL}/${VERSION}/${GEOSERVER_FILE_NAME_NIGHTLY} + else + local GEOSERVER_ARTIFACT_URL=${BASE_BUILD_URL_STABLE}/${VERSION}/${GEOSERVER_FILE_NAME_STABLE} + fi + + if [ -f /tmp/geoserver.war.zip ]; then + rm /tmp/geoserver.war.zip + fi + if [ ! -e "${GEOSERVER_ARTIFACT_DIRECTORY}" ]; then + mkdir -p "${GEOSERVER_ARTIFACT_DIRECTORY}" + fi + download_from_url_to_a_filepath "${GEOSERVER_ARTIFACT_URL}" "/tmp/geoserver.war.zip" + unzip -p /tmp/geoserver.war.zip geoserver.war > ${GEOSERVER_ARTIFACT_DIRECTORY}/geoserver.war +} + + +function build_with_data_dir() { + + local TAG=${1} + local PULL_ENABLED=${2} + if [[ "${PULL_ENABLED}" == "pull" ]]; then + DOCKER_BUILD_COMMAND="docker build --pull" + else + DOCKER_BUILD_COMMAND="docker build" + fi; + ${DOCKER_BUILD_COMMAND} --no-cache \ + --build-arg GEOSERVER_WEBAPP_SRC=${GEOSERVER_ARTIFACT_DIRECTORY}/geoserver.war \ + --build-arg PLUG_IN_URLS=$PLUGIN_ARTIFACT_DIRECTORY \ + --build-arg GEOSERVER_DATA_DIR_SRC=${GEOSERVER_DATA_DIR_DIRECTORY} \ + -t geosolutionsit/geoserver:"${TAG}-${GEOSERVER_VERSION}" \ + . +} + +function build_without_data_dir() { + + local TAG=${1} + local PULL_ENABLED=${2} + if [[ "${PULL_ENABLED}" == "pull" ]]; then + DOCKER_BUILD_COMMAND="docker build --pull" + else + DOCKER_BUILD_COMMAND="docker build" + fi; + ${DOCKER_BUILD_COMMAND} --no-cache \ + --build-arg GEOSERVER_WEBAPP_SRC=${GEOSERVER_ARTIFACT_DIRECTORY}/geoserver.war \ + --build-arg PLUG_IN_URLS=$PLUGIN_ARTIFACT_DIRECTORY\ + -t geosolutionsit/geoserver:"${TAG}-${GEOSERVER_VERSION}" \ + . +} + +function main { + help ${ALL_PARAMETERS} + download_geoserver "${GEOSERVER_VERSION}" + clean_up_directory ${PLUGIN_ARTIFACT_DIRECTORY} + download_plugin ext monitor + download_plugin ext control-flow + download_plugin community sec-oauth2-geonode + #download_marlin + + if [[ ${GEOSERVER_DATA_DIR_RELEASE} = "nodatadir" ]]; then + build_without_data_dir "${TAG}" "${PULL}" + else + clean_up_directory ${DATADIR_ARTIFACT_DIRECTORY} + build_with_data_dir "${TAG}" "${PULL}" + fi +} + +main diff --git a/hooks/build b/hooks/build new file mode 100644 index 0000000..312e0df --- /dev/null +++ b/hooks/build @@ -0,0 +1,55 @@ +#!/bin/bash -x + +PLUG_IN_LIST="monitor control-flow libjpeg-turbo" +NIGHTLY_MASTER_PLUG_IN_VERSION="2.$(expr $MIDDLE_STABLE + 1)-SNAPSHOT" +NIGHTLY_STABLE_PLUG_IN_VERSION="2.$MIDDLE_STABLE-SNAPSHOT" +NIGHTLY_MAINT_PLUG_IN_VERSION="2.$(expr $MIDDLE_STABLE - 1)-SNAPSHOT" +echo $NIGHTLY_MASTER_PLUG_IN_VERSION +echo $NIGHTLY_STABLE_PLUG_IN_VERSION +echo $NIGHTLY_MAINT_PLUG_IN_VERSION +for NIGHTLY_VERSION in $NIGHTLY_MASTER_VERSION $NIGHTLY_STABLE_VERSION $NIGHTLY_MAINT_VERSION; do + NIGHTLY_URL="https://build.geoserver.org/geoserver/$NIGHTLY_VERSION/geoserver-$NIGHTLY_VERSION-latest-war.zip" + [[ "$NIGHTLY_MASTER_VERSION" == *"$NIGHTLY_VERSION"* ]] && PLUG_IN_VERSION="$NIGHTLY_MASTER_PLUG_IN_VERSION" + [[ "$NIGHTLY_STABLE_VERSION" == *"$NIGHTLY_VERSION"* ]] && PLUG_IN_VERSION="$NIGHTLY_STABLE_PLUG_IN_VERSION" + [[ "$NIGHTLY_MAINT_VERSION" == *"$NIGHTLY_VERSION"* ]] && PLUG_IN_VERSION="$NIGHTLY_MAINT_PLUG_IN_VERSION" + echo $PLUG_IN_VERSION + #PLUG_IN_URLS=() + mkdir -p ./resources/geoserver-plugins + for PLUG_IN_NAME in $PLUG_IN_LIST; do + echo $PLUG_IN_NAME + echo $PLUG_IN_VERSION + URL="https://build.geoserver.org/geoserver/$NIGHTLY_VERSION/ext-latest/geoserver-$PLUG_IN_VERSION-$PLUG_IN_NAME-plugin.zip" + wget $URL -O ./resources/geoserver-plugins/geoserver-$PLUG_IN_VERSION-$PLUG_IN_NAME-plugin.zip + #echo "Plugin $PLUG_IN_NAME URL for version $PLUG_IN_VERSION: $URL" + #PLUG_IN_URLS+=($URL) + done + var=$(IFS=$' '; echo "${PLUG_IN_URLS[*]}" ) + docker build \ + --build-arg GEOSERVER_WEBAPP_SRC="$NIGHTLY_URL" \ + --build-arg PLUG_IN_URLS="./resources/geoserver-plugins" \ + -f "$DOCKERFILE_PATH" \ + -t "${DOCKER_REPO}:$NIGHTLY_VERSION" . + rm -rf ./resources/geoserver-plugins/* +done + +for VERSION in $STABLE_VERSION $MAINT_VERSION; do + GEOSERVER_URL="https://netcologne.dl.sourceforge.net/project/geoserver/GeoServer/$VERSION/geoserver-$VERSION-war.zip" + #PLUG_IN_URLS=() + mkdir -p ./resources/geoserver-plugins + for PLUG_IN_NAME in $PLUG_IN_LIST; do + echo $PLUG_IN_NAME + echo $VERSION + mkdir -p ./resources/geoserver-plugins + URL="https://netcologne.dl.sourceforge.net/project/geoserver/GeoServer/$VERSION/extensions/geoserver-$VERSION-$PLUG_IN_NAME-plugin.zip" + wget $URL -O ./resources/geoserver-plugins/geoserver-$PLUG_IN_VERSION-$PLUG_IN_NAME-plugin.zip + #echo "Plugin $PLUG_IN_NAME URL for version $PLUG_IN_VERSION: $URL" + #PLUG_IN_URLS+=($URL) + done + var=$(IFS=$'\ '; echo "${PLUG_IN_URLS[*]}" ) + docker build \ + --build-arg GEOSERVER_WEBAPP_SRC="$GEOSERVER_URL" \ + --build-arg PLUG_IN_URLS="./resources/geoserver-plugins" \ + -f "$DOCKERFILE_PATH" \ + -t "${DOCKER_REPO}:$VERSION" . + rm -rf ./resources/geoserver-plugins/* +done diff --git a/hooks/push b/hooks/push new file mode 100644 index 0000000..ba957ad --- /dev/null +++ b/hooks/push @@ -0,0 +1,17 @@ +#!/bin/bash + +touch /tmp/failed_versions + +for NIGHTLY_VERSION in $NIGHTLY_MASTER_VERSION $NIGHTLY_STABLE_VERSION $NIGHTLY_MAINT_VERSION; do + if [ "$(grep $NIGHTLY_VERSION /tmp/failed_versions)" == "" ]; then + docker push "${DOCKER_REPO}:$NIGHTLY_VERSION" + fi +done + +for VERSION in $STABLE_VERSION $MAINT_VERSION; do + if [ "$(grep $VERSION /tmp/failed_versions)" == "" ]; then + docker push "${DOCKER_REPO}:$VERSION" + fi +done + +echo "List of versions with problems not uploaded: \n $(cat /tmp/failed_versions)" diff --git a/hooks/test b/hooks/test new file mode 100644 index 0000000..60add2f --- /dev/null +++ b/hooks/test @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +for NIGHTLY_VERSION in $NIGHTLY_MASTER_VERSION $NIGHTLY_STABLE_VERSION $NIGHTLY_MAINT_VERSION; do + export VERSION=$NIGHTLY_VERSION + timeout 10m docker-compose -f docker-compose.test.yml run --rm sut || ( echo "test for docker image geoserver:$VERSION failed" && echo $VERSION >> /tmp/failed_versions ) +done + +for VERSION in $STABLE_VERSION $MAINT_VERSION; do + #export VERSION=$VERSION + timeout 10m docker-compose -f docker-compose.test.yml run --rm sut || ( echo "test for docker image geoserver:$VERSION failed" && echo $VERSION >> /tmp/failed_versions ) +done