1use std::path::PathBuf;
2use std::time::Duration;
3
4#[derive(Debug, Clone, Default)]
5pub struct ArtifactSpec {
6 pub name: Option<String>,
7 pub paths: Vec<PathBuf>,
8 pub exclude: Vec<String>,
9 pub untracked: bool,
10 pub when: ArtifactWhenSpec,
11 pub expire_in: Option<Duration>,
12 pub report_dotenv: Option<PathBuf>,
13}
14
15#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
16pub enum ArtifactWhenSpec {
17 #[default]
18 OnSuccess,
19 OnFailure,
20 Always,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq)]
24pub enum ArtifactSourceOutcome {
25 Success,
26 Failed,
27 Skipped,
28}
29
30impl ArtifactWhenSpec {
31 pub fn includes(self, outcome: Option<ArtifactSourceOutcome>) -> bool {
32 match self {
33 ArtifactWhenSpec::Always => true,
34 ArtifactWhenSpec::OnSuccess => matches!(outcome, Some(ArtifactSourceOutcome::Success)),
35 ArtifactWhenSpec::OnFailure => matches!(outcome, Some(ArtifactSourceOutcome::Failed)),
36 }
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::{ArtifactSourceOutcome, ArtifactWhenSpec};
43
44 #[test]
45 fn artifact_when_matches_expected_outcomes() {
46 assert!(ArtifactWhenSpec::Always.includes(None));
47 assert!(ArtifactWhenSpec::Always.includes(Some(ArtifactSourceOutcome::Success)));
48 assert!(ArtifactWhenSpec::OnSuccess.includes(Some(ArtifactSourceOutcome::Success)));
49 assert!(!ArtifactWhenSpec::OnSuccess.includes(Some(ArtifactSourceOutcome::Failed)));
50 assert!(ArtifactWhenSpec::OnFailure.includes(Some(ArtifactSourceOutcome::Failed)));
51 assert!(!ArtifactWhenSpec::OnFailure.includes(Some(ArtifactSourceOutcome::Skipped)));
52 assert!(!ArtifactWhenSpec::OnFailure.includes(None));
53 }
54}