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 }