#!/usr/bin/env bash set -euo pipefail readonly SCAN_PATH="${1:-.}" case "${1:-}" in '-h' | '--help' | 'help') cat << 'EOF' precompress =========== Usage ----- precompress [path] If path is omitted, it used the current working directory. Primarily used for Caddy's file_sever directive's precompresed option. It will compress every non brotli, zstandard, or gzip file. EOF exit 0 ;; esac if [ "${SCAN_PATH}" = "." ] && [ -t 0 ] && [ -t 1 ] && [ -t 2 ]; then while read -r -p "About to compress all of ${PWD}, continue? [y/n] " ANSWER; do case "${ANSWER}" in 'y') break ;; 'n') exit 1 ;; esac done fi readonly REQUIRED_APPS=( 'ag' 'brotli' 'cat' 'nproc' 'pigz' 'sha256sum' 'tr' 'xargs' 'zstd' ) for REQUIRED_APP in "${REQUIRED_APPS[@]}"; do if ! command -v "${REQUIRED_APP}" &> /dev/null; then >&2 echo "missing ${REQUIRED_APP} from PATH" exit 1 fi done COMPRESS_SCRIPT="$(cat << 'EOF' set -euo pipefail readonly FILE_NAME="$0" errTrap() { >&2 echo "failed to compress $FILE_NAME" } trap errTrap ERR FILE_SHA256="$(sha256sum < "${FILE_NAME}")" readonly FILE_SHA256 if ! [ -e "${FILE_NAME}.zst" ] || [ "${FILE_SHA256}" != "$(zstd -d -c "${FILE_NAME}.zst" | sha256sum)" ]; then echo "zstd: $FILE_NAME" rm -f "${FILE_NAME}.zst" zstd -k -T0 --ultra -20 "${FILE_NAME}" &> /dev/null & fi if ! [ -e "${FILE_NAME}.gz" ] || [ "${FILE_SHA256}" != "$(gzip -d -c "${FILE_NAME}.gz" | sha256sum)" ]; then echo "gzip: $FILE_NAME" rm -f "${FILE_NAME}.gz" pigz -k -9 "${FILE_NAME}" &> /dev/null & fi if ! [ -e "${FILE_NAME}.br" ] || [ "${FILE_SHA256}" != "$(brotli -d -c "${FILE_NAME}.br" | sha256sum)" ]; then echo "brotli: $FILE_NAME" rm -f "${FILE_NAME}.br" brotli -k -9 "${FILE_NAME}" &> /dev/null & fi wait EOF )" readonly COMPRESS_SCRIPT ag --nocolor --ignore '*.gz' --ignore '*.zst' --ignore '*.br' -g '' -l "${SCAN_PATH}" | tr '\n' '\0' | xargs -0 -r -n 1 -P "$(nproc)" "$(command -v bash)" -c "${COMPRESS_SCRIPT}"