personal memory agent
1#!/usr/bin/env bash
2# SPDX-License-Identifier: AGPL-3.0-only
3# Copyright (c) 2026 sol pbc
4#
5# Extract a single version's block from CHANGELOG.md.
6# Usage: extract_changelog.sh <version> [<changelog-path>]
7set -euo pipefail
8
9if [[ $# -lt 1 || $# -gt 2 ]]; then
10 echo "usage: $(basename "$0") <version> [<changelog-path>]" >&2
11 exit 2
12fi
13
14VERSION="$1"
15CHANGELOG="${2:-CHANGELOG.md}"
16
17if [[ ! -f "$CHANGELOG" ]]; then
18 echo "error: $CHANGELOG not found" >&2
19 exit 1
20fi
21
22# Escape regex metacharacters in the version (dots, etc.) for the awk pattern.
23ESCAPED=$(printf '%s\n' "$VERSION" | sed 's/[][\\.*^$/]/\\&/g')
24AWK_ESCAPED="${ESCAPED//\\/\\\\}"
25
26OUTPUT=$(awk -v pat="^## \\\\[${AWK_ESCAPED}\\\\]" '
27 /^## \[/ { if (seen) exit }
28 $0 ~ pat { seen=1 }
29 seen
30' "$CHANGELOG")
31
32if [[ -z "$OUTPUT" ]]; then
33 echo "error: no CHANGELOG.md entry for version ${VERSION}" >&2
34 exit 1
35fi
36
37printf '%s\n' "$OUTPUT"