The core protocol of WoopChain
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
woop/scripts/package/publish-repo.sh

105 lines
2.3 KiB

#!/usr/bin/env bash
ME=$(basename "$0")
DEPS=(aws createrepo aptly gpg)
PKG=rpm
PROFILE=dev
SRC=
# destination of the bucket to host the repo
declare -A TARGET
TARGET[rpm.dev]="haochen-harmony-pub/pub/yum"
TARGET[deb.dev]="haochen-harmony-pub/pub/repo"
TARGET[rpm.prod]="pub.harmony.one/release/package/yum"
TARGET[deb.prod]="pub.harmony.one/release/package/apt"
function usage() {
cat<<-EOT
Usage: $ME [options]
Option:
-h print this help message
-p dev/prod profile of the repo (dev/prod, default: $PROFILE)
-n rpm/deb type of package for publish (rpm/deb, default: $PKG)
-s directory source of the package repo
Examples:
$ME -p dev -n rpm -s ~/rpmbuild
$ME -p prod -n deb -s ~/debbuild
EOT
exit 0
}
function validation() {
for dep in "${DEPS[@]}"; do
if ! command -v "$dep" > /dev/null; then
echo "missing dependency: $dep"
exit 1
fi
done
case $PROFILE in
dev|prod) ;;
*) usage ;;
esac
if [[ -z "$SRC" || ! -d "$SRC" ]]; then
echo "missing source path or wrong path: $SRC"
exit 1
fi
}
function publish_rpm() {
local target
local tempdir
target=${TARGET[$PKG.$PROFILE]}
tempdir="/tmp/$(basename $target)"
mkdir -p "$tempdir/x86_64"
aws s3 sync "s3://$target" "$tempdir"
cp -rv $SRC/RPMS/x86_64/* "$tempdir/x86_64"
UPDATE=""
if [ -e "$tempdir/x86_64/repodata/repomd.xml" ]; then
UPDATE="--update"
fi
createrepo -v $UPDATE --deltas "$tempdir/x86_64/"
aws s3 sync "$tempdir" "s3://$target" --acl public-read
}
function publish_deb() {
if aptly repo show harmony-$PROFILE > /dev/null; then
aptly repo add harmony-$PROFILE $SRC
aptly publish update bionic s3:harmony-$PROFILE:
else
aptly repo create -distribution=bionic -component=main harmony-$PROFILE
aptly repo add harmony-$PROFILE $SRC
aptly publish repo harmony-$PROFILE s3:harmony-$PROFILE:
fi
}
################## MAIN ##################
if [ $# = 0 ]; then
usage
fi
while getopts ":hp:n:s:" opt; do
case $opt in
p) PROFILE=${OPTARG} ;;
n) PKG=${OPTARG} ;;
s) SRC=${OPTARG} ;;
*) usage ;;
esac
done
shift $((OPTIND - 1))
validation
case $PKG in
rpm) publish_rpm ;;
deb) publish_deb ;;
*) usage ;;
esac