blob: 516e7fb22677e43c8d339748cf8c002322c677c0 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use home::home_dir;
use std::path::PathBuf;
pub fn get_os() -> String {
convert_macos_to_darwin(std::env::consts::OS)
}
pub fn get_arch() -> String {
std::env::consts::ARCH.to_string()
}
fn convert_macos_to_darwin(arch: &str) -> String {
arch.replace("macos", "Darwin")
}
pub fn analytics_folder() -> String {
let mut metrics_path = get_home_dir();
metrics_path.push(".fuchsia/metrics/");
let path_str = metrics_path.to_str();
match path_str {
Some(v) => String::from(v),
None => String::from("/tmp/.fuchsia/metrics/"),
}
}
fn get_home_dir() -> PathBuf {
match home_dir() {
Some(dir) => dir,
None => PathBuf::from("/tmp"),
}
}
const TEST_ENV_VAR: &'static str = "FUCHSIA_TEST_OUTDIR";
const ANALYTICS_DISABLED_ENV_VAR: &'static str = "FUCHSIA_ANALYTICS_DISABLED";
// To detect certain bot environmments that run as USER "builder"
const USER: &'static str = "USER";
const BUILDER: &'static str = "builder";
const BOT_ENV_VARS: &'static [&'static str] = &[
"TF_BUILD", // Azure
"bamboo.buildKey", // Bamboo
"BUILDKITE", // BUILDKITE
"CIRCLECI", // Circle
"CIRRUS_CI", // Cirrus
"CODEBUILD_BUILD_ID", // Codebuild
"UNITTEST_ON_BORG", // Borg
"UNITTEST_ON_FORGE", // Forge
"SWARMING_BOT_ID", // Fuchsia
"GITHUB_ACTIONS", // GitHub Actions
"GITLAB_CI", // GitLab
"HEROKU_TEST_RUN_ID", // Heroku
"BUILD_ID", // Hudson & Jenkins
"TEAMCITY_VERSION", // Teamcity
"TRAVIS", // Travis
"BUILD_NUMBER", // android-ci
];
pub fn is_test_env() -> bool {
std::env::var(TEST_ENV_VAR).is_ok()
}
pub fn is_fuchsia_analytics_disabled_set() -> bool {
std::env::var(ANALYTICS_DISABLED_ENV_VAR).is_ok()
}
pub fn is_running_in_ci_bot_env() -> bool {
BOT_ENV_VARS.iter().any(|env_var| std::env::var(env_var).is_ok())
}
pub fn is_user_a_bot() -> bool {
std::env::var(USER).is_ok_and(|v| v == BUILDER)
}
pub fn is_analytics_disabled_by_env() -> bool {
is_test_env()
|| is_fuchsia_analytics_disabled_set()
|| is_running_in_ci_bot_env()
|| is_user_a_bot()
}
#[cfg(test)]
mod test {
use super::*;
#[test]
// TODO(https://fxbug.dev/42148443): isolate the env test from CI env
#[ignore]
// Rust tests are run in parallel in threads, which means that this test is
// disruptive to other tests. There's little ROI to doing some kind of fork
// dance here, so the test is included, but not run by default.
pub fn test_is_test_env() {
std::env::set_var(TEST_ENV_VAR, "somepath");
assert_eq!(true, is_test_env());
std::env::remove_var(TEST_ENV_VAR);
assert_eq!(false, is_test_env());
}
#[test]
#[ignore]
// Rust tests are run in parallel in threads, which means that this test is
// disruptive to other tests. There's little ROI to doing some kind of fork
// dance here, so the test is included, but not run by default.
pub fn test_is_analytics_disabled_env() {
std::env::set_var(ANALYTICS_DISABLED_ENV_VAR, "1");
assert_eq!(true, is_fuchsia_analytics_disabled_set());
std::env::remove_var(ANALYTICS_DISABLED_ENV_VAR);
assert_eq!(false, is_fuchsia_analytics_disabled_set());
}
#[test]
// TODO(https://fxbug.dev/42148443): isolate the env test from CI env
#[ignore]
pub fn test_is_bot_env() {
std::env::set_var(&"BUILD_ID", "1");
assert_eq!(true, is_running_in_ci_bot_env());
std::env::remove_var(&"BUILD_ID");
assert_eq!(false, is_fuchsia_analytics_disabled_set());
}
#[test]
pub fn test_arch_macos_conversion() {
assert_eq!("Darwin", convert_macos_to_darwin("macos"))
}
}