RPyC Release Process¶
A walkthrough of doing a RPyC Release.
- Ensure a clean and current build environment (i.e.,
git pull; git status
) - Describe commit history within
CHANGELOG.rst
(see Generate Entry) - Update
release_date
inrpyc/version.py
and bump version (Semantic Versioning and Versioning using Hatch) - Verify changes and run
export ver=$(python -c 'import rpyc; print(rpyc.__version__)')
,git add .
, andgit push
. - Create an Annotated tag:
git tag -a ${ver} -m "Updated CHANGELOG.rst and version for release ${ver}"
- Publish release tag:
git push origin ${ver}
- Install hatch:
pyenv exec pip install hatch
- Clean up any old build artifacts:
git clean -Xf -- dist/
- Create a wheel package:
pyenv exec hatch -v build
- Upload the wheel package:
pyenv exec hatch -v publish --user=__token__ --auth=${pypi_token} ; history -c && history -w
- Create new release such that the notes are from CHANGELOG.rst entry (
%s/`#/#/g
and%s/`_//g
) - Make sure to add the wheel as an attachment to the release and you are done!
Generate CHANGELOG.rst Entry¶
To create an initial entry draft, run some shell commands.
owner="tomerfiliba-org"
repo="rpyc"
#url="https://github.com/${owner}/${repo}"
revisions="$(git rev-list $(hatch version)..HEAD | sed -z 's/\(.*\)\n/\1/;s/\n/|/g')"
numbers=( $(git log $(hatch version)..HEAD --no-merges --oneline | sed -nE 's/^.*#([0-9]+).*/\1/p' | sort -nu) )
issue_numbers="$(echo "${numbers[@]}" | sed 's/ /|/g')"
#
api_filter() {
jq -rc ".[] | select( .${1} | . != null) | select(.${1} | tostring | test(\"${2}\"))" "${3}"
}
url="https://api.github.com/repos/${owner}/${repo}"
params="state=closed&accept=application/vnd.github+json"
tmp_issues="/tmp/issues.json"
tmp_pulls="/tmp/pulls.json"
curl "${url}/issues?${params}" > "${tmp_issues}"
curl "${url}/pulls?${params}" > "${tmp_pulls}"
# Pulls
gh_numbers=( )
bullets=( )
url_refs=( )
while IFS= read -r pull; do
title="$(echo "${pull}" | jq -r .title)"
number="$(echo "${pull}" | jq -r .number)"
pull_url="$(echo "${pull}" | jq -r .html_url)"
# Add GH number
gh_numbers+=( "${number}" )
# Add bullet
bullets+=( "- \`#${number}\`_ ${title}" )
# Add url ref
url_ref=".. _#${number}: ${pull_url}"
url_refs+=( "${url_ref}" )
done <<< "$(api_filter "merge_commit_sha" "${revisions}" "${tmp_pulls}")"
# Issues
while IFS= read -r issue; do
title="$(echo "${issue}" | jq -r .title)"
number="$(echo "${issue}" | jq -r .number)"
issue_url="$(echo "${issue}" | jq -r .html_url)"
# Add bullet
bullets+=( "- \`#${number}\`_ ${title}" )
# Add url ref
url_ref=".. _#${number}: ${issue_url}"
url_refs+=( "${url_ref}" )
done <<< "$(api_filter "number" "${issue_numbers}" "${tmp_issues}")"
# Header
printf '5.X.Y\n=====\n'
printf 'Date: %s\n\n' "$(date --rfc-3339=date)"
for bullet in "${bullets[@]}"; do
printf '%s\n' "${bullet}"
done
printf '\n'
for ref in "${url_refs[@]}"; do
printf '%s\n' "${ref}"
done
Once insert this entry at the top of CHANGELOG.rst, review what it looks like with instant-rst.
instantRst -b chromium -p 8612 -f "CHANGELOG.rst"