1+ #! /usr/bin/env bash
2+ set -euo pipefail
3+
4+ declare -A LICENSE_MAP
5+ VERSION=" "
6+ SOURCE=" "
7+ SHA=" "
8+
9+ usage () {
10+ cat >&2 << EOF
11+ Usage:
12+ $0 --version <v> --source <url> --sha <hash> [--license <type> <url>]...
13+
14+ Example:
15+ $0 --version v1.0 \\
16+ --source https://some-url \\
17+ --sha 0912783LHFKLSHJF \\
18+ --license gpl https://some-gpl-url \\
19+ --license mit https://some-mit-url
20+ EOF
21+ }
22+
23+ # Require jo
24+ command -v jo > /dev/null 2>&1 || { echo " Error: 'jo' is required." >&2 ; exit 1; }
25+
26+ while [[ $# -gt 0 ]]; do
27+ case " $1 " in
28+ --license)
29+ if [[ $# -lt 3 ]]; then
30+ echo " Error: --license requires <type> and <url>." >&2
31+ exit 1
32+ fi
33+ LICENSE_MAP[" $2 " ]=" $3 "
34+ shift 3
35+ ;;
36+ --version)
37+ [[ $# -ge 2 ]] || { echo " Error: --version requires a value." >&2 ; exit 1; }
38+ VERSION=" $2 "
39+ shift 2
40+ ;;
41+ --source)
42+ [[ $# -ge 2 ]] || { echo " Error: --source requires a value." >&2 ; exit 1; }
43+ SOURCE=" $2 "
44+ shift 2
45+ ;;
46+ --sha)
47+ [[ $# -ge 2 ]] || { echo " Error: --sha requires a value." >&2 ; exit 1; }
48+ SHA=" $2 "
49+ shift 2
50+ ;;
51+ -h|--help)
52+ usage
53+ exit 0
54+ ;;
55+ * )
56+ echo " Invalid argument '$1 '" >&2
57+ usage
58+ exit 1
59+ ;;
60+ esac
61+ done
62+
63+ # Basic validation
64+ [[ -n " ${VERSION} " ]] || { echo " Error: --version is required." >&2 ; exit 1; }
65+ [[ -n " ${SOURCE} " ]] || { echo " Error: --source is required." >&2 ; exit 1; }
66+ [[ -n " ${SHA} " ]] || { echo " Error: --sha is required." >&2 ; exit 1; }
67+
68+ # Build final JSON
69+ jo_args=( -s version=" $VERSION " -s source=" $SOURCE " -s sha=" $SHA " )
70+
71+ # Sort types alphabetically
72+ mapfile -t _types < <( printf " %s\n" " ${! LICENSE_MAP[@]} " | sort)
73+
74+ # Create a JSON object for each license and append to licenses[]
75+ if [[ ${# _types[@]} -eq 0 ]]; then
76+ echo " Error: --license is required." >&2
77+ exit 1
78+ fi
79+ for type in " ${_types[@]} " ; do
80+ jo_args+=( " licenses[]=$( jo type=" $type " url=" ${LICENSE_MAP[$type]} " ) " )
81+ done
82+
83+ # Emit pretty JSON
84+ jo -p -- " ${jo_args[@]} "
0 commit comments