{"id":13937329,"url":"https://github.com/twisted/newsbuilder","last_synced_at":"2025-06-10T13:08:51.828Z","repository":{"id":17710940,"uuid":"20524674","full_name":"twisted/newsbuilder","owner":"twisted","description":"Automatically generate and manage a NEWS file from snippets stored in per-ticket text files.","archived":false,"fork":false,"pushed_at":"2018-11-01T22:06:59.000Z","size":102,"stargazers_count":5,"open_issues_count":13,"forks_count":6,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-06-10T00:57:01.951Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/twisted.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-06-05T12:48:30.000Z","updated_at":"2020-04-07T10:50:03.000Z","dependencies_parsed_at":"2022-09-07T13:22:11.637Z","dependency_job_id":null,"html_url":"https://github.com/twisted/newsbuilder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twisted%2Fnewsbuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twisted%2Fnewsbuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twisted%2Fnewsbuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twisted%2Fnewsbuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/twisted","download_url":"https://codeload.github.com/twisted/newsbuilder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twisted%2Fnewsbuilder/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259081011,"owners_count":22802404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-07T23:03:30.561Z","updated_at":"2025-06-10T13:08:51.799Z","avatar_url":"https://github.com/twisted.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":".. image:: https://travis-ci.org/twisted/newsbuilder.svg\n :target: https://travis-ci.org/twisted/newsbuilder\n :alt: 'Travis-CI build status'\n\n.. image:: https://coveralls.io/repos/twisted/newsbuilder/badge.png\n :target: https://coveralls.io/r/twisted/newsbuilder\n :alt: 'Coveralls code coverage report'\n\n.. image:: https://badge.waffle.io/twisted/newsbuilder.png?label=ready\u0026title=Ready\n :target: https://waffle.io/twisted/newsbuilder\n :alt: 'Stories in Ready'\n\nNewsbuilder\n===========\n\nNewsbuilder lets you avoid merge conflicts in your project's NEWS file, by turning a folder full of ticket news snippets like this:\n\n* *123.bugfix*: Fixed a thing.\n* *124.feature*: Added a feature.\n\nInto something like this:\n\nFeatures:\n    Added a feature (#124).\nBugfixes:\n    Fixed a thing (#123).\n\n\nA NEWS file is a text file stored in the top level of your project. It contains descriptions of the bugs, enhancements and miscellaneous changes made in each release.\n\nIf authors are allowed to modify the NEWS file directly, though, you will soon encounter spurious conflicts. To avoid this, Newsbuilder uses a scheme involving separate files for each change.\n\nBranch authors write high-level descriptions of their changes into a specially named text file and add it to a `topfiles` directory in the package. Newsbuilder will then aggregate these text files, add the content to the project level NEWS file and delete the original text files. The changes to the project NEWS file can then be reviewed, committed and distributed at each release.\n\nAn entry must be a file named \u003cticket number\u003e.\u003cchange type\u003e (eg. 1234.bugfix). You should replace \u003cticket number\u003e with the ticket number which is being resolved by the change (if multiple tickets are resolved, multiple files with the same contents should be added). The \u003cchange type\u003e extension is replaced by one of the following literal strings:\n\nfeature\n    Tickets which are adding a new feature.\n\nbugfix\n    Tickets which are fixing a bug.\n\ndoc\n    Tickets primarily about fixing or improving documentation (any variety).\n\nremoval\n    Tickets which are deprecating something or removing something which was already deprecated.\n\nmisc\n    Tickets which are very minor and not worth summarizing outside of the svn changelog. These should be empty (their contents will be ignored).\n\n\nTo get a sense of how the text in these files is presented to users, take a look at `an example of a real overall news file`_ and `an example of a subproject news file`_. The goal when writing the content for one of these files is to produce text that will fit well into the overall news files.\n\nThe entry should contain a high-level description of the change suitable for end users. Generally, the grammatical subject of the sentence should be a Python object, and the verb should be something that the object does, prefixed with \"now\".\n\nHere are some examples:\n\nFeatures:\n\n    twisted.protocols.amp now raises InvalidSignature when bad arguments are passed to Command.makeArguments\n\n    The new module twisted.internet.endpoints provides an interface for specifying address families separately from socket types.\n\n\nDeprecations:\n\n    twisted.trial.util.findObject is now deprecated.\n\n    twisted.conch.insults.colors is now deprecated in favor of twisted.conch.insults.helper.\n\n    twisted.runner.procmon.ProcessMonitor's active, consistency, and consistencyDelay attributes are now deprecated.\n\nRemovals:\n\n    twisted.internet.interfaces.IReactorTime.cancelCallLater, deprecated since Twisted 2.5, has been removed.\n\n    Support for versions of pyOpenSSL older than 0.10 has been removed.\n\nYou don't need to worry about newlines in the file; the contents will be rewrapped when added to the NEWS files.\n\nSee `enforcenews.py`_ for the svn pre-commit hook which enforces this policy.\n\n\nReporting Bugs\n~~~~~~~~~~~~~~\nBugs and feature requests should be filed at the project's `Github page`_.\n\n\nRunning Tests\n~~~~~~~~~~~~~\n``newsbuilder`` unit tests are found in the ``newsbuilder/test/`` directory and are designed to be run using `trial`_.\n``trial`` will discover the tests automatically, so all you have to do is:\n\n.. code-block:: console\n\n    $ cd ~/myprojects/newsbuilder\n    $ pip install --editable .\n    $ trial newsbuilder\n    ...\n    Ran 25 tests in 4.338s\n\n    PASSED (successes=25)\n\nThis runs the tests with the default Python interpreter.\n\nYou can also verify that the tests pass on other supported Python interpreters.\nFor this we use `tox`_, which will automatically create a `virtualenv`_ for each supported Python version and run the tests.\nRun the ``tox`` command from the project root.\n\nYou may not have all the required Python versions installed, in which case you will see one or more ``InterpreterNotFound`` errors.\n\n``tox`` will also print a short `coverage`_ report and a `pyflakes`_ report.\n\n.. _Github page: https://github.com/twisted/newsbuilder\n.. _an example of a real overall news file: https://twistedmatrix.com/trac/browser/trunk/NEWS\n.. _an example of a subproject news file: https://twistedmatrix.com/trac/browser/trunk/twisted/web/topfiles/NEWS\n.. _enforcenews.py: http://bazaar.launchpad.net/~exarkun/twisted-trac-integration/trunk/annotate/head%3A/svn-hooks/enforcenews.py\n.. _The original documentation for Twisted's newsbuilder: https://twistedmatrix.com/trac/wiki/ReviewProcess#Newsfiles\n.. _trial: https://twistedmatrix.com/documents/current/core/howto/trial.html\n.. _tox: https://pypi.python.org/pypi/tox\n.. _virtualenv: https://pypi.python.org/pypi/virtualenv\n.. _coverage: https://pypi.python.org/pypi/coverage\n.. _pyflakes: https://pypi.python.org/pypi/pyflakes\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwisted%2Fnewsbuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwisted%2Fnewsbuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwisted%2Fnewsbuilder/lists"}