#!/bin/bash TEMP_DIR=$(mktemp -d) DEST_DIR=$1 CURRENT_DIR=$(dirname "$0") CURRENT_DIR=$(realpath ${CURRENT_DIR}) . "${CURRENT_DIR}/env.sh" "$2" "$3" "$4" "$5" "$6" function error_exit() { echo $1 rm -rf ${TEMP_DIR} exit $2 } function create_file_validations() { local SOURCE_FILE=$1 sha256sum ${SOURCE_FILE} >${SOURCE_FILE}.sha256 || error_exit "failed to create sha256 for file: ${SOURCE_FILE}" 1 if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then openssl dgst -sha256 -sign "${PROJECT_PRIVATE_KEY}" -out "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to create signature for file: ${SOURCE_FILE}" 1 openssl dgst -sha256 -verify "${PROJECT_PUBLIC_KEY}" -signature "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to validate signature for file: ${SOURCE_FILE}" 1 fi } if [ ! -d "${PROJECT_DIST_DIR}" ]; then error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2 fi if [ "${DEST_DIR}" == "" ]; then DEST_DIR="${PROJECT_DIST_DIR}" fi DEST_DIR=$(realpath "${DEST_DIR}") if [ ! -d "${DEST_DIR}" ]; then error_exit "dest directory not found: ${DEST_DIR}" 1 fi FILE_PART=${PROJECT_NAME}_${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_REVISION_VERSION}-${PROJECT_RELEASE_ITER}-${PROJECT_GIT_REV}_${PROJECT_BUILD_ARCH}_${PROJECT_OS} OUT_FILE=${FILE_PART}.tar.gz pushd "${DEST_DIR}" if [ -f "${OUT_FILE}" ]; then rm -f "${OUT_FILE}" || error_exit "failed to delete file: ${OUT_FILE}" 1 fi if [ -f "${OUT_FILE}.sha256" ]; then rm -f "${OUT_FILE}.sha256" || error_exit "failed to delete file: ${OUT_FILE}.sha256" 1 fi if [ -f "${OUT_FILE}.sig" ]; then rm -f "${OUT_FILE}.sig" || error_exit "failed to delete file: ${OUT_FILE}.sig" 1 fi popd rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1 pushd "${TEMP_DIR}/${PROJECT_NAME}/" IFS=$'\n' set -f FILE_LIST=$(find . -type f) for FILE in ${FILE_LIST}; do create_file_validations "${FILE}" done unset IFS set +f popd pushd "${DEST_DIR}" tar cvzf "${OUT_FILE}" -C ${TEMP_DIR} . || error_exit "failed to create archive: ${OUT_FILE}" 1 create_file_validations "${OUT_FILE}" popd error_exit "created package ${FILE_PART}" 0