mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| MSG="";
 | |
| PRUNE="false";
 | |
| OVERRIDE_TAGS="false";
 | |
| ENABLE_LOG="false";
 | |
| LOG_FILE="$(dirname -- "$( readlink -f -- "$0"; )")/build.log";
 | |
| 
 | |
| function appendOutput()
 | |
| {
 | |
|     if [ -z "${MSG}" ]; then echo -e "\n" > /dev/tty; fi
 | |
| 
 | |
|     ARGS=$@;
 | |
|     LINE="${ARGS}\n";
 | |
|     if [ -z "${ENABLE_LOG}" ] || [ "${ENABLE_LOG}" != "true" ]; then echo -e "${LINE}" > /dev/tty; else echo -e "${LINE}" 2>&1 | tee -a ${LOG_FILE}; fi
 | |
| 
 | |
|     MSG="${MSG}${LINE}";
 | |
| }
 | |
| 
 | |
| function runDockerBuild()
 | |
| {
 | |
|     if [ "${PRUNE}" == "true" ]; then
 | |
|         if [ -z "${ENABLE_LOG}" ] || [ "${ENABLE_LOG}" != "true" ]; then docker system prune -a -f;
 | |
|         else docker system prune -a -f | tee -a ${LOG_FILE}; fi
 | |
|     fi
 | |
| 
 | |
| 	STARTTS=$(date +%s);
 | |
|     ARGS=$@;
 | |
| 
 | |
|     APP_VERSION=$(grep -o '"version":\s*"[^"]*"' ./package.json | cut -f4- -d\" | tr -d '"');
 | |
|     BASE_TAGS="";
 | |
|     if [ -z "${OVERRIDE_TAGS}" ] || [ "${OVERRIDE_TAGS}" != "true" ]; then
 | |
|         BASE_TAGS="-t meshcentral:latest -t meshcentral:${APP_VERSION}";
 | |
|     fi
 | |
| 
 | |
|     BUILD_CMD="docker build -f docker/Dockerfile --force-rm --no-cache ${ARGS} ${BASE_TAGS} .";
 | |
|     appendOutput "Current build: ${BUILD_CMD}";
 | |
| 
 | |
|     if [ -z "${ENABLE_LOG}" ] || [ "${ENABLE_LOG}" != "true" ]; then ${BUILD_CMD}; else ${BUILD_CMD} | tee -a ${LOG_FILE}; fi
 | |
|     if [ $? -ne 0 ]; then exit $?; fi
 | |
| 
 | |
|     IMAGEID=$(docker images --format "{{.ID}} {{.CreatedAt}}" | sort -rk 2 | awk 'NR==1{print $1}');
 | |
|     appendOutput "\tImageId: ${IMAGEID}";
 | |
|     
 | |
|     ENDTS=$(date +%s);
 | |
|     DIFSEC=$((${ENDTS}-${STARTTS}));
 | |
|     if [ ${DIFSEC} -ge 60 ]; then
 | |
|         TMPMIN=$((${DIFSEC}/60));
 | |
|         TMPSEC=$((${DIFSEC}%60));
 | |
| 
 | |
|         if [ ${TMPMIN} -ge 60 ]; then
 | |
|             TMPHOUR=$((${TMPMIN}/60));
 | |
|             TMPMIN=$((${TMPMIN}%60));
 | |
| 
 | |
|             appendOutput "\tBuild time: ${TMPHOUR} hr ${TMPMIN} min ${TMPSEC} sec";
 | |
|         else appendOutput "\tBuild time: ${TMPMIN} min ${TMPSEC} sec"; fi
 | |
|     else appendOutput "\tBuild time: ${DIFSEC} sec"; fi
 | |
| 
 | |
|     IMG_SIZE=$(docker image inspect ${IMAGEID} | grep -o '"Size":\s*[^,]*' | cut -f2- -d ':' | tr -d ' ');
 | |
|     expr $IMG_SIZE + 0 > /dev/null;
 | |
|     appendOutput "\tImage size: ${IMG_SIZE} ($((${IMG_SIZE}/1024/1024))M)\n";
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| parent_path=$(dirname -- $(dirname -- "$( readlink -f -- "$0"; )"));
 | |
| if [ "${parent_path}" != "$(pwd -P)" ]; then
 | |
|     echo -e "change working directory to: ${parent_path}" > /dev/tty;
 | |
|     cd "${parent_path}";
 | |
| fi
 | |
| 
 | |
| if ! [ -z $1 ]; then
 | |
|     for arg in "$@"
 | |
|     do
 | |
|         case "${arg}" in
 | |
|             --prune)
 | |
|                 PRUNE="true";
 | |
|                 shift 1;
 | |
|                 ;;
 | |
|             --log)
 | |
|                 ENABLE_LOG="true";
 | |
|                 shift 1;
 | |
|                 ;;
 | |
|             --no-tags)
 | |
|                 OVERRIDE_TAGS="true";
 | |
|                 shift 1;
 | |
|                 ;;
 | |
|             --help)
 | |
|                 __usage="\n
 | |
|                     Usage: ./$(basename ${0}) [OPTIONS] [BUILD ARGUMENTS]\n
 | |
|                     \n
 | |
|                     Options:\n
 | |
|                     \t--log           \t\twrite output to build.log file\n
 | |
|                     \t--no-tags       \tdo not use default tags (meshcentral:latest and meshcentral:%VERSION%)\n
 | |
|                     \t--prune         \tWARNING: This will remove:\n
 | |
|                     \t\t\t              - all stopped docker containers\n
 | |
|                     \t\t\t              - all docker networks not used by at least one container\n
 | |
|                     \t\t\t              - all docker images without at least one container associated to them\n
 | |
|                     \t\t\t              - all docker build cache\n
 | |
|                     \n
 | |
|                     Build arguments:                            \tAll build arguments are forwarded to the docker build command, so you can use any option accepted by 'docker build'\n
 | |
|                                                                 \t\t\t(https://docs.docker.com/engine/reference/commandline/build/#options)\n\n
 | |
|                     \t--build-arg INCLUDE_MONGODBTOOLS=yes      \tIncludes mongodb-tools (mongodump, ...) in the image\n
 | |
|                     \t--build-arg DISABLE_MINIFY=yes            \t\tDisables minification of files\n
 | |
|                     \t--build-arg DISABLE_TRANSLATE=yes         \tDisables translation of files\n
 | |
|                 ";
 | |
|                 echo -e $__usage;
 | |
|                 exit 0;
 | |
|                 ;;
 | |
|             *)
 | |
|                 break;
 | |
|                 ;;
 | |
|         esac
 | |
|     done
 | |
| fi
 | |
| 
 | |
| MAINARGS=$@;
 | |
| 
 | |
| #runDockerBuild --build-arg DISABLE_MINIFY=yes --build-arg DISABLE_TRANSLATE=yes ${MAINARGS};
 | |
| #runDockerBuild --build-arg DISABLE_TRANSLATE=yes ${MAINARGS};
 | |
| #runDockerBuild --build-arg DISABLE_MINIFY=yes ${MAINARGS};
 | |
| runDockerBuild ${MAINARGS};
 | |
| 
 | |
| #runDockerBuild --build-arg INCLUDE_MONGODBTOOLS=yes --build-arg DISABLE_MINIFY=yes --build-arg DISABLE_TRANSLATE=yes ${MAINARGS};
 | |
| #runDockerBuild --build-arg INCLUDE_MONGODBTOOLS=yes --build-arg DISABLE_TRANSLATE=yes ${MAINARGS};
 | |
| #runDockerBuild --build-arg INCLUDE_MONGODBTOOLS=yes --build-arg DISABLE_MINIFY=yes ${MAINARGS};
 | |
| #runDockerBuild --build-arg INCLUDE_MONGODBTOOLS=yes ${MAINARGS};
 | |
| 
 | |
| echo "";
 | |
| if [ -z "${ENABLE_LOG}" ] || [ "${ENABLE_LOG}" != "true" ]; then echo -e "${MSG}"; else echo -e "${MSG}" 2>&1 | tee -a ${LOG_FILE}; fi
 | |
| 
 | |
| exit 0;
 |