mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-04 03:27:12 -05: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