include/slug.bash (46 lines of code) (raw):
readonly slug_path="/tmp/slug.tgz"
slug-import() {
declare desc="Import a gzipped slug tarball from URL or STDIN "
declare url="$1"
ensure-paths
# app_path defined in outer scope
# shellcheck disable=SC2154
if [[ "$(ls -A "$app_path")" ]]; then
return 1
elif [[ "$url" ]]; then
curl -s --retry 2 "$url" | tar -xzC "$app_path"
else
cat | tar -xzC "$app_path"
fi
}
slug-generate() {
declare desc="Generate a gzipped slug tarball from the current app"
ensure-paths
local compress_option="-z"
if which pigz > /dev/null; then
compress_option="--use-compress-program=pigz"
fi
local slugignore_option
if [[ -f "$app_path/.slugignore" ]]; then
slugignore_option="-X $app_path/.slugignore"
fi
# slugignore_option may be empty
# shellcheck disable=SC2086
tar "$compress_option" $slugignore_option \
--exclude='.git' \
-C "$app_path" \
-cf "$slug_path" \
.
local slug_size
slug_size="$(du -Sh "$slug_path" | cut -f1)"
title "Compiled slug size is $slug_size"
}
slug-export() {
declare desc="Export generated slug tarball to URL (PUT) or STDOUT"
declare url="$1"
ensure-paths
if [[ ! -f "$slug_path" ]]; then
return 1
fi
if [[ "$url" ]]; then
curl -0 -s -o /dev/null --retry 2 -X PUT -T "$slug_path" "$url"
else
cat "$slug_path"
fi
}