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

Config location separate from directory containing news file and fragments #548

Merged
merged 7 commits into from
Oct 22, 2023

Conversation

iliakur
Copy link
Contributor

@iliakur iliakur commented Sep 26, 2023

Description

This adds official support for the scenario where one towncrier config is shared between multiple projects with independent news files and fragments.

This is useful in monorepo-style setups.

Checklist

  • Make sure changes are covered by existing or new tests.
  • For at least one Python version, make sure local test run is green.
  • Create a file in src/towncrier/newsfragments/. Describe your
    change and include important information. Your change will be included in the public release notes.
  • Make sure all GitHub Actions checks are green (they are automatically checking all of the above).
  • Ensure docs/tutorial.rst is still up-to-date.
  • If you add new CLI arguments (or change the meaning of existing ones), make sure docs/cli.rst reflects those changes.
  • If you add new configuration options (or change the meaning of existing ones), make sure docs/configuration.rst reflects those changes.

@iliakur iliakur requested a review from a team as a code owner September 26, 2023 10:13
The create command already supports this.
@iliakur
Copy link
Contributor Author

iliakur commented Sep 26, 2023

Gave it some more thought: this is looking even more like a Bugfix because build with the default config.directory supports the usecase as well. This PR only extends that support to custom config.directory values.

@iliakur iliakur changed the title Build command supports multiple projects with one config Build command with custom fragment directory supports multiple projects with one config Sep 26, 2023
@adiroiban
Copy link
Member

Many thanks for the PR.

The thing is that normally an issue is created first.
As part of that issue, we can discuss if the current behaviour is the expect one, or a new feature is required or this is a bugfix.

with that, we can have a PR created and referencing the original issue.

As there is no issue, you can use 548 as the newsfragment / release notes id.


Is there already documentation for this functionality ?

If there is no documentation, this can be considered a new feature.

If there is documentation, but the sub-command don't work as documented, then we have a bug.

@iliakur
Copy link
Contributor Author

iliakur commented Sep 27, 2023

@adiroiban Thanks for the quick response.

There is currently no documentation, but towncrier add supports the equivalent usecase. Moreover, towncrier build also supports this as long as config.directory has the default value.

That's why it seems more like a bug to me than a missing feature. However, I'll defer to you for the final call, I'm also totally fine adding a feature-typed fragment.

@adiroiban
Copy link
Member

Can you add some documentation as part of this PR.

The documentation should be the ultimate oracle telling what is a bug or a feature.

If something is not documented, then any change is a feature.
If something is already documented, but not working as documented, then we have a bug.


I guess that you try to use towncrier with a monorepo

So I think that it make sense to add some information in the docs about how is the monorepo support implemented in towncrier.

Regards

@iliakur iliakur changed the title Build command with custom fragment directory supports multiple projects with one config Config location separate from directory containing news file and fragments Oct 9, 2023
@iliakur
Copy link
Contributor Author

iliakur commented Oct 9, 2023

@adiroiban Thanks for the feedback, I addressed it. In the process of adding the docs I realized that the towncrier check command also needed to be adjusted. With this scope this definitely feels more like a feature!

This PR is ready for review.

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.

Hi,

Many thanks for this great PR.

I left a few comments.

The changes looks good.

I have a few comments in terms of the docstrings for the tests.

The --dir option can be used for mono-repos, but I think that the core features, is that the --dir path is joined with the directory configuration option to generate the final path.

@@ -12,7 +12,8 @@ The following options can be passed to all of the commands that explained below:

.. option:: --dir PATH

Build fragment in ``PATH``.
The command is executed relative to ``PATH``.
Copy link
Member

Choose a reason for hiding this comment

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

Can we also have this information as part of the built-in CLI help system ?

this would need updating the @click.options help text for build.

https://github.com/twisted/towncrier/pull/548/files#diff-3576f35f5faa5ded14cd2b3db52e19829e34270f7957ebdf765870dc6f305903R68-R74


In an ideal case, we would only write the docs for click and have it automatically exported in RST format.


Same comment is valid for create and check sub-commands

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'll add this to the options. Have you looked into using this sphinx plugin to extract the documentation automatically?

Copy link
Member

Choose a reason for hiding this comment

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

That's the plan. It just needs someone to implement it into the current build system :)


towncrier build --config towncrier.toml --dir project_a --version 1.5

Note that we must explicitly pass ``--version``, there is no other way to get the version number.
Copy link
Member

