#!/bin/bash # # 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. # function usage() { echo -e "usage: $0 [OPTIONS] BUILD" echo -e " OPTIONS" echo -e " -p : gpg passphrase file" echo -e " -i " echo -e " -o " echo -e " -k " echo -e " -j " echo -e " -d " echo -e " -b " echo -e " -r " echo -e " -h " echo -e " -R " echo -e " -P " echo -e " -c " echo -e " -m " exit 1 } function FATAL() { echo -e $1 exit 1 } function dump_vars() { echo "incoming repo: $IN_REPO" echo "outgoing repo: $OUT_REPO" echo "GPGKEY: $GPGKEY" echo "JFROG_CLI: $JFROG_CLI" echo "REPO_BASE: $REPO_BASE" echo "RELEASE_DIR: $RELEASE_DIR" echo "BUILD: $BUILD" echo "RSYNC_USER_HOST $RSYNC_USER_HOST" echo "RSYNC_OPTIONS $RSYNC_OPTIONS" echo "PUBLIC_KEY_FILE $PUBLIC_KEY_FILE" echo "BUILD: $BUILD" echo "BUILD_NUMBER: $BUILD_NUMBER" } MDG_REPOS="RO osmclient openvim SO UI IM devops MON N2VC NBI common POL PLA LW-UI NG-UI NG-SA" IN_REPO="unstable" OUT_REPO="stable" GPGKEY=71C0472C JFROG_CLI=~/jfrog REPO_BASE=repo RELEASE_DIR=ReleaseTWO RSYNC_USER_HOST=osmusers@osm-download.etsi.org CURR_DIR=$(pwd) PUBLIC_KEY_FILE=~/OSM\ ETSI\ Release\ Key.gpg CHANGE_LOG_FILE= while getopts ":p:i:o:k:j::d:b:r:h:R:P:c:m:" o; do case "${o}" in p) PASSPHRASE_FILE=${OPTARG} ;; i) IN_REPO=${OPTARG} ;; o) OUT_REPO=${OPTARG} ;; k) GPGKEY=${OPTARG} ;; j) JFROG_CLI=${OPTARG} ;; d) BASE_DIR=${OPTARG} ;; b) BUILD=${OPTARG} ;; r) RELEASE_DIR=${OPTARG} ;; h) RSYNC_USER_HOST=${OPTARG} ;; R) RSYNC_OPTIONS=${OPTARG} ;; P) PUBLIC_KEY_FILE=${OPTARG} ;; c) CHANGE_LOG_FILE=${OPTARG} ;; m) MDG_REPOS=${OPTARG} ;; *) usage exit 1 ;; esac done BASE_DIR=$REPO_BASE/osm/debian/$RELEASE_DIR [ -z "$BUILD" ] && FATAL "missing option: -b " BUILD_NUMBER=$(echo "$BUILD" | sed -e 's/.*:: //g') dump_vars [ -x $JFROG_CLI ] || FATAL "jfrog cli not found. Please install https://www.jfrog.com/getcli/ and use option '-j '" $JFROG_CLI rt download "osm-release/$BUILD_NUMBER/*" || FATAL "Failed to download" [ $PASSPHRASE_FILE ] && GPG_PASSPHRASE="--pinentry-mode=loopback --passphrase \"$(cat $PASSPHRASE_FILE)\"" mkdir -p $BASE_DIR/dists cp -R $BUILD_NUMBER/dists/$IN_REPO $BASE_DIR/dists/$OUT_REPO cp -R $BUILD_NUMBER/pool $BASE_DIR/ echo "copy changelog from $BUILD_NUMBER/changelog to $BASE_DIR/" cp -R $BUILD_NUMBER/changelog $BASE_DIR/ cd $BASE_DIR for i in $MDG_REPOS; do # gpg sign the packages dpkg-sig -g "$GPG_PASSPHRASE" -k $GPGKEY --sign builder pool/$i/*.deb # mkdir -p dists/stable/$i/binary-amd64/ apt-ftparchive packages pool/$i > dists/$OUT_REPO/$i/binary-amd64/Packages rm -f dists/$OUT_REPO/$i/binary-amd64/Packages.gz gzip -9fk dists/$OUT_REPO/$i/binary-amd64/Packages done # Generate the root Release # pushd dists/ apt-ftparchive release dists/$OUT_REPO > dists/$OUT_REPO/Release #gzip -9fk dists/$OUT_REPO/Release rm -f dists/$OUT_REPO/InRelease eval gpg $GPG_PASSPHRASE --default-key $GPGKEY --clearsign -o dists/$OUT_REPO/InRelease dists/$OUT_REPO/Release rm -f dists/$OUT_REPO/Release.gpg eval gpg $GPG_PASSPHRASE --default-key $GPGKEY -abs -o dists/$OUT_REPO/Release.gpg dists/$OUT_REPO/Release echo "performing rsync of repo $RELEASE_DIR/dist/$OUT_REPO to osm-download.etsi.org:/repos/" cd $CURR_DIR/$REPO_BASE # copy over the public key file [ "$PUBLIC_KEY_FILE" ] && cp "$PUBLIC_KEY_FILE" osm/debian/$RELEASE_DIR # copy over the changelog file [ "$CHANGE_LOG_FILE" ] && cp "$CHANGE_LOG_FILE" osm/debian/$RELEASE_DIR IM_BASE="osm/debian/$RELEASE_DIR/pool/IM/osm-imdocs_" if ls "$IM_BASE"* 1> /dev/null 2>&1; then IM_TMP_DIR=$(mktemp -d) dpkg -x "$IM_BASE"* $IM_TMP_DIR mkdir osm/debian/$RELEASE_DIR/docs cp -R $IM_TMP_DIR/usr/share/osm-im osm/debian/$RELEASE_DIR/docs fi rsync -avR $RSYNC_OPTIONS osm/debian/$RELEASE_DIR rsync://$RSYNC_USER_HOST/repos