mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 10:41:32 +00:00
Packaging improvements
- compress images with xz by default (and decompress on install) - add help menu and command line argument parsing to package.sh - display packaging status if `pv` command available
This commit is contained in:
+90
-28
@@ -31,13 +31,80 @@ fi
|
||||
PACKAGE_NAME=${PACKAGE_NAME-"streamline-emr"}
|
||||
OUTPUT_DIR=${OUTPUT_DIR-"$PROJECT_ROOT/build-packages"}
|
||||
PACKAGE_IMAGES=${PACKAGE_IMAGES:-1}
|
||||
COMPRESS_IMAGES=${COMPRESS_IMAGES:-1}
|
||||
IMAGE_TAG=${IMAGE_TAG:-${VERSION_NAME}}
|
||||
IMAGES_LIST=${IMAGES_LIST:-${PROJECT_ROOT}/images.csv}
|
||||
|
||||
|
||||
function print_usage {
|
||||
echo "Kenya EMR packaging utility"
|
||||
echo
|
||||
echo "Usage: package.sh [ OPTIONS ]"
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -h Print this help prompt and exit"
|
||||
echo " -p PLATFORM Specify a docker platform to target, may be passed multiple"
|
||||
echo " times. If none specified, all platforms built. Supported"
|
||||
echo " platforms: 'linux/amd64', 'linux/arm64'"
|
||||
echo " -t IMAGE_TAG Specify an image tag. It not specified, the tag will be"
|
||||
echo " inferred from the current git version ('${IMAGE_TAG}')"
|
||||
echo " -n PACKAGE_NAME Specify the package base name. Default: ${PACKAGE_NAME}"
|
||||
echo " -o OUTPUT_DIR Specify a directory to save packages. Default: ${OUTPUT_DIR}"
|
||||
echo " -l IMAGES_LIST Specify a file containing a list of images. Default: ${IMAGES_LIST}"
|
||||
echo " -I Do not package images"
|
||||
echo " -C Do not compress images"
|
||||
echo
|
||||
}
|
||||
|
||||
# collect user args
|
||||
PLATFORMS=()
|
||||
while getopts ":p:t:n:o:l:ICh" options; do
|
||||
case "${options}" in
|
||||
p)
|
||||
PLATFORMS+=(${OPTARG})
|
||||
;;
|
||||
t)
|
||||
IMAGE_TAG=${OPTARG}
|
||||
;;
|
||||
n)
|
||||
PACKAGE_NAME=${OPTARG}
|
||||
;;
|
||||
o)
|
||||
OUTPUT_DIR=${OPTARG}
|
||||
;;
|
||||
l)
|
||||
IMAGES_LIST=${OPTARG}
|
||||
;;
|
||||
I)
|
||||
PACKAGE_IMAGES=0
|
||||
;;
|
||||
C)
|
||||
COMPRESS_IMAGES=0
|
||||
;;
|
||||
h)
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
print_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND -1))
|
||||
|
||||
# set defaults
|
||||
if [ ${#PLATFORMS} -eq 0 ]; then
|
||||
PLATFORMS=("linux/amd64" "linux/arm64")
|
||||
fi
|
||||
|
||||
echo "packaging $PACKAGE_NAME"
|
||||
echo " output dir: $OUTPUT_DIR"
|
||||
echo " package images: $PACKAGE_IMAGES"
|
||||
echo " compress images: $COMPRESS_IMAGES"
|
||||
echo " image tag: $IMAGE_TAG"
|
||||
echo " image list: $IMAGES_LIST"
|
||||
echo " platforms: ${PLATFORMS[@]}"
|
||||
|
||||
# work from the project root
|
||||
pushd $PROJECT_ROOT > /dev/null
|
||||
@@ -46,28 +113,8 @@ pushd $PROJECT_ROOT > /dev/null
|
||||
set -e
|
||||
trap 'echo "Error: Last command failed with exit code $?."' ERR
|
||||
|
||||
# generate version name
|
||||
# use ci tag name if available (e.g. "v1.2")
|
||||
if [ $CI_COMMIT_TAG ]; then
|
||||
VERSION_NAME="$CI_COMMIT_TAG"
|
||||
|
||||
# otherwise if ci, use BRANCH-COMMIT
|
||||
# Note: commit count is harder to get to from CI - can't reproduce the git
|
||||
# describe functionality as easily
|
||||
elif [ $CI_COMMIT_BRANCH ]; then
|
||||
VERSION_NAME="$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA"
|
||||
|
||||
# if not ci, try to use git
|
||||
elif command -v git &> /dev/null; then
|
||||
VERSION_NAME=$(git describe --always --tags --dirty)
|
||||
|
||||
# fallback
|
||||
else
|
||||
VERSION_NAME="unknown"
|
||||
fi
|
||||
|
||||
# build for each relevant platform
|
||||
for platform in "linux/amd64" "linux/arm64"; do
|
||||
for platform in ${PLATFORMS[@]}; do
|
||||
echo "preparing package for platform $platform"
|
||||
if [ "$platform" == "linux/amd64" ];then
|
||||
pkg_arch="x86_64"
|
||||
@@ -101,9 +148,8 @@ for platform in "linux/amd64" "linux/arm64"; do
|
||||
cp -a ${PROJECT_ROOT}/root ${PACKAGE_ROOT}/
|
||||
echo "${VERSION_NAME}" > ${PACKAGE_ROOT}/root/var/signalytic/clientapps/streamline/streamline-emr/version
|
||||
|
||||
if [ "${PACKAGE_IMAGES}" = "1" ]; then
|
||||
if [ "${PACKAGE_IMAGES}" = 1 ]; then
|
||||
# add images
|
||||
i=0
|
||||
# read image list from file (e.g. 'images-aarch64')
|
||||
# images are listed as SAVED_TAG=SOURCE_IMAGE
|
||||
for image in $(cat ${IMAGES_LIST});do
|
||||
@@ -112,13 +158,29 @@ for platform in "linux/amd64" "linux/arm64"; do
|
||||
if [ "${img_platform}" = "${platform}" ]; then
|
||||
echo "pulling image '${source}' (${platform})"
|
||||
docker pull --platform ${platform} ${source}:${IMAGE_TAG}
|
||||
# re-tag the image with a more generic name
|
||||
echo "tagging image as '${dest}:latest'"
|
||||
docker tag ${source}:${IMAGE_TAG} ${dest}:latest
|
||||
i=$((i+1))
|
||||
name="image${i}.img"
|
||||
path="${IMAGES_DIR}/${name}"
|
||||
echo "saving to '${path}'"
|
||||
docker save -o ${path} ${dest}:latest
|
||||
# save the image to file
|
||||
if [ "${COMPRESS_IMAGES}" = 1 ]; then
|
||||
path="${IMAGES_DIR}/${dest}.img.xz"
|
||||
echo "saving to '${path}'"
|
||||
# if installed, use pv to show progress
|
||||
if command -v pv &> /dev/null; then
|
||||
docker save ${dest}:latest | xz -9 - -c | pv -t -r -b -N "saving compressed image..." > ${path}
|
||||
else
|
||||
docker save ${dest}:latest | xz -9 - -c > ${path}
|
||||
fi
|
||||
else
|
||||
path="${IMAGES_DIR}/${dest}.img"
|
||||
echo "saving to '${path}'"
|
||||
# if installed, use pv to show progress
|
||||
if command -v pv &> /dev/null; then
|
||||
docker save ${dest}:latest | pv -t -r -b -N "saving raw image..." > ${path}
|
||||
else
|
||||
docker save -o ${path} ${dest}:latest
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user