enable deploy gallery

This CL enables deploy_gallery test for both linux and mac.

Bug: https://github.com/flutter/flutter/issues/66707
Change-Id: Ib4a2a6d7ab339b2c3613e81cf03909e73939836a
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/6940
Reviewed-by: Godofredo Contreras <godofredoc@google.com>
Commit-Queue: Keyong Han <keyonghan@google.com>
diff --git a/recipe_modules/adhoc_validation/api.py b/recipe_modules/adhoc_validation/api.py
index 7b0070d..8fad337 100644
--- a/recipe_modules/adhoc_validation/api.py
+++ b/recipe_modules/adhoc_validation/api.py
@@ -17,7 +17,8 @@
     """Returns the list of accepted validations."""
     return [
         'analyze', 'customer_testing', 'docs', 'fuchsia_precache',
-        'tool_coverage', 'web_smoke_test', 'verify_binaries_codesigned'
+        'tool_coverage', 'web_smoke_test', 'verify_binaries_codesigned',
+        'build_gallery'
     ]
 
   def run(self, name, validation, env, env_prefixes, secrets=None):
@@ -43,11 +44,16 @@
         self.m.step('Set execute permission', ['chmod', '755', resource_name])
       elif self.m.platform.is_win:
         resource_name = self.resource('%s.bat' % validation)
-      with self.m.context(env=env, env_prefixes=env_prefixes):
-        dep_list = [d['dependency'] for d in deps]
-        if 'xcode' in dep_list:
-          with self.m.osx_sdk('ios'):
-            self.m.flutter_deps.swift()
+      dep_list = [d['dependency'] for d in deps]
+      if 'xcode' in dep_list:
+        with self.m.osx_sdk('ios'):
+          self.m.flutter_deps.swift()
+          checkout_path = self.m.path['start_dir'].join('flutter')
+          self.m.flutter_deps.gems(
+            env, env_prefixes, checkout_path.join('dev', 'ci', 'mac')
+          )
+          with self.m.context(env=env, env_prefixes=env_prefixes):
             self.m.step(validation, [resource_name])
-        else:
+      else:
+        with self.m.context(env=env, env_prefixes=env_prefixes):
           self.m.step(validation, [resource_name])
diff --git a/recipe_modules/adhoc_validation/resources/build_gallery.sh b/recipe_modules/adhoc_validation/resources/build_gallery.sh
new file mode 100644
index 0000000..e25aad1
--- /dev/null
+++ b/recipe_modules/adhoc_validation/resources/build_gallery.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Validates gallery builds for both linux and darwin platforms.
+
+set -e
+./dev/bots/deploy_gallery.sh
diff --git a/recipe_modules/repo_util/__init__.py b/recipe_modules/repo_util/__init__.py
index bce5ee2..38b6649 100644
--- a/recipe_modules/repo_util/__init__.py
+++ b/recipe_modules/repo_util/__init__.py
@@ -7,6 +7,7 @@
     'recipe_engine/context',
     'recipe_engine/file',
     'recipe_engine/path',
+    'recipe_engine/platform',
     'recipe_engine/properties',
     'recipe_engine/python',
     'recipe_engine/step',
diff --git a/recipe_modules/repo_util/api.py b/recipe_modules/repo_util/api.py
index b72fa0c..89a1d3f 100644
--- a/recipe_modules/repo_util/api.py
+++ b/recipe_modules/repo_util/api.py
@@ -131,6 +131,9 @@
             re.sub('refs\/pull\/|\/head', '', git_ref),
         'LUCI_BRANCH':
             self.m.properties.get('release_ref', '').replace('refs/heads/', ''),
+        'OS':
+            'linux' if self.m.platform.name == 'linux' else (
+                'darwin' if self.m.platform.name == 'mac' else 'win')
     }
     env_prefixes = {'PATH': [flutter_bin, dart_bin]}
     return env, env_prefixes
