| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:meta/meta.dart'; |
| import 'package:platform/platform.dart'; |
| |
| import 'context.dart'; |
| |
| class BotDetector { |
| BotDetector({ |
| @required Platform platform, |
| }) : _platform = platform; |
| |
| final Platform _platform; |
| |
| bool get isRunningOnBot { |
| if ( |
| // Explicitly stated to not be a bot. |
| _platform.environment['BOT'] == 'false' |
| |
| // Set by the IDEs to the IDE name, so a strong signal that this is not a bot. |
| || _platform.environment.containsKey('FLUTTER_HOST') |
| // When set, GA logs to a local file (normally for tests) so we don't need to filter. |
| || _platform.environment.containsKey('FLUTTER_ANALYTICS_LOG_FILE') |
| ) { |
| return false; |
| } |
| |
| return _platform.environment['BOT'] == 'true' |
| |
| // https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables |
| || _platform.environment['TRAVIS'] == 'true' |
| || _platform.environment['CONTINUOUS_INTEGRATION'] == 'true' |
| || _platform.environment.containsKey('CI') // Travis and AppVeyor |
| |
| // https://www.appveyor.com/docs/environment-variables/ |
| || _platform.environment.containsKey('APPVEYOR') |
| |
| // https://cirrus-ci.org/guide/writing-tasks/#environment-variables |
| || _platform.environment.containsKey('CIRRUS_CI') |
| |
| // https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html |
| || (_platform.environment.containsKey('AWS_REGION') && |
| _platform.environment.containsKey('CODEBUILD_INITIATOR')) |
| |
| // https://wiki.jenkins.io/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-belowJenkinsSetEnvironmentVariables |
| || _platform.environment.containsKey('JENKINS_URL') |
| |
| // Properties on Flutter's Chrome Infra bots. |
| || _platform.environment['CHROME_HEADLESS'] == '1' |
| || _platform.environment.containsKey('BUILDBOT_BUILDERNAME') |
| || _platform.environment.containsKey('SWARMING_TASK_ID'); |
| } |
| } |
| |
| bool isRunningOnBot(Platform platform) { |
| final BotDetector botDetector = context.get<BotDetector>() ?? BotDetector(platform: platform); |
| return botDetector.isRunningOnBot; |
| } |