#! /usr/bin/env bash # Stage or queue one or more projects from the same group. # # -c # Cleanup (remove) previous versions. # # -d # Distribute only without regenerating or publishing the repository. # # -g # Distribute and regenerating only without publishing the repository. # # -q # Publish packages into the queue instead of staging. # usage="usage: etc/stage-pkg [] ..." rsync_ops="--progress" owd=`pwd` trap "{ cd $owd; exit 1; }" ERR set -o errtrace # Trap in functions. function info () { echo "$*" 1>&2; } function error () { info "$*"; exit 1; } repo_name="STAGE.BUILD2.ORG" repo_dir="staging/repository/1" repo_host1="stage.build2.org:/var/bpkg/1" repo_host2= clean= dist_only= gen_only= group= dirs=() while [ $# -gt 0 ]; do case $1 in -c) clean=true shift ;; -d) dist_only=true shift ;; -g) gen_only=true shift ;; -q) repo_name="CPPGET.ORG/QUEUE" repo_dir="cppget.org/repository/1/queue" repo_host1="cppget.org:/var/bpkg/1/queue" repo_host2="queue.cppget.org:/var/bpkg/1/queue" shift ;; *) if [ -z "$group" ]; then group="$1" else dirs+=("${1%/}") fi shift ;; esac done if [ -z "$group" -o "${#dirs[@]}" -eq 0 ]; then error "$usage" fi mkdir -p /tmp/dist # Dist individual packages into the repository. # function dist() # { local o="$repo_dir/$1" local b="$(basename $2)" local d="$2-default" # If *-default/ exists, use that (old style out of tree configuration). # Otherwise, use the source directory itself (new style forwarded # configuration). # if ! test -d "$d"; then d="$2" if ! test -d "$d"; then error "neither $2-default nor $2 exist" fi fi mkdir -p "$o" # Clean up old packages. # if [ -n "$clean" ]; then rm -f "$o/$b"-* fi b "dist($d/)" config.dist.root=/tmp/dist "config.dist.archives=$owd/$o/tar.gz" } for d in "${dirs[@]}"; do dist "$group" "$d" done if [ -n "$dist_only" ]; then exit 0 fi # Regenerate the repository. # info "Insert $repo_name signing key and press Enter" read etc/rep-update "$repo_dir/" \ --openssl-option -engine --openssl-option pkcs11 \ --openssl-option -keyform --openssl-option engine \ --key "label_SIGN key" if [ -n "$gen_only" ]; then exit 0 fi # Sync repository. # info "Press Enter to start package upload" read etc/rep-publish "$repo_dir/" "$repo_host1/" $rsync_ops if [ -n "$repo_host2" ]; then etc/rep-publish "$repo_dir/" "$repo_host2/" $rsync_ops fi