#!/usr/bin/env bash : "${ALL_DEBS:? Must set ALL_DEBS}" : "${ALL_RPMS:? Must set ALL_RPMS}" : "${GPG_LOCAL_USER:? Must set GPG_LOCAL_USER}" : "${TARGETS:? Must set TARGETS}" set -x -e function deb-sign { local last_found for r in "$@"; do if [ -f "./${r}" ]; then last_found=${r} fi done if [[ -z ${last_found} ]]; then echo "WARNING: No expected package found in $(pwd); skipping signing of repo;" return fi apt-ftparchive packages . \ | tee Packages \ | xz > Packages.xz apt-ftparchive -c repo.conf release . \ | gpg --batch --yes --expert --clearsign \ --armor \ --no-emit-version \ --no-comments \ --personal-digest-preferences sha512 \ --local-user "${GPG_LOCAL_USER}" \ > InRelease } function rpm-sign { for r in "$@"; do if [ -f "./${r}" ]; then rpmsign --addsign --key-id A04EA552 --digest-algo=sha512 "${r}" fi done createrepo -v --no-database -s sha512 --compress-type xz --revision "1.0" . gpg2 --batch --yes --expert --sign --detach-sign \ --armor \ --no-emit-version \ --no-comments --personal-digest-preferences sha512 \ --local-user "${GPG_LOCAL_USER}" \ repodata/repomd.xml } function sign() { local target=$1 local dst_root=$2 local src_dist=${target%-*} local dist=${src_dist/amazonlinux/amzn} local pkg_type case ${src_dist} in amazonlinux*) pkg_type=rpm ;; centos*) pkg_type=rpm ;; debian*) pkg_type=deb ;; fedora*) pkg_type=rpm ;; opensuse-leap*) pkg_type=rpm ;; ubuntu*) pkg_type=deb ;; *) echo "ERROR: unexpected distribution ${src_dist}" ;; esac local arch=${target##*-} case ${src_dist} in ubuntu*) arch=${arch//ppc64le/ppc64el} esac local dst=${dst_root}/${dist}/${arch} if [[ ! -d ${dst} ]]; then echo "Directory ${dst} not found. Skipping" return fi cd "${dst}" if [[ -f "/etc/debian_version" ]]; then [[ "${pkg_type}" == "deb" ]] && deb-sign ${ALL_DEBS} else [[ "${pkg_type}" == "rpm" ]] && rpm-sign ${ALL_RPMS} fi cd - } for target in ${TARGETS[@]}; do sign "${target}" "$(pwd)" done