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