diff options
-rw-r--r-- | Swift/Packaging/Debian/update_debian_repo.sh | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Swift/Packaging/Debian/update_debian_repo.sh b/Swift/Packaging/Debian/update_debian_repo.sh new file mode 100644 index 0000000..6a337fb --- /dev/null +++ b/Swift/Packaging/Debian/update_debian_repo.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash + +# This script uses reprepro to create or update an apt repository with new packages +# from an incoming directory for multiple distributions and update channels. +# +# Release Channels: stable (apt name release), testing (apt name beta), development (apt name development) +# Packages: swift-im, libswiften, libswiften-dev + +# fail on error +set -e +shopt -s nullglob + +# configuration via environment variables +INCOMING_FOLDER="${SWIFT_APT_INCOMING_FOLDER:-error}" +if [ "$INCOMING_FOLDER" = "error" ]; +then + { echo >&2 "Please set SWIFT_APT_INCOMING_FOLDER to the folder where new packages are read from."; exit 1; } +fi + +APT_REPO_ROOT="${SWIFT_APT_REPO_ROOT:-error}" +if [ "$APT_REPO_ROOT" = "error" ]; +then + { echo >&2 "Please set SWIFT_APT_REPO_ROOT to the folder where the root of the apt repository should be created."; exit 1; } +fi + +# Prepare temporary directory used by reprepro +APT_TEMP_DIR=/tmp/swift_reprepro_tmp +rm -rfd $APT_TEMP_DIR +mkdir -p $APT_TEMP_DIR + +function write_reprepo_conf_distributions_to_file { +cat <<EOM >$1 +Codename: beta +Components: main +Architectures: i386 amd64 source +SignWith: packages@swift.im +Contents: . .gz .bz2 +DebIndices: Packages Release . .gz .bz2 +DscIndices: Sources Release . .gz .bz2 + +Codename: development +Components: main +Architectures: i386 amd64 source +SignWith: packages@swift.im +Contents: . .gz .bz2 +DebIndices: Packages Release . .gz .bz2 +DscIndices: Sources Release . .gz .bz2 + +Codename: release +Components: main +Architectures: i386 amd64 source +SignWith: packages@swift.im +Contents: . .gz .bz2 +DebIndices: Packages Release . .gz .bz2 +DscIndices: Sources Release . .gz .bz2 +EOM +} + +function write_reprepo_conf_incoming_to_file { +cat <<EOM >$1 +Name: swift +IncomingDir: $2 +TempDir: $APT_TEMP_DIR +Allow: beta development release +Multiple: Yes +Cleanup: unused_files on_error +Permit: older_version +EOM +} + +# check for existence of reprepro command +command -v reprepro >/dev/null 2>&1 || { echo >&2 "This script requires aptly but it's not installed. See https://www.aptly.info/ for further information. Aborting."; exit 1; } + +mkdir -p $APT_REPO_ROOT + +# distros +for full_distribution_path in $INCOMING_FOLDER/{debian,ubuntu}/*; do + distro_version=`basename $full_distribution_path` + distro_name=$(basename `dirname $full_distribution_path`) + distro_reprepro_root=${APT_REPO_ROOT}/${distro_name}/${distro_version} + + # ensure reprepro diretctory for this distribution version is present + if [ ! -d "$distro_preprepro_root" ]; then + echo "Create distribution repository for $distro_name/$distro_version" + mkdir -p $distro_reprepro_root + mkdir -p ${distro_reprepro_root}/conf + + write_reprepo_conf_distributions_to_file "${distro_reprepro_root}/conf/distributions" + write_reprepo_conf_incoming_to_file "${distro_reprepro_root}/conf/incoming" "$full_distribution_path" + fi + + echo "Process incoming packages for $distro_name/$distro_version" + #set +e + reprepro -V -b ${distro_reprepro_root} processincoming swift + #set -e +done +echo "Successfully finished updating apt repository." |