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

Switch from tox to nox #430

Merged
merged 4 commits into from
Sep 28, 2022
Merged

Switch from tox to nox #430

merged 4 commits into from
Sep 28, 2022

Conversation

hynek
Copy link
Member

@hynek hynek commented Sep 23, 2022

I know this is gonna be controversial, but I want to offer it to you anyhow. If this gets declined, I'll just keep using it locally.

What

nox is similar to tox, but instead of a rather unidiomatic substitution syntax within an ini file it uses plain Python. I hope you'll agree that the noxfile.py is a lot more readable than the tox.ini. It is my impression that a noxfile.py can be fully understood by anyone who has never used nox.

This is not a push the latest cool bleeding edge; it's used among many others by pip.

Why

The current tox file is pretty bad; I don't use it myself. The handling of coverage etc works for CI, but is confusing, useless (coverage combine after each step), and slow locally (switching to nox gave me a ~15% speedup). In other words, I'm proposing this out of own frustration, so I don't have to work around it. The current tox file is a sore thumb and unless someone else fixes it, it will remain so. That's a bad first impression for new contributors.

I'm under the impression that others aren't super happy with the current state either, since we also do this idiosyncratic tox_build.sh thing, I think it's better to use a richer tool.

Additional Notes

I have renamed setup.cfg into .flake8 because that's what it is, and I don't expect anything ever getting added to setup.cfg, since we live in the golden days of pyproject.toml.

ci.yml can probably be simplified some further, but I tried to preserve the character and the diff small.

I have removed the ref install of incremental because I admittedly couldn't make work (even with explicit pip), but also because we want to get rid of it and it's just not worth those two casts.

options={"bdist_wheel": {"universal": "1"}} only makes sense if you support Python 2 which we don't.

@codecov
Copy link

codecov bot commented Sep 23, 2022

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (5fa7c2d) compared to base (e36a8ca).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff            @@
##             trunk      #430   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           13        13           
  Lines          599       600    +1     
  Branches       144       144           
=========================================
+ Hits           599       600    +1     
Impacted Files Coverage Δ
src/towncrier/_project.py 100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

@hynek hynek marked this pull request as ready for review September 23, 2022 09:30
@hynek hynek requested a review from a team as a code owner September 23, 2022 09:30
@adiroiban
Copy link
Member

I also don't use tox... so I am ok with nox.

Happy to experiment with somenthing new.

For my projects I am using paver ... selected 10 years ago.

Looks like nox is focused on testing.

I am using paver and tox for general standard project scripting, not only running tests.

But I guess that for small projects, standardizing the test execution is all that it's needed.

@adiroiban
Copy link
Member

Thanks for the PR and showing a lot of love for this project.

As long as the tests are green and the docs are updated, I think we can go with it.

Locally, I don't use tox since it's very slow...so I just create separate virtualenvs and manually run the tests via trial... but is not ideal.

I am happy to experiment with nox.

@hynek
Copy link
Member Author

hynek commented Sep 23, 2022

Thanks for the PR and showing a lot of love for this project.

Thank you right back Adi! Towncrier would be far from what it is without your continued efforts.

Looks like nox is focused on testing.

I guess that's the official focus, but being able to use regular Python and run commands, it's a super-powered-yet-portable scripting for me.

Check out the stuff I do in doc2dash where I started using it.

To stress once more: I'm no graciously moving all my projects from tox to nox – I just feel like in our use cases it's cleaner and better solution.

This greatly simplifies (and makes more idiomatic) both our local tests and CI.
@altendky
Copy link
Member

I haven't worked with nox, so no real opinion there. Since you mentioned https://github.com/twisted/towncrier/blob/e301d673ddfa73046a111bca3b3800ba30b9829e/tox_build.sh though, I'll point out that at least the extract/build/cd/... whatever mess is no longer needed since this was accepted as default behavior by build when you do not specify either --wheel nor --sdist. It's an odd UX in my mind, but none the less lets you do the job. So calls to build could be simplified and still retain the effective testing of 'can i build the wheel from the sdist'.

@hynek
Copy link
Member Author

hynek commented Sep 23, 2022