diff --git a/recipes/cocoon.expected/pull_request.json b/recipes/cocoon.expected/pull_request.json
index 393174d..85035fa 100644
--- a/recipes/cocoon.expected/pull_request.json
+++ b/recipes/cocoon.expected/pull_request.json
@@ -285,6 +285,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -305,6 +306,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -326,6 +328,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/devicelab.expected/android_defines_test.json b/recipes/devicelab.expected/android_defines_test.json
index c56391d..cf597da 100644
--- a/recipes/devicelab.expected/android_defines_test.json
+++ b/recipes/devicelab.expected/android_defines_test.json
@@ -128,6 +128,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -149,6 +150,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -182,6 +184,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -225,6 +228,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -268,6 +272,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -311,6 +316,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -354,6 +360,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -397,6 +404,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -438,6 +446,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/devicelab.expected/flavors_test.json b/recipes/devicelab.expected/flavors_test.json
index 9c2e03c..0649fe0 100644
--- a/recipes/devicelab.expected/flavors_test.json
+++ b/recipes/devicelab.expected/flavors_test.json
@@ -128,6 +128,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -149,6 +150,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -182,6 +184,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -225,6 +228,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -268,6 +272,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -311,6 +316,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -354,6 +360,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -397,6 +404,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -438,6 +446,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/devicelab.expected/flutter_gallery_ios__compile.json b/recipes/devicelab.expected/flutter_gallery_ios__compile.json
index 7ac82e0..3a1f71e 100644
--- a/recipes/devicelab.expected/flutter_gallery_ios__compile.json
+++ b/recipes/devicelab.expected/flutter_gallery_ios__compile.json
@@ -128,6 +128,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -149,6 +150,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -169,6 +171,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -195,6 +198,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/devicelab.expected/schedule.json b/recipes/devicelab.expected/schedule.json
index 2c3d884..e8982a9 100644
--- a/recipes/devicelab.expected/schedule.json
+++ b/recipes/devicelab.expected/schedule.json
@@ -142,6 +142,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -173,6 +174,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/devicelab/devicelab_drone.expected/basic.json b/recipes/devicelab/devicelab_drone.expected/basic.json
index 7f982a5..173c023 100644
--- a/recipes/devicelab/devicelab_drone.expected/basic.json
+++ b/recipes/devicelab/devicelab_drone.expected/basic.json
@@ -121,6 +121,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -142,6 +143,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -165,6 +167,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/devicelab/devicelab_drone.expected/xcode.json b/recipes/devicelab/devicelab_drone.expected/xcode.json
index b970a14..e02053d 100644
--- a/recipes/devicelab/devicelab_drone.expected/xcode.json
+++ b/recipes/devicelab/devicelab_drone.expected/xcode.json
@@ -121,6 +121,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -142,6 +143,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -175,6 +177,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -216,6 +219,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -247,6 +251,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -277,6 +282,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -305,6 +311,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/engine/web_engine_framework.expected/linux-pre-submit.json b/recipes/engine/web_engine_framework.expected/linux-pre-submit.json
index f22179c..d344249 100644
--- a/recipes/engine/web_engine_framework.expected/linux-pre-submit.json
+++ b/recipes/engine/web_engine_framework.expected/linux-pre-submit.json
@@ -1222,6 +1222,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -1250,6 +1251,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/firebaselab/firebaselab.expected/basic.json b/recipes/firebaselab/firebaselab.expected/basic.json
index 8a723dc..f7fe645 100644
--- a/recipes/firebaselab/firebaselab.expected/basic.json
+++ b/recipes/firebaselab/firebaselab.expected/basic.json
@@ -122,6 +122,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -143,6 +144,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -176,6 +178,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -215,6 +218,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -256,6 +260,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -287,6 +292,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -316,6 +322,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -357,6 +364,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -395,6 +403,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -428,6 +437,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -472,6 +482,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -503,6 +514,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -530,6 +542,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/firebaselab/firebaselab_1_20_0.expected/basic.json b/recipes/firebaselab/firebaselab_1_20_0.expected/basic.json
index 8a723dc..f7fe645 100644
--- a/recipes/firebaselab/firebaselab_1_20_0.expected/basic.json
+++ b/recipes/firebaselab/firebaselab_1_20_0.expected/basic.json
@@ -122,6 +122,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -143,6 +144,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -176,6 +178,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -215,6 +218,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -256,6 +260,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -287,6 +292,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -316,6 +322,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -357,6 +364,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -395,6 +403,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -428,6 +437,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -472,6 +482,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -503,6 +514,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -530,6 +542,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/firebaselab/firebaselab_1_22_0.expected/basic.json b/recipes/firebaselab/firebaselab_1_22_0.expected/basic.json
index 8a723dc..f7fe645 100644
--- a/recipes/firebaselab/firebaselab_1_22_0.expected/basic.json
+++ b/recipes/firebaselab/firebaselab_1_22_0.expected/basic.json
@@ -122,6 +122,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -143,6 +144,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -176,6 +178,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -215,6 +218,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -256,6 +260,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -287,6 +292,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -316,6 +322,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -357,6 +364,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -395,6 +403,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -428,6 +437,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -472,6 +482,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -503,6 +514,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -530,6 +542,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/flutter/flutter.expected/validators.json b/recipes/flutter/flutter.expected/validators.json
index ee0bc69..90af7ef 100644
--- a/recipes/flutter/flutter.expected/validators.json
+++ b/recipes/flutter/flutter.expected/validators.json
@@ -136,6 +136,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -160,6 +161,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -192,6 +194,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -215,6 +218,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/flutter/flutter_1_20_0.expected/validators.json b/recipes/flutter/flutter_1_20_0.expected/validators.json
index 4ce6b6d..88ed113 100644
--- a/recipes/flutter/flutter_1_20_0.expected/validators.json
+++ b/recipes/flutter/flutter_1_20_0.expected/validators.json
@@ -200,6 +200,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -228,6 +229,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -264,6 +266,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -291,6 +294,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/flutter/flutter_1_21_0.expected/validators.json b/recipes/flutter/flutter_1_21_0.expected/validators.json
index 4ce6b6d..88ed113 100644
--- a/recipes/flutter/flutter_1_21_0.expected/validators.json
+++ b/recipes/flutter/flutter_1_21_0.expected/validators.json
@@ -200,6 +200,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -228,6 +229,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -264,6 +266,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -291,6 +294,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/flutter/flutter_1_22_0.expected/validators.json b/recipes/flutter/flutter_1_22_0.expected/validators.json
index ee0bc69..90af7ef 100644
--- a/recipes/flutter/flutter_1_22_0.expected/validators.json
+++ b/recipes/flutter/flutter_1_22_0.expected/validators.json
@@ -136,6 +136,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -160,6 +161,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -192,6 +194,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -215,6 +218,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/flutter/flutter_drone.expected/android_sdk.json b/recipes/flutter/flutter_drone.expected/android_sdk.json
index 44cfe9a..994c6bd 100644
--- a/recipes/flutter/flutter_drone.expected/android_sdk.json
+++ b/recipes/flutter/flutter_drone.expected/android_sdk.json
@@ -304,6 +304,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -333,6 +334,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -363,6 +365,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone.expected/no_requirements.json b/recipes/flutter/flutter_drone.expected/no_requirements.json
index 8ba6980..9cd009e 100644
--- a/recipes/flutter/flutter_drone.expected/no_requirements.json
+++ b/recipes/flutter/flutter_drone.expected/no_requirements.json
@@ -122,6 +122,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -145,6 +146,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -169,6 +171,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone.expected/web_engine.json b/recipes/flutter/flutter_drone.expected/web_engine.json
index b5e2a5a..493afed 100644
--- a/recipes/flutter/flutter_drone.expected/web_engine.json
+++ b/recipes/flutter/flutter_drone.expected/web_engine.json
@@ -190,6 +190,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -215,6 +216,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -243,6 +245,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone.expected/xcode.json b/recipes/flutter/flutter_drone.expected/xcode.json
index 0286db2..c5dac27 100644
--- a/recipes/flutter/flutter_drone.expected/xcode.json
+++ b/recipes/flutter/flutter_drone.expected/xcode.json
@@ -122,6 +122,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -145,6 +146,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -180,6 +182,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -223,6 +226,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -256,6 +260,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -288,6 +293,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -317,6 +323,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone_1_21_0.expected/android_sdk.json b/recipes/flutter/flutter_drone_1_21_0.expected/android_sdk.json
index edde233..f852b05 100644
--- a/recipes/flutter/flutter_drone_1_21_0.expected/android_sdk.json
+++ b/recipes/flutter/flutter_drone_1_21_0.expected/android_sdk.json
@@ -439,6 +439,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -475,6 +476,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -511,6 +513,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone_1_21_0.expected/no_requirements.json b/recipes/flutter/flutter_drone_1_21_0.expected/no_requirements.json
index edde233..f852b05 100644
--- a/recipes/flutter/flutter_drone_1_21_0.expected/no_requirements.json
+++ b/recipes/flutter/flutter_drone_1_21_0.expected/no_requirements.json
@@ -439,6 +439,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -475,6 +476,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -511,6 +513,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone_1_21_0.expected/xcode.json b/recipes/flutter/flutter_drone_1_21_0.expected/xcode.json
index edde233..f852b05 100644
--- a/recipes/flutter/flutter_drone_1_21_0.expected/xcode.json
+++ b/recipes/flutter/flutter_drone_1_21_0.expected/xcode.json
@@ -439,6 +439,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -475,6 +476,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -511,6 +513,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json b/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json
index 9d936be..e721901 100644
--- a/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json
+++ b/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json
@@ -308,6 +308,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -337,6 +338,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -367,6 +369,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json b/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json
index 3b186e9..b560aff 100644
--- a/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json
+++ b/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json
@@ -126,6 +126,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -149,6 +150,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -173,6 +175,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json b/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json
index 3b186e9..b560aff 100644
--- a/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json
+++ b/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json
@@ -126,6 +126,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -149,6 +150,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
@@ -173,6 +175,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache",
       "SHARD": null,
       "SUBSHARD": null
