set -eEuo pipefail
function bump_changelog_version() {
local package_dir="$1"
local version="$2"
local cargo_manifest="${package_dir}/Cargo.toml"
local current_version="$(sed -nE 's/^version ?= ?"([^"]+)"$/\1/ p' "$cargo_manifest" | head -n 1)"
local changelog_file="${package_dir}/CHANGELOG.md"
local change_chunk_file="$(mktemp)"
local readme_file="${package_dir}/README.md"
echo "${package_dir}/CHANGELOG.md | $current_version -> $version"
cat "$changelog_file" |
sed '1,/Unreleased/ d' |
sed "/$current_version/ q" |
sed '$d' \
>"$change_chunk_file"
if [[ "$(wc -w "$change_chunk_file" | awk '{ print $1 }')" == "0" ]]; then
echo >"$change_chunk_file"
echo "- No significant changes since \`$current_version\`." >>"$change_chunk_file"
echo >>"$change_chunk_file"
fi
(
sed '/Unreleased/ q' "$changelog_file" echo echo "## $version" cat "$change_chunk_file" sed "/$current_version/ q" "$changelog_file" | tail -n 1 sed "1,/$current_version/ d" "$changelog_file" ) >"$changelog_file.bak"
mv "$changelog_file.bak" "$changelog_file"
if [ -f "$readme_file" ]; then
sed -i.bak -E "s#([=/])$current_version([/)])#\1$version\2#g" "$readme_file"
rm -f "${readme_file}.bak"
fi
}
RELEASE_PLZ_PR_JSON="$1"
specs="$(echo "$RELEASE_PLZ_PR_JSON" | jq -r '.releases[] | "\(.package_name):\(.version)"')"
for spec in $specs; do
name="$(echo "$spec" | cut -d: -f1)"
version="$(echo "$spec" | cut -d: -f2)"
bump_changelog_version "." "$version"
done
PR_NUMBER="$(echo "$RELEASE_PLZ_PR_JSON" | jq -r '.number')"
if [[ -n "$PR_NUMBER" ]]; then
gh pr checkout "$PR_NUMBER"
git add --all
git commit -m "docs: update changelog versions"
git push
fi