I haven't worked with nox, so no real opinion there. Since you mentioned e301d67/tox_build.sh though, I'll point out that at least the extract/build/cd/... whatever mess is no longer needed since this was accepted as default behavior by build when you do not specify either --wheel nor --sdist. It's an odd UX in my mind, but none the less lets you do the job. So calls to build could be simplified and still retain the effective testing of 'can i build the wheel from the sdist'.

Yeah this is true. If that were the only thing, I would've probably just replaced it.

I mean I leave it to y'all to look at the changes and decide whether it's an improvement or not.

@@ -51,7 +52,7 @@ def get_version(package_dir: str, package: str) -> str:
return version.strip()

if isinstance(version, Version):
return version.base().strip()
return cast(str, version.base().strip())
Copy link
Member

Choose a reason for hiding this comment

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

I guess that this is more related to #431

but we can have it here, no problem.

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.

I don't see anything wrong with this PR... but for a long time, I in the team opposing tox ... so not much love for tox from me.

@altendky is anything wrong with this PR that you should block the merge?

Thanks you guys!

@@ -0,0 +1,2 @@
We now use `Nox <https://nox.thea.codes/>`_ instead of Tox.
You may have to adjust a few command lines, but overall contributing should now be more comfortable.
Copy link
Member

Choose a reason for hiding this comment

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

.. more comfortable.

arguably :)

I guess that for people who like tox and already have tox, this is not more comfortable.

Unless @altendky is not -1 for this, I think this can be merged.

Since there is a report of speed improvements, I am +1 for this.

nox, tox, potayto, potahto ... still not paver to me :)

@adiroiban
Copy link
Member

@hynek I think this can be merged.

I am not sure if the casts for project.py are needed...but that is not a blocker.

thanks

@hynek hynek merged commit 0525f08 into trunk Sep 28, 2022
@hynek hynek deleted the nox branch September 28, 2022 11:02
@hynek
Copy link
Member Author

hynek commented Sep 28, 2022

Thanks Adi! They're needed because I've stopped using a Git version of incremental.

Our mypy config should complain about redundant casts.

