From bc8b188201d2afee14ccfa6bab17bf103d4f9d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Sat, 7 Nov 2026 16:09:46 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Add=20an=20agent=20skills=20note?= =?UTF-8?q?=20to=20GitHub=20releases=20(#16696)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/prepare_release.py | 10 +++++----- tests/test_prepare_release.py | 31 ++++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/scripts/prepare_release.py b/scripts/prepare_release.py index 5a1ce90e17..df13053090 100644 --- a/scripts/prepare_release.py +++ b/scripts/prepare_release.py @@ -18,6 +18,8 @@ hide: """ LATEST_CHANGES_HEADER = "## Latest Changes" +AGENT_SKILLS_NOTE = """> FastAPI includes an official skill that helps coding agents use new features and recommended patterns for your installed version. Install it with `uvx library-skills` in your project. See [Develop with AI](https://fastapi.tiangolo.com/ai-development/). +""" BumpType = Literal["major", "minor", "patch"] app = typer.Typer() @@ -204,12 +206,10 @@ def release_notes( ], ) -> None: version = get_current_version(version_file.read_text(), version_file) - typer.echo( - get_release_notes_body( - release_notes_file.read_text(), version, release_notes_file - ), - nl=False, + body = get_release_notes_body( + release_notes_file.read_text(), version, release_notes_file ) + typer.echo(f"{AGENT_SKILLS_NOTE}\n{body}", nl=False) if __name__ == "__main__": diff --git a/tests/test_prepare_release.py b/tests/test_prepare_release.py index b46d2283b0..e5394b930c 100644 --- a/tests/test_prepare_release.py +++ b/tests/test_prepare_release.py @@ -274,23 +274,33 @@ def test_cli_prints_current_version(tmp_path: Path) -> None: assert result.output == "0.136.3\n" -def test_cli_prints_release_notes(tmp_path: Path) -> None: +def test_cli_prints_release_notes_with_agent_skills_note(tmp_path: Path) -> None: version_file = tmp_path / "fastapi" / "__init__.py" version_file.parent.mkdir() - version_file.write_text('__version__ = "0.136.4"\n') + version_content = '__version__ = "0.136.4"\n' + version_file.write_text(version_content) release_notes_file = tmp_path / "release-notes.md" - release_notes_file.write_text( - release_notes_content( - """## Latest Changes + notes_content = release_notes_content( + """## Latest Changes + +### Fixes + +* Unreleased fix. ## 0.136.4 (2026-05-30) ### Fixes * Fix something. + +## 0.136.3 (2026-05-23) + +### Fixes + +* Previous fix. """ - ) ) + release_notes_file.write_text(notes_content) result = runner.invoke( app, @@ -304,4 +314,11 @@ def test_cli_prints_release_notes(tmp_path: Path) -> None: ) assert result.exit_code == 0, result.output - assert result.output == "### Fixes\n\n* Fix something.\n" + note, separator, body = result.output.partition("\n\n") + assert note.startswith("> ") + assert note.count("`uvx library-skills`") == 1 + assert "[Develop with AI](https://fastapi.tiangolo.com/ai-development/)" in note + assert separator + assert body == "### Fixes\n\n* Fix something.\n" + assert release_notes_file.read_text() == notes_content + assert version_file.read_text() == version_content