summaryrefslogtreecommitdiff
path: root/stage-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'stage-pkg')
-rwxr-xr-xstage-pkg122
1 files changed, 122 insertions, 0 deletions
diff --git a/stage-pkg b/stage-pkg
new file mode 100755
index 0000000..02b3e96
--- /dev/null
+++ b/stage-pkg
@@ -0,0 +1,122 @@
+#! /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 [<options>] <group> <dir>..."
+
+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() # <group> <dir>
+{
+ local o="$repo_dir/$1"
+ local b="$(basename $2)"
+
+ mkdir -p "$o"
+
+ # Clean up old packages.
+ #
+ if [ -n "$clean" ]; then
+ rm -f "$o/$b"-*
+ fi
+
+ b "dist($2-default/)" "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.
+#
+etc/rep-publish "$repo_dir/" "$repo_host1/" $rsync_ops
+
+if [ -n "$repo_host2" ]; then
+ etc/rep-publish "$repo_dir/" "$repo_host2/" $rsync_ops
+fi