#!/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')
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)