]> juplo.de Git - maven-thymeleaf-skin/commitdiff
Added a script `import-in-hugo.sh` that imports the site into Hugo
authorKai Moritz <kai@juplo.de>
Mon, 2 Feb 2026 17:08:19 +0000 (18:08 +0100)
committerKai Moritz <kai@juplo.de>
Thu, 9 Apr 2026 16:13:58 +0000 (18:13 +0200)
src/main/resources/import-in-hugo.sh [new file with mode: 0755]

diff --git a/src/main/resources/import-in-hugo.sh b/src/main/resources/import-in-hugo.sh
new file mode 100755 (executable)
index 0000000..9d98674
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+if [ "$#" -lt 1 ]
+then
+  echo "Usage: import-in-hugo.sh <path-to-hugo-site> [<path-in-hugo-content>]"
+  exit 1
+fi
+
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+HUGO_ROOT="$1"
+if [ "$#" -eq 2 ]
+then
+  PATH_IN_HUGO_CONTENT="$2/"
+else
+  PATH_IN_HUGO_CONTENT=""
+fi
+
+command -v jq >/dev/null 2>&1 || { echo "jq is required"; exit 1; }
+
+JSON=$(sed -n '/<script id="sili-json" type="application\/json">/,/<\/script>/p' ${SCRIPT_DIR}/index.html | sed '1d;$d')
+
+echo "$JSON" | jq -C .
+
+for i in $(find "$SCRIPT_DIR" -maxdepth 1 -mindepth 1 -type f -name '*.html')
+do
+  SOURCE="$i"
+  FILE=$(basename $SOURCE $SCRIPT_DIR)
+  PATH_IN_PROJECT=$(echo "$JSON" | jq -r '.pages[]|select(.href == "'"$FILE"'").path')
+  if [[ "$FILE" == "index.html" ]]
+  then
+    mkdir -p "$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT"
+    TARGET="$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT${PATH_IN_PROJECT}_index.html"
+    URL="$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT"
+  else
+    NUM_CHILDS=$(echo "$JSON" | jq -r '.pages[]|select(.href == "'"$FILE"'").childs|length')
+    if [[ "$NUM_CHILDS" == "" ]]
+    then
+      echo "Found no menu-entry for $FILE! Exiting..."
+      exit 0
+    fi
+    if [ "$NUM_CHILDS" -gt 0 ]
+    then
+      mkdir -p "$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT${FILE%.html}"
+      TARGET="$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT${FILE%.html}/_index.html"
+      URL="$PATH_IN_HUGO_CONTENT$FILE"
+    else
+      mkdir -p "$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT"
+      URL="$PATH_IN_HUGO_CONTENT$FILE"
+      TARGET="$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT$FILE"
+    fi
+  fi
+  echo "Generating page $TARGET"
+  cat - <(sed -n '/<script id="sili-json" type="application\/json">/q;p' "$SOURCE" | tail -n +2) <<-EOF > "$TARGET"
+       ---
+       title: $(echo "$JSON" | jq -r '.pages[]|select(.href == "'"$FILE"'").name')
+       outputs:
+         - html
+       url: $URL
+       ---
+       EOF
+done
+
+mkdir -p "$HUGO_ROOT/static/$PATH_IN_HUGO_CONTENT"
+for i in $(find "$SCRIPT_DIR" -maxdepth 1 -mindepth 1 -type d)
+do
+  DIR=$(basename $i $SCRIPT_DIR)
+  echo "Copying additionally static content from $DIR"
+  cp -a "$i" "$HUGO_ROOT/static/$PATH_IN_HUGO_CONTENT"
+  PAGE=$(echo "$JSON" | jq -r '.pages[]|select(.href|test("^'"$DIR"'/"))')
+  if [[ "$PAGE" != "" ]]
+  then
+    PATH_IN_PROJECT=$(echo "$PAGE" | jq -r .path)
+    TARGET="$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT$DIR"
+    mkdir -p "$HUGO_ROOT/content/$PATH_IN_HUGO_CONTENT$PATH_IN_PROJECT$DIR"
+    TARGET="$TARGET/index.html"
+    echo "Generating page $TARGET"
+    TITLE=$(echo "$PAGE" | jq -r .name)
+    HREF=$(echo "$PAGE" | jq -r .href)
+    cat <<-EOF > "$TARGET"
+       ---
+       title: $TITLE
+       ---
+       <script type="text/javascript">window.location.replace('../../$HREF')</script>
+       <noscript><p>JavaScript is deactivated.</p></noscript>
+       <p><a href="../../$HREF">View $TITLE</a></p>
+       EOF
+  fi
+done