Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip the checks if the news file was changed #337

Merged
merged 21 commits into from
Feb 13, 2022

Conversation

hexagonrecursion
Copy link
Contributor

@hexagonrecursion hexagonrecursion commented Apr 6, 2021

Closes #152
Closes #246
Closes #154

I wanted to use towncrier check as part of pip CI, but this should be fixed first.
This PR makes towncrier check succeed for a branch that changes the news file even if it does not add news fragments.

@codecov
Copy link

codecov bot commented Apr 6, 2021

Codecov Report

Merging #337 (90005e1) into master (e0d72c4) will increase coverage by 0.03%.
The diff coverage is 98.41%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #337      +/-   ##
==========================================
+ Coverage   96.81%   96.85%   +0.03%     
==========================================
  Files          20       20              
  Lines        1194     1241      +47     
  Branches      118      120       +2     
==========================================
+ Hits         1156     1202      +46     
  Misses         20       20              
- Partials       18       19       +1     
Impacted Files Coverage Δ
src/towncrier/test/test_check.py 99.21% <98.27%> (-0.79%) ⬇️
src/towncrier/check.py 94.44% <100.00%> (+0.44%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e0d72c4...90005e1. Read the comment docs.

@hexagonrecursion
Copy link
Contributor Author

Why are you testing on python2.7 if the minimum version you officially support is python3.5?
https://github.com/twisted/towncrier#quick-start

towncrier, as a command line tool, works on Python 3.5+ only.

@altendky
Copy link
Member

altendky commented Apr 6, 2021

Why are you testing on python2.7 if the minimum version you officially support is python3.5?
twisted/towncrier#quick-start

towncrier, as a command line tool, works on Python 3.5+ only.

Looks like the readme got updated at some point without updating the rest. It still works on 2.7 and I was planning on keeping that around until it becomes problematic. Correction submitted as #338. Not sure if there should be a 21.3.0post1 to address that on the PyPI page.

@altendky
Copy link
Member

altendky commented Apr 6, 2021

I think this PR relates to #309. I haven't been thinking about that for awhile. :[

@altendky
Copy link
Member

altendky commented Apr 6, 2021

FWIW, I do like pathlib. I'm not going to drop 2.7 just to get it, but there is https://pypi.org/project/pathlib2/ that I might be game for. Probably simplest though to just use os.path for now though. Though until we figure out #309, I suspect this PR might get hung up. Though I hate to have that be the case.

@adiroiban
Copy link
Member

Thanks Andrey for the nice PR.

I like the idea of using the NEWS file update as a hint that you are on a release branch.
I don't see any issues with that.


I would go even further and fail in there are news fragment and NEWS file is updated at the same time.... but this can be a separate PR.


I think that this also fixes #154

Yes. It's related to #309 .

Copy link
Member

@adiroiban adiroiban left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR and the documentation.

I left an initial set of comments.

I would be awesome to all see check fails if there are both NEWS changes and newsgragment files present... but not required for this PR.

I am waiting for @altendky to see how he thinks about this PR

src/towncrier/test/test_check.py Show resolved Hide resolved
Comment on lines 180 to 183
# Arrange
write("towncrier.toml", "[tool.towncrier]")
write("newsfragments/.gitignore", "!.gitignore")
initial_commit()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like duplicate code between tests.
Why not reuse the existing create_project

Suggested change
# Arrange
write("towncrier.toml", "[tool.towncrier]")
write("newsfragments/.gitignore", "!.gitignore")
initial_commit()
create_project('towncrier.toml')

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dislike create_project().

  • It encapsulates a poorly scoped amount of code. The semantics are unclear. It does too many unrelated things. Changing it like you did in Make check subcommand detect if only configured news file has changed #296 affects every test that uses it which is risky.
  • It is inflexible: you either use it or you don't. I prefer my approach: a set of (mostly) orthogonal building blocks that every test can use to arrange things precisely the way that particular test needs to.
  • It is a little to implicit for my taste. I actually like that every file the test creates is explicitly named in the test itself.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changing it like you did in #296 affects every test that uses it which is risky.

Just to be clear: I'm not criticizing you, I'm criticizing a specific decision you made because I think I know how to solve that specific problem better.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hexagonrecursion don't worry :) If you think that some code is not ok. please say it loud.
I will not take it as an offense... I know that I am capable of writing bad code :)

Your comments are valid.

Regarding the risky change. As long as the tests are not failing, I think that any change should be done if we thing that it improves the readability and usability.
We should be confident that the test suite is solid and don't code with fear :)

If you think that create_project is bad pattern, it's best to add a docstring comment to it and let other developers know what is the current best practice.

But I think that all test helpers should have short docstrings describing when and why they should be used :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know that I am capable of writing bad code

Same here. I also prefer to err on the side of not offending anybody.

If you think that create_project is bad pattern, it's best to add a docstring comment to it and let other developers know what is the current best practice.

If you are onboard with my argument I'll submit a followup PR to refactor the rest of the file and delete create_project()

But I think that all test helpers should have short docstrings describing when and why they should be used :)

👍

src/towncrier/test/test_check.py Outdated Show resolved Hide resolved
src/towncrier/test/test_check.py Outdated Show resolved Hide resolved
src/towncrier/test/test_check.py Outdated Show resolved Hide resolved
README.rst Outdated Show resolved Hide resolved
README.rst Outdated Show resolved Hide resolved
hexagonrecursion and others added 4 commits April 7, 2021 16:12
Co-authored-by: Adi Roiban <adiroiban@gmail.com>
Co-authored-by: Adi Roiban <adiroiban@gmail.com>
with runner.isolated_filesystem():
# Arrange
write("towncrier.toml", "[tool.towncrier]")
write("newsfragments/.gitignore", "!.gitignore")
Copy link
Member

