]> juplo.de Git - maven-thymeleaf-skin/commitdiff
Reworked Hugo-script: refined/simplified cli-switches
authorKai Moritz <kai@juplo.de>
Sun, 3 May 2026 12:14:45 +0000 (14:14 +0200)
committerKai Moritz <kai@juplo.de>
Wed, 17 Jun 2026 20:03:57 +0000 (22:03 +0200)
src/main/resources/import-in-hugo.sh

index 1ff2c347f38a495b3fe6387f7a62e5d6f54547fa..a40e2268d15c919ed079f41a46f5f59b470d09e5 100644 (file)
@@ -2,7 +2,7 @@
 set -euo pipefail
 
 USAGE=$(
-  echo "Usage: $0 <HUGO_ROOT> [--base <path>] [--project ]  [--separator ] [ [ --current [<canonical>]] | [--archived [<canonical>]] ]";
+  echo "Usage: $0 <HUGO_ROOT> [--base <path>] [--project <name>][ [ --current [<url>]] | [--archived [<url>] [--canonical <url>]] ]";
   cat << EOF
 
 --base      : Specifies the base-path for the rendered site.
@@ -10,18 +10,23 @@ USAGE=$(
               The artifact-id and the version are always added to the
               path.
 --project   : Specifies the name of the project for path and url
-              (Default: <artifact-id>).
+              (Default: artifact-id of the maven-project).
               artifact-id and the version (Default: "/").
 --current   : [DEFAULT]
-              Adds "url: <canonical>/<path_in_site>/" to front-matter.
-              If "<cononical>" is not specified, "<path>/<project>/"
-              is used.
+              Sets "url: /<url>/<path_in_site>", "params.current=true"
+              and "params.canonical = <url>/<path_in_site>" in
+              front-matter.  If "<url>" is not specified,
+              "<path>/<project>/" is used as "<url>".
               Only one of "--current" and "--archived" can be used!
---archived  : Adds "params.canonical=<canonical>/<path_in_site>/" to
-              front-matter.
-              If "<cononical>" is not specified, "<path>/<project>/"
-              is used.
+--archived  : Sets "url: /<url>/<path_in_site>", "params.current=false"
+              and "params.canonical = <canonical>/<path_in_site>" in
+              front-matter.  If "<url>" is not specified,
+              "<path>/<project>/<version>" is used as "<url>"
+              If "<canonical>" is not specified explicitly,
+              "<path>/<project>" is used as "<canonical>"
               Only one of "--current" and "--archived" can be used!
+--canonical : Explicitly specifies "<canonical>" for "--archived".
+              Can only be specified when "--archived" is used!
 EOF
 )
 
@@ -39,6 +44,7 @@ shift
 PROJECT=""
 CURRENT=0
 ARCHIVED=0
+URL_BASE=""
 CANONICAL=""
 
 command -v jq >/dev/null 2>&1 || { echo "ERROR -- jq is required"; exit 1; }
@@ -79,10 +85,15 @@ while [[ $# -gt 0 ]]; do
       then
         shift
       else
-        CANONICAL="${2%%/}"
-        CANONICAL="${CANONICAL##/}"
-        CANONICAL="/$CANONICAL"
-        shift 2
+        if [[ ! "$2" =~ ^-- ]]
+        then
+          URL_BASE="${2%%/}"
+          URL_BASE="${URL_BASE##/}"
+          URL_BASE="/$URL_BASE"
+          shift 2
+        else
+          shift
+        fi
       fi
       ;;
     --archived)
@@ -91,12 +102,28 @@ while [[ $# -gt 0 ]]; do
       then
         shift
       else
-        CANONICAL="${2%%/}"
-        CANONICAL="${CANONICAL##/}"
-        CANONICAL="/$CANONICAL"
-        shift 2
+        if [[ ! "$2" =~ ^-- ]]
+        then
+          URL_BASE="${2%%/}"
+          URL_BASE="${URL_BASE##/}"
+          URL_BASE="/$URL_BASE"
+          shift 2
+        else
+          shift
+        fi
       fi
       ;;
+    --canonical)
+      if [[ $# -lt 2 ]]
+      then
+        echo "ERROR -- Parameter for --canonical is missing!"
+        exit 1
+      fi
+      CANONICAL="${2%%/}"
+      CANONICAL="${CANONICAL##/}"
+      CANONICAL="/$CANONICAL"
+      shift 2
+      ;;
     *)
       echo "ERROR -- Unknown parameter: $1"
       echo
@@ -117,6 +144,12 @@ if [[ "$CURRENT" -eq 0 && "$ARCHIVED" -eq 0 ]]
 then
   CURRENT=1
 fi
+if [[ "$CURRENT" -eq 1 ]]
+then
+  CURRENT="true"
+else
+  CURRENT="false"
+fi
 
 echo "$JSON" | jq -C .
 
@@ -126,6 +159,19 @@ then
 fi
 VERSION=$(echo "$JSON" | jq -r '.version')
 
+PATH_BASE="$BASE/$PROJECT/$VERSION"
+
+if [[ -n "$URL_BASE" ]]
+then
+  URL_BASE="${URL_BASE%/}"
+else
+  URL_BASE="$BASE/$PROJECT"
+  if [[ "$ARCHIVED" -eq 1 ]]
+  then
+    URL_BASE="$URL_BASE/$VERSION"
+  fi
+fi
+
 if [[ -n "$CANONICAL" ]]
 then
   CANONICAL="${CANONICAL%/}"
@@ -133,8 +179,6 @@ else
   CANONICAL="$BASE/$PROJECT"
 fi
 
-BASE="$BASE/$PROJECT/$VERSION"
-
 for i in $(find "$SCRIPT_DIR" -maxdepth 1 -mindepth 1 -type f -name '*.html')
 do
   SOURCE="$i"
@@ -148,8 +192,8 @@ do
   then
     TITLE=$(echo "$JSON" | jq -r .project)
     URL="/"
-    mkdir -p "$HUGO_ROOT/content$BASE"
-    TARGET="$HUGO_ROOT/content$BASE/_index.html"
+    mkdir -p "$HUGO_ROOT/content$PATH_BASE"
+    TARGET="$HUGO_ROOT/content$PATH_BASE/_index.html"
   else
     TITLE=$(echo "$PAGE" | jq -r .name)
     URL="/$FILE"
@@ -161,11 +205,11 @@ do
     fi
     if [ "$NUM_CHILDS" -gt 0 ]
     then
-      mkdir -p "$HUGO_ROOT/content$BASE$URL_PATH${FILE%.html}"
-      TARGET="$HUGO_ROOT/content$BASE$URL_PATH${FILE%.html}/_index.html"
+      mkdir -p "$HUGO_ROOT/content$PATH_BASE$URL_PATH${FILE%.html}"
+      TARGET="$HUGO_ROOT/content$PATH_BASE$URL_PATH${FILE%.html}/_index.html"
     else
-      mkdir -p "$HUGO_ROOT/content$BASE$URL_PATH"
-      TARGET="$HUGO_ROOT/content$BASE$URL_PATH$FILE"
+      mkdir -p "$HUGO_ROOT/content$PATH_BASE$URL_PATH"
+      TARGET="$HUGO_ROOT/content$PATH_BASE$URL_PATH$FILE"
     fi
   fi
   echo "Generating page $TARGET"
@@ -174,42 +218,31 @@ do
   echo "weight: $(echo "$PAGE_ENTRY" | jq -r .key)" >> $TARGET
   echo "outputs:" >> $TARGET
   echo "  - html" >> $TARGET
-  if [[ "$CURRENT" -eq 1 ]]
-  then
-    echo "url: $CANONICAL$URL" >> $TARGET
-  else
-    echo "url: $BASE$URL" >> $TARGET
-  fi
+  echo "url: $URL_BASE$URL" >> $TARGET
   echo "layout: article" >> $TARGET
   echo "params:" >> $TARGET
-  if [[ "$CURRENT" -eq 1 ]]
-  then
-    echo "  current: true" >> $TARGET
-  fi
-  if [[ "$ARCHIVED" -eq 1 ]]
-  then
-    echo "  canonical: $CANONICAL$URL" >> $TARGET
-  fi
+  echo "  current: $CURRENT" >> $TARGET
+  echo "  canonical: $CANONICAL$URL" >> $TARGET
   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$BASE"
+mkdir -p "$HUGO_ROOT/static$URL_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 -av "$i" "$HUGO_ROOT/static$BASE"
+  cp -av "$i" "$HUGO_ROOT/static$URL_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)
     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="$HUGO_ROOT/content$PATH_BASE$URL_PATH$DIR"
+    mkdir -p "$HUGO_ROOT/content$PATH_BASE$URL_PATH$DIR"
     TARGET="$TARGET/_index.html"
     echo "Generating page $TARGET"
     TITLE=$(echo "$PAGE" | jq -r .name)
@@ -217,22 +250,11 @@ do
     HREF=$(echo "$PAGE" | jq -r .href)
     echo "---" > "$TARGET"
     echo "title: $TITLE" >> "$TARGET"
-    if [[ "$CURRENT" -eq 1 ]]
-    then
-      echo "url: $CANONICAL$URL" >> $TARGET
-    else
-      echo "url: $BASE$URL" >> $TARGET
-    fi
+    echo "url: $URL_BASE$URL" >> $TARGET
     echo "weight: $WEIGHT" >> "$TARGET"
     echo "params:" >> "$TARGET"
-    if [[ "$CURRENT" -eq 1 ]]
-    then
-      echo "  current: true" >> "$TARGET"
-    fi
-    if [[ "$ARCHIVED" -eq 1 ]]
-    then
-      echo "  canonical: $CANONICAL$URL" >> "$TARGET"
-    fi
+    echo "  current: $CURRENT" >> "$TARGET"
+    echo "  canonical: $CANONICAL$URL" >> "$TARGET"
     echo "---" >> "$TARGET"
     echo "<script type="text/javascript">window.location.replace('../../$HREF')</script>" >> "$TARGET"
     echo "<noscript><p>JavaScript is deactivated.</p></noscript>" >> "$TARGET"