From 90180e31ef075509dc2ec074854801dbc130a33a Mon Sep 17 00:00:00 2001 From: Luc Perkins Date: Thu, 16 May 2024 13:53:46 -0300 Subject: [PATCH] Add logic for determining environment --- flake.nix | 2 +- magic-nix-cache/src/env.rs | 36 ++++++++++++++++++++++++++++++++++++ magic-nix-cache/src/error.rs | 3 +++ magic-nix-cache/src/main.rs | 5 +++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 magic-nix-cache/src/env.rs diff --git a/flake.nix b/flake.nix index d15722f..697c2a7 100644 --- a/flake.nix +++ b/flake.nix @@ -55,7 +55,7 @@ cargo-bloat cargo-edit cargo-udeps - cargo-watch + bacon age ]; diff --git a/magic-nix-cache/src/env.rs b/magic-nix-cache/src/env.rs new file mode 100644 index 0000000..2af3313 --- /dev/null +++ b/magic-nix-cache/src/env.rs @@ -0,0 +1,36 @@ +use crate::error::Error; +use std::env; + +pub enum Environment { + GitHubActions, + GitLabCI, + Other, +} + +impl ToString for Environment { + fn to_string(&self) -> String { + use Environment::*; + + String::from(match self { + GitHubActions => "GitHub Actions", + GitLabCI => "GitLab CI", + _ => "unspecified", + }) + } +} + +pub fn determine_environment() -> Environment { + if env_var_is_true("GITHUB_ACTIONS") { + Environment::GitHubActions + } + + if env_var_is_true("CI") && env_var_is_true("GITLAB_CI") { + Environment::GitLabCI + } + + Environment::Other +} + +fn env_var_is_true(e: &str) -> bool { + env::var(e).unwrap_or(String::from("")) == String::from("true") +} diff --git a/magic-nix-cache/src/error.rs b/magic-nix-cache/src/error.rs index ec1b8d3..ae479e1 100644 --- a/magic-nix-cache/src/error.rs +++ b/magic-nix-cache/src/error.rs @@ -19,6 +19,9 @@ pub enum Error { #[error("Bad Request")] BadRequest, + #[error("Current environment couldn't be determinate")] + UnknownEnv, + #[error("I/O error: {0}")] Io(#[from] std::io::Error), diff --git a/magic-nix-cache/src/main.rs b/magic-nix-cache/src/main.rs index 4dabf22..037cb68 100644 --- a/magic-nix-cache/src/main.rs +++ b/magic-nix-cache/src/main.rs @@ -14,6 +14,7 @@ mod api; mod binary_cache; +mod env; mod error; mod flakehub; mod gha; @@ -38,6 +39,8 @@ use tracing_subscriber::filter::EnvFilter; use gha_cache::Credentials; +use crate::env::determine_environment; + type State = Arc; /// GitHub Actions-powered Nix binary cache @@ -141,6 +144,8 @@ async fn main_cli() -> Result<()> { let args = Args::parse(); + let _environment = determine_environment(); + let metrics = Arc::new(telemetry::TelemetryReport::new()); if let Some(parent) = Path::new(&args.nix_conf).parent() {