Choose a reason for hiding this comment

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

Maybe create a GitHub issue for this.
I think that if we want to support mono-repos, this should be a 1st class feature... so in the ideal case, the version could be extracted

I don't know how to do it... as we are missing the package name info... so it's not easy to know for which package to extract the version.

But maybe it's best to just have the issue created and linked from here.
If someone else wants this feature, they can send suggestion or PRs for how to fix this.

The sentence from below, reads like a bug description :)

src/towncrier/newsfragments/548.feature Outdated Show resolved Hide resolved

result = runner.invoke(
cli,
("--yes", "--config", "pyproject.toml", "--dir", "foo", "--version", "1.0"),
Copy link
Member

Choose a reason for hiding this comment

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

I see normpath was previously used.

Maybe for the test, we can go wild, and add something like this, to make sure dir still works when it is passed as a non-normalized path.

Suggested change
("--yes", "--config", "pyproject.toml", "--dir", "foo", "--version", "1.0"),
("--yes", "--config", "pyproject.toml", "--dir", "./foo/../foo/", "--version", "1.0"),

also, do we need to pass --config=pyproject.toml here ? I was thinking that this is already the default value.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for "wild" suggestion, I'll try it out!

We must explicitly pass --config here because otherwise we will search for pyproject.toml inside the directory provided by --dir :)