@adiroiban adiroiban Apr 7, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this ignore here?
I guess that this is a replacement for write("newsfragments/123.feature", "Foo the bar")
For me, writing an explicit news fragment is easier to read and understand what is going on here.

@adiroiban
Copy link
Member

A brief summary of an IRC chat with Kyle.

My preference is to have a separate towncrier check-releasethat is explicitly triggered for a release branch.
It will check that NEWS is updated and no fragments are left in the branch.
In this way, the normal towncrier check will fail if you are not on a release branch and you accidentally modify the news file without create a news fragment.

I understand that having a modified NEWS file means 99.99% that you are on a release branch and this is why I think that this behavior is also.

At the same time, by just using check you get a simple solution that just works and a modified NEWS file is a good heuristic for a release branch (99.99%).

Later we can add towncrier check --strict if required.

I am waiting for @altendky to weight his opinion on this :)

@hexagonrecursion
Copy link
Contributor Author

codecov complains that a line in the write() helper is not covered. Should I write a test for the helper?

@adiroiban
Copy link
Member

I would say no... and just add a pragma coverage comment, and enable them in .coveragerc

@altendky
Copy link
Member

@hexagonrecursion, my apologies for not getting back to you on this sooner. I am with Adi on this one in terms of preferring an explicit selection of the mode of the check. That said, I think we can start with the implicit command and add the explicit later whenever those of us that want it find the time to do so. We already have towncrier check. In a comprehensive solution we could have subcommands towncrier check auto, release, and non-release (or whatever names, I don't mean to suggest these are the best names).

I am not convinced that 'the newsfile has been edited' is a great heuristic. There have been a number of times where I have edited a newsfile to fix it. If we can make this a provisional feature then I'll be less picky, but I'm not sure that is plausible as the default behavior for an existing command. That leads to either it being configurable or a dedicated command. It doesn't seem like it should be too problematic to introduce this as a new feature while leaving the existing behavior intact.

My gut, at the moment, says to add two subcommands (existing behavior as default, other subcommand being the new behavior). We can add the explicit release check command separately, or here, no real matter. Then, when another heuristic is developed, we can add a configuration setting for which one to use with news-file-modified being the default. I think that this will be a small amount of added work, will retain backwards compatibility, and will enable future expansion. Does anyone agree?

To avoid dumping more work on you, @hexagonrecursion, I'll volunteer to rework the commands either before or after merging this, if you prefer.

I hope this comes across as appreciation for your work and an effort to figure out how to make sure we put it to the best use for all. When I released 21.3.0 it was actually missing one of... I think two (?) things that I had set out to include initially. This was one of them. So, I'm looking forward to getting this figured out. Thank you. :]

@adiroiban
Copy link
Member

doing a release for towncrier itself using tox -e check-newsfragment is a pain.

so, even if this doesn't solve all the problems, I think that it should be updated to pass all tests and then merged.

@adiroiban
Copy link
Member

@hexagonrecursion sorry for the whole delay.
let me know if you still want to drive this PR.

Otherwise I can try to take over and merge it.

Thanks!

@hexagonrecursion
Copy link
Contributor Author

Otherwise I can try to take over and merge it.

Go ahead.

@adiroiban
Copy link
Member

Hi @hexagonrecursion

The test on your branch were failing so I had to do some debugging and see why.

During the debugging session I did a bit of refactoring to reduce code duplication and help me understand what is going on there.

Please check the latest 2 commits.

If you are happy with them, we can merge this.

Thank you all for the work on this!

@adiroiban adiroiban mentioned this pull request Feb 13, 2022
3 tasks
@hexagonrecursion
Copy link
Contributor Author

Regarding the risky change. As long as the tests are not failing, I think that any change should be done if we thing that it improves the readability and usability.
We should be confident that the test suite is solid and don't code with fear :)

The tests are our safety net when we refactor code, but we have no such luxury when we refactor the tests themselves. Changing create_project() might lead to tests no longer testing what they intended to test and possibly passing when they should fail.

We should refactor tests, but the refactoring should usually be limited to one of two types:

  1. True refactoring - the implementation is changed, but the observable behavior stays the same
  2. Refactoring of a specific test that makes sure to preserve intention of the test

A "refactoring" that changes the setup used in many tests requires an audit of every affected test to make sure it still tests the behavior it intended to test

runner = CliRunner()

with runner.isolated_filesystem():
# Arrange
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You deleted the "Arrange" comment, but left "Act" and "Assert". It would be more consistent to either have all 3 or none of them.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will add Arrange back. Thanks!


call(["git", "checkout", "-b", "next-resease"])
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have refactored 4 lines to 2 lines. IMHO you have reduced the clarity of the test in the process:

  1. To understand it I now have to reference create_project()
  2. The reader also has to figure out which parts of create_project() are relevant to a given test and which parts are not and why

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also: create_project() suffers from a lack of orthogonality - it glues together 3 loosely related pieces of setup into a very specific shape:

  • The creation of 3 files
  • A commit
  • A switch to a different branch

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The intention is to try to reuse the create_project so that the tests will use the same same set of conventions when managing the news files.

So, to increase consistency.

I am not happy with create_project, but the idea is that when you work on these tests, you understand what create_project does once, and then you should have a good idea of what to expect in each test.

write("foo/newsfragments/456.feature", "Foo the bar")
commit("A feature in the second release.")
call(["git", "checkout", "main"])
call(["git", "merge", "new-feature-branch", "-m", "Sync release in main branch."])
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Sync release in main branch."

should probable say "Merge new-feature-branch" or "Merge: Foo the bar" because we are merging a feature branch rather than a release branch

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I will update.

@hexagonrecursion
Copy link
Contributor Author

hexagonrecursion commented Feb 13, 2022

Fix the test.

There is nothing in the commit message explaining (I) what was broken (II) how did your change fix it. Also: the refactoring should have been a separate commit before or after the fix to make it more obvious which changes are a part of the fix

@adiroiban
Copy link
Member

adiroiban commented Feb 13, 2022

The tests are our safety net when we refactor code, but we have no such luxury when we refactor the tests themselves.

I think that we should take into consideration that this is a hobby project,
for which people are contributing in their free time.

Also, we are talking here about towncrier which is a tool to combine a set of text files into a single one.
It's also a tool that is used only by the developers and not triggered by end users.
Is also not a tool distributed to end users.
I don't think that is OK to apply the same set of development requirements for towncrier as a software that will drive a robot on Mars.

I think that we are OK to go with a more relaxed approach.

I am not saying that we should ignore all the best practices :)

