compdb¶
Release procedure¶
Clone latest Github release to a new compdb-dist
directory:
git clone git@github.com:Sarcasm/compdb.git compdb-dist
cd compdb-dist
Increment version¶
Increment version in compdb/__about__.py
.
Run tests¶
Run test suite:
tox --skip-missing-interpreters
README validation for PyPI:
python setup.py --long-description | rst2html.py > /tmp/output.html
chromium /tmp/output.html
Install locally for following tests:
rm -rf .venv-release
virtualenv .venv-release
source .venv-release/bin/activate
pip install -r requirements.txt
Regression tests:
source .venv-release/bin/activate
pushd tests/regression/headerdb
make clean
make all
popd
Packaging tests (requires Docker):
./tests/integration/docker/ubuntu-trusty.sh \
tests/integration/packaging-trusty.sh
Contrib scripts:
source .venv-release/bin/activate
./contrib/zsh/check-all-helps
Make git tag¶
COMPDB_VERSION=$(python compdb version --short)
echo "tagging $COMPDB_VERSION"
git tag -a v$COMPDB_VERSION -m "compdb $COMPDB_VERSION"
git push --follow-tags
Notes:
Use annotated tags, lightweight tags aren’t appropriate for releases, they are for local development. Annotated tags can have author, date and message. They are shown by default when using
git describe
, that is not the case for lightweight tags. However, regarding the message, it seems a bit useful, at least the way it is used by many projects in the wild: “version X.Y.Z”, “project X.Y.Z”, “X.Y.Z”, … It could make sense to use an empty message-m ''
. Alternatively they could be use to contain the release notes but there are no official format (e.g. Markdown), so this may better be in the project’s documentation. On Github, release notes, have to be written manually anyway:Using
--follow-tags
will only push annotated tags, that are reacheable (an ancestor) from the pushed commits.Potential improvement, sign releases:
Make pretty release note on Github release page:
Publish on Pypi¶
One time configuration, steps to do again only if the release environment changes.
Create a ~/.pypirc
with this content:
[distutils]
index-servers=pypi
[pypi]
username = Sarcasm
EOF
Make sure to remove any resident packages:
rm -rf dist/*
Build source distribution and universal wheel:
source .venv-release/bin/activate
pip install wheel
python setup.py sdist bdist_wheel
Upload packages:
source .venv-release/bin/activate
pip install twine
twine upload dist/*