[ci] Pin stable version (#6117)

diff --git a/.ci.yaml b/.ci.yaml
index 7504373..bc1feca 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -47,6 +47,7 @@
       add_recipes_cq: "true"
       target_file: windows_build_and_platform_tests.yaml
       channel: stable
+      version_file: flutter_stable.version
       dependencies: >
         [
           {"dependency": "vs_build", "version": "version:vs2019"}
@@ -72,6 +73,7 @@
       add_recipes_cq: "true"
       target_file: build_all_plugins.yaml
       channel: stable
+      version_file: flutter_stable.version
       dependencies: >
         [
           {"dependency": "vs_build", "version": "version:vs2019"}
diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version
new file mode 100644
index 0000000..8c2db2f
--- /dev/null
+++ b/.ci/flutter_stable.version
@@ -0,0 +1 @@
+f1875d570e39de09040c8f79aa13cc56baab8db1
diff --git a/.cirrus.yml b/.cirrus.yml
index 6ea4680..479d493 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -14,11 +14,11 @@
 
 flutter_upgrade_template: &FLUTTER_UPGRADE_TEMPLATE
   upgrade_flutter_script:
-    # Master uses a pinned, auto-rolled version to prevent out-of-band CI
-    # failures due to changes in Flutter.
-    # TODO(stuartmorgan): Investigate an autoroller for stable as well.
+    # Channels that are part of our normal test matrix use a pinned,
+    # auto-rolled version to prevent out-of-band CI failures due to changes in
+    # Flutter.
     - TARGET_TREEISH=$CHANNEL
-    - if [[ "$CHANNEL" == "master" ]]; then
+    - if [[ "$CHANNEL" == "master" || "$CHANNEL" == "stable" ]]; then
     -   TARGET_TREEISH=$(< .ci/flutter_$CHANNEL.version)
     - fi
     # Ensure that the repository has all the branches.