Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Will somebody *please* tell me what is going on?

Will somebody *please* tell me what is going on?

Software rarely stands still (unless it's TeX). Things are added, things are removed, things break and are then hopefully fixed. Managing this, from both the developer and user perspective, can be tough. In this talk we examine and compare some of the tools that one can use to make this process easier, such as 'debtcollector', 'reno' and 'towncrier', and contrast these with alternatives used in other projects. This talk would mainly be of interest to developers of open source libraries, though the same tooling can be used for any Python library or application that wishes to maintain stable interfaces and/or document changes in their product.

This was presented at PyCon Limerick 2019.

Stephen Finucane

March 23, 2019
Tweet

More Decks by Stephen Finucane

Other Decks in Technology

Transcript

  1. WILL SOMEBODY PLEASE TELL ME WHAT IS GOING ON? Stephen

    Finucane (@stephenfin) PyCon Limerick 2019 Eri , t e (ve c se ) gi f
  2. AGENDA WHAT WILL WE LOOK AT? Versioning 101 Use the

    Packaging, Luke Documenting Your Changes Deprecations and Removals Wrap Up
  3. Formerly of , now at Working on since ~2015 Contributor

    to too many Python projects WHO IS STEPHENFIN?
  4. SEMANTIC (a.k.a. SemVer) CALENDAR (a.k.a. CalVer) 18 . 02 .

    1 Major Minor Patch 2 . 1 . 1 Month Micro Very common. Used by a *lot* of packages Less common. Most likely seen in Ubuntu, DPDK Year
  5. $ git tag -a 1.0.0 -m 'Version 1.0.0' $ python

    setup.py sdist $ twine upload dist/*
  6. TOWNCRIER $ towncrier --draft Loading template... Finding news fragments... Rendering

    news fragments... Draft only -- nothing has been written. What is seen below is what would be written. v1.0.0 (2019-01-01) ------------------- Features ^^^^^^^^ - Add a new feature, ``foo``, to bar.
  7. RENO $ reno new foo Created new notes file in

    releasenotes/notes/foo-de3795c.yaml
  8. RENO $ reno report --version 1.0.0 --no-show-source ============= Release Notes

    ============= .. _Release Notes_1.0.0: 1.0.0 ===== .. _Release Notes_1.0.0_New Features: New Features ------------ - Add a new feature, ``foo``, to bar.
  9. DEPRECATION $ python >>> import foobar >>> foobar.foo() __main__:1: DeprecatedWarning:

    foo is deprecated as of 1.0 and will be removed in 2.0. Use the bar function instead 1
  10. DEBTCOLLECTOR $ python >>> import foobar >>> foobar.foo() __main__:1: DeprecationWarning:

    Using function/method 'baz()' is deprecated in version '1.0' and will be removed in version '2.0': Use the bar function instead 1
  11. DEBTCOLLECTOR from debtcollector import moves def bar(): return 1 foo

    = moves.moved_function( bar, 'foo', __name__, version='1.0', removal_version='2.0')
  12. DEBTCOLLECTOR $ python >>> import foobar >>> foobar.foo() __main__:1: DeprecationWarning:

    Function 'foobar.foo()' has moved to 'foobar.bar()' in version '1.0' and will be removed in version '2.0' 1
  13. WRAP UP WHAT DID WE LOOK AT? Versioning 101 Use

    the Packaging, Luke Documenting Your Changes Deprecations and Removals