There is nothing in the commit message explaining (I) what was broken (II) how did your change fix it. Also: the refactoring should have been a separate commit before or after the fix to make it more obvious which changes are a part of the fix

True. I will try to separate the changes for the next PR and find better description.
For work I merge with squash, so I don't put much effort into commit messages.

But I think that the diff is not that big... is not idea, but not that bad :)

@adiroiban
Copy link
Member

Hi @hexagonrecursion Many thanks for the review and sorry for the mess.

If you think that the last refactoring is that bad, I am happy to have it reverted and have the tests fixed in another way.

Cheers

@hexagonrecursion
Copy link
Contributor Author

It could better, but it is OK. I am not against merging it.

@adiroiban
Copy link
Member

Many thanks for the excellent review and your support for improving the quality of the project.

I think that we can at any time have a new PR to improve the current testing... but time is short and I think that for towncrier "done is better than perfect".

I did the last release of towncrier, and without this feature, the release process was a bit of a PITA :)

Happy to see this merge and hope it will improve the next release... and I plan to release soon :)

@adiroiban adiroiban merged commit a0a34d3 into twisted:master Feb 13, 2022
@hexagonrecursion hexagonrecursion deleted the check-release branch February 14, 2022 06:52
bors bot added a commit to microsoft/Qcodes that referenced this pull request Sep 6, 2022
4559: Update towncrier requirement from ~=21.9.0 to ~=22.8.0 r=jenshnielsen a=dependabot[bot]

