*: Add 'from __future__ import annotations'
Change-Id: I4a68e91d3135518d1cf976a93b72176feb2859e5
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/229320
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
diff --git a/recipe_modules/bazel/__init__.py b/recipe_modules/bazel/__init__.py
index 7e8fb55..0b3cf54 100644
--- a/recipe_modules/bazel/__init__.py
+++ b/recipe_modules/bazel/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/buildbucket_util',
'recipe_engine/buildbucket',
diff --git a/recipe_modules/bazel/test_api.py b/recipe_modules/bazel/test_api.py
index 265ce9b..af52284 100644
--- a/recipe_modules/bazel/test_api.py
+++ b/recipe_modules/bazel/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for bazel module."""
+from __future__ import annotations
+
import re
from PB.recipe_modules.pigweed.bazel.options import BazelInvocation, Options
diff --git a/recipe_modules/build/__init__.py b/recipe_modules/build/__init__.py
index 521ed57..ab9da87 100644
--- a/recipe_modules/build/__init__.py
+++ b/recipe_modules/build/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'pigweed/default_timeout',
'recipe_engine/cas',
diff --git a/recipe_modules/build/test_api.py b/recipe_modules/build/test_api.py
index 0e59e2f..da18dab 100644
--- a/recipe_modules/build/test_api.py
+++ b/recipe_modules/build/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for build."""
+from __future__ import annotations
+
from PB.recipe_modules.pigweed.build import options
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/build/tests/full.py b/recipe_modules/build/tests/full.py
index 413eefb..1f71e42 100644
--- a/recipe_modules/build/tests/full.py
+++ b/recipe_modules/build/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of build module."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipe_modules.pigweed.build.tests.full import InputProperties
diff --git a/recipe_modules/checkout/__init__.py b/recipe_modules/checkout/__init__.py
index 4d22e07..e768f07 100644
--- a/recipe_modules/checkout/__init__.py
+++ b/recipe_modules/checkout/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/cache',
'fuchsia/gerrit',
diff --git a/recipe_modules/checkout/resources/submodule_status.py b/recipe_modules/checkout/resources/submodule_status.py
index 677c6be..230f7ee 100755
--- a/recipe_modules/checkout/resources/submodule_status.py
+++ b/recipe_modules/checkout/resources/submodule_status.py
@@ -15,6 +15,8 @@
# TODO: mohrr - Write unit tests for this.
+from __future__ import annotations
+
import argparse
import configparser
import json
diff --git a/recipe_modules/checkout/test_api.py b/recipe_modules/checkout/test_api.py
index 4d7c12d..10d12cf 100644
--- a/recipe_modules/checkout/test_api.py
+++ b/recipe_modules/checkout/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for checkout."""
+from __future__ import annotations
+
import collections
import urllib
diff --git a/recipe_modules/checkout/tests/git.py b/recipe_modules/checkout/tests/git.py
index 59aa845..fe38ddd 100644
--- a/recipe_modules/checkout/tests/git.py
+++ b/recipe_modules/checkout/tests/git.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of non-repo non-submodule functionality of checkout module."""
+from __future__ import annotations
+
from typing import Generator
from PB.go.chromium.org.luci.scheduler.api.scheduler.v1 import (
diff --git a/recipe_modules/checkout/tests/repo.py b/recipe_modules/checkout/tests/repo.py
index eaecbe7..5f6ae50 100644
--- a/recipe_modules/checkout/tests/repo.py
+++ b/recipe_modules/checkout/tests/repo.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of repo functionality in checkout module."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipe_modules.pigweed.checkout.tests.properties import InputProperties
diff --git a/recipe_modules/checkout/tests/submodule.py b/recipe_modules/checkout/tests/submodule.py
index dd34efb..16ab598 100644
--- a/recipe_modules/checkout/tests/submodule.py
+++ b/recipe_modules/checkout/tests/submodule.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of submodule functionality of checkout module."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipe_modules.pigweed.checkout.tests.properties import InputProperties
diff --git a/recipe_modules/checkout/tests/workspace.py b/recipe_modules/checkout/tests/workspace.py
index 0eb83a5..181e3dd 100644
--- a/recipe_modules/checkout/tests/workspace.py
+++ b/recipe_modules/checkout/tests/workspace.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of non-repo non-submodule functionality of checkout module."""
+from __future__ import annotations
+
from typing import Generator
from PB.go.chromium.org.luci.scheduler.api.scheduler.v1 import (
diff --git a/recipe_modules/ci_status/__init__.py b/recipe_modules/ci_status/__init__.py
index b0c5f37..b9cc299 100644
--- a/recipe_modules/ci_status/__init__.py
+++ b/recipe_modules/ci_status/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/builder_status',
'fuchsia/recipe_testing',
diff --git a/recipe_modules/ci_status/api.py b/recipe_modules/ci_status/api.py
index 6c95845..46a409f 100644
--- a/recipe_modules/ci_status/api.py
+++ b/recipe_modules/ci_status/api.py
@@ -13,6 +13,8 @@
# the License.
"""Do different things based on the status of builders in CI."""
+from __future__ import annotations
+
import re
from typing import Sequence
diff --git a/recipe_modules/ci_status/tests/exit_early_in_recipe_testing_if_failing.py b/recipe_modules/ci_status/tests/exit_early_in_recipe_testing_if_failing.py
index 25c708b..77d31e8 100644
--- a/recipe_modules/ci_status/tests/exit_early_in_recipe_testing_if_failing.py
+++ b/recipe_modules/ci_status/tests/exit_early_in_recipe_testing_if_failing.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of ci_status.exit_early_in_recipe_testing_if_failing()."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import post_process, recipe_test_api
diff --git a/recipe_modules/ci_status/tests/transform_bucket_name.py b/recipe_modules/ci_status/tests/transform_bucket_name.py
index aacb99f..fcff274 100644
--- a/recipe_modules/ci_status/tests/transform_bucket_name.py
+++ b/recipe_modules/ci_status/tests/transform_bucket_name.py
@@ -13,6 +13,8 @@
# the License.
"""Test of ci_status.transform_bucket_name()."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipe_modules.pigweed.ci_status.tests.transform_bucket_name import (
diff --git a/recipe_modules/cipd_roll/__init__.py b/recipe_modules/cipd_roll/__init__.py
index aa0ed53..04d18ea 100644
--- a/recipe_modules/cipd_roll/__init__.py
+++ b/recipe_modules/cipd_roll/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'recipe_engine/cipd',
'recipe_engine/file',
diff --git a/recipe_modules/cipd_roll/test_api.py b/recipe_modules/cipd_roll/test_api.py
index c2a4ab9..7a4fb85 100644
--- a/recipe_modules/cipd_roll/test_api.py
+++ b/recipe_modules/cipd_roll/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for cipd_roll."""
+from __future__ import annotations
+
from PB.recipe_modules.pigweed.cipd_roll.package import Package
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/cipd_roll/tests/full.py b/recipe_modules/cipd_roll/tests/full.py
index c11bd4c..28af363 100644
--- a/recipe_modules/cipd_roll/tests/full.py
+++ b/recipe_modules/cipd_roll/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Roll a CIPD package."""
+from __future__ import annotations
+
import collections
import dataclasses
import re
diff --git a/recipe_modules/cipd_upload/__init__.py b/recipe_modules/cipd_upload/__init__.py
index 230182c..2ccea5b 100644
--- a/recipe_modules/cipd_upload/__init__.py
+++ b/recipe_modules/cipd_upload/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/cipd_util',
'recipe_engine/cipd',
diff --git a/recipe_modules/cipd_upload/test_api.py b/recipe_modules/cipd_upload/test_api.py
index 4740c0b..8caffb0 100644
--- a/recipe_modules/cipd_upload/test_api.py
+++ b/recipe_modules/cipd_upload/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for cipd_upload."""
+from __future__ import annotations
+
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/cipd_upload/tests/full.py b/recipe_modules/cipd_upload/tests/full.py
index e8a429f..cb91641 100644
--- a/recipe_modules/cipd_upload/tests/full.py
+++ b/recipe_modules/cipd_upload/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of cipd_upload module."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import config, recipe_api, recipe_test_api
diff --git a/recipe_modules/cipd_upload/tests/manifest.py b/recipe_modules/cipd_upload/tests/manifest.py
index 635eea0..912367d 100644
--- a/recipe_modules/cipd_upload/tests/manifest.py
+++ b/recipe_modules/cipd_upload/tests/manifest.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of cipd_upload module."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipe_modules.fuchsia.cipd_util.upload_manifest import (
diff --git a/recipe_modules/cq_deps/__init__.py b/recipe_modules/cq_deps/__init__.py
index 9323046..6b49c99 100644
--- a/recipe_modules/cq_deps/__init__.py
+++ b/recipe_modules/cq_deps/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
from PB.recipe_modules.pigweed.cq_deps import properties
DEPS = [
diff --git a/recipe_modules/cq_deps/api.py b/recipe_modules/cq_deps/api.py
index b03b07c..830b176 100644
--- a/recipe_modules/cq_deps/api.py
+++ b/recipe_modules/cq_deps/api.py
@@ -13,6 +13,8 @@
# the License.
"""Find dependencies on pending CLs."""
+from __future__ import annotations
+
import base64
import json
import re
diff --git a/recipe_modules/cq_deps/test_api.py b/recipe_modules/cq_deps/test_api.py
index ce43abd..459c87a 100644
--- a/recipe_modules/cq_deps/test_api.py
+++ b/recipe_modules/cq_deps/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for cq_deps."""
+from __future__ import annotations
+
import base64
import json
from typing import Sequence
diff --git a/recipe_modules/cq_deps/tests/full.py b/recipe_modules/cq_deps/tests/full.py
index 35ee8ea..832669e 100644
--- a/recipe_modules/cq_deps/tests/full.py
+++ b/recipe_modules/cq_deps/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of the cq_deps module."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import config, recipe_api, recipe_test_api
diff --git a/recipe_modules/default_timeout/__init__.py b/recipe_modules/default_timeout/__init__.py
index 0aaa118..c088301 100644
--- a/recipe_modules/default_timeout/__init__.py
+++ b/recipe_modules/default_timeout/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/utils',
'recipe_engine/buildbucket',
diff --git a/recipe_modules/default_timeout/tests/full.py b/recipe_modules/default_timeout/tests/full.py
index ac3d5f8..f5edcf4 100644
--- a/recipe_modules/default_timeout/tests/full.py
+++ b/recipe_modules/default_timeout/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of timeout module."""
+from __future__ import annotations
+
from typing import Generator
import datetime
diff --git a/recipe_modules/environment/__init__.py b/recipe_modules/environment/__init__.py
index e0e7a77..b08f957 100644
--- a/recipe_modules/environment/__init__.py
+++ b/recipe_modules/environment/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/macos_sdk',
'pigweed/default_timeout',
diff --git a/recipe_modules/environment/test_api.py b/recipe_modules/environment/test_api.py
index 3f799f6..db6092f 100644
--- a/recipe_modules/environment/test_api.py
+++ b/recipe_modules/environment/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for enviroment."""
+from __future__ import annotations
+
import re
from PB.recipe_modules.pigweed.environment import options as env_options
diff --git a/recipe_modules/gerrit_comment/__init__.py b/recipe_modules/gerrit_comment/__init__.py
index a405409..d35d0cf 100644
--- a/recipe_modules/gerrit_comment/__init__.py
+++ b/recipe_modules/gerrit_comment/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/gerrit',
'recipe_engine/buildbucket',
diff --git a/recipe_modules/gerrit_comment/tests/full.py b/recipe_modules/gerrit_comment/tests/full.py
index b298e01..d42acfa 100644
--- a/recipe_modules/gerrit_comment/tests/full.py
+++ b/recipe_modules/gerrit_comment/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of gerrit_comment module."""
+from __future__ import annotations
+
import datetime
from typing import Generator
diff --git a/recipe_modules/pipeline/__init__.py b/recipe_modules/pipeline/__init__.py
index e808c47..9b95a8d 100644
--- a/recipe_modules/pipeline/__init__.py
+++ b/recipe_modules/pipeline/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
from PB.recipe_modules.pigweed.pipeline import properties
DEPS = [
diff --git a/recipe_modules/pipeline/api.py b/recipe_modules/pipeline/api.py
index 2b99afb..773f75f 100644
--- a/recipe_modules/pipeline/api.py
+++ b/recipe_modules/pipeline/api.py
@@ -13,6 +13,8 @@
# the License.
"""Calls to build code."""
+from __future__ import annotations
+
from recipe_engine import recipe_api
from PB.recipe_modules.pigweed.pipeline import properties as properties_pb2
diff --git a/recipe_modules/pipeline/test_api.py b/recipe_modules/pipeline/test_api.py
index 764c07b..204fbcd 100644
--- a/recipe_modules/pipeline/test_api.py
+++ b/recipe_modules/pipeline/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for pipeline."""
+from __future__ import annotations
+
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/pipeline/tests/full.py b/recipe_modules/pipeline/tests/full.py
index 273ba91..9657e54 100644
--- a/recipe_modules/pipeline/tests/full.py
+++ b/recipe_modules/pipeline/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of pipeline module."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import post_process, recipe_test_api
diff --git a/recipe_modules/pw_presubmit/__init__.py b/recipe_modules/pw_presubmit/__init__.py
index 9058380..8cfde51 100644
--- a/recipe_modules/pw_presubmit/__init__.py
+++ b/recipe_modules/pw_presubmit/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/buildbucket_util',
'pigweed/cipd_upload',
diff --git a/recipe_modules/pw_presubmit/test_api.py b/recipe_modules/pw_presubmit/test_api.py
index 6440b92..a791fed 100644
--- a/recipe_modules/pw_presubmit/test_api.py
+++ b/recipe_modules/pw_presubmit/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for pw_presubmit."""
+from __future__ import annotations
+
from PB.recipe_modules.pigweed.gerrit_comment.options import CommentBehavior
from PB.recipe_modules.pigweed.pw_presubmit import options
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/pw_presubmit/tests/full.py b/recipe_modules/pw_presubmit/tests/full.py
index 4be8279..2c6008e 100644
--- a/recipe_modules/pw_presubmit/tests/full.py
+++ b/recipe_modules/pw_presubmit/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of pw_presubmit module."""
+from __future__ import annotations
+
import collections
import datetime
diff --git a/recipe_modules/roll_util/__init__.py b/recipe_modules/roll_util/__init__.py
index 2c0c342..50081d8 100644
--- a/recipe_modules/roll_util/__init__.py
+++ b/recipe_modules/roll_util/__init__.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations under
# the License.
+from __future__ import annotations
+
from PB.recipe_modules.pigweed.roll_util import properties
DEPS = [
diff --git a/recipe_modules/roll_util/test_api.py b/recipe_modules/roll_util/test_api.py
index d1ac4e9..6b42680 100644
--- a/recipe_modules/roll_util/test_api.py
+++ b/recipe_modules/roll_util/test_api.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations under
# the License.
+from __future__ import annotations
+
from recipe_engine import post_process, recipe_test_api
diff --git a/recipe_modules/roll_util/tests/labels.py b/recipe_modules/roll_util/tests/labels.py
index fdf8a46..6833d2c 100644
--- a/recipe_modules/roll_util/tests/labels.py
+++ b/recipe_modules/roll_util/tests/labels.py
@@ -13,6 +13,8 @@
# the License.
"""Test of label functionality of roll_util."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/roll_util/tests/multiple_rolls.py b/recipe_modules/roll_util/tests/multiple_rolls.py
index 91692ab..a7db8af 100644
--- a/recipe_modules/roll_util/tests/multiple_rolls.py
+++ b/recipe_modules/roll_util/tests/multiple_rolls.py
@@ -13,6 +13,8 @@
# the License.
"""Test of rolls of multiple repositories."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/roll_util/tests/single_roll.py b/recipe_modules/roll_util/tests/single_roll.py
index 3f49210..a0dc63a 100644
--- a/recipe_modules/roll_util/tests/single_roll.py
+++ b/recipe_modules/roll_util/tests/single_roll.py
@@ -13,6 +13,8 @@
# the License.
"""Test of rolls of one repository."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import config, recipe_api, recipe_test_api
diff --git a/recipe_modules/save_logs/__init__.py b/recipe_modules/save_logs/__init__.py
index 29f0f96..fe1b80a 100644
--- a/recipe_modules/save_logs/__init__.py
+++ b/recipe_modules/save_logs/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/buildbucket_util',
'recipe_engine/file',
diff --git a/recipe_modules/save_logs/tests/full.py b/recipe_modules/save_logs/tests/full.py
index 2a64663..2ffcb25 100644
--- a/recipe_modules/save_logs/tests/full.py
+++ b/recipe_modules/save_logs/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of save_logs module."""
+from __future__ import annotations
+
from typing import Generator
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/util/__init__.py b/recipe_modules/util/__init__.py
index ac44fc9..b9a56b0 100644
--- a/recipe_modules/util/__init__.py
+++ b/recipe_modules/util/__init__.py
@@ -14,6 +14,8 @@
# pylint: disable=missing-docstring
+from __future__ import annotations
+
DEPS = [
'fuchsia/buildbucket_util',
'fuchsia/gerrit',
diff --git a/recipe_modules/util/api.py b/recipe_modules/util/api.py
index 361e07f..8c09ccc 100644
--- a/recipe_modules/util/api.py
+++ b/recipe_modules/util/api.py
@@ -13,6 +13,8 @@
# the License.
"""Utility functions common to multiple recipes that don't fit elsewhere."""
+from __future__ import annotations
+
import json
import re
from typing import Any, Sequence
diff --git a/recipe_modules/util/test_api.py b/recipe_modules/util/test_api.py
index 91f0dde..14332f1 100644
--- a/recipe_modules/util/test_api.py
+++ b/recipe_modules/util/test_api.py
@@ -13,6 +13,8 @@
# the License.
"""Test API for util."""
+from __future__ import annotations
+
from recipe_engine import recipe_test_api
diff --git a/recipe_modules/util/tests/full.py b/recipe_modules/util/tests/full.py
index 340c5c7..c87ed79 100644
--- a/recipe_modules/util/tests/full.py
+++ b/recipe_modules/util/tests/full.py
@@ -13,6 +13,8 @@
# the License.
"""Full test of util module."""
+from __future__ import annotations
+
import re
from typing import Generator
diff --git a/recipes/bazel.py b/recipes/bazel.py
index 23aa449..e11b203 100644
--- a/recipes/bazel.py
+++ b/recipes/bazel.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for getting Bazel and running a test with it."""
+from __future__ import annotations
+
import re
from typing import Generator
diff --git a/recipes/build.py b/recipes/build.py
index 18210ae..2dbfbfe 100644
--- a/recipes/build.py
+++ b/recipes/build.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for testing Pigweed with multiple swarming tasks."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipes.pigweed.build import InputProperties
diff --git a/recipes/cipd_roller.py b/recipes/cipd_roller.py
index 7821754..c43faea 100644
--- a/recipes/cipd_roller.py
+++ b/recipes/cipd_roller.py
@@ -13,6 +13,8 @@
# the License.
"""Roll a CIPD package."""
+from __future__ import annotations
+
import collections
import dataclasses
import re
diff --git a/recipes/copy_roller.py b/recipes/copy_roller.py
index 3d9dc9c..be74e54 100644
--- a/recipes/copy_roller.py
+++ b/recipes/copy_roller.py
@@ -13,6 +13,8 @@
# the License.
"""Automatically copy a file from one repository to another."""
+from __future__ import annotations
+
import re
from typing import Generator
diff --git a/recipes/dev_status.py b/recipes/dev_status.py
index e86bfd9..191d89a 100644
--- a/recipes/dev_status.py
+++ b/recipes/dev_status.py
@@ -17,6 +17,8 @@
matches prod builder status, and provide links when the status disagrees.
"""
+from __future__ import annotations
+
import collections
import datetime
from typing import Generator, Sequence, Tuple
diff --git a/recipes/docs_builder.py b/recipes/docs_builder.py
index a7c5b32..d2a1e73 100644
--- a/recipes/docs_builder.py
+++ b/recipes/docs_builder.py
@@ -13,6 +13,8 @@
# the License.
"""Generate docs using GN/Ninja and upload to GCS."""
+from __future__ import annotations
+
from typing import Any, Generator, Sequence
from PB.go.chromium.org.luci.buildbucket.proto import common
diff --git a/recipes/gerrit_auto_submit.py b/recipes/gerrit_auto_submit.py
index 43ed303..a32dd2a 100644
--- a/recipes/gerrit_auto_submit.py
+++ b/recipes/gerrit_auto_submit.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for auto-triggering CQ+2 on submittable changes if requested."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipes.pigweed.gerrit_auto_submit import InputProperties
diff --git a/recipes/git_archive.py b/recipes/git_archive.py
index 0b34ff1..40c764a 100644
--- a/recipes/git_archive.py
+++ b/recipes/git_archive.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for testing Pigweed using presubmit_checks.py script."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipes.pigweed.git_archive import InputProperties
diff --git a/recipes/luci_config.py b/recipes/luci_config.py
index 72e9f6e..892eaca 100644
--- a/recipes/luci_config.py
+++ b/recipes/luci_config.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for testing LUCI configs."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipes.pigweed.luci_config import InputProperties
diff --git a/recipes/multi_roller.py b/recipes/multi_roller.py
index 33b32e7..7e5060a 100644
--- a/recipes/multi_roller.py
+++ b/recipes/multi_roller.py
@@ -12,10 +12,12 @@
# License for the specific language governing permissions and limitations under
# the License.
-import attrs
+from __future__ import annotations
+
import itertools
from typing import Any
+import attrs
from google.protobuf import json_format
from PB.go.chromium.org.luci.buildbucket.proto import (
build as build_pb2,
diff --git a/recipes/pigweed.py b/recipes/pigweed.py
index b43fd28..22e875b 100644
--- a/recipes/pigweed.py
+++ b/recipes/pigweed.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for testing Pigweed with multiple swarming tasks."""
+from __future__ import annotations
+
from typing import Generator
from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb2
diff --git a/recipes/pipeline.py b/recipes/pipeline.py
index 13d83db..a4665e7 100644
--- a/recipes/pipeline.py
+++ b/recipes/pipeline.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for launching sequences of builders."""
+from __future__ import annotations
+
import re
from typing import Any, Generator
diff --git a/recipes/pw_presubmit.py b/recipes/pw_presubmit.py
index bd2a62d..62fb7f3 100644
--- a/recipes/pw_presubmit.py
+++ b/recipes/pw_presubmit.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for testing Pigweed using presubmit_checks.py script."""
+from __future__ import annotations
+
import datetime
import re
from typing import Generator
diff --git a/recipes/pw_presubmit.resources/sign.py b/recipes/pw_presubmit.resources/sign.py
index 439429e..d758479 100644
--- a/recipes/pw_presubmit.resources/sign.py
+++ b/recipes/pw_presubmit.resources/sign.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations under
# the License.
+from __future__ import annotations
+
import argparse
import base64
import os
diff --git a/recipes/recipes.py b/recipes/recipes.py
index cd63985..34e1bfd 100644
--- a/recipes/recipes.py
+++ b/recipes/recipes.py
@@ -13,6 +13,8 @@
# the License.
"""Recipe for testing recipes."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipes.pigweed.recipes import InputProperties
diff --git a/recipes/repo_roller.py b/recipes/repo_roller.py
index 4bb5a2d..9c9b8b2 100644
--- a/recipes/repo_roller.py
+++ b/recipes/repo_roller.py
@@ -13,6 +13,8 @@
# the License.
"""Roll a project in an Android Repo Tool workspace."""
+from __future__ import annotations
+
import collections
import dataclasses
import re
diff --git a/recipes/rerunner.py b/recipes/rerunner.py
index f0e71fc..874cb9d 100644
--- a/recipes/rerunner.py
+++ b/recipes/rerunner.py
@@ -31,6 +31,8 @@
be bumped from the 10 most recent builds before long.
"""
+from __future__ import annotations
+
import collections
import fnmatch
import json
diff --git a/recipes/target_to_cipd.py b/recipes/target_to_cipd.py
index 7fd1cca..9f91eeb 100644
--- a/recipes/target_to_cipd.py
+++ b/recipes/target_to_cipd.py
@@ -13,6 +13,8 @@
# the License.
"""Build a GN target and upload to CIPD."""
+from __future__ import annotations
+
from typing import Generator
from PB.recipes.pigweed.target_to_cipd import InputProperties
diff --git a/recipes/tokendb_check.py b/recipes/tokendb_check.py
index c2eb8fd..7ad9721 100644
--- a/recipes/tokendb_check.py
+++ b/recipes/tokendb_check.py
@@ -13,6 +13,8 @@
# the License.
"""Check that lines were not removed from the token database."""
+from __future__ import annotations
+
import re
from typing import Generator
diff --git a/recipes/tokendb_updater.py b/recipes/tokendb_updater.py
index 75ef41c..81d1294 100644
--- a/recipes/tokendb_updater.py
+++ b/recipes/tokendb_updater.py
@@ -21,6 +21,8 @@
generated database.
"""
+from __future__ import annotations
+
from typing import Generator
from PB.recipe_engine import result
diff --git a/recipes/txt_roller.py b/recipes/txt_roller.py
index d920116..0f15b09 100644
--- a/recipes/txt_roller.py
+++ b/recipes/txt_roller.py
@@ -13,6 +13,8 @@
# the License.
"""Roll a pin of a git repository in a simple text file."""
+from __future__ import annotations
+
import re
from typing import Generator
diff --git a/recipes/update_python_versions.py b/recipes/update_python_versions.py
index 3941431..2d2d1c5 100644
--- a/recipes/update_python_versions.py
+++ b/recipes/update_python_versions.py
@@ -13,6 +13,8 @@
# the License.
"""Update the pinned versions of Python packages."""
+from __future__ import annotations
+
import re
from typing import Generator