diff --git a/recipes/fuchsia/fuchsia.expected/basic.json b/recipes/fuchsia/fuchsia.expected/basic.json
index b25ed34..2d455ed 100644
--- a/recipes/fuchsia/fuchsia.expected/basic.json
+++ b/recipes/fuchsia/fuchsia.expected/basic.json
@@ -126,6 +126,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -154,6 +155,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -181,6 +183,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -225,6 +228,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -257,6 +261,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -324,6 +329,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -356,6 +362,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -394,6 +401,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -425,6 +433,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -456,6 +465,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -487,6 +497,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -526,6 +537,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -559,6 +571,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -604,6 +617,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -635,6 +649,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -674,6 +689,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -707,6 +723,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -749,6 +766,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -856,6 +874,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -890,6 +909,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "1",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
diff --git a/recipes/plugins/plugins.expected/basic.json b/recipes/plugins/plugins.expected/basic.json
index 83c41af..1e34ceb 100644
--- a/recipes/plugins/plugins.expected/basic.json
+++ b/recipes/plugins/plugins.expected/basic.json
@@ -251,6 +251,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -275,6 +276,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -299,6 +301,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -325,6 +328,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -355,6 +359,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {
@@ -381,6 +386,7 @@
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
       "LUCI_PR": "",
+      "OS": "linux",
       "PUB_CACHE": "[CACHE]/.pub-cache"
     },
     "env_prefixes": {