ci_detective/
codefresh.rs1use env;
2use std::path::PathBuf;
3use std::str::FromStr;
4
5#[derive(Clone, Debug)]
11#[cfg_attr(feature = "nightly", non_exhaustive)]
12pub struct Codefresh {
13 pub repo_owner: String,
15 pub repo_name: String,
17 pub branch: String,
19 pub commit_author: String,
21 pub commit_url: String,
23 pub commit_message: String,
25 pub revision: String,
27 pub short_revision: String,
29 pub volume_name: String,
32 pub volume_path: PathBuf,
34 pub build_trigger: BuildTrigger,
36 pub build_id: String,
38 pub build_timestamp: String,
40 pub build_url: String,
42 pub kubeconfig_path: Option<PathBuf>,
44 non_exhaustive: (),
45}
46
47impl Codefresh {
48 pub fn from_env() -> Option<Self> {
50 Some(Codefresh {
51 repo_owner: env("CF_REPO_OWNER")?,
52 repo_name: env("CF_REPO_NAME")?,
53 branch: env("CF_BRANCH")?,
54 commit_author: env("CF_COMMIT_AUTHOR")?,
55 commit_url: env("CF_COMMIT_URL")?,
56 commit_message: env("CF_COMMIT_MESSAGE")?,
57 revision: env("CF_REVISION")?,
58 short_revision: env("CF_SHORT_REVISION")?,
59 volume_name: env("CF_VOLUME_NAME")?,
60 volume_path: PathBuf::from(env("CF_VOLUME_PATH")?),
61 build_trigger: env("CF_BUILD_TRIGGER")?.parse().ok()?,
62 build_id: env("CF_BUILD_ID")?,
63 build_timestamp: env("CF_BUILD_TIMESTAMP")?,
64 build_url: env("CF_BUILD_URL")?,
65 kubeconfig_path: env("CF_KUBECONFIG_PATH").map(PathBuf::from),
66 non_exhaustive: (),
67 })
68 }
69}
70
71#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
73#[cfg_attr(feature = "nightly", non_exhaustive)]
74pub enum BuildTrigger {
75 Build,
77 Webhook,
79 #[doc(hidden)] __NonExhaustive,
80}
81
82impl FromStr for BuildTrigger {
83 type Err = ();
84 fn from_str(s: &str) -> Result<Self, Self::Err> {
85 match s {
86 "build" => Ok(BuildTrigger::Build),
87 "webhook" => Ok(BuildTrigger::Webhook),
88 _ => Err(()),
89 }
90 }
91}