v2.0.2-rc (#27)
	
		
			
	
		
	
	
		
	
		
			Some checks reported errors
		
		
	
	
		
			
				
	
				BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
				
			
		
		
	
	
				
					
				
			
		
			Some checks reported errors
		
		
	
	BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
				
			## v2.0.2-rc ### BREAKING CHANGES * Refactored `config.json` - will need to verify configuration settings prior to mounting ### Issues * \#12 \[Unit Test\] Complete all providers unit tests * \#14 \[Unit Test\] SQLite mini-ORM unit tests and cleanup * \#16 Add support for bucket name in Sia provider * \#17 Update to common c++ build system * A single 64-bit Linux Jenkins server is used to build all Linux and Windows versions * All dependency sources are now included * MSVC is no longer supported * MSYS2 is required for building Windows binaries on Windows * OS X support is temporarily disabled * \#19 \[bug\] Rename file is broken for files that are existing * \#23 \[bug\] Incorrect file size displayed while upload is pending * \#24 RocksDB implementations should be transactional * \#25 Writes should block when maximum cache size is reached * \#26 Complete ring buffer and direct download support ### Changes from v2.0.1-rc * Ability to choose between RocksDB and SQLite databases * Added direct reads and implemented download fallback * Corrected file times on S3 and Sia providers * Corrected handling of `chown()` and `chmod()` * Fixed erroneous download of chunks after resize Reviewed-on: #27
This commit is contained in:
		| @@ -1,127 +1,66 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| PLATFORM_NAME=$1 | ||||
| SIGNING_FOLDER=$2 | ||||
| BINARY_FOLDER=$3 | ||||
| SOURCE_FOLDER=$4 | ||||
| OUTPUT_FOLDER=$5 | ||||
| ARM64=$6 | ||||
| TEMP_DIR=$(mktemp -d) | ||||
|  | ||||
| LINUX_PLATFORM=alpine | ||||
| PROJECT_SCRIPTS_DIR=$(realpath "$0") | ||||
| PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") | ||||
| . "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" | ||||
|  | ||||
| exit_script() { | ||||
|   echo "$1" | ||||
|   cd "${CURRENT_DIR}" | ||||
|   exit 1 | ||||
| function error_exit() { | ||||
|   echo $1 | ||||
|   rm -rf ${TEMP_DIR} | ||||
|   exit $2 | ||||
| } | ||||
|  | ||||
| if [ -z "${PLATFORM_NAME}" ]; then | ||||
|   exit_script "'PLATFORM_NAME' is not set (arg1)" | ||||
| 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 [ -z "${SIGNING_FOLDER}" ]; then | ||||
|   exit_script "'SIGNING_FOLDER' is not set (arg2)" | ||||
| pushd "${PROJECT_DIST_DIR}" | ||||
| if [ -f "${PROJECT_OUT_FILE}" ]; then | ||||
|   rm -f "${PROJECT_OUT_FILE}" || error_exit "failed to delete file: ${PROJECT_OUT_FILE}" 1 | ||||
| fi | ||||
|  | ||||
| if [ -z "${BINARY_FOLDER}" ]; then | ||||
|   exit_script "'BINARY_FOLDER' is not set (arg3)" | ||||
| if [ -f "${PROJECT_OUT_FILE}.sha256" ]; then | ||||
|   rm -f "${PROJECT_OUT_FILE}.sha256" || error_exit "failed to delete file: ${PROJECT_OUT_FILE}.sha256" 1 | ||||
| fi | ||||
|  | ||||
| if [ -z "${SOURCE_FOLDER}" ]; then | ||||
|   exit_script "'SOURCE_FOLDER' is not set (arg4)" | ||||
| if [ -f "${PROJECT_OUT_FILE}.sig" ]; then | ||||
|   rm -f "${PROJECT_OUT_FILE}.sig" || error_exit "failed to delete file: ${PROJECT_OUT_FILE}.sig" 1 | ||||
| fi | ||||
|  | ||||
| if [ -z "${OUTPUT_FOLDER}" ]; then | ||||
|   exit_script "'OUTPUT_FOLDER' is not set (arg5)" | ||||
| fi | ||||
|  | ||||
| if [ "${PLATFORM_NAME}" == "darwin" ]; then | ||||
|   SHA256_EXEC="shasum -a 256 -b" | ||||
| else | ||||
|   SHA256_EXEC="sha256sum -b" | ||||
| fi | ||||
|  | ||||
| pushd "${SOURCE_FOLDER}" | ||||
| BRANCH=$(git branch --show-current) | ||||
| RELEASE=$(grep set\(REPERTORY_RELEASE_ITER ./CMakeLists.txt | sed s/\)//g | awk '{print $2}') | ||||
|  | ||||
| if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] || [ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then | ||||
|   OUTPUT_FOLDER=${OUTPUT_FOLDER}/${RELEASE} | ||||
| else | ||||
|   OUTPUT_FOLDER=${OUTPUT_FOLDER}/nightly | ||||
| fi | ||||
|  | ||||
| GIT_REV=$(git rev-parse --short HEAD) | ||||
| REPERTORY_VERSION=$(grep set\(REPERTORY_MAJOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}') | ||||
| REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_MINOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}') | ||||
| REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_REV ./CMakeLists.txt | sed s/\)//g | awk '{print $2}') | ||||
| REPERTORY_VERSION=${REPERTORY_VERSION}-${RELEASE} | ||||
| popd | ||||
|  | ||||
| REPERTORY_BINARY=repertory | ||||
| if [ "${ARM64}" == "1" ]; then | ||||
|   if [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then | ||||
|     ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_arm64.zip | ||||
| rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1 | ||||
|  | ||||
| for APP in ${PROJECT_APP_LIST[@]}; do | ||||
|   if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then | ||||
|     strip ${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT} | ||||
|   else | ||||
|     ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_arm64.zip | ||||
|     strip ${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT} | ||||
|   fi | ||||
| elif [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then | ||||
|   ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_amd64.zip | ||||
| elif [ "${PLATFORM_NAME}" == "mingw64" ]; then | ||||
|   ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_windows_amd64.zip | ||||
|   REPERTORY_BINARY=${REPERTORY_BINARY}.exe | ||||
| else | ||||
|   ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_amd64.zip | ||||
| fi | ||||
| ZIP_FILE_PATH=./${ZIP_FILE_NAME} | ||||
| done | ||||
|  | ||||
| create_hash_and_sig() { | ||||
|   ${SHA256_EXEC} ./${1} > ${1}.sha256 || exit_script "SHA-256 failed for $1" | ||||
|   openssl dgst -sha256 -sign "${SIGNING_FOLDER}/blockstorage_dev_private.pem" -out ${1}.sig $1 || exit_script "Create signature failed for $1" | ||||
|   openssl dgst -sha256 -verify "${SIGNING_FOLDER}/blockstorage_dev_public.pem" -signature ${1}.sig $1 || exit_script "Verify signature failed for $1" | ||||
| } | ||||
|  | ||||
| clean_directory() { | ||||
|   rm -f "${ZIP_FILE_PATH}" | ||||
|   rm -f "${ZIP_FILE_PATH}.sha256" | ||||
|   rm -f "${ZIP_FILE_PATH}.sig" | ||||
|   rm -f "cacert.pem.sha256" | ||||
|   rm -f "cacert.pem.sig" | ||||
|   rm -f "${REPERTORY_BINARY}.sha256" | ||||
|   rm -f "${REPERTORY_BINARY}.sig" | ||||
|   if [ "${PLATFORM_NAME}" == "mingw64" ]; then | ||||
|     rm -f "winfsp-x64.dll.sha256" | ||||
|     rm -f "winfsp-x64.dll.sig" | ||||
|   fi | ||||
| } | ||||
|  | ||||
| pushd "${BINARY_FOLDER}" | ||||
| clean_directory | ||||
|  | ||||
| strip ./${REPERTORY_BINARY} | ||||
|  | ||||
| create_hash_and_sig ${REPERTORY_BINARY} | ||||
| create_hash_and_sig cacert.pem | ||||
| if [ "${PLATFORM_NAME}" == "mingw64" ]; then | ||||
|   create_hash_and_sig winfsp-x64.dll | ||||
| fi | ||||
|  | ||||
| if [ "${PLATFORM_NAME}" == "mingw64" ]; then | ||||
|   zip "${ZIP_FILE_PATH}" \ | ||||
|     ${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \ | ||||
|     winfsp-x64.dll winfsp-x64.dll.sha256 winfsp-x64.dll.sig \ | ||||
|     cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed" | ||||
| else | ||||
|   zip "${ZIP_FILE_PATH}" \ | ||||
|     ${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \ | ||||
|     cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed" | ||||
| fi | ||||
|  | ||||
| create_hash_and_sig ${ZIP_FILE_NAME} | ||||
|  | ||||
| cp -f "${ZIP_FILE_PATH}" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME} failed" | ||||
| cp -f "${ZIP_FILE_PATH}.sha256" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sha256 failed" | ||||
| cp -f "${ZIP_FILE_PATH}.sig" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sig failed" | ||||
|  | ||||
| clean_directory | ||||
| 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 "${PROJECT_DIST_DIR}" | ||||
| tar cvzf "${PROJECT_OUT_FILE}" -C ${TEMP_DIR} . || error_exit "failed to create archive: ${PROJECT_OUT_FILE}" 1 | ||||
| create_file_validations "${PROJECT_OUT_FILE}" | ||||
| popd | ||||
|  | ||||
| error_exit "created package ${PROJECT_FILE_PART}" 0 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user