we test that custom settings also do.
"""
Path("pyproject.toml").write_text(
"[tool.towncrier]\n" + 'directory = "changelog.d"\n'
Copy link
Member

Choose a reason for hiding this comment

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

Maybe also add an explicit empty package config here.
My understanding, is that this is required for this usecase.

"""
main_branch = "main"
Path("pyproject.toml").write_text(
# Important to customize `config.directory` because the default
Copy link
Member

Choose a reason for hiding this comment

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

I don't understand this comment.

Maybe something like

For monorepos, the directory is used not as relative to the configuration file, but as relative to the --dir CLI argument.

Copy link
Contributor Author

@iliakur iliakur Oct 18, 2023

Choose a reason for hiding this comment

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

Yea, hmm, this must really be complicated cuz we're having to go over it a 3rd time now (I mentioned this in the PR description and in a comment about bug vs feature criteria).

Let me know if the following is clearer.

  1. We compute the fragments base dir path differently depending on whether config.directory is set or not. References: build, check and create.
  2. The implementation for the case when config.directory is not set is the same across all 3 commands. This implementation supports the usecase we care about in this PR.
  3. The problems start in the other case, however. create implementation already supports the usecase in this PR whereas build and check have to be adjusted.
  4. Following the logic of testing "wilder" scenarios, and also to make sure I'm testing my changes, I'm setting config.directory.

Longer-term I think it makes sense to figure out how to merge these implementations for ease of maintenance. I didn't have time to do so for this PR.

call(["git", "checkout", "-b", "otherbranch"])

# We add a code change but forget to add a news fragment.
write(subproject1 / "foo/somefile.py", "import os")
Copy link
Member

Choose a reason for hiding this comment

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

maybe also write a file like ./changelog.d/234.feature that is relative to the config file.

I think that the main goal of this tests it to make sure that --dir is used as the "working directory"

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Do I understand correctly that we don't want ./changelog.d/234.feature to influence the changelog generation?

src/towncrier/test/test_check.py Outdated Show resolved Hide resolved
src/towncrier/test/test_create.py Outdated Show resolved Hide resolved
This is useful when multiple projects share one towncrier configuration.
"""
Path("pyproject.toml").write_text(
# Important to customize `config.directory` because the default
Copy link
Member

Choose a reason for hiding this comment

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

I don't understand this comment here.

Maybe, it's important to note that this is a configured using a sub-directory that is later combined with the CLI argument.

Also, maybe it's also important to pass an empty project value for this test

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 :)

I think the main thing here is that I am doing reviews at 1AM or during the day in 5 minutes intervals between the test runs of my main work :(


But I think we should merge this.

If anyone else is intersted into monorepo part, they can help improve the docs, the test or the configuration.


Please consider updating the tests to check for non-normalized path.

After that, I think that we can merge this.

Otherwise I don't know when I will have to review it or if someone else will have time soon to review this PR.

@iliakur
Copy link
Contributor Author

iliakur commented Oct 20, 2023

Thanks for the PR :)

I think the main thing here is that I am doing reviews at 1AM or during the day in 5 minutes intervals between the test runs of my main work :(

But I think we should merge this.

If anyone else is intersted into monorepo part, they can help improve the docs, the test or the configuration.

Please consider updating the tests to check for non-normalized path.

After that, I think that we can merge this.

Otherwise I don't know when I will have to review it or if someone else will have time soon to review this PR.

Let me know if you have a feeling that you'd want more time to consider this. We can also focus on 1 PR at a time and take a break with #553.

I appreciate you carving out time to review and comment.

I'll be addressing the part about non-normalized paths and CLI later today, so we should be good to merge over the weekend.

@iliakur
Copy link
Contributor Author

iliakur commented Oct 21, 2023

@adiroiban thanks once more for bearing with this.

I'm a bit tired and sick today, I'll get to it tomorrow for sure. I'm thinking of moving all monorepo-related tests into one file so that it's easier to share setup code and comments for it. I want to test some more combinations of settings. Too bad trial doesn't support parametrized tests the way pytest does.

@adiroiban
Copy link
Member

adiroiban commented Oct 22, 2023

Hi. I hope you will get well soon.

We can merge this PR as it is. No need to have a perfect PR. As long as it's better that we have in trunk and doesn't introduce any regressions, it should be good to merge.

My comments were more of a "nice to have" category.

Let me know if you want to have this PR merge as it is ? (I will take care of updating/rebase with trunk before merge)


I have never worked on mono-repos so I don't have experince with them.
So my feedback from this PR related to mono-repo might not be best.

This is why we can merge this and if someone else wants to use towncrier with monorepo, they can add more feedback or suggest changes.


We can consider adding support for parametrize in trial.

Is this the feature ?

@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

I know that instead of simple parametrize in twisted/twisted we use https://hypothesis.readthedocs.io/en/latest/ ... not sure if it's the same thing.

@iliakur
Copy link
Contributor Author

iliakur commented Oct 22, 2023

Alrighty, let's merge then :)

I owe you some docs and some tests.


To be precise:

  • make sure cli and web docs are the same
  • extend and refactor tests
  • open issue base on one of your comments.

Your example with pytest.parametrize is correct. The concept is similar to hypothesis.example.


I have just one favor to ask of you: would it be possible to cut a release with this in the next couple days? That way I can incorporated it properly in our infrastructure (referencing branches isn't allowed in "prod").

@adiroiban
Copy link
Member

I owe you some docs and some tests.

You don't owe me anything :)

towncrier is just a project that I find useful, and was not mantained, so in my spare time I look after it.

we are standing on the shoulder of giants as many other people have contributed significant time for the project.


I have just one favor to ask of you: would it be possible to cut a release

Sure. Will do.


I have updated the branch and enabled auto-merge . I hope this will merge soon :)

@adiroiban adiroiban enabled auto-merge (squash) October 22, 2023 19:30
@adiroiban adiroiban merged commit 0b023fa into twisted:trunk Oct 22, 2023
15 checks passed
github-actions bot pushed a commit to aio-libs/aiohttp that referenced this pull request Oct 24, 2023
Bumps [towncrier](https://github.com/twisted/towncrier) from 23.6.0 to
23.10.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 23.10.0</h2>
<h1>towncrier 23.10.0 (2023-10-23)</h1>
<p>No significant changes since the previous release candidate.</p>
<h2>Features</h2>
<ul>
<li>
<p>Python 3.12 is now officially supported.
(<code>[#541](twisted/towncrier#541)
&lt;https://github.com/twisted/towncrier/issues/541&gt;</code>_)</p>
</li>
<li>
<p>Initial support was added for monorepo-style setup.
One project with multiple independent news files stored in separate
sub-directories, that share the same towncrier config.
(<code>[#548](twisted/towncrier#548)
&lt;https://github.com/twisted/towncrier/issues/548&gt;</code>_)</p>
</li>
<li>
<p>Two newlines are no longer always added between the current release
notes and the previous content.
The newlines are now defined only inside the template.</p>
<p><strong>Important! If you're using a custom template and want to keep
the same whitespace between releases, you may have to modify your
template.</strong>
(<code>[#552](twisted/towncrier#552)
&lt;https://github.com/twisted/towncrier/issues/552&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Towncrier now vendors the click-default-group package that prevented
installations on modern Pips.
(<code>[#540](twisted/towncrier#540)
&lt;https://github.com/twisted/towncrier/issues/540&gt;</code>_)</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>The markdown docs now use the default markdown template rather than
a simpler custom one.
(<code>[#545](twisted/towncrier#545)
&lt;https://github.com/twisted/towncrier/issues/545&gt;</code>_)</li>
<li>Cleanup a duplicate backtick in the tutorial.
(<code>[#551](twisted/towncrier#551)
&lt;https://github.com/twisted/towncrier/issues/551&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>The support for Python 3.7 has been dropped.
(<code>[#521](twisted/towncrier#521)
&lt;https://github.com/twisted/towncrier/issues/521&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#481](twisted/towncrier#481)
&lt;https://github.com/twisted/towncrier/issues/481&gt;</code><em>,
<code>[#520](twisted/towncrier#520)
&lt;https://github.com/twisted/towncrier/issues/520&gt;</code></em>,
<code>[#522](twisted/towncrier#522)
&lt;https://github.com/twisted/towncrier/issues/522&gt;</code><em>,
<code>[#523](twisted/towncrier#523)
&lt;https://github.com/twisted/towncrier/issues/523&gt;</code></em>,
<code>[#529](twisted/towncrier#529)
&lt;https://github.com/twisted/towncrier/issues/529&gt;</code><em>,
<code>[#536](twisted/towncrier#536)
&lt;https://github.com/twisted/towncrier/issues/536&gt;</code></em></li>
</ul>
<h2>Towncrier 23.10.0rc1</h2>
<h1>towncrier 23.10.0rc1 (2023-10-23)</h1>
<h2>Features</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 23.10.0 (2023-10-24)</h1>
<p>No significant changes since the previous release candidate.</p>
<h2>Features</h2>
<ul>
<li>
<p>Python 3.12 is now officially supported.
(<code>[#541](twisted/towncrier#541)
&lt;https://github.com/twisted/towncrier/issues/541&gt;</code>_)</p>
</li>
<li>
<p>Initial support was added for monorepo-style setup.
One project with multiple independent news files stored in separate
sub-directories, that share the same towncrier config.
(<code>[#548](twisted/towncrier#548)
&lt;https://github.com/twisted/towncrier/issues/548&gt;</code>_)</p>
</li>
<li>
<p>Two newlines are no longer always added between the current release
notes and the previous content.
The newlines are now defined only inside the template.</p>
<p><strong>Important! If you're using a custom template and want to keep
the same whitespace between releases, you may have to modify your
template.</strong>
(<code>[#552](twisted/towncrier#552)
&lt;https://github.com/twisted/towncrier/issues/552&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Towncrier now vendors the click-default-group package that prevented
installations on modern Pips.
(<code>[#540](twisted/towncrier#540)
&lt;https://github.com/twisted/towncrier/issues/540&gt;</code>_)</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>The markdown docs now use the default markdown template rather than
a simpler custom one.
(<code>[#545](twisted/towncrier#545)
&lt;https://github.com/twisted/towncrier/issues/545&gt;</code>_)</li>
<li>Cleanup a duplicate backtick in the tutorial.
(<code>[#551](twisted/towncrier#551)
&lt;https://github.com/twisted/towncrier/issues/551&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>The support for Python 3.7 has been dropped.
(<code>[#521](twisted/towncrier#521)
&lt;https://github.com/twisted/towncrier/issues/521&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#481](twisted/towncrier#481)
&lt;https://github.com/twisted/towncrier/issues/481&gt;</code><em>,
<code>[#520](twisted/towncrier#520)
&lt;https://github.com/twisted/towncrier/issues/520&gt;</code></em>,
<code>[#522](twisted/towncrier#522)
&lt;https://github.com/twisted/towncrier/issues/522&gt;</code><em>,
<code>[#523](twisted/towncrier#523)
&lt;https://github.com/twisted/towncrier/issues/523&gt;</code></em>,
<code>[#529](twisted/towncrier#529)
&lt;https://github.com/twisted/towncrier/issues/529&gt;</code><em>,
<code>[#536](twisted/towncrier#536)
&lt;https://github.com/twisted/towncrier/issues/536&gt;</code></em></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/twisted/towncrier/commit/347e9440ae8507adfc22f5c993f4496b20d49ec5"><code>347e944</code></a>
Update for final release.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/ee857403c9a09ca7055f93dd8784e84b5cc2bb3a"><code>ee85740</code></a>
Do RC1 instead of RC0.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/0c3b82c9be435e23019b7064a57fbd7210f54300"><code>0c3b82c</code></a>
venv/bin/towncrier build --yes</li>
<li><a
href="https://github.com/twisted/towncrier/commit/610247f8e0e2146cadb9f46937047dc08f923eab"><code>610247f</code></a>
Update version.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/0b023fa95926470482418d4e11f9ae9f0ada7d56"><code>0b023fa</code></a>
Config location separate from directory containing news file and
fragments (#...</li>
<li><a
href="https://github.com/twisted/towncrier/commit/3f24b6ef7e0c17f3e559b957526598c287774b70"><code>3f24b6e</code></a>
Whitespace between releases can be configured in the template. (<a
href="https://redirect.github.com/twisted/towncrier/issues/553">#553</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/7f37ab5daa72f5a761db1bf14cba1e2d3d87422d"><code>7f37ab5</code></a>
docs(tutorial): Cleanup duplicate backtick typo (<a
href="https://redirect.github.com/twisted/towncrier/issues/551">#551</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/5b732be979642c5b9ab4d22df6fb70ff4bd3ff2f"><code>5b732be</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/twisted/towncrier/issues/549">#549</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/239f84102c374e7395cdc0a50f7b4171cc8c3e83"><code>239f841</code></a>
use markdown default template in markdown docs (<a
href="https://redirect.github.com/twisted/towncrier/issues/546">#546</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/806bec1248b0ea8b86db21e0ce90b1849d3cd721"><code>806bec1</code></a>
Add 3.12 (<a
href="https://redirect.github.com/twisted/towncrier/issues/541">#541</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/twisted/towncrier/compare/23.6.0...23.10.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=23.6.0&new-version=23.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually 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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@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>
github-actions bot pushed a commit to aio-libs/aiohttp that referenced this pull request Oct 24, 2023
Bumps [towncrier](https://github.com/twisted/towncrier) from 23.6.0 to
23.10.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 23.10.0</h2>
<h1>towncrier 23.10.0 (2023-10-23)</h1>
<p>No significant changes since the previous release candidate.</p>
<h2>Features</h2>
<ul>
<li>
<p>Python 3.12 is now officially supported.
(<code>[#541](twisted/towncrier#541)
&lt;https://github.com/twisted/towncrier/issues/541&gt;</code>_)</p>
</li>
<li>
<p>Initial support was added for monorepo-style setup.
One project with multiple independent news files stored in separate
sub-directories, that share the same towncrier config.
(<code>[#548](twisted/towncrier#548)
&lt;https://github.com/twisted/towncrier/issues/548&gt;</code>_)</p>
</li>
<li>
<p>Two newlines are no longer always added between the current release
notes and the previous content.
The newlines are now defined only inside the template.</p>
<p><strong>Important! If you're using a custom template and want to keep
the same whitespace between releases, you may have to modify your
template.</strong>
(<code>[#552](twisted/towncrier#552)
&lt;https://github.com/twisted/towncrier/issues/552&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Towncrier now vendors the click-default-group package that prevented
installations on modern Pips.
(<code>[#540](twisted/towncrier#540)
&lt;https://github.com/twisted/towncrier/issues/540&gt;</code>_)</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>The markdown docs now use the default markdown template rather than
a simpler custom one.
(<code>[#545](twisted/towncrier#545)
&lt;https://github.com/twisted/towncrier/issues/545&gt;</code>_)</li>
<li>Cleanup a duplicate backtick in the tutorial.
(<code>[#551](twisted/towncrier#551)
&lt;https://github.com/twisted/towncrier/issues/551&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>The support for Python 3.7 has been dropped.
(<code>[#521](twisted/towncrier#521)
&lt;https://github.com/twisted/towncrier/issues/521&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#481](twisted/towncrier#481)
&lt;https://github.com/twisted/towncrier/issues/481&gt;</code><em>,
<code>[#520](twisted/towncrier#520)
&lt;https://github.com/twisted/towncrier/issues/520&gt;</code></em>,
<code>[#522](twisted/towncrier#522)
&lt;https://github.com/twisted/towncrier/issues/522&gt;</code><em>,
<code>[#523](twisted/towncrier#523)
&lt;https://github.com/twisted/towncrier/issues/523&gt;</code></em>,
<code>[#529](twisted/towncrier#529)
&lt;https://github.com/twisted/towncrier/issues/529&gt;</code><em>,
<code>[#536](twisted/towncrier#536)
&lt;https://github.com/twisted/towncrier/issues/536&gt;</code></em></li>
</ul>
<h2>Towncrier 23.10.0rc1</h2>
<h1>towncrier 23.10.0rc1 (2023-10-23)</h1>
<h2>Features</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 23.10.0 (2023-10-24)</h1>
<p>No significant changes since the previous release candidate.</p>
<h2>Features</h2>
<ul>
<li>
<p>Python 3.12 is now officially supported.
(<code>[#541](twisted/towncrier#541)
&lt;https://github.com/twisted/towncrier/issues/541&gt;</code>_)</p>
</li>
<li>
<p>Initial support was added for monorepo-style setup.
One project with multiple independent news files stored in separate
sub-directories, that share the same towncrier config.
(<code>[#548](twisted/towncrier#548)
&lt;https://github.com/twisted/towncrier/issues/548&gt;</code>_)</p>
</li>
<li>
<p>Two newlines are no longer always added between the current release
notes and the previous content.
The newlines are now defined only inside the template.</p>
<p><strong>Important! If you're using a custom template and want to keep
the same whitespace between releases, you may have to modify your
template.</strong>
(<code>[#552](twisted/towncrier#552)
&lt;https://github.com/twisted/towncrier/issues/552&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Towncrier now vendors the click-default-group package that prevented
installations on modern Pips.
(<code>[#540](twisted/towncrier#540)
&lt;https://github.com/twisted/towncrier/issues/540&gt;</code>_)</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>The markdown docs now use the default markdown template rather than
a simpler custom one.
(<code>[#545](twisted/towncrier#545)
&lt;https://github.com/twisted/towncrier/issues/545&gt;</code>_)</li>
<li>Cleanup a duplicate backtick in the tutorial.
(<code>[#551](twisted/towncrier#551)
&lt;https://github.com/twisted/towncrier/issues/551&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>The support for Python 3.7 has been dropped.
(<code>[#521](twisted/towncrier#521)
&lt;https://github.com/twisted/towncrier/issues/521&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[#481](twisted/towncrier#481)
&lt;https://github.com/twisted/towncrier/issues/481&gt;</code><em>,
<code>[#520](twisted/towncrier#520)
&lt;https://github.com/twisted/towncrier/issues/520&gt;</code></em>,
<code>[#522](twisted/towncrier#522)
&lt;https://github.com/twisted/towncrier/issues/522&gt;</code><em>,
<code>[#523](twisted/towncrier#523)
&lt;https://github.com/twisted/towncrier/issues/523&gt;</code></em>,
<code>[#529](twisted/towncrier#529)
&lt;https://github.com/twisted/towncrier/issues/529&gt;</code><em>,
<code>[#536](twisted/towncrier#536)
&lt;https://github.com/twisted/towncrier/issues/536&gt;</code></em></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/twisted/towncrier/commit/347e9440ae8507adfc22f5c993f4496b20d49ec5"><code>347e944</code></a>
Update for final release.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/ee857403c9a09ca7055f93dd8784e84b5cc2bb3a"><code>ee85740</code></a>
Do RC1 instead of RC0.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/0c3b82c9be435e23019b7064a57fbd7210f54300"><code>0c3b82c</code></a>
venv/bin/towncrier build --yes</li>
<li><a
href="https://github.com/twisted/towncrier/commit/610247f8e0e2146cadb9f46937047dc08f923eab"><code>610247f</code></a>
Update version.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/0b023fa95926470482418d4e11f9ae9f0ada7d56"><code>0b023fa</code></a>
Config location separate from directory containing news file and
fragments (#...</li>
<li><a
href="https://github.com/twisted/towncrier/commit/3f24b6ef7e0c17f3e559b957526598c287774b70"><code>3f24b6e</code></a>
Whitespace between releases can be configured in the template. (<a
href="https://redirect.github.com/twisted/towncrier/issues/553">#553</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/7f37ab5daa72f5a761db1bf14cba1e2d3d87422d"><code>7f37ab5</code></a>
docs(tutorial): Cleanup duplicate backtick typo (<a
href="https://redirect.github.com/twisted/towncrier/issues/551">#551</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/5b732be979642c5b9ab4d22df6fb70ff4bd3ff2f"><code>5b732be</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/twisted/towncrier/issues/549">#549</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/239f84102c374e7395cdc0a50f7b4171cc8c3e83"><code>239f841</code></a>
use markdown default template in markdown docs (<a
href="https://redirect.github.com/twisted/towncrier/issues/546">#546</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/806bec1248b0ea8b86db21e0ce90b1849d3cd721"><code>806bec1</code></a>
Add 3.12 (<a
href="https://redirect.github.com/twisted/towncrier/issues/541">#541</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/twisted/towncrier/compare/23.6.0...23.10.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=23.6.0&new-version=23.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually 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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@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>
xiangxli pushed a commit to xiangxli/aiohttp that referenced this pull request Dec 4, 2023
Bumps [towncrier](https://github.com/twisted/towncrier) from 23.6.0 to
23.10.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 23.10.0</h2>
<h1>towncrier 23.10.0 (2023-10-23)</h1>
<p>No significant changes since the previous release candidate.</p>
<h2>Features</h2>
<ul>
<li>
<p>Python 3.12 is now officially supported.
(<code>[aio-libs#541](twisted/towncrier#541)
&lt;https://github.com/twisted/towncrier/issues/541&gt;</code>_)</p>
</li>
<li>
<p>Initial support was added for monorepo-style setup.
One project with multiple independent news files stored in separate
sub-directories, that share the same towncrier config.
(<code>[aio-libs#548](twisted/towncrier#548)
&lt;https://github.com/twisted/towncrier/issues/548&gt;</code>_)</p>
</li>
<li>
<p>Two newlines are no longer always added between the current release
notes and the previous content.
The newlines are now defined only inside the template.</p>
<p><strong>Important! If you're using a custom template and want to keep
the same whitespace between releases, you may have to modify your
template.</strong>
(<code>[aio-libs#552](twisted/towncrier#552)
&lt;https://github.com/twisted/towncrier/issues/552&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Towncrier now vendors the click-default-group package that prevented
installations on modern Pips.
(<code>[aio-libs#540](twisted/towncrier#540)
&lt;https://github.com/twisted/towncrier/issues/540&gt;</code>_)</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>The markdown docs now use the default markdown template rather than
a simpler custom one.
(<code>[aio-libs#545](twisted/towncrier#545)
&lt;https://github.com/twisted/towncrier/issues/545&gt;</code>_)</li>
<li>Cleanup a duplicate backtick in the tutorial.
(<code>[aio-libs#551](twisted/towncrier#551)
&lt;https://github.com/twisted/towncrier/issues/551&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>The support for Python 3.7 has been dropped.
(<code>[aio-libs#521](twisted/towncrier#521)
&lt;https://github.com/twisted/towncrier/issues/521&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[aio-libs#481](twisted/towncrier#481)
&lt;https://github.com/twisted/towncrier/issues/481&gt;</code><em>,
<code>[aio-libs#520](twisted/towncrier#520)
&lt;https://github.com/twisted/towncrier/issues/520&gt;</code></em>,
<code>[aio-libs#522](twisted/towncrier#522)
&lt;https://github.com/twisted/towncrier/issues/522&gt;</code><em>,
<code>[aio-libs#523](twisted/towncrier#523)
&lt;https://github.com/twisted/towncrier/issues/523&gt;</code></em>,
<code>[aio-libs#529](twisted/towncrier#529)
&lt;https://github.com/twisted/towncrier/issues/529&gt;</code><em>,
<code>[aio-libs#536](twisted/towncrier#536)
&lt;https://github.com/twisted/towncrier/issues/536&gt;</code></em></li>
</ul>
<h2>Towncrier 23.10.0rc1</h2>
<h1>towncrier 23.10.0rc1 (2023-10-23)</h1>
<h2>Features</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 23.10.0 (2023-10-24)</h1>
<p>No significant changes since the previous release candidate.</p>
<h2>Features</h2>
<ul>
<li>
<p>Python 3.12 is now officially supported.
(<code>[aio-libs#541](twisted/towncrier#541)
&lt;https://github.com/twisted/towncrier/issues/541&gt;</code>_)</p>
</li>
<li>
<p>Initial support was added for monorepo-style setup.
One project with multiple independent news files stored in separate
sub-directories, that share the same towncrier config.
(<code>[aio-libs#548](twisted/towncrier#548)
&lt;https://github.com/twisted/towncrier/issues/548&gt;</code>_)</p>
</li>
<li>
<p>Two newlines are no longer always added between the current release
notes and the previous content.
The newlines are now defined only inside the template.</p>
<p><strong>Important! If you're using a custom template and want to keep
the same whitespace between releases, you may have to modify your
template.</strong>
(<code>[aio-libs#552](twisted/towncrier#552)
&lt;https://github.com/twisted/towncrier/issues/552&gt;</code>_)</p>
</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Towncrier now vendors the click-default-group package that prevented
installations on modern Pips.
(<code>[aio-libs#540](twisted/towncrier#540)
&lt;https://github.com/twisted/towncrier/issues/540&gt;</code>_)</li>
</ul>
<h2>Improved Documentation</h2>
<ul>
<li>The markdown docs now use the default markdown template rather than
a simpler custom one.
(<code>[aio-libs#545](twisted/towncrier#545)
&lt;https://github.com/twisted/towncrier/issues/545&gt;</code>_)</li>
<li>Cleanup a duplicate backtick in the tutorial.
(<code>[aio-libs#551](twisted/towncrier#551)
&lt;https://github.com/twisted/towncrier/issues/551&gt;</code>_)</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>The support for Python 3.7 has been dropped.
(<code>[aio-libs#521](twisted/towncrier#521)
&lt;https://github.com/twisted/towncrier/issues/521&gt;</code>_)</li>
</ul>
<h2>Misc</h2>
<ul>
<li><code>[aio-libs#481](twisted/towncrier#481)
&lt;https://github.com/twisted/towncrier/issues/481&gt;</code><em>,
<code>[aio-libs#520](twisted/towncrier#520)
&lt;https://github.com/twisted/towncrier/issues/520&gt;</code></em>,
<code>[aio-libs#522](twisted/towncrier#522)
&lt;https://github.com/twisted/towncrier/issues/522&gt;</code><em>,
<code>[aio-libs#523](twisted/towncrier#523)
&lt;https://github.com/twisted/towncrier/issues/523&gt;</code></em>,
<code>[aio-libs#529](twisted/towncrier#529)
&lt;https://github.com/twisted/towncrier/issues/529&gt;</code><em>,
<code>[aio-libs#536](twisted/towncrier#536)
&lt;https://github.com/twisted/towncrier/issues/536&gt;</code></em></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/twisted/towncrier/commit/347e9440ae8507adfc22f5c993f4496b20d49ec5"><code>347e944</code></a>
Update for final release.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/ee857403c9a09ca7055f93dd8784e84b5cc2bb3a"><code>ee85740</code></a>
Do RC1 instead of RC0.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/0c3b82c9be435e23019b7064a57fbd7210f54300"><code>0c3b82c</code></a>
venv/bin/towncrier build --yes</li>
<li><a
href="https://github.com/twisted/towncrier/commit/610247f8e0e2146cadb9f46937047dc08f923eab"><code>610247f</code></a>
Update version.</li>
<li><a
href="https://github.com/twisted/towncrier/commit/0b023fa95926470482418d4e11f9ae9f0ada7d56"><code>0b023fa</code></a>
Config location separate from directory containing news file and
fragments (#...</li>
<li><a
href="https://github.com/twisted/towncrier/commit/3f24b6ef7e0c17f3e559b957526598c287774b70"><code>3f24b6e</code></a>
Whitespace between releases can be configured in the template. (<a
href="https://redirect.github.com/twisted/towncrier/issues/553">#553</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/7f37ab5daa72f5a761db1bf14cba1e2d3d87422d"><code>7f37ab5</code></a>
docs(tutorial): Cleanup duplicate backtick typo (<a
href="https://redirect.github.com/twisted/towncrier/issues/551">#551</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/5b732be979642c5b9ab4d22df6fb70ff4bd3ff2f"><code>5b732be</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/twisted/towncrier/issues/549">#549</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/239f84102c374e7395cdc0a50f7b4171cc8c3e83"><code>239f841</code></a>
use markdown default template in markdown docs (<a
href="https://redirect.github.com/twisted/towncrier/issues/546">#546</a>)</li>
<li><a
href="https://github.com/twisted/towncrier/commit/806bec1248b0ea8b86db21e0ce90b1849d3cd721"><code>806bec1</code></a>
Add 3.12 (<a
href="https://redirect.github.com/twisted/towncrier/issues/541">#541</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/twisted/towncrier/compare/23.6.0...23.10.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=23.6.0&new-version=23.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually 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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@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>
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.

2 participants