Files
social-media/scripts/generate-release-note.sh
Jonathan Bourdon 0b7edb1b7f
All checks were successful
deploy-socialize / image (push) Successful in 26s
deploy-socialize / deploy (push) Successful in 18s
chore: add release note generator
2026-05-08 00:38:50 -04:00

57 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd -- "$script_dir/.." && pwd)"
prompt_file="${RELEASE_PROMPT_FILE:-"$repo_root/scripts/release-prompt.txt"}"
if ! command -v codex >/dev/null 2>&1; then
echo "generate-release-note.sh: codex CLI is required but was not found in PATH." >&2
exit 127
fi
if [[ ! -f "$prompt_file" ]]; then
echo "generate-release-note.sh: prompt file not found: $prompt_file" >&2
exit 1
fi
commit_messages="$(cat)"
if [[ -z "${commit_messages//[[:space:]]/}" ]]; then
echo "generate-release-note.sh: expected commit messages on stdin." >&2
echo "Example: git log --oneline -n 20 | ./scripts/generate-release-note.sh" >&2
exit 1
fi
prompt_tmp="$(mktemp)"
output_tmp="$(mktemp)"
log_tmp="$(mktemp)"
cleanup() {
rm -f "$prompt_tmp" "$output_tmp" "$log_tmp"
}
trap cleanup EXIT
while IFS= read -r line || [[ -n "$line" ]]; do
if [[ "$line" == *"<PASTE_COMMIT_MESSAGES_HERE>"* ]]; then
printf '%s\n' "${line//<PASTE_COMMIT_MESSAGES_HERE>/$commit_messages}"
else
printf '%s\n' "$line"
fi
done < "$prompt_file" > "$prompt_tmp"
if ! codex \
--ask-for-approval never \
exec \
--cd "$repo_root" \
--ephemeral \
--sandbox read-only \
--color never \
--output-last-message "$output_tmp" \
- < "$prompt_tmp" > "$log_tmp" 2>&1; then
cat "$log_tmp" >&2
exit 1
fi
cat "$output_tmp"