acabarbaye pushed a commit to ARMmbed/continuous-delivery-scripts that referenced this pull request Dec 22, 2022
Bumps [towncrier](https://github.com/twisted/towncrier) from 22.8.0 to
22.12.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/twisted/towncrier/releases">towncrier's
releases</a>.</em></p>
<blockquote>
<h2>Towncrier 22.12.0</h2>
<h1>towncrier 22.12.0 (2022-12-21)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Added <code>--keep</code> option to the <code>build</code> command
that allows generating a newsfile, but keeps the newsfragments in place.
This option can not be used together with <code>--yes</code>.
(<code>[#129](twisted/towncrier#129)
&lt;https://github.com/hawkowl/towncrier/issues/129&gt;</code>_)</p>
</li>
<li>
<p>Python 3.11 is now officially supported.
(<code>[#427](twisted/towncrier#427)
&lt;https://github.com/hawkowl/towncrier/issues/427&gt;</code>_)</p>
</li>
<li>
<p>You can now create fragments that are not associated with issues.
Start the name of the fragment with <code>+</code> (e.g.
<code>+anything.feature</code>).
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.</p>
<p>To help quickly create a unique orphan news fragment, <code>towncrier
create +.feature</code> will append a random string to the base name of
the file, to avoid name collisions.
(<code>[#428](twisted/towncrier#428)
&lt;https://github.com/hawkowl/towncrier/issues/428&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>Improved contribution documentation.
(<code>[#415](twisted/towncrier#415)
&lt;https://github.com/hawkowl/towncrier/issues/415&gt;</code>_)</li>
<li>Correct a typo in the readme that incorrectly documented custom
fragments in a format that does not work.
(<code>[#424](twisted/towncrier#424)
&lt;https://github.com/hawkowl/towncrier/issues/424&gt;</code>_)</li>
<li>The documentation has been restructured and (hopefully) improved.
(<code>[#435](twisted/towncrier#435)
&lt;https://github.com/hawkowl/towncrier/issues/435&gt;</code>_)</li>
<li>Added a Markdown-based how-to guide.
(<code>[#436](twisted/towncrier#436)
&lt;https://github.com/hawkowl/towncrier/issues/436&gt;</code>_)</li>
<li>Defining custom fragments using a TOML array is not deprecated
anymore. (<code>[#438](twisted/towncrier#438)
&lt;https://github.com/hawkowl/towncrier/issues/438&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Default branch for <code>towncrier check</code> is now
&quot;origin/main&quot; instead of &quot;origin/master&quot;.
If &quot;origin/main&quot; does not exist, fallback to
&quot;origin/master&quot; with a deprecation warning.
(<code>[#400](twisted/towncrier#400)
&lt;https://github.com/hawkowl/towncrier/issues/400&gt;</code>_)</li>
</ul>
<h2>22.12.0rc1</h2>
<h1>towncrier 22.12.0rc1 (2022-12-20)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Added <code>--keep</code> option to the <code>build</code> command
that allows generating a newsfile, but keeps the newsfragments in place.
This option can not be used together with <code>--yes</code>.
(<code>[#129](twisted/towncrier#129)
&lt;https://github.com/hawkowl/towncrier/issues/129&gt;</code>_)</p>
</li>
<li>
<p>Python 3.11 is now officially supported.
(<code>[#427](twisted/towncrier#427)
&lt;https://github.com/hawkowl/towncrier/issues/427&gt;</code>_)</p>
</li>
<li>
<p>You can now create fragments that are not associated with issues.
Start the name of the fragment with <code>+</code> (e.g.
<code>+anything.feature</code>).
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.</p>
<p>To help quickly create a unique orphan news fragment, <code>towncrier
create +.feature</code> will append a random string to the base name of
the file, to avoid name collisions.
(<code>[#428](twisted/towncrier#428)
&lt;https://github.com/hawkowl/towncrier/issues/428&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<!-- 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.12.0 (2022-12-21)</h1>
<p>No changes since the previous release candidate.</p>
<h1>towncrier 22.12.0rc1 (2022-12-20)</h1>
<h2>Features</h2>
<ul>
<li>
<p>Added <code>--keep</code> option to the <code>build</code> command
that allows generating a newsfile, but keeps the newsfragments in place.
This option can not be used together with <code>--yes</code>.
(<code>[#129](twisted/towncrier#129)
&lt;https://github.com/hawkowl/towncrier/issues/129&gt;</code>_)</p>
</li>
<li>
<p>Python 3.11 is now officially supported.
(<code>[#427](twisted/towncrier#427)
&lt;https://github.com/hawkowl/towncrier/issues/427&gt;</code>_)</p>
</li>
<li>
<p>You can now create fragments that are not associated with issues.
Start the name of the fragment with <code>+</code> (e.g.
<code>+anything.feature</code>).
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.</p>
<p>To help quickly create a unique orphan news fragment, <code>towncrier
create +.feature</code> will append a random string to the base name of
the file, to avoid name collisions.
(<code>[#428](twisted/towncrier#428)
&lt;https://github.com/hawkowl/towncrier/issues/428&gt;</code>_)</p>
</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>Improved contribution documentation.
(<code>[#415](twisted/towncrier#415)
&lt;https://github.com/hawkowl/towncrier/issues/415&gt;</code>_)</li>
<li>Correct a typo in the readme that incorrectly documented custom
fragments in a format that does not work.
(<code>[#424](twisted/towncrier#424)
&lt;https://github.com/hawkowl/towncrier/issues/424&gt;</code>_)</li>
<li>The documentation has been restructured and (hopefully) improved.
(<code>[#435](twisted/towncrier#435)
&lt;https://github.com/hawkowl/towncrier/issues/435&gt;</code>_)</li>
<li>Added a Markdown-based how-to guide.
(<code>[#436](twisted/towncrier#436)
&lt;https://github.com/hawkowl/towncrier/issues/436&gt;</code>_)</li>
<li>Defining custom fragments using a TOML array is not deprecated
anymore. (<code>[#438](twisted/towncrier#438)
&lt;https://github.com/hawkowl/towncrier/issues/438&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Default branch for <code>towncrier check</code> is now
&quot;origin/main&quot; instead of &quot;origin/master&quot;.
If &quot;origin/main&quot; does not exist, fallback to
&quot;origin/master&quot; with a deprecation warning.
(<code>[#400](twisted/towncrier#400)
&lt;https://github.com/hawkowl/towncrier/issues/400&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#406](twisted/towncrier#406)
&lt;https://github.com/hawkowl/towncrier/issues/406&gt;</code><em>,
<code>[#408](twisted/towncrier#408)
&lt;https://github.com/hawkowl/towncrier/issues/408&gt;</code></em>,
<code>[#411](twisted/towncrier#411)
&lt;https://github.com/hawkowl/towncrier/issues/411&gt;</code><em>,
<code>[#412](twisted/towncrier#412)
&lt;https://github.com/hawkowl/towncrier/issues/412&gt;</code></em>,
<code>[#413](twisted/towncrier#413)
&lt;https://github.com/hawkowl/towncrier/issues/413&gt;</code><em>,
<code>[#414](twisted/towncrier#414)
&lt;https://github.com/hawkowl/towncrier/issues/414&gt;</code></em>,
<code>[#416](twisted/towncrier#416)
&lt;https://github.com/hawkowl/towncrier/issues/416&gt;</code><em>,
<code>[#418](twisted/towncrier#418)
&lt;https://github.com/hawkowl/towncrier/issues/418&gt;</code></em>,
<code>[#419](twisted/towncrier#419)
&lt;https://github.com/hawkowl/towncrier/issues/419&gt;</code><em>,
<code>[#421](twisted/towncrier#421)
&lt;https://github.com/hawkowl/towncrier/issues/421&gt;</code></em>,
<code>[#429](twisted/towncrier#429)
&lt;https://github.com/hawkowl/towncrier/issues/429&gt;</code><em>,
<code>[#430](twisted/towncrier#430)
&lt;https://github.com/hawkowl/towncrier/issues/430&gt;</code></em>,
<code>[#431](twisted/towncrier#431)
&lt;https://github.com/hawkowl/towncrier/issues/431&gt;</code><em>,
<code>[#434](twisted/towncrier#434)
&lt;https://github.com/hawkowl/towncrier/issues/434&gt;</code></em>,
<code>[#446](twisted/towncrier#446)
&lt;https://github.com/hawkowl/towncrier/issues/446&gt;</code><em>,
<code>[#447](twisted/towncrier#447)
&lt;https://github.com/hawkowl/towncrier/issues/447&gt;</code></em></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/twisted/towncrier/commit/b0e201f8d84819f0e5604e0cb029fb3b8b4cf2df"><code>b0e201f</code></a>
RST is hard.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/2c611bebcd3c7661bd406d227aadf3b72d2927de"><code>2c611be</code></a>
Fix rst format.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/76a20070cc57f00eedca2cac5551a5b2cbf9d0f4"><code>76a2007</code></a>
Fix typo.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/62feaf664badc09f0082185c4950876a521f019e"><code>62feaf6</code></a>
Update version for final release.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/fbc4f1f25570a8406c88a4da4a75ce745631b4d2"><code>fbc4f1f</code></a>
Quick fix for incremental rc version normalization.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/26a5eba8116df4516c646c748a51bbbfdb3fe50c"><code>26a5eba</code></a>
Try latest incremental since a test is failing.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/7cbec75915dafc43471b27e2179767b3cf49d982"><code>7cbec75</code></a>
Create rc1.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/3859e58402986c181faa7f09c846b0873c62fb86"><code>3859e58</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://github-redirect.dependabot.com/twisted/towncrier/issues/452">#452</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/341897512d8ffcbafbeac9dabc6e524523a22c34"><code>3418975</code></a>
Revert Generate coverage reports using only GitHub Actions (<a
href="https://github-redirect.dependabot.com/twisted/towncrier/issues/455">#455</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/24f65a0ed18c5d9b875e8f3e4334fd18945add06"><code>24f65a0</code></a>
Add --keep option to allow to generate newsfile, but keep newsfragmen…
(<a
href="https://github-redirect.dependabot.com/twisted/towncrier/issues/453">#453</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/twisted/towncrier/compare/22.8.0...22.12.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=22.8.0&new-version=22.12.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>
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
Development

Successfully merging this pull request may close these issues.

3 participants