Copilot commented on code in PR #61422:
URL: https://github.com/apache/airflow/pull/61422#discussion_r3070079752


##########
dev/breeze/src/airflow_breeze/commands/release_management_commands.py:
##########
@@ -759,6 +763,35 @@ def prepare_airflow_ctl_distributions(
     )
 
 
+@release_management_group.command(
+    name="prepare-mypy-distributions",
+    help="Prepare sdist/whl distributions of Apache Airflow Mypy.",
+)
+@option_distribution_format
+@option_version_suffix
+@option_use_local_hatch
+@option_verbose
+@option_dry_run
+def prepare_mypy_distributions(
+    distribution_format: str,
+    version_suffix: str,
+    use_local_hatch: bool,
+):
+    _prepare_non_core_distributions(
+        # Argument parameters
+        distribution_format=distribution_format,
+        version_suffix=version_suffix,
+        use_local_hatch=use_local_hatch,
+        # Distribution specific parameters
+        root_path=MYPY_ROOT_PATH,
+        init_file_path=MYPY_SOURCES_PATH / "airflow_mypy" / "__init__.py",
+        distribution_path=MYPY_DIST_PATH,
+        distribution_name="mypy",

Review Comment:
   `prepare-mypy-distributions` passes `distribution_name="mypy"` into 
`_prepare_non_core_distributions`, but that helper uses `distribution_name` to 
set the Docker workdir and copy path (`/opt/airflow/{distribution_name}`); the 
mypy project lives under `dev/mypy`, so Docker builds/copies will look in a 
non-existent `/opt/airflow/mypy` directory and fail unless `--use-local-hatch` 
is used. Consider passing the repo-relative path (e.g. `dev/mypy`) to the 
Docker workdir/copy logic (or extending `_prepare_non_core_distributions` with 
a separate `distribution_directory`/`workdir` parameter) while keeping a stable 
short name for container IDs/logging.
   ```suggestion
           distribution_name="dev/mypy",
   ```



##########
dev/README_RELEASE_MYPY.md:
##########
@@ -0,0 +1,243 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!-- START doctoc generated TOC please keep comment here to allow auto update 
-->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+**Table of contents**
+
+- [What the apache-airflow-mypy distribution 
is](#what-the-apache-airflow-mypy-distribution-is)
+- [Decide when to release](#decide-when-to-release)
+- [Versioning](#versioning)
+- [Prepare Regular apache-airflow-mypy distributions 
(RC)](#prepare-regular-apache-airflow-mypy-distributions-rc)
+  - [Generate release notes](#generate-release-notes)
+  - [Build apache-airflow-mypy distributions for SVN apache 
upload](#build-apache-airflow-mypy-distributions-for-svn-apache-upload)
+  - [Build and sign the source and convenience 
packages](#build-and-sign-the-source-and-convenience-packages)
+  - [Add tags in git](#add-tags-in-git)
+  - [Commit the source packages to Apache SVN 
repo](#commit-the-source-packages-to-apache-svn-repo)
+  - [Publish the distributions to PyPI (release 
candidates)](#publish-the-distributions-to-pypi-release-candidates)
+  - [Prepare voting email](#prepare-voting-email)
+  - [Verify the release candidate](#verify-the-release-candidate)
+- [Publish release](#publish-release)
+  - [Summarize the voting](#summarize-the-voting)
+  - [Publish release to SVN](#publish-release-to-svn)
+  - [Publish the packages to PyPI](#publish-the-packages-to-pypi)
+  - [Add tags in git](#add-tags-in-git-1)
+  - [Notify developers of release](#notify-developers-of-release)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+------------------------------------------------------------------------------------------------------------
+
+# What the apache-airflow-mypy distribution is
+
+The `apache-airflow-mypy` package provides Mypy plugins for Apache Airflow to 
enhance type checking capabilities.
+It includes plugins for typed decorators and operator output type handling.
+
+The Release Manager prepares `apache-airflow-mypy` packages separately from 
the main Airflow Release, using
+`breeze` commands and accompanying scripts. This document provides an overview 
of the command line tools
+needed to prepare the packages.
+
+# Decide when to release
+
+You can release `apache-airflow-mypy` distributions separately from the main 
Airflow on an ad-hoc basis,
+whenever we find that the mypy plugins need to be released - due to new 
features, bug fixes, or improvements
+to type checking support.
+
+# Versioning
+
+We are using the [SEMVER](https://semver.org/) versioning scheme for the 
`apache-airflow-mypy` distributions.
+This is to give users confidence about maintaining backwards compatibility in 
new releases.
+
+- **Major version** (X.0.0): Breaking changes to plugin interfaces or behavior
+- **Minor version** (0.X.0): New features, new plugins, or significant 
enhancements
+- **Patch version** (0.0.X): Bug fixes and minor improvements
+
+# Prepare Regular apache-airflow-mypy distributions (RC)
+
+## Generate release notes
+
+Before releasing, update the `RELEASE_NOTES.rst` file with the changes since 
the last release.
+You can use towncrier to generate release notes from newsfragments:
+
+```bash
+cd dev/mypy
+towncrier build --version <VERSION>
+```
+
+To preview the release notes without writing to the file:
+
+```bash
+towncrier build --version <VERSION> --draft
+```
+
+Review and edit the generated release notes as needed.
+
+## Build apache-airflow-mypy distributions for SVN apache upload
+
+The Release Manager can use the `breeze` tool to build the package:
+
+```bash
+breeze release-management prepare-mypy-distributions \
+    --distribution-format both \
+    --version-suffix-for-pypi rc1
+```
+
+## Build and sign the source and convenience packages
+
+Follow the same signing process as other Airflow packages:
+
+```bash
+cd dist
+for file in *.tar.gz *.whl; do
+    gpg --armor --detach-sign $file
+    sha512sum $file > $file.sha512
+done
+```
+
+## Add tags in git
+
+Tag the release candidate in git:
+
+```bash
+git tag -s apache-airflow-mypy-<VERSION>rc<RC> -m "Apache Airflow Mypy 
<VERSION>rc<RC>"
+git push origin apache-airflow-mypy-<VERSION>rc<RC>
+```
+
+## Commit the source packages to Apache SVN repo
+
+Follow the standard Apache release process for committing to the SVN 
repository.
+
+## Publish the distributions to PyPI (release candidates)
+
+Release candidates should be published to TestPyPI first:
+
+```bash
+twine upload --repository testpypi dist/apache_airflow.mypy-<VERSION>rc<RC>*
+```
+
+## Prepare voting email
+
+Send a voting email to [email protected] with the following template:
+
+```
+Subject: [VOTE] Release Apache Airflow Mypy <VERSION> based on <VERSION>rc<RC>
+
+Hello Apache Airflow Community,
+
+This is a call for the vote to release Apache Airflow Mypy version <VERSION>.
+
+The release candidate is available at:
+https://dist.apache.org/repos/dist/dev/airflow/apache-airflow-mypy-<VERSION>rc<RC>/
+
+The packages are available at TestPyPI:
+https://test.pypi.org/project/apache-airflow-mypy/<VERSION>rc<RC>/
+
+The vote will be open for at least 72 hours.
+
+[ ] +1 Approve the release
+[ ] +0 No opinion
+[ ] -1 Do not release (please provide specific comments)
+
+Only PMC votes are binding, but everyone is welcome to check and vote.
+
+Best regards,
+<YOUR NAME>
+```
+
+## Verify the release candidate
+
+Verify the release by:
+
+1. Installing from TestPyPI:
+
+   ```bash
+   pip install --index-url https://test.pypi.org/simple/ 
apache-airflow-mypy==<VERSION>rc<RC>
+   ```
+
+2. Testing the plugins in a mypy configuration:
+
+   ```ini
+   [mypy]
+   plugins = airflow.mypy.plugins.decorators, airflow.mypy.plugins.outputs
+   ```
+
+3. Running the test suite if available
+
+# Publish release
+
+## Summarize the voting
+
+Once the vote passes, summarize the results in a reply to the voting thread.
+
+## Publish release to SVN
+
+Move the release from dev to release in SVN:
+
+```bash
+svn mv 
https://dist.apache.org/repos/dist/dev/airflow/apache-airflow-mypy-<VERSION>rc<RC>
 \
+       
https://dist.apache.org/repos/dist/release/airflow/apache-airflow-mypy-<VERSION>
 \
+       -m "Release Apache Airflow Mypy <VERSION>"
+```
+
+## Publish the packages to PyPI
+
+Publish the final release to PyPI:
+
+```bash
+twine upload dist/apache_airflow.mypy-<VERSION>-py3-none-any.whl
+twine upload dist/apache_airflow.mypy-<VERSION>.tar.gz

Review Comment:
   The final-release `twine upload` commands also use `apache_airflow.mypy-...` 
filenames; these should match the actual wheel/sdist names produced for 
`apache-airflow-mypy` (typically `apache_airflow_mypy-...`).
   ```suggestion
   twine upload dist/apache_airflow_mypy-<VERSION>-py3-none-any.whl
   twine upload dist/apache_airflow_mypy-<VERSION>.tar.gz
   ```



##########
dev/breeze/src/airflow_breeze/commands/release_management_commands.py:
##########
@@ -759,6 +763,35 @@ def prepare_airflow_ctl_distributions(
     )
 
 
+@release_management_group.command(
+    name="prepare-mypy-distributions",
+    help="Prepare sdist/whl distributions of Apache Airflow Mypy.",
+)
+@option_distribution_format
+@option_version_suffix
+@option_use_local_hatch
+@option_verbose
+@option_dry_run
+def prepare_mypy_distributions(
+    distribution_format: str,
+    version_suffix: str,
+    use_local_hatch: bool,
+):
+    _prepare_non_core_distributions(
+        # Argument parameters
+        distribution_format=distribution_format,
+        version_suffix=version_suffix,
+        use_local_hatch=use_local_hatch,
+        # Distribution specific parameters
+        root_path=MYPY_ROOT_PATH,
+        init_file_path=MYPY_SOURCES_PATH / "airflow_mypy" / "__init__.py",
+        distribution_path=MYPY_DIST_PATH,
+        distribution_name="mypy",
+        distribution_pretty_name="Mypy",
+        full_distribution_pretty_name="Apache Airflow Mypy",
+    )

Review Comment:
   When `--use-local-hatch` is enabled, `_prepare_non_core_distributions` calls 
`DistributionPackageInfo.dist_packages(... 
build_type=DistributionBuildType(distribution_name))`. With 
`distribution_name="mypy"`, this becomes `DistributionBuildType.MYPY`, but 
`dist_packages()` doesn’t special-case that build type and falls back to 
provider glob patterns, so it won’t discover the built `apache_airflow_mypy*` 
artifacts for the sdist→wheel checks/listing. Add MYPY handling in 
`dist_packages()` (glob prefix `apache_airflow_mypy`).



##########
dev/README_RELEASE_MYPY.md:
##########
@@ -0,0 +1,243 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!-- START doctoc generated TOC please keep comment here to allow auto update 
-->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+**Table of contents**
+
+- [What the apache-airflow-mypy distribution 
is](#what-the-apache-airflow-mypy-distribution-is)
+- [Decide when to release](#decide-when-to-release)
+- [Versioning](#versioning)
+- [Prepare Regular apache-airflow-mypy distributions 
(RC)](#prepare-regular-apache-airflow-mypy-distributions-rc)
+  - [Generate release notes](#generate-release-notes)
+  - [Build apache-airflow-mypy distributions for SVN apache 
upload](#build-apache-airflow-mypy-distributions-for-svn-apache-upload)
+  - [Build and sign the source and convenience 
packages](#build-and-sign-the-source-and-convenience-packages)
+  - [Add tags in git](#add-tags-in-git)
+  - [Commit the source packages to Apache SVN 
repo](#commit-the-source-packages-to-apache-svn-repo)
+  - [Publish the distributions to PyPI (release 
candidates)](#publish-the-distributions-to-pypi-release-candidates)
+  - [Prepare voting email](#prepare-voting-email)
+  - [Verify the release candidate](#verify-the-release-candidate)
+- [Publish release](#publish-release)
+  - [Summarize the voting](#summarize-the-voting)
+  - [Publish release to SVN](#publish-release-to-svn)
+  - [Publish the packages to PyPI](#publish-the-packages-to-pypi)
+  - [Add tags in git](#add-tags-in-git-1)
+  - [Notify developers of release](#notify-developers-of-release)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+------------------------------------------------------------------------------------------------------------
+
+# What the apache-airflow-mypy distribution is
+
+The `apache-airflow-mypy` package provides Mypy plugins for Apache Airflow to 
enhance type checking capabilities.
+It includes plugins for typed decorators and operator output type handling.
+
+The Release Manager prepares `apache-airflow-mypy` packages separately from 
the main Airflow Release, using
+`breeze` commands and accompanying scripts. This document provides an overview 
of the command line tools
+needed to prepare the packages.
+
+# Decide when to release
+
+You can release `apache-airflow-mypy` distributions separately from the main 
Airflow on an ad-hoc basis,
+whenever we find that the mypy plugins need to be released - due to new 
features, bug fixes, or improvements
+to type checking support.
+
+# Versioning
+
+We are using the [SEMVER](https://semver.org/) versioning scheme for the 
`apache-airflow-mypy` distributions.
+This is to give users confidence about maintaining backwards compatibility in 
new releases.
+
+- **Major version** (X.0.0): Breaking changes to plugin interfaces or behavior
+- **Minor version** (0.X.0): New features, new plugins, or significant 
enhancements
+- **Patch version** (0.0.X): Bug fixes and minor improvements
+
+# Prepare Regular apache-airflow-mypy distributions (RC)
+
+## Generate release notes
+
+Before releasing, update the `RELEASE_NOTES.rst` file with the changes since 
the last release.
+You can use towncrier to generate release notes from newsfragments:
+
+```bash
+cd dev/mypy
+towncrier build --version <VERSION>
+```
+
+To preview the release notes without writing to the file:
+
+```bash
+towncrier build --version <VERSION> --draft
+```
+
+Review and edit the generated release notes as needed.
+
+## Build apache-airflow-mypy distributions for SVN apache upload
+
+The Release Manager can use the `breeze` tool to build the package:
+
+```bash
+breeze release-management prepare-mypy-distributions \
+    --distribution-format both \
+    --version-suffix-for-pypi rc1
+```
+
+## Build and sign the source and convenience packages
+
+Follow the same signing process as other Airflow packages:
+
+```bash
+cd dist
+for file in *.tar.gz *.whl; do
+    gpg --armor --detach-sign $file
+    sha512sum $file > $file.sha512
+done
+```
+
+## Add tags in git
+
+Tag the release candidate in git:
+
+```bash
+git tag -s apache-airflow-mypy-<VERSION>rc<RC> -m "Apache Airflow Mypy 
<VERSION>rc<RC>"
+git push origin apache-airflow-mypy-<VERSION>rc<RC>
+```
+
+## Commit the source packages to Apache SVN repo
+
+Follow the standard Apache release process for committing to the SVN 
repository.
+
+## Publish the distributions to PyPI (release candidates)
+
+Release candidates should be published to TestPyPI first:
+
+```bash
+twine upload --repository testpypi dist/apache_airflow.mypy-<VERSION>rc<RC>*
+```
+
+## Prepare voting email
+
+Send a voting email to [email protected] with the following template:
+
+```
+Subject: [VOTE] Release Apache Airflow Mypy <VERSION> based on <VERSION>rc<RC>
+
+Hello Apache Airflow Community,
+
+This is a call for the vote to release Apache Airflow Mypy version <VERSION>.
+
+The release candidate is available at:
+https://dist.apache.org/repos/dist/dev/airflow/apache-airflow-mypy-<VERSION>rc<RC>/
+
+The packages are available at TestPyPI:
+https://test.pypi.org/project/apache-airflow-mypy/<VERSION>rc<RC>/
+
+The vote will be open for at least 72 hours.
+
+[ ] +1 Approve the release
+[ ] +0 No opinion
+[ ] -1 Do not release (please provide specific comments)
+
+Only PMC votes are binding, but everyone is welcome to check and vote.
+
+Best regards,
+<YOUR NAME>
+```
+
+## Verify the release candidate
+
+Verify the release by:
+
+1. Installing from TestPyPI:
+
+   ```bash
+   pip install --index-url https://test.pypi.org/simple/ 
apache-airflow-mypy==<VERSION>rc<RC>
+   ```
+
+2. Testing the plugins in a mypy configuration:
+
+   ```ini
+   [mypy]
+   plugins = airflow.mypy.plugins.decorators, airflow.mypy.plugins.outputs
+   ```

Review Comment:
   The mypy configuration examples reference `airflow.mypy.plugins.*`, but the 
package/modules introduced in this PR are `airflow_mypy.plugins.*` (as also 
configured in the repo’s `pyproject.toml`). Update the docs so users can 
actually import/load the plugins after `pip install apache-airflow-mypy`.



##########
dev/README_RELEASE_MYPY.md:
##########
@@ -0,0 +1,243 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!-- START doctoc generated TOC please keep comment here to allow auto update 
-->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+**Table of contents**
+
+- [What the apache-airflow-mypy distribution 
is](#what-the-apache-airflow-mypy-distribution-is)
+- [Decide when to release](#decide-when-to-release)
+- [Versioning](#versioning)
+- [Prepare Regular apache-airflow-mypy distributions 
(RC)](#prepare-regular-apache-airflow-mypy-distributions-rc)
+  - [Generate release notes](#generate-release-notes)
+  - [Build apache-airflow-mypy distributions for SVN apache 
upload](#build-apache-airflow-mypy-distributions-for-svn-apache-upload)
+  - [Build and sign the source and convenience 
packages](#build-and-sign-the-source-and-convenience-packages)
+  - [Add tags in git](#add-tags-in-git)
+  - [Commit the source packages to Apache SVN 
repo](#commit-the-source-packages-to-apache-svn-repo)
+  - [Publish the distributions to PyPI (release 
candidates)](#publish-the-distributions-to-pypi-release-candidates)
+  - [Prepare voting email](#prepare-voting-email)
+  - [Verify the release candidate](#verify-the-release-candidate)
+- [Publish release](#publish-release)
+  - [Summarize the voting](#summarize-the-voting)
+  - [Publish release to SVN](#publish-release-to-svn)
+  - [Publish the packages to PyPI](#publish-the-packages-to-pypi)
+  - [Add tags in git](#add-tags-in-git-1)
+  - [Notify developers of release](#notify-developers-of-release)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+------------------------------------------------------------------------------------------------------------
+
+# What the apache-airflow-mypy distribution is
+
+The `apache-airflow-mypy` package provides Mypy plugins for Apache Airflow to 
enhance type checking capabilities.
+It includes plugins for typed decorators and operator output type handling.
+
+The Release Manager prepares `apache-airflow-mypy` packages separately from 
the main Airflow Release, using
+`breeze` commands and accompanying scripts. This document provides an overview 
of the command line tools
+needed to prepare the packages.
+
+# Decide when to release
+
+You can release `apache-airflow-mypy` distributions separately from the main 
Airflow on an ad-hoc basis,
+whenever we find that the mypy plugins need to be released - due to new 
features, bug fixes, or improvements
+to type checking support.
+
+# Versioning
+
+We are using the [SEMVER](https://semver.org/) versioning scheme for the 
`apache-airflow-mypy` distributions.
+This is to give users confidence about maintaining backwards compatibility in 
new releases.
+
+- **Major version** (X.0.0): Breaking changes to plugin interfaces or behavior
+- **Minor version** (0.X.0): New features, new plugins, or significant 
enhancements
+- **Patch version** (0.0.X): Bug fixes and minor improvements
+
+# Prepare Regular apache-airflow-mypy distributions (RC)
+
+## Generate release notes
+
+Before releasing, update the `RELEASE_NOTES.rst` file with the changes since 
the last release.
+You can use towncrier to generate release notes from newsfragments:
+
+```bash
+cd dev/mypy
+towncrier build --version <VERSION>
+```
+
+To preview the release notes without writing to the file:
+
+```bash
+towncrier build --version <VERSION> --draft
+```
+
+Review and edit the generated release notes as needed.
+
+## Build apache-airflow-mypy distributions for SVN apache upload
+
+The Release Manager can use the `breeze` tool to build the package:
+
+```bash
+breeze release-management prepare-mypy-distributions \
+    --distribution-format both \
+    --version-suffix-for-pypi rc1
+```
+
+## Build and sign the source and convenience packages
+
+Follow the same signing process as other Airflow packages:
+
+```bash
+cd dist
+for file in *.tar.gz *.whl; do
+    gpg --armor --detach-sign $file
+    sha512sum $file > $file.sha512
+done
+```
+
+## Add tags in git
+
+Tag the release candidate in git:
+
+```bash
+git tag -s apache-airflow-mypy-<VERSION>rc<RC> -m "Apache Airflow Mypy 
<VERSION>rc<RC>"
+git push origin apache-airflow-mypy-<VERSION>rc<RC>
+```
+
+## Commit the source packages to Apache SVN repo
+
+Follow the standard Apache release process for committing to the SVN 
repository.
+
+## Publish the distributions to PyPI (release candidates)
+
+Release candidates should be published to TestPyPI first:
+
+```bash
+twine upload --repository testpypi dist/apache_airflow.mypy-<VERSION>rc<RC>*
+```
+
+## Prepare voting email
+
+Send a voting email to [email protected] with the following template:
+
+```
+Subject: [VOTE] Release Apache Airflow Mypy <VERSION> based on <VERSION>rc<RC>
+
+Hello Apache Airflow Community,
+
+This is a call for the vote to release Apache Airflow Mypy version <VERSION>.
+
+The release candidate is available at:
+https://dist.apache.org/repos/dist/dev/airflow/apache-airflow-mypy-<VERSION>rc<RC>/
+
+The packages are available at TestPyPI:
+https://test.pypi.org/project/apache-airflow-mypy/<VERSION>rc<RC>/
+
+The vote will be open for at least 72 hours.
+
+[ ] +1 Approve the release
+[ ] +0 No opinion
+[ ] -1 Do not release (please provide specific comments)
+
+Only PMC votes are binding, but everyone is welcome to check and vote.
+
+Best regards,
+<YOUR NAME>
+```
+
+## Verify the release candidate
+
+Verify the release by:
+
+1. Installing from TestPyPI:
+
+   ```bash
+   pip install --index-url https://test.pypi.org/simple/ 
apache-airflow-mypy==<VERSION>rc<RC>
+   ```
+
+2. Testing the plugins in a mypy configuration:
+
+   ```ini
+   [mypy]
+   plugins = airflow.mypy.plugins.decorators, airflow.mypy.plugins.outputs
+   ```
+
+3. Running the test suite if available
+
+# Publish release
+
+## Summarize the voting
+
+Once the vote passes, summarize the results in a reply to the voting thread.
+
+## Publish release to SVN
+
+Move the release from dev to release in SVN:
+
+```bash
+svn mv 
https://dist.apache.org/repos/dist/dev/airflow/apache-airflow-mypy-<VERSION>rc<RC>
 \
+       
https://dist.apache.org/repos/dist/release/airflow/apache-airflow-mypy-<VERSION>
 \
+       -m "Release Apache Airflow Mypy <VERSION>"
+```
+
+## Publish the packages to PyPI
+
+Publish the final release to PyPI:
+
+```bash
+twine upload dist/apache_airflow.mypy-<VERSION>-py3-none-any.whl
+twine upload dist/apache_airflow.mypy-<VERSION>.tar.gz
+```
+
+## Add tags in git
+
+Tag the final release:
+
+```bash
+git tag -s apache-airflow-mypy-<VERSION> -m "Apache Airflow Mypy <VERSION>"
+git push origin apache-airflow-mypy-<VERSION>
+```
+
+## Notify developers of release
+
+Send an announcement email to [email protected] and [email protected]:
+
+```
+Subject: [ANNOUNCE] Apache Airflow Mypy <VERSION> released
+
+The Apache Airflow team is pleased to announce the release of Apache Airflow 
Mypy <VERSION>.
+
+Apache Airflow Mypy provides Mypy plugins for Apache Airflow to enhance type 
checking capabilities.
+
+The release is available at:
+https://pypi.org/project/apache-airflow-mypy/<VERSION>/
+
+Release notes:
+https://github.com/apache/airflow/blob/main/dev/mypy/RELEASE_NOTES.rst
+
+Installation:
+pip install apache-airflow-mypy
+
+Usage:
+Add to your mypy configuration:
+[mypy]
+plugins = airflow.mypy.plugins.decorators, airflow.mypy.plugins.outputs

Review Comment:
   The announce-email template repeats the `airflow.mypy.plugins.*` module 
path; it should use `airflow_mypy.plugins.*` to match the installable package 
created by this PR.
   ```suggestion
   plugins = airflow_mypy.plugins.decorators, airflow_mypy.plugins.outputs
   ```



##########
dev/README_RELEASE_MYPY.md:
##########
@@ -0,0 +1,243 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!-- START doctoc generated TOC please keep comment here to allow auto update 
-->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+**Table of contents**
+
+- [What the apache-airflow-mypy distribution 
is](#what-the-apache-airflow-mypy-distribution-is)
+- [Decide when to release](#decide-when-to-release)
+- [Versioning](#versioning)
+- [Prepare Regular apache-airflow-mypy distributions 
(RC)](#prepare-regular-apache-airflow-mypy-distributions-rc)
+  - [Generate release notes](#generate-release-notes)
+  - [Build apache-airflow-mypy distributions for SVN apache 
upload](#build-apache-airflow-mypy-distributions-for-svn-apache-upload)
+  - [Build and sign the source and convenience 
packages](#build-and-sign-the-source-and-convenience-packages)
+  - [Add tags in git](#add-tags-in-git)
+  - [Commit the source packages to Apache SVN 
repo](#commit-the-source-packages-to-apache-svn-repo)
+  - [Publish the distributions to PyPI (release 
candidates)](#publish-the-distributions-to-pypi-release-candidates)
+  - [Prepare voting email](#prepare-voting-email)
+  - [Verify the release candidate](#verify-the-release-candidate)
+- [Publish release](#publish-release)
+  - [Summarize the voting](#summarize-the-voting)
+  - [Publish release to SVN](#publish-release-to-svn)
+  - [Publish the packages to PyPI](#publish-the-packages-to-pypi)
+  - [Add tags in git](#add-tags-in-git-1)
+  - [Notify developers of release](#notify-developers-of-release)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+------------------------------------------------------------------------------------------------------------
+
+# What the apache-airflow-mypy distribution is
+
+The `apache-airflow-mypy` package provides Mypy plugins for Apache Airflow to 
enhance type checking capabilities.
+It includes plugins for typed decorators and operator output type handling.
+
+The Release Manager prepares `apache-airflow-mypy` packages separately from 
the main Airflow Release, using
+`breeze` commands and accompanying scripts. This document provides an overview 
of the command line tools
+needed to prepare the packages.
+
+# Decide when to release
+
+You can release `apache-airflow-mypy` distributions separately from the main 
Airflow on an ad-hoc basis,
+whenever we find that the mypy plugins need to be released - due to new 
features, bug fixes, or improvements
+to type checking support.
+
+# Versioning
+
+We are using the [SEMVER](https://semver.org/) versioning scheme for the 
`apache-airflow-mypy` distributions.
+This is to give users confidence about maintaining backwards compatibility in 
new releases.
+
+- **Major version** (X.0.0): Breaking changes to plugin interfaces or behavior
+- **Minor version** (0.X.0): New features, new plugins, or significant 
enhancements
+- **Patch version** (0.0.X): Bug fixes and minor improvements
+
+# Prepare Regular apache-airflow-mypy distributions (RC)
+
+## Generate release notes
+
+Before releasing, update the `RELEASE_NOTES.rst` file with the changes since 
the last release.
+You can use towncrier to generate release notes from newsfragments:
+
+```bash
+cd dev/mypy
+towncrier build --version <VERSION>
+```
+
+To preview the release notes without writing to the file:
+
+```bash
+towncrier build --version <VERSION> --draft
+```
+
+Review and edit the generated release notes as needed.
+
+## Build apache-airflow-mypy distributions for SVN apache upload
+
+The Release Manager can use the `breeze` tool to build the package:
+
+```bash
+breeze release-management prepare-mypy-distributions \
+    --distribution-format both \
+    --version-suffix-for-pypi rc1
+```
+
+## Build and sign the source and convenience packages
+
+Follow the same signing process as other Airflow packages:
+
+```bash
+cd dist
+for file in *.tar.gz *.whl; do
+    gpg --armor --detach-sign $file
+    sha512sum $file > $file.sha512
+done
+```
+
+## Add tags in git
+
+Tag the release candidate in git:
+
+```bash
+git tag -s apache-airflow-mypy-<VERSION>rc<RC> -m "Apache Airflow Mypy 
<VERSION>rc<RC>"
+git push origin apache-airflow-mypy-<VERSION>rc<RC>
+```
+
+## Commit the source packages to Apache SVN repo
+
+Follow the standard Apache release process for committing to the SVN 
repository.
+
+## Publish the distributions to PyPI (release candidates)
+
+Release candidates should be published to TestPyPI first:
+
+```bash
+twine upload --repository testpypi dist/apache_airflow.mypy-<VERSION>rc<RC>*

Review Comment:
   The documented artifact names use `apache_airflow.mypy-...` (dot) in the 
`twine upload` examples, but the distribution name `apache-airflow-mypy` will 
produce files like `apache_airflow_mypy-...` (underscore). Update the 
glob/filenames so the upload commands match the actual build outputs.
   ```suggestion
   twine upload --repository testpypi dist/apache_airflow_mypy-<VERSION>rc<RC>*
   ```



##########
dev/breeze/doc/09_release_management_tasks.rst:
##########
@@ -894,6 +894,32 @@ If you pass ``--tag`` fag, the distribution will create a 
source tarball release
   :width: 100%
   :alt: Breeze release-management prepare-airflow-ctl-distributions
 
+Preparing Apache Airflow Mypy distributions
+""""""""""""""""""""""""""""""""""""""""""""
+
+You can prepare Apache Airflow Mypy distributions using Breeze:
+
+.. code-block:: bash
+
+     breeze release-management prepare-mypy-distributions
+
+This prepares Apache Airflow Mypy .whl package in the dist folder.
+
+Again, you can specify optional ``--distribution-format`` flag to build 
selected formats of the Mypy distributions,
+default is to build ``both`` type of distributions ``sdist`` and ``wheel``.
+
+.. code-block:: bash
+
+     breeze release-management prepare-mypy-distributions 
--distribution-format=wheel
+
+If you pass ``--tag`` fag, the distribution will create a source tarball 
release along with sdist.
+``--tag`` flag corresponds to actual tag in git.
+

Review Comment:
   This section says the default `--distribution-format` is `both`, but 
Breeze’s `--distribution-format` default is `wheel` (see 
`ALLOWED_DISTRIBUTION_FORMATS = ["wheel", "sdist", "both"]`). Also, `--tag` is 
mentioned here but `prepare-mypy-distributions` doesn’t define a `--tag` 
option, and `fag` appears to be a typo for `flag`. Please align the docs with 
the actual CLI options/behavior.
   ```suggestion
   Again, you can specify the optional ``--distribution-format`` flag to build 
selected formats of the
   Mypy distributions. The default is ``wheel``.
   
   .. code-block:: bash
   
        breeze release-management prepare-mypy-distributions 
--distribution-format=wheel
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to