]> juplo.de Git - maven-thymeleaf-skin/commitdiff
`import-in-hugo.sh` renders current vs. archived
authorKai Moritz <kai@juplo.de>
Wed, 22 Apr 2026 08:30:15 +0000 (10:30 +0200)
committerKai Moritz <kai@juplo.de>
Wed, 22 Apr 2026 11:57:46 +0000 (13:57 +0200)
src/main/resources/import-in-hugo.sh

index 50759ef4b85811f670576af53195d2d0f4d861bf..ee63d301682f7022b9c39a893ef2789997f0843b 100755 (executable)
@@ -1,25 +1,88 @@
 #!/usr/bin/env bash
 set -euo pipefail
 
-if [ "$#" -lt 1 ]
+if [ $# -lt 1 ]
 then
-  echo "Usage: import-in-hugo.sh <path-to-hugo-site> [<path-in-hugo-content>]"
+  echo "Usage: $0 <HUGO_ROOT> [ --current [<path>]] | --archived <path> ] [--canonical <path>]"
+  echo
+  echo "--current  : [DEFAULT] specifies the path inside the hugo-project"
+  echo "             if the path is omitted, the artifact-id is used as path"
+  echo "--archived : specifies the base-path for an archived version"
+  echo "             the artifact-id and the version are added to the path"
+  echo "--canonical: specifies the path for canonical links in front-matter"
   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
+HUGO_ROOT="${1%%/}"
+shift
+CANONICAL_PATH=""
+CURRENT=1
+CANONICAL=0
 
-command -v jq >/dev/null 2>&1 || { echo "jq is required"; exit 1; }
+command -v jq >/dev/null 2>&1 || { echo "ERROR -- jq is required"; exit 1; }
 
 JSON=$(sed -n '/<script id="sili-json" type="application\/json">/,/<\/script>/p' ${SCRIPT_DIR}/index.html | sed '1d;$d')
 
+PROJECT=$(echo "$JSON" | jq -r '.artifactId')
+VERSION=$(echo "$JSON" | jq -r '.version')
+
+BASE="/$PROJECT"
+
+while [[ $# -gt 0 ]]; do
+  case "$1" in
+    --archived)
+      CURRENT=0
+      if [[ $# -lt 2 ]]
+      then
+        echo "ERROR -- Parameter for --base is missing!"
+        exit 0
+      fi
+      BASE="${2%/}"
+      BASE="${BASE#/}"
+      if [[ -n "$BASE" ]]
+      then
+        BASE="/$BASE"
+      fi
+      shift 2
+      ;;
+    --canonical)
+      CANONICAL=1
+      if [[ $# -gt 1 ]]
+      then
+        CANONICAL_PATH="$2"
+        CANONICAL_PATH="${CANONICAL_PATH%/}"
+        CANONICAL_PATH="${CANONICAL_PATH#/}"
+        if [[ -n "$CANONICAL_PATH" ]]
+        then
+          CANONICAL_PATH="/$CANONICAL_PATH"
+        fi
+        shift
+      fi
+      shift
+      ;;
+    --current)
+      if [[ $# -lt 2 ]]
+      then
+        echo "Using the artifact-id as path: $BASE"
+        shift
+      else
+        BASE="${2%%/}"
+        BASE="${BASE##/}"
+        if [[ -n "$BASE" ]]
+        then
+          BASE="/$BASE"
+        fi
+        shift 2
+      fi
+      ;;
+    *)
+      echo "Unbekannter Parameter: $1"
+      exit 1
+      ;;
+  esac
+done
+
 echo "$JSON" | jq -C .
 
 for i in $(find "$SCRIPT_DIR" -maxdepth 1 -mindepth 1 -type f -name '*.html')
@@ -30,60 +93,71 @@ do
   echo -n "Found $FILE: "
   echo "$PAGE_ENTRY" | jq -C .
   PAGE=$(echo "$PAGE_ENTRY" | jq .value)
-  PATH_IN_PROJECT=$(echo "$PAGE" | jq -r .path)
+  URL_PATH="/$(echo "$PAGE" | jq -r .path)"
   if [[ "$FILE" == "index.html" ]]
   then
     TITLE=$(echo "$JSON" | jq -r .project)
-    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"
+    URL="/"
+    mkdir -p "$HUGO_ROOT/content$BASE"
+    TARGET="$HUGO_ROOT/content$BASE/_index.html"
   else
     TITLE=$(echo "$PAGE" | jq -r .name)
+    URL="/$FILE"
     NUM_CHILDS=$(echo "$PAGE" | jq -r '.childs|length')
     if [[ "$NUM_CHILDS" == "" ]]
     then
-      echo "Found no menu-entry for $FILE! Exiting..."
+      echo "ERROR -- 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"
+      mkdir -p "$HUGO_ROOT/content$BASE$URL_PATH${FILE%.html}"
+      TARGET="$HUGO_ROOT/content$BASE$URL_PATH${FILE%.html}/_index.html"
     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"
+      mkdir -p "$HUGO_ROOT/content$BASE$URL_PATH"
+      TARGET="$HUGO_ROOT/content$BASE$URL_PATH$FILE"
     fi
   fi
   echo "Generating page $TARGET"
-  WEIGHT=$(echo "$PAGE_ENTRY" | jq -r .key)
-  cat - <(sed -n '/<script id="sili-json" type="application\/json">/q;p' "$SOURCE" | tail -n +2 | perl -0777 -MHTML::Entities -pe 's#<pre\b[^>]*>(.*?)</pre>#"{{< highlight guess >}}\n".decode_entities($1)."\n{{< /highlight >}}"#gse') <<-EOF > "$TARGET"
-       ---
-       title: $TITLE
-       weight: $WEIGHT
-       outputs:
-         - html
-       url: $URL
-       layout: article
-       ---
-       EOF
+  echo "---" > $TARGET
+  echo "title: $TITLE" >> $TARGET
+  echo "weight: $(echo "$PAGE_ENTRY" | jq -r .key)" >> $TARGET
+  echo "outputs:" >> $TARGET
+  echo "  - html" >> $TARGET
+  echo "url: $BASE$URL" >> $TARGET
+  echo "layout: article" >> $TARGET
+  if [[ -"$CANONICAL" -eq 1 || "$CURRENT" -eq 1 ]]
+  then
+    echo "params:" >> $TARGET
+  fi
+  if [[ "$CANONICAL" -eq 1 ]]
+  then
+    echo "  - cannonical: $CANONICAL_PATH$URL" >> $TARGET
+  fi
+  if [[ "$CURRENT" -eq 1 ]]
+  then
+    echo "  - current: true" >> $TARGET
+  fi
+  echo "---" >> $TARGET
+  sed -n '/<script id="sili-json" type="application\/json">/q;p' "$SOURCE" \
+  | tail -n +2 \
+  | perl -0777 -MHTML::Entities -pe 's#<pre\b[^>]*>(.*?)</pre>#"{{< highlight guess >}}\n".decode_entities($1)."\n{{< /highlight >}}"#gse' >> "$TARGET"
 done
 
-mkdir -p "$HUGO_ROOT/static/$PATH_IN_HUGO_CONTENT"
+mkdir -p "$HUGO_ROOT/static$BASE"
 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"
+  cp -a "$i" "$HUGO_ROOT/static$BASE"
   PAGE_ENTRY=$(echo "$JSON" | jq '.pages|to_entries[]|select(.value.href|test("^'"$DIR"'/"))')
   if [[ "$PAGE_ENTRY" != "" ]]
   then
     echo "$PAGE_ENTRY" | jq -C .
     PAGE=$(echo "$PAGE_ENTRY" | jq .value)
-    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"
+    URL_PATH=/$(echo "$PAGE" | jq -r .path)
+    TARGET="$HUGO_ROOT/content$BASE$URL_PATH$DIR"
+    mkdir -p "$HUGO_ROOT/content$BASE$URL_PATH$DIR"
     TARGET="$TARGET/index.html"
     echo "Generating page $TARGET"
     TITLE=$(echo "$PAGE" | jq -r .name)