#!/usr/bin/env bash # ============================================================================= # skills/ingest/scripts/slug.sh # Derive a wiki slug from a path, filename, or title string. # slug.sh "raw/articles/My Source.md" -> my-source # slug.sh "Some Concept Name" -> some-concept-name # ============================================================================= set -euo pipefail if [[ "${1:-}" == "--raw" ]]; then raw="${2:?usage: slug.sh --raw }" rel="${raw#raw/}"; rel="${rel#*/}" # strip "raw/" and the bucket name rel="${rel%.*}" # strip extension slug="$(printf '%s\n' "$rel" | tr '/' '\n' \ | sed -E 's/[^a-zA-Z0-9]+/-/g; s/-{2,}/-/g; s/^-+//; s/-+$//' \ | tr '[:upper:]' '[:lower:]' | paste -sd- -)" [[ -n "$slug" ]] || { echo "slug: empty result for input '${raw}'" >&2; exit 1; } printf '%s\n' "$slug" exit 0 fi input="${1:?usage: slug.sh }" # Strip directory and extension when given a path base="${input##*/}" base="${base%.*}" slug="$(printf '%s\n' "$base" \ | tr '[:upper:]' '[:lower:]' \ | sed -E 's/[^a-z0-9]+/-/g; s/-{2,}/-/g; s/^-+//; s/-+$//')" # An all-symbols input (e.g. "!!!.md") collapses to "" — refuse rather than emit a # broken/empty slug that would produce an invalid branch name downstream. [[ -n "$slug" ]] || { echo "slug: empty result for input '${input}'" >&2; exit 1; } printf '%s\n' "$slug"