Updates the requirements on [towncrier](https://github.com/hawkowl/towncrier) to permit the latest version.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/hawkowl/towncrier/releases">towncrier's releases</a>.</em></p>
<blockquote>
<h2>Towncrier 22.8.0</h2>
<h1>towncrier 22.8.0 (2022-08-29)</h1>
<p>No significant changes since the previous release candidate.</p>
<h1>towncrier 22.8.0.rc1 (2022-08-28)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Make the check subcommand succeed for branches that change the news file</p>
<p>This should enable the <code>check</code> subcommand to be used as a CI lint step and
not fail when a pull request only modifies the configured news file (i.e. when
the news file is being assembled for the next release). (<code>[#337](twisted/towncrier#337) &lt;https://github.com/hawkowl/towncrier/issues/337&gt;</code>_)</p>
</li>
<li>
<p>Added support to tables in toml settings, which provides a more intuitive
way to configure custom types. (<code>[#369](twisted/towncrier#369) &lt;https://github.com/hawkowl/towncrier/issues/369&gt;</code>_)</p>
</li>
<li>
<p>The <code>towncrier create</code> command line now has a new <code>-m TEXT</code> argument that is used to define the content of the newly created fragment. (<code>[#374](twisted/towncrier#374) &lt;https://github.com/hawkowl/towncrier/issues/374&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>
<p>The extra newline between the title and rendered content when using <code>--draft</code> is no longer inserted. (<code>[#105](twisted/towncrier#105) &lt;https://github.com/hawkowl/towncrier/issues/105&gt;</code>_)</p>
</li>
<li>
<p>The detection of duplicate release notes was fixed and recording changes of same version is no longer triggered.</p>
<p>Support for having the release notes for each version in a separate file is working again. This is a regression introduced in VERSION 19.9.0rc1. (<code>[#391](twisted/towncrier#391) &lt;https://github.com/hawkowl/towncrier/issues/391&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>Improve <code>CONTRIBUTING.rst</code> and add PR template. (<code>[#342](twisted/towncrier#342) &lt;https://github.com/hawkowl/towncrier/issues/342&gt;</code>_)</li>
<li>Move docs too the main branch and document custom fragment types. (<code>[#367](twisted/towncrier#367) &lt;https://github.com/hawkowl/towncrier/issues/367&gt;</code>_)</li>
<li>The CLI help messages were updated to contain more information. (<code>[#384](twisted/towncrier#384) &lt;https://github.com/hawkowl/towncrier/issues/384&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Support for all Python versions older than 3.7 has been dropped. (<code>[#378](twisted/towncrier#378) &lt;https://github.com/hawkowl/towncrier/issues/378&gt;</code>_)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/twisted/towncrier/blob/trunk/NEWS.rst">towncrier's changelog</a>.</em></p>
<blockquote>
<h1>towncrier 22.8.0 (2022-08-29)</h1>
<p>No significant changes since the previous release candidate.</p>
<h1>towncrier 22.8.0.rc1 (2022-08-28)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Make the check subcommand succeed for branches that change the news file</p>
<p>This should enable the <code>check</code> subcommand to be used as a CI lint step and
not fail when a pull request only modifies the configured news file (i.e. when
the news file is being assembled for the next release). (<code>[#337](twisted/towncrier#337) &lt;https://github.com/hawkowl/towncrier/issues/337&gt;</code>_)</p>
</li>
<li>
<p>Added support to tables in toml settings, which provides a more intuitive
way to configure custom types. (<code>[#369](twisted/towncrier#369) &lt;https://github.com/hawkowl/towncrier/issues/369&gt;</code>_)</p>
</li>
<li>
<p>The <code>towncrier create</code> command line now has a new <code>-m TEXT</code> argument that is used to define the content of the newly created fragment. (<code>[#374](twisted/towncrier#374) &lt;https://github.com/hawkowl/towncrier/issues/374&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>
<p>The extra newline between the title and rendered content when using <code>--draft</code> is no longer inserted. (<code>[#105](twisted/towncrier#105) &lt;https://github.com/hawkowl/towncrier/issues/105&gt;</code>_)</p>
</li>
<li>
<p>The detection of duplicate release notes was fixed and recording changes of same version is no longer triggered.</p>
<p>Support for having the release notes for each version in a separate file is working again. This is a regression introduced in VERSION 19.9.0rc1. (<code>[#391](twisted/towncrier#391) &lt;https://github.com/hawkowl/towncrier/issues/391&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>Improve <code>CONTRIBUTING.rst</code> and add PR template. (<code>[#342](twisted/towncrier#342) &lt;https://github.com/hawkowl/towncrier/issues/342&gt;</code>_)</li>
<li>Move docs too the main branch and document custom fragment types. (<code>[#367](twisted/towncrier#367) &lt;https://github.com/hawkowl/towncrier/issues/367&gt;</code>_)</li>
<li>The CLI help messages were updated to contain more information. (<code>[#384](twisted/towncrier#384) &lt;https://github.com/hawkowl/towncrier/issues/384&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Support for all Python versions older than 3.7 has been dropped. (<code>[#378](twisted/towncrier#378) &lt;https://github.com/hawkowl/towncrier/issues/378&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#292](twisted/towncrier#292) &lt;https://github.com/hawkowl/towncrier/issues/292&gt;</code><em>, <code>[#330](twisted/towncrier#330) &lt;https://github.com/hawkowl/towncrier/issues/330&gt;</code></em>, <code>[#366](twisted/towncrier#366) &lt;https://github.com/hawkowl/towncrier/issues/366&gt;</code><em>, <code>[#376](twisted/towncrier#376) &lt;https://github.com/hawkowl/towncrier/issues/376&gt;</code></em>, <code>[#377](twisted/towncrier#377) &lt;https://github.com/hawkowl/towncrier/issues/377&gt;</code><em>, <code>[#380](twisted/towncrier#380) &lt;https://github.com/hawkowl/towncrier/issues/380&gt;</code></em>, <code>[#381](twisted/towncrier#381) &lt;https://github.com/hawkowl/towncrier/issues/381&gt;</code><em>, <code>[#382](twisted/towncrier#382) &lt;https://github.com/hawkowl/towncrier/issues/382&gt;</code></em>, <code>[#383](twisted/towncrier#383) &lt;https://github.com/hawkowl/towncrier/issues/383&gt;</code><em>, <code>[#393](twisted/towncrier#393) &lt;https://github.com/hawkowl/towncrier/issues/393&gt;</code></em>, <code>[#399](twisted/towncrier#399) &lt;https://github.com/hawkowl/towncrier/issues/399&gt;</code><em>, <code>[#402](twisted/towncrier#402) &lt;https://github.com/hawkowl/towncrier/issues/402&gt;</code></em></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/twisted/towncrier/commit/411f2676b18daf9ba1eb656f7dc6c726397c4a9e"><code>411f267</code></a> Update version for final release.</li>
<li><a href="https://github.com/twisted/towncrier/commit/f031dfa94e52e07b6c71e88cd5cd50e3803ad96c"><code>f031dfa</code></a> towncrier build --yes</li>
<li><a href="https://github.com/twisted/towncrier/commit/4c854f58a2074458cd66767aca9f3aaa34d842d8"><code>4c854f5</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/402">#402</a> from webknjaz/patch-2</li>
<li><a href="https://github.com/twisted/towncrier/commit/f911402b69960bee358b0c2011d685721afa9454"><code>f911402</code></a> Pin external github actions,</li>
<li><a href="https://github.com/twisted/towncrier/commit/a814202234214182855fe4a5ffb40c7f7aec2b04"><code>a814202</code></a> [pre-commit.ci] auto fixes from pre-commit.com hooks</li>
<li><a href="https://github.com/twisted/towncrier/commit/675219a6deac7c65bb94b72da55059b7077e5ec4"><code>675219a</code></a> Add a dummy change note for PR <a href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/402">#402</a></li>
<li><a href="https://github.com/twisted/towncrier/commit/b566bfb0dcdcd86fa9d349875eba15e647c06459"><code>b566bfb</code></a> Uninvent the wheel w/ <code>re-actors/alls-green</code> @ GHA</li>
<li><a href="https://github.com/twisted/towncrier/commit/5bf0a4653bb2adf52162550d436f1dc39f6e0446"><code>5bf0a46</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/396">#396</a> from twisted/292-more-ci-checks</li>
<li><a href="https://github.com/twisted/towncrier/commit/1bb62219a9e7b0d969292cae56104678b8bea151"><code>1bb6221</code></a> Merge branch 'trunk' into 292-more-ci-checks</li>
<li><a href="https://github.com/twisted/towncrier/commit/07baa2ba4b1159462dcb212395be1de91674698d"><code>07baa2b</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/395">#395</a> from twisted/384-cli-help</li>
<li>Additional commits viewable in <a href="https://github.com/hawkowl/towncrier/compare/21.9.0...22.8.0">compare view</a></li>
</ul>
</details>
<br />


You can trigger a rebase of this PR by commenting ``@dependabot` rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- ``@dependabot` rebase` will rebase this PR
- ``@dependabot` recreate` will recreate this PR, overwriting any edits that have been made to it
- ``@dependabot` merge` will merge this PR after your CI passes on it
- ``@dependabot` squash and merge` will squash and merge this PR after your CI passes on it
- ``@dependabot` cancel merge` will cancel a previously requested merge and block automerging
- ``@dependabot` reopen` will reopen this PR if it is closed
- ``@dependabot` close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- ``@dependabot` ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- ``@dependabot` ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- ``@dependabot` ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

Changes needed for this

* Invert logic for single file. 22.8.0 fixed the logic such that single_file=False is correct when you have more than one file
* Pin versions of towncrier and sphinx towncrier to reflect this (so we get the right config)


Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jens H. Nielsen <Jens.Nielsen@microsoft.com>
acabarbaye added a commit to ARMmbed/continuous-delivery-scripts that referenced this pull request Nov 30, 2022
Bumps [towncrier](https://github.com/hawkowl/towncrier) from 21.9.0 to
22.8.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/hawkowl/towncrier/releases">towncrier's
releases</a>.</em></p>
<blockquote>
<h2>Towncrier 22.8.0</h2>
<h1>towncrier 22.8.0 (2022-08-29)</h1>
<p>No significant changes since the previous release candidate.</p>
<h1>towncrier 22.8.0.rc1 (2022-08-28)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Make the check subcommand succeed for branches that change the news
file</p>
<p>This should enable the <code>check</code> subcommand to be used as a
CI lint step and
not fail when a pull request only modifies the configured news file
(i.e. when
the news file is being assembled for the next release).
(<code>[#337](twisted/towncrier#337)
&lt;https://github.com/hawkowl/towncrier/issues/337&gt;</code>_)</p>
</li>
<li>
<p>Added support to tables in toml settings, which provides a more
intuitive
way to configure custom types.
(<code>[#369](twisted/towncrier#369)
&lt;https://github.com/hawkowl/towncrier/issues/369&gt;</code>_)</p>
</li>
<li>
<p>The <code>towncrier create</code> command line now has a new <code>-m
TEXT</code> argument that is used to define the content of the newly
created fragment.
(<code>[#374](twisted/towncrier#374)
&lt;https://github.com/hawkowl/towncrier/issues/374&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>
<p>The extra newline between the title and rendered content when using
<code>--draft</code> is no longer inserted.
(<code>[#105](twisted/towncrier#105)
&lt;https://github.com/hawkowl/towncrier/issues/105&gt;</code>_)</p>
</li>
<li>
<p>The detection of duplicate release notes was fixed and recording
changes of same version is no longer triggered.</p>
<p>Support for having the release notes for each version in a separate
file is working again. This is a regression introduced in VERSION
19.9.0rc1.
(<code>[#391](twisted/towncrier#391)
&lt;https://github.com/hawkowl/towncrier/issues/391&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>Improve <code>CONTRIBUTING.rst</code> and add PR template.
(<code>[#342](twisted/towncrier#342)
&lt;https://github.com/hawkowl/towncrier/issues/342&gt;</code>_)</li>
<li>Move docs too the main branch and document custom fragment types.
(<code>[#367](twisted/towncrier#367)
&lt;https://github.com/hawkowl/towncrier/issues/367&gt;</code>_)</li>
<li>The CLI help messages were updated to contain more information.
(<code>[#384](twisted/towncrier#384)
&lt;https://github.com/hawkowl/towncrier/issues/384&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Support for all Python versions older than 3.7 has been dropped.
(<code>[#378](twisted/towncrier#378)
&lt;https://github.com/hawkowl/towncrier/issues/378&gt;</code>_)</li>
</ul>
<h2>Towncrier 22.8.0rc1</h2>
<h1>towncrier 22.8.0.rc1 (2022-08-28)</h1>
<p>Features</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/twisted/towncrier/blob/trunk/NEWS.rst">towncrier's
changelog</a>.</em></p>
<blockquote>
<h1>towncrier 22.8.0 (2022-08-29)</h1>
<p>No significant changes since the previous release candidate.</p>
<h1>towncrier 22.8.0.rc1 (2022-08-28)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Make the check subcommand succeed for branches that change the news
file</p>
<p>This should enable the <code>check</code> subcommand to be used as a
CI lint step and
not fail when a pull request only modifies the configured news file
(i.e. when
the news file is being assembled for the next release).
(<code>[#337](twisted/towncrier#337)
&lt;https://github.com/hawkowl/towncrier/issues/337&gt;</code>_)</p>
</li>
<li>
<p>Added support to tables in toml settings, which provides a more
intuitive
way to configure custom types.
(<code>[#369](twisted/towncrier#369)
&lt;https://github.com/hawkowl/towncrier/issues/369&gt;</code>_)</p>
</li>
<li>
<p>The <code>towncrier create</code> command line now has a new <code>-m
TEXT</code> argument that is used to define the content of the newly
created fragment.
(<code>[#374](twisted/towncrier#374)
&lt;https://github.com/hawkowl/towncrier/issues/374&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>
<p>The extra newline between the title and rendered content when using
<code>--draft</code> is no longer inserted.
(<code>[#105](twisted/towncrier#105)
&lt;https://github.com/hawkowl/towncrier/issues/105&gt;</code>_)</p>
</li>
<li>
<p>The detection of duplicate release notes was fixed and recording
changes of same version is no longer triggered.</p>
<p>Support for having the release notes for each version in a separate
file is working again. This is a regression introduced in VERSION
19.9.0rc1.
(<code>[#391](twisted/towncrier#391)
&lt;https://github.com/hawkowl/towncrier/issues/391&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>Improve <code>CONTRIBUTING.rst</code> and add PR template.
(<code>[#342](twisted/towncrier#342)
&lt;https://github.com/hawkowl/towncrier/issues/342&gt;</code>_)</li>
<li>Move docs too the main branch and document custom fragment types.
(<code>[#367](twisted/towncrier#367)
&lt;https://github.com/hawkowl/towncrier/issues/367&gt;</code>_)</li>
<li>The CLI help messages were updated to contain more information.
(<code>[#384](twisted/towncrier#384)
&lt;https://github.com/hawkowl/towncrier/issues/384&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Support for all Python versions older than 3.7 has been dropped.
(<code>[#378](twisted/towncrier#378)
&lt;https://github.com/hawkowl/towncrier/issues/378&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#292](twisted/towncrier#292)
&lt;https://github.com/hawkowl/towncrier/issues/292&gt;</code><em>,
<code>[#330](twisted/towncrier#330)
&lt;https://github.com/hawkowl/towncrier/issues/330&gt;</code></em>,
<code>[#366](twisted/towncrier#366)
&lt;https://github.com/hawkowl/towncrier/issues/366&gt;</code><em>,
<code>[#376](twisted/towncrier#376)
&lt;https://github.com/hawkowl/towncrier/issues/376&gt;</code></em>,
<code>[#377](twisted/towncrier#377)
&lt;https://github.com/hawkowl/towncrier/issues/377&gt;</code><em>,
<code>[#380](twisted/towncrier#380)
&lt;https://github.com/hawkowl/towncrier/issues/380&gt;</code></em>,
<code>[#381](twisted/towncrier#381)
&lt;https://github.com/hawkowl/towncrier/issues/381&gt;</code><em>,
<code>[#382](twisted/towncrier#382)
&lt;https://github.com/hawkowl/towncrier/issues/382&gt;</code></em>,
<code>[#383](twisted/towncrier#383)
&lt;https://github.com/hawkowl/towncrier/issues/383&gt;</code><em>,
<code>[#393](twisted/towncrier#393)
&lt;https://github.com/hawkowl/towncrier/issues/393&gt;</code></em>,
<code>[#399](twisted/towncrier#399)
&lt;https://github.com/hawkowl/towncrier/issues/399&gt;</code><em>,
<code>[#402](twisted/towncrier#402)
&lt;https://github.com/hawkowl/towncrier/issues/402&gt;</code></em></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/twisted/towncrier/commit/411f2676b18daf9ba1eb656f7dc6c726397c4a9e"><code>411f267</code></a>
Update version for final release.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/f031dfa94e52e07b6c71e88cd5cd50e3803ad96c"><code>f031dfa</code></a>
towncrier build --yes</li>
<li><a
href="https://github.com/twisted/towncrier/commit/4c854f58a2074458cd66767aca9f3aaa34d842d8"><code>4c854f5</code></a>
Merge pull request <a
href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/402">#402</a>
from webknjaz/patch-2</li>
<li><a
href="https://github.com/twisted/towncrier/commit/f911402b69960bee358b0c2011d685721afa9454"><code>f911402</code></a>
Pin external github actions,</li>
<li><a
href="https://github.com/twisted/towncrier/commit/a814202234214182855fe4a5ffb40c7f7aec2b04"><code>a814202</code></a>
[pre-commit.ci] auto fixes from pre-commit.com hooks</li>
<li><a
href="https://github.com/twisted/towncrier/commit/675219a6deac7c65bb94b72da55059b7077e5ec4"><code>675219a</code></a>
Add a dummy change note for PR <a
href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/402">#402</a></li>
<li><a
href="https://github.com/twisted/towncrier/commit/b566bfb0dcdcd86fa9d349875eba15e647c06459"><code>b566bfb</code></a>
Uninvent the wheel w/ <code>re-actors/alls-green</code> @ GHA</li>
<li><a
href="https://github.com/twisted/towncrier/commit/5bf0a4653bb2adf52162550d436f1dc39f6e0446"><code>5bf0a46</code></a>
Merge pull request <a
href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/396">#396</a>
from twisted/292-more-ci-checks</li>
<li><a
href="https://github.com/twisted/towncrier/commit/1bb62219a9e7b0d969292cae56104678b8bea151"><code>1bb6221</code></a>
Merge branch 'trunk' into 292-more-ci-checks</li>
<li><a
href="https://github.com/twisted/towncrier/commit/07baa2ba4b1159462dcb212395be1de91674698d"><code>07baa2b</code></a>
Merge pull request <a
href="https://github-redirect.dependabot.com/hawkowl/towncrier/issues/395">#395</a>
from twisted/384-cli-help</li>
<li>Additional commits viewable in <a
href="https://github.com/hawkowl/towncrier/compare/21.9.0...22.8.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=towncrier&package-manager=pip&previous-version=21.9.0&new-version=22.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Monty Bot <monty-bot@arm.com>
Co-authored-by: Adrien CABARBAYE <adrien.cabarbaye@arm.com>
wip-sync referenced this pull request in NetBSD/pkgsrc-wip May 5, 2023
towncrier 22.12.0 (2022-12-21)
==============================

No changes since the previous release candidate.

towncrier 22.12.0rc1 (2022-12-20)
=================================

Features
--------

- Added ``--keep`` option to the ``build`` command that allows generating a newsfile, but keeps the newsfragments in place.
  This option can not be used together with ``--yes``. (`#129 <https://github.com/hawkowl/towncrier/issues/129>`_)
- Python 3.11 is now officially supported. (`#427 <https://github.com/hawkowl/towncrier/issues/427>`_)
- You can now create fragments that are not associated with issues. Start the name of the fragment with ``+`` (e.g. ``+anything.feature``).
  The content of these orphan news fragments will be included in the release notes, at the end of the category corresponding to the file extension.

  To help quickly create a unique orphan news fragment, ``towncrier create +.feature`` will append a random string to the base name of the file, to avoid name collisions. (`#428 <https://github.com/hawkowl/towncrier/issues/428>`_)

Improved Documentation
----------------------

- Improved contribution documentation. (`#415 <https://github.com/hawkowl/towncrier/issues/415>`_)
- Correct a typo in the readme that incorrectly documented custom fragments in a format that does not work. (`#424 <https://github.com/hawkowl/towncrier/issues/424>`_)
- The documentation has been restructured and (hopefully) improved. (`#435 <https://github.com/hawkowl/towncrier/issues/435>`_)
- Added a Markdown-based how-to guide. (`#436 <https://github.com/hawkowl/towncrier/issues/436>`_)
- Defining custom fragments using a TOML array is not deprecated anymore. (`#438 <https://github.com/hawkowl/towncrier/issues/438>`_)

Deprecations and Removals
-------------------------

- Default branch for `towncrier check` is now "origin/main" instead of "origin/master".
  If "origin/main" does not exist, fallback to "origin/master" with a deprecation warning. (`#400 <https://github.com/hawkowl/towncrier/issues/400>`_)

Misc
----

- `#406 <https://github.com/hawkowl/towncrier/issues/406>`_, `#408 <https://github.com/hawkowl/towncrier/issues/408>`_, `#411 <https://github.com/hawkowl/towncrier/issues/411>`_, `#412 <https://github.com/hawkowl/towncrier/issues/412>`_, `#413 <https://github.com/hawkowl/towncrier/issues/413>`_, `#414 <https://github.com/hawkowl/towncrier/issues/414>`_, `#416 <https://github.com/hawkowl/towncrier/issues/416>`_, `#418 <https://github.com/hawkowl/towncrier/issues/418>`_, `#419 <https://github.com/hawkowl/towncrier/issues/419>`_, `#421 <https://github.com/hawkowl/towncrier/issues/421>`_, `#429 <https://github.com/hawkowl/towncrier/issues/429>`_, `#430 <https://github.com/hawkowl/towncrier/issues/430>`_, `#431 <https://github.com/hawkowl/towncrier/issues/431>`_, `#434 <https://github.com/hawkowl/towncrier/issues/434>`_, `#446 <https://github.com/hawkowl/towncrier/issues/446>`_, `#447 <https://github.com/hawkowl/towncrier/issues/447>`_

towncrier 22.8.0 (2022-08-29)
=============================

No significant changes since the previous release candidate.

towncrier 22.8.0.rc1 (2022-08-28)
=================================

Features
--------

- Make the check subcommand succeed for branches that change the news file

  This should enable the ``check`` subcommand to be used as a CI lint step and
  not fail when a pull request only modifies the configured news file (i.e. when
  the news file is being assembled for the next release). (`#337 <https://github.com/hawkowl/towncrier/issues/337>`_)
- Added support to tables in toml settings, which provides a more intuitive
  way to configure custom types. (`#369 <https://github.com/hawkowl/towncrier/issues/369>`_)
- The `towncrier create` command line now has a new `-m TEXT` argument that is used to define the content of the newly created fragment. (`#374 <https://github.com/hawkowl/towncrier/issues/374>`_)

Bugfixes
--------

- The extra newline between the title and rendered content when using ``--draft`` is no longer inserted. (`#105 <https://github.com/hawkowl/towncrier/issues/105>`_)
- The detection of duplicate release notes was fixed and recording changes of same version is no longer triggered.

  Support for having the release notes for each version in a separate file is working again. This is a regression introduced in VERSION 19.9.0rc1. (`#391 <https://github.com/hawkowl/towncrier/issues/391>`_)

Improved Documentation
----------------------

- Improve ``CONTRIBUTING.rst`` and add PR template. (`#342 <https://github.com/hawkowl/towncrier/issues/342>`_)
- Move docs too the main branch and document custom fragment types. (`#367 <https://github.com/hawkowl/towncrier/issues/367>`_)
- The CLI help messages were updated to contain more information. (`#384 <https://github.com/hawkowl/towncrier/issues/384>`_)

Deprecations and Removals
-------------------------

- Support for all Python versions older than 3.7 has been dropped. (`#378 <https://github.com/hawkowl/towncrier/issues/378>`_)

Misc
----

- `#292 <https://github.com/hawkowl/towncrier/issues/292>`_, `#330 <https://github.com/hawkowl/towncrier/issues/330>`_, `#366 <https://github.com/hawkowl/towncrier/issues/366>`_, `#376 <https://github.com/hawkowl/towncrier/issues/376>`_, `#377 <https://github.com/hawkowl/towncrier/issues/377>`_, `#380 <https://github.com/hawkowl/towncrier/issues/380>`_, `#381 <https://github.com/hawkowl/towncrier/issues/381>`_, `#382 <https://github.com/hawkowl/towncrier/issues/382>`_, `#383 <https://github.com/hawkowl/towncrier/issues/383>`_, `#393 <https://github.com/hawkowl/towncrier/issues/393>`_, `#399 <https://github.com/hawkowl/towncrier/issues/399>`_, `#402 <https://github.com/hawkowl/towncrier/issues/402>`_

towncrier 21.9.0 (2022-02-04)
=============================

Features
--------

- towncrier --version` was added to the command line interface to show the product version. (`#339 <https://github.com/hawkowl/towncrier/issues/339>`_)
- Support Toml v1 syntax with tomli on Python 3.6+ (`#354 <https://github.com/hawkowl/towncrier/issues/354>`_)

Bugfixes
--------

- Stop writing title twice when ``title_format`` is specified. (`#346 <https://github.com/hawkowl/towncrier/issues/346>`_)
- Disable universal newlines when reading TOML (`#359 <https://github.com/hawkowl/towncrier/issues/359>`_)

Misc
----

- `#332 <https://github.com/hawkowl/towncrier/issues/332>`_, `#333 <https://github.com/hawkowl/towncrier/issues/333>`_, `#334 <https://github.com/hawkowl/towncrier/issues/334>`_, `#338 <https://github.com/hawkowl/towncrier/issues/338>`_

towncrier 21.3.0 (2021-04-02)
=============================

No significant changes since the previous release candidate.

towncrier 21.3.0.rc1 (2021-03-21)
=================================

Features
--------

- Ticket number from file names will be stripped down to avoid ticket links such as ``#7``. (`#126 <https://github.com/hawkowl/towncrier/issues/126>`_)
- Allow definition of the project ``version`` and ``name`` in the configuration file.
  This allows use of towncrier seamlessly with non-Python projects. (`#165 <https://github.com/hawkowl/towncrier/issues/165>`_)
- Improve news fragment file name parsing to allow using file names like
  ``123.feature.1.ext`` which are convenient when one wants to use an appropriate
  extension (e.g. ``rst``, ``md``) to enable syntax highlighting. (`#173 <https://github.com/hawkowl/towncrier/issues/173>`_)
- The new ``--edit`` option of the ``create`` subcommand launches an editor for entering the contents of the newsfragment. (`#275 <https://github.com/hawkowl/towncrier/issues/275>`_)
- CPython 3.8 and 3.9 are now part of our automated test matrix and are officially supported. (`#291 <https://github.com/hawkowl/towncrier/issues/291>`_)
- When searching for the project, first check for an existing importable instance.
  This helps if the version is only available in the installed version and not the source. (`#297 <https://github.com/hawkowl/towncrier/issues/297>`_)
- Support building with PEP 517. (`#314 <https://github.com/hawkowl/towncrier/issues/314>`_)

Bugfixes
--------

- Configuration errors found during command line execution now trigger a message to stderr and no longer show a traceback. (`#84 <https://github.com/hawkowl/towncrier/issues/84>`_)
- A configuration error is triggered when the newsfragment files couldn't be discovered. (`#85 <https://github.com/hawkowl/towncrier/issues/85>`_)
- Invoking towncrier as `python -m towncrier` works. (`#163 <https://github.com/hawkowl/towncrier/issues/163>`_)
- ``check`` subcommand defaults to UTF-8 encoding when ``sys.stdout.encoding`` is ``None``.
  This happens, for example, with Python 2 on GitHub Actions or when the output is piped. (`#175 <https://github.com/hawkowl/towncrier/issues/175>`_)
- Specifying ``title_format`` disables default top line creation to avoid duplication. (`#180 <https://github.com/hawkowl/towncrier/issues/180>`_)

Improved Documentation
----------------------

- The README now mentions the possibility to name the configuration file
  ``towncrier.toml`` (in addition to ``pyproject.toml``). (`#172 <https://github.com/hawkowl/towncrier/issues/172>`_)
- ``start_line`` corrected to ``start_string`` in the readme to match the long standing implementation. (`#277 <https://github.com/hawkowl/towncrier/issues/277>`_)

towncrier 19.9.0 (2021-03-20)
=============================

No significant changes.

towncrier 19.9.0rc1 (2019-09-16)
================================

Features
--------

- Add ``create`` subcommand, which can be used to quickly create a news
  fragment command in the location defined by config. (`#4 <https://github.com/hawkowl/towncrier/issues/4>`_)
- Add support for subcommands, meaning the functionality of the ``towncrier``
  executable is now replaced by the ``build`` subcommand::

      $ towncrier build --draft

  A new ``check`` subcommand is exposed. This is an alternative to calling the
  ``towncrier.check`` module manually::

      $ towncrier check

  Calling ``towncrier`` without a subcommand will result in a call to the
  ``build`` subcommand to ensure backwards compatibility. This may be removed in a
  future release. (`#144 <https://github.com/hawkowl/towncrier/issues/144>`_)
- Towncrier's templating now allows configuration of the version header. *CUSTOM TEMPLATE USERS PLEASE NOTE: You will need to add the version header information to your template!* (`#147 <https://github.com/hawkowl/towncrier/issues/147>`_)
- towncrier now accepts the --config argument to specify a custom configuration file (`#157 <https://github.com/hawkowl/towncrier/issues/157>`_)
- There is now the option for ``all_bullets = false`` in the configuration.
  Setting ``all_bullets`` to false means that news fragments have to include
  the bullet point if they should be rendered as enumerations, otherwise
  they are rendered directly (this means fragments can include a header.).
  It is necessary to set this option to avoid (incorrect) automatic indentation
  of multiline fragments that do not include bullet points.
  The ``single-file-no-bullets.rst`` template gives an example of
  using these options. (`#158 <https://github.com/hawkowl/towncrier/issues/158>`_)
- The ``single_file`` option can now be added to the configuration file. When set to ``true``, the filename key can now be formattable with the ``name``, ``version``, and ``project_date`` format variables. This allows subsequent versions to be written out to new files instead of appended to an existing one. (`#161 <https://github.com/hawkowl/towncrier/issues/161>`_)
- You can now specify Towncrier-bundled templates in your configuration file. Available templates are `default`, `hr-between-versions` (as used in attrs), and `single-file-no-bullets`. (`#162 <https://github.com/hawkowl/towncrier/issues/162>`_)

Bugfixes
--------

- Accept newsfragment filenames with multiple dots, like `fix-1.2.3.bugfix`. (`#142 <https://github.com/hawkowl/towncrier/issues/142>`_)

Deprecations and Removals
-------------------------

- The `--pyproject` option for `towncrier check` is now replaced with `--config`, for consistency with other commands. (`#162 <https://github.com/hawkowl/towncrier/issues/162>`_)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants