Files
streamline-emr/package.sh
T

112 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (C) Wendepunkt Medical Innovations, Inc - All Rights Reserved.
# Unauthorized copying of this file, via any medium is strictly prohibited.
# Proprietary and confidential
#
# For information: dev@signalytic.ca
#
# basic path info
LOCATION="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
PROJECT_ROOT="$(realpath $LOCATION)"
PACKAGE_NAME="streamline-emr"
OUTPUT_DIR="$PROJECT_ROOT/build-packages"
# work from the project root
pushd $PROJECT_ROOT > /dev/null
# Exit on error:
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
echo "preparing package for platform $platform"
if [ "$platform" == "linux/amd64" ];then
pkg_arch="x86_64"
elif [ "$platform" == "linux/arm64" ];then
pkg_arch="aarch64"
else
echo "unexpected platform '$platform'"
exit 1
fi
OUTPUT_NAME="$PACKAGE_NAME-$VERSION_NAME-${pkg_arch}"
OUTPUT_FILE="$OUTPUT_NAME.tar.bz2"
OUTPUT_PATH="$OUTPUT_DIR/$OUTPUT_FILE"
# create a new temp directory to stage files
for i in {1..9999};do
STAGING_DIR="tmp-staging-$i"
if [ ! -d $STAGING_DIR ]; then
break
fi
done
if [ -d $STAGING_DIR ]; then
echo "Failed to generate temp staging dir"
exit 1
fi
# add files
mkdir ${STAGING_DIR}
cp ${PROJECT_ROOT}/install.sh ${STAGING_DIR}/
cp -a ${PROJECT_ROOT}/root ${STAGING_DIR}/
# add images
IMAGES_DIR=${STAGING_DIR}/images
mkdir -p ${IMAGES_DIR}
i=0
# read image list from file (e.g. 'images-aarch64')
# images are listed as SAVED_TAG=SOURCE_IMAGE
for image in $(cat ${PROJECT_ROOT}/images-${pkg_arch});do
i=$((i+1))
name="image${i}.img"
path="${IMAGES_DIR}/${name}"
IFS=\= read -r dest source <<< "${image}"
echo "pulling image '${source}' (${platform})"
docker pull --platform ${platform} ${source}
echo "tagging image as '${dest}'"
docker tag ${source} ${dest}
echo "saving to '${path}'"
docker save -o ${path} $dest
done
# setup output directory and cleanup old files if necessary
mkdir -p $OUTPUT_DIR
rm -rf $OUTPUT_PATH
pushd $STAGING_DIR > /dev/null
tar -cjf $OUTPUT_PATH *
popd > /dev/null
# cleanup staging files
rm -r $STAGING_DIR
echo "output: $OUTPUT_PATH"
done
popd > /dev/null
exit 0