ci(release): replace vociferate with local release scripts

This commit is contained in:
Micheal Wilkinson
2026-03-21 23:21:40 +00:00
parent 76460cddee
commit b24ca1214c
4 changed files with 215 additions and 20 deletions

63
script/publish-release.sh Normal file
View File

@@ -0,0 +1,63 @@
#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "$0")/.." && pwd)"
cd "$repo_root"
if [[ -z "${GITHUB_REF_NAME:-}" ]]; then
echo "GITHUB_REF_NAME is required" >&2
exit 1
fi
if [[ -z "${GITHUB_REPOSITORY:-}" || -z "${GITHUB_SERVER_URL:-}" || -z "${GITHUB_TOKEN:-}" ]]; then
echo "GITHUB_REPOSITORY, GITHUB_SERVER_URL, and GITHUB_TOKEN are required" >&2
exit 1
fi
tag="${GITHUB_REF_NAME}"
version="${tag#v}"
notes_file="$(mktemp)"
awk -v version="$version" '
$0 ~ ("^## \\\[" version "\\\] - ") { in_section = 1 }
/^## \[/ && in_section && $0 !~ ("^## \\\[" version "\\\] - ") { exit }
in_section { print }
' CHANGELOG.md > "$notes_file"
if [[ ! -s "$notes_file" ]]; then
printf '## [%s]\n\n- Release %s\n' "$version" "$tag" > "$notes_file"
fi
payload_file="$(mktemp)"
jq -n \
--arg tag "$tag" \
--arg name "$tag" \
--arg target "main" \
--rawfile body "$notes_file" \
'{tag_name: $tag, target_commitish: $target, name: $name, body: $body, draft: false, prerelease: false}' > "$payload_file"
api_base="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
status="$(curl -sS -o /tmp/release_lookup.json -w '%{http_code}' \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H 'accept: application/json' \
"${api_base}/releases/tags/${tag}" || true)"
if [[ "$status" == "200" ]]; then
release_id="$(jq -r '.id' /tmp/release_lookup.json)"
curl -fsSL -X PATCH \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H 'accept: application/json' \
-H 'content-type: application/json' \
--data @"$payload_file" \
"${api_base}/releases/${release_id}" >/dev/null
echo "Updated release ${tag}."
else
curl -fsSL -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H 'accept: application/json' \
-H 'content-type: application/json' \
--data @"$payload_file" \
"${api_base}/releases" >/dev/null
echo "Created release ${tag}."
fi