phpsg.sh: Use GNU Parallel for compiling site.

This commit is contained in:
Nicolás A. Ortega Froysa 2025-02-18 10:05:55 +01:00
parent 8621a25c08
commit e489a39328
2 changed files with 36 additions and 7 deletions

View File

@ -3,6 +3,16 @@
This is the source code for my personal website, [The Music in This is the source code for my personal website, [The Music in
Noise](https://themusicinnoise.net/). Noise](https://themusicinnoise.net/).
## Building
Dependencies:
- Bash
- PHP
- GNU Parallel
Build using the `phpsg.sh` script.
## Licensing ## Licensing
All documents generated by the website are licensed [CC-BY-ND 4.0 All documents generated by the website are licensed [CC-BY-ND 4.0

View File

@ -26,12 +26,13 @@ set -euo pipefail
SOURCE_DIR="src" SOURCE_DIR="src"
OUTPUT_DIR="output" OUTPUT_DIR="output"
JOBS=1
function print_usage() { function print_usage() {
echo "$0 [-o <output dir>] [-s <source dir>]" echo "$0 [-o <output dir>] [-s <source dir>] [-j <num>]"
} }
while getopts "o:s:h" opt while getopts "o:s:j:h" opt
do do
case "$opt" in case "$opt" in
o) o)
@ -40,6 +41,15 @@ do
s) s)
SOURCE_DIR="${OPTARG}" SOURCE_DIR="${OPTARG}"
;; ;;
j)
JOBS="${OPTARG}"
if ! [[ $JOBS =~ ^[0-9]+$ ]]
then
>&2 echo "Jobs option '$JOBS' is not an integer."
print_usage
exit 1
fi
;;
h) h)
print_usage print_usage
exit exit
@ -51,6 +61,10 @@ do
esac esac
done done
# Make these variables visible within parallel
export OUTPUT_DIR
export SOURCE_DIR
while IFS= read -r -d '' dir while IFS= read -r -d '' dir
do do
OUT_DIR="${OUTPUT_DIR}/${dir:${#SOURCE_DIR}}" OUT_DIR="${OUTPUT_DIR}/${dir:${#SOURCE_DIR}}"
@ -60,14 +74,14 @@ do
fi fi
done < <(find "$SOURCE_DIR" -mindepth 1 -type d -print0) done < <(find "$SOURCE_DIR" -mindepth 1 -type d -print0)
while IFS= read -r -d '' file function process_file() {
do file="$1"
if [[ $file = *.php ]] if [[ $file = *.php ]]
then then
DEST_FILE="${OUTPUT_DIR}/${file:${#SOURCE_DIR}:-4}" DEST_FILE="${OUTPUT_DIR}/${file:${#SOURCE_DIR}:-4}"
if ! [ "$file" -nt "$DEST_FILE" ] if ! [ "$file" -nt "$DEST_FILE" ]
then then
continue return
fi fi
echo -n "Generating $DEST_FILE ... " echo -n "Generating $DEST_FILE ... "
php "$file" > "$DEST_FILE" php "$file" > "$DEST_FILE"
@ -76,10 +90,15 @@ do
DEST_FILE="${OUTPUT_DIR}/${file:${#SOURCE_DIR}}" DEST_FILE="${OUTPUT_DIR}/${file:${#SOURCE_DIR}}"
if ! [ "$file" -nt "$DEST_FILE" ] if ! [ "$file" -nt "$DEST_FILE" ]
then then
continue return
fi fi
echo -n "Copying target $DEST_FILE ... " echo -n "Copying target $DEST_FILE ... "
cp "$file" "$DEST_FILE" cp "$file" "$DEST_FILE"
echo "done" echo "done"
fi fi
done < <(find "$SOURCE_DIR" -type f -not -name '*.cfg.php' -print0) }
# Make function usable to parallel
export -f process_file
find "$SOURCE_DIR" -type f -not -name '*.cfg.php' |
parallel -j"${JOBS}" process_file