1use super::{ArtifactSpec, CacheSpec, EnvironmentSpec, ImageSpec, JobDependencySpec, ServiceSpec};
2use crate::gitlab::rules::JobRule;
3use std::collections::HashMap;
4use std::time::Duration;
5
6#[derive(Debug, Clone)]
7pub struct JobSpec {
8 pub name: String,
9 pub stage: String,
10 pub commands: Vec<String>,
11 pub needs: Vec<JobDependencySpec>,
12 pub explicit_needs: bool,
13 pub dependencies: Vec<String>,
14 pub before_script: Option<Vec<String>>,
15 pub after_script: Option<Vec<String>>,
16 pub inherit_default_image: bool,
17 pub inherit_default_before_script: bool,
18 pub inherit_default_after_script: bool,
19 pub inherit_default_cache: bool,
20 pub inherit_default_services: bool,
21 pub inherit_default_timeout: bool,
22 pub inherit_default_retry: bool,
23 pub inherit_default_interruptible: bool,
24 pub when: Option<String>,
25 pub rules: Vec<JobRule>,
26 pub only: Vec<String>,
27 pub except: Vec<String>,
28 pub artifacts: ArtifactSpec,
29 pub cache: Vec<CacheSpec>,
30 pub image: Option<ImageSpec>,
31 pub variables: HashMap<String, String>,
32 pub services: Vec<ServiceSpec>,
33 pub timeout: Option<Duration>,
34 pub retry: RetryPolicySpec,
35 pub interruptible: bool,
36 pub resource_group: Option<String>,
37 pub parallel: Option<ParallelConfigSpec>,
38 pub tags: Vec<String>,
39 pub environment: Option<EnvironmentSpec>,
40}
41
42#[derive(Debug, Clone, Default)]
43pub struct RetryPolicySpec {
44 pub max: u32,
45 pub when: Vec<String>,
46 pub exit_codes: Vec<i32>,
47}
48
49#[derive(Debug, Clone, PartialEq, Eq)]
50pub enum ParallelConfigSpec {
51 Count(u32),
52 Matrix(Vec<ParallelMatrixEntrySpec>),
53}
54
55#[derive(Debug, Clone, PartialEq, Eq)]
56pub struct ParallelMatrixEntrySpec {
57 pub variables: Vec<ParallelVariableSpec>,
58}
59
60#[derive(Debug, Clone, PartialEq, Eq)]
61pub struct ParallelVariableSpec {
62 pub name: String,
63 pub values: Vec<String>,
64}