mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-31 18:47:11 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| # Helper script for building the Docker image locally.
 | |
| # Parses and provides the nessecary versions of other images to Docker
 | |
| # before passing in the rest of script args.
 | |
| 
 | |
| # First Argument: The Dockerfile to build
 | |
| # Other Arguments: Additional arguments to docker build
 | |
| 
 | |
| # Example Usage:
 | |
| #	./build-docker-image.sh Dockerfile -t paperless-ngx:my-awesome-feature
 | |
| 
 | |
| set -eu
 | |
| 
 | |
| if ! command -v jq &> /dev/null ;  then
 | |
| 	echo "jq required"
 | |
| 	exit 1
 | |
| elif [ ! -f "$1" ]; then
 | |
| 	echo "$1 is not a file, please provide the Dockerfile"
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| # Get the branch name (used for caching)
 | |
| branch_name=$(git rev-parse --abbrev-ref HEAD)
 | |
| 
 | |
| # Parse eithe Pipfile.lock or the .build-config.json
 | |
| jbig2enc_version=$(jq -r '.jbig2enc.version' .build-config.json)
 | |
| qpdf_version=$(jq -r '.qpdf.version' .build-config.json)
 | |
| psycopg2_version=$(jq -r '.default.psycopg2.version | gsub("=";"")' Pipfile.lock)
 | |
| pikepdf_version=$(jq -r '.default.pikepdf.version | gsub("=";"")' Pipfile.lock)
 | |
| pillow_version=$(jq -r '.default.pillow.version | gsub("=";"")' Pipfile.lock)
 | |
| lxml_version=$(jq -r '.default.lxml.version | gsub("=";"")' Pipfile.lock)
 | |
| 
 | |
| 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 \
 | |
| 	--output=type=docker \
 | |
| 	"${cache_from_arr[@]}" \
 | |
| 	"${build_args_arr[@]}" \
 | |
| 	"${@:2}" .
 |