[flutter_deps] Assert no duplicate dependencies
Bug: https://github.com/flutter/flutter/issues/88330
Change-Id: I1a6fd9b468ce38f84edb3526f5ca971370c48ca5
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/17184
Reviewed-by: Godofredo Contreras <godofredoc@google.com>
Commit-Queue: Casey Hillers <chillers@google.com>
diff --git a/recipe_modules/flutter_deps/api.py b/recipe_modules/flutter_deps/api.py
index 862d037..b14c3a0 100644
--- a/recipe_modules/flutter_deps/api.py
+++ b/recipe_modules/flutter_deps/api.py
@@ -71,16 +71,26 @@
'vpython': self.vpython,
'vs_build': self.vs_build,
}
+ parsed_deps = []
for dep in deps:
- if dep.get('dependency') in ['xcode', 'gems', 'swift']:
+ dependency = dep.get('dependency')
+ version = dep.get('version')
+ # Ensure there are no duplicate entries
+ if dependency in parsed_deps:
+ msg = '''Dependency %s is duplicated
+ Ensure ci.yaml contains only one entry for this target
+ '''.format(dependency)
+ raise ValueError(msg)
+ parsed_deps.append(dependency)
+ if dependency in ['xcode', 'gems', 'swift']:
continue
- dep_funct = available_deps.get(dep.get('dependency'))
+ dep_funct = available_deps.get(dependency)
if not dep_funct:
msg = '''Dependency %s not available.
Ensure ci.yaml contains one of the following supported keys:
- %s'''.format(dep.get('dependency'), available_deps.keys())
+ %s'''.format(dependency, available_deps.keys())
raise ValueError(msg)
- dep_funct(env, env_prefixes, dep.get('version'))
+ dep_funct(env, env_prefixes, version)
def open_jdk(self, env, env_prefixes, version):
"""Downloads OpenJdk CIPD package and updates environment variables.
diff --git a/recipe_modules/flutter_deps/examples/full.py b/recipe_modules/flutter_deps/examples/full.py
index adc03d0..80cfea5 100644
--- a/recipe_modules/flutter_deps/examples/full.py
+++ b/recipe_modules/flutter_deps/examples/full.py
@@ -42,6 +42,10 @@
api.flutter_deps.required_deps(
env, env_prefixes, [{'dependency': 'does_not_exist'}]
)
+ with api.assertions.assertRaises(ValueError):
+ api.flutter_deps.required_deps(
+ env, env_prefixes, [{'dependency': 'xcode'}, {'dependency': 'xcode'}]
+ )
api.flutter_deps.android_sdk(env, env_prefixes, '')
api.flutter_deps.flutter_engine(env, env_prefixes)
api.flutter_deps.firebase(env, env_prefixes)