#!/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 by_package_type=$3 local src_dist=${target%-*} local dst_dist=${src_dist/amazonlinux/amzn} local pkg_type=unknown local arch=${target##*-} local dst_arch=${arch} case ${src_dist} in amazonlinux*) pkg_type=rpm ;; centos* | rpm) pkg_type=rpm ;; debian*) pkg_type=deb ;; fedora*) pkg_type=rpm ;; opensuse-leap*) pkg_type=rpm ;; ubuntu* | deb) pkg_type=deb arch=${arch//ppc64le/ppc64el} ;; *) echo "ERROR: unexpected distribution ${src_dist}" ;; esac if [[ x"${by_package_type}" == x"true" ]]; then dst_dist=${pkg_type} fi local dst=${dst_root}/${dst_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 echo "checking target=${target}" by_package_type= case ${target} in ubuntu18.04-* | centos7-*) by_package_type="true" ;; centos8-ppc64le) by_package_type="false" ;; *) echo "Skipping target ${target}" continue ;; esac sign "${target}" "$(pwd)" ${by_package_type} done