You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.4 KiB

#!/usr/bin/env bash
set -euo pipefail
gen-init ()
{
echo "COPY common /build/common"
}
gen-cleanup ()
{
echo "RUN rm -rf /build /data"
}
gen-docker-file ()
{
if [ -f $src/Dockerfile.top ] ; then
cat $src/Dockerfile.top
gen-init
fi
for stage in $(cd $src && echo [0-9]*.[a-z]*) ; do
case $stage in
*.docker)
cat $src/$stage
if grep -wq '^FROM' $src/$stage ; then
gen-init
fi
;;
*.d|*.sh)
echo "COPY $src/$stage /build/$stage"
echo "RUN /build/common/run $stage"
;;
*)
echo >&2 "ERROR: Unrecognized build stage name $stage"
exit 1
;;
esac
done
if [ -f $src/Dockerfile.bottom ] ; then
cat $src/Dockerfile.bottom
fi
gen-cleanup
}
if [ $# = 0 ] ; then
echo >&2 "Usage: $0 <src-directory> [<podman build options>]"
exit 1
fi
src=$1
shift
if [ ! -v http_proxy ] ; then
PROXY=
eval "$(apt-config shell PROXY Acquire::http::proxy)"
if [ -n "$PROXY" ] ; then
export http_proxy=$PROXY
fi
fi
if [ -v http_proxy -a ! -v https_proxy ] ; then
export https_proxy=$http_proxy
fi
CACHE_DIR=${XDG_CACHE_HOME:-$HOME/.cache}/container-build
if [ -d $CACHE_DIR ] ; then
echo "Using cache $CACHE_DIR"
else
echo "Creating cache $CACHE_DIR"
mkdir -p $CACHE_DIR
fi
mkdir -p $CACHE_DIR/download
gen-docker-file | podman build \
--file - \
--http-proxy \
--volume=$CACHE_DIR:/root/.cache \
"$@" \
.
echo -n "Cache usage: "
du -sh $CACHE_DIR | cut -d ' ' -f1