mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-01 19:17:15 -04:00 
			
		
		
		
	Improves the manual image building so it now properly gets cache manifests using buildx
This commit is contained in:
		
							parent
							
								
									554bba839e
								
							
						
					
					
						commit
						feec36939b
					
				| @ -10,9 +10,9 @@ | ||||
| # Example Usage: | ||||
| #	./build-docker-image.sh Dockerfile -t paperless-ngx:my-awesome-feature | ||||
| 
 | ||||
| set -eux | ||||
| set -eu | ||||
| 
 | ||||
| if ! command -v jq;  then | ||||
| if ! command -v jq &> /dev/null ;  then | ||||
| 	echo "jq required" | ||||
| 	exit 1 | ||||
| elif [ ! -f "$1" ]; then | ||||
| @ -20,28 +20,62 @@ elif [ ! -f "$1" ]; then | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| # Parse what we can from Pipfile.lock | ||||
| pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock  | sed 's/=//g' | sed 's/"//g') | ||||
| psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') | ||||
| pillow_version=$(jq ".default.pillow.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') | ||||
| lxml_version=$(jq ".default.lxml.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') | ||||
| # Read this from the other config file | ||||
| qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') | ||||
| jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') | ||||
| # Get the branch name (used for caching) | ||||
| branch_name=$(git rev-parse --abbrev-ref HEAD) | ||||
| 
 | ||||
| # https://docs.docker.com/develop/develop-images/build_enhancements/ | ||||
| # Required to use cache-from | ||||
| export DOCKER_BUILDKIT=1 | ||||
| # Parse eithe Pipfile.lock or the .build-config.json | ||||
| jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') | ||||
| qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') | ||||
| psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') | ||||
| pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock  | sed 's/=//g' | sed 's/"//g') | ||||
| pillow_version=$(jq ".default.pillow.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') | ||||
| lxml_version=$(jq ".default.lxml.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') | ||||
| 
 | ||||
| docker build --file "$1" \ | ||||
| base_filename="$(basename -- "${1}")" | ||||
| build_args_str="" | ||||
| cache_from_str="" | ||||
| 
 | ||||
| case "${base_filename}" in | ||||
| 
 | ||||
| 	*.jbig2enc) | ||||
| 		build_args_str="--build-arg JBIG2ENC_VERSION=${jbig2enc_version}" | ||||
| 		cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/jbig2enc:${jbig2enc_version}" | ||||
| 		;; | ||||
| 
 | ||||
| 	*.psycopg2) | ||||
| 		build_args_str="--build-arg PSYCOPG2_VERSION=${psycopg2_version}" | ||||
| 		cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/psycopg2:${psycopg2_version}" | ||||
| 		;; | ||||
| 
 | ||||
| 	*.qpdf) | ||||
| 		build_args_str="--build-arg QPDF_VERSION=${qpdf_version}" | ||||
| 		cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/qpdf:${qpdf_version}" | ||||
| 		;; | ||||
| 
 | ||||
| 	*.pikepdf) | ||||
| 		build_args_str="--build-arg QPDF_VERSION=${qpdf_version} --build-arg PIKEPDF_VERSION=${pikepdf_version} --build-arg PILLOW_VERSION=${pillow_version} --build-arg LXML_VERSION=${lxml_version}" | ||||
| 		cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/pikepdf:${pikepdf_version}" | ||||
| 		;; | ||||
| 
 | ||||
| 	Dockerfile) | ||||
| 		build_args_str="--build-arg QPDF_VERSION=${qpdf_version} --build-arg PIKEPDF_VERSION=${pikepdf_version} --build-arg PSYCOPG2_VERSION=${psycopg2_version} --build-arg JBIG2ENC_VERSION=${jbig2enc_version}" | ||||
| 		cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:${branch_name} --cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:dev" | ||||
| 		;; | ||||
| 
 | ||||
| 	*) | ||||
| 		echo "Unable to match ${base_filename}" | ||||
| 		exit 1 | ||||
| 		;; | ||||
| esac | ||||
| 
 | ||||
| read -r -a build_args_arr <<< "${build_args_str}" | ||||
| read -r -a cache_from_arr <<< "${cache_from_str}" | ||||
| 
 | ||||
| set -eux | ||||
| 
 | ||||
| docker buildx build --file "${1}" \ | ||||
| 	--progress=plain \ | ||||
| 	--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:"${branch_name}" \ | ||||
| 	--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:dev \ | ||||
| 	--build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ | ||||
| 	--build-arg QPDF_VERSION="${qpdf_version}" \ | ||||
| 	--build-arg PIKEPDF_VERSION="${pikepdf_version}" \ | ||||
| 	--build-arg PILLOW_VERSION="${pillow_version}" \ | ||||
| 	--build-arg LXML_VERSION="${lxml_version}" \ | ||||
| 	--build-arg PSYCOPG2_VERSION="${psycopg2_version}" "${@:2}" . | ||||
| 	--output=type=docker \ | ||||
| 	"${cache_from_arr[@]}" \ | ||||
| 	"${build_args_arr[@]}" \ | ||||
| 	"${@:2}" . | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user