1use gh_workflow::*;
2use indexmap::IndexMap;
3
4use super::{runners, steps, vars};
5
6/// Generates the danger.yml workflow
7pub fn danger() -> Workflow {
8 Workflow::default()
9 .name("Danger")
10 .on(
11 Event::default().pull_request(PullRequest::default().add_branch("main").types([
12 PullRequestType::Opened,
13 PullRequestType::Synchronize,
14 PullRequestType::Reopened,
15 PullRequestType::Edited,
16 ])),
17 )
18 .add_job(
19 "danger",
20 Job::default()
21 .cond(Expression::new(
22 "github.repository_owner == 'zed-industries'",
23 ))
24 .runs_on(runners::LINUX_CHEAP)
25 .add_step(steps::checkout_repo())
26 .add_step(steps::setup_pnpm())
27 .add_step(steps::danger::setup_node())
28 .add_step(steps::danger::install_deps())
29 .add_step(steps::danger::run()),
30 )
31}
32
33/// Generates the nix.yml workflow
34pub fn nix() -> Workflow {
35 let env: IndexMap<_, _> = [
36 ("ZED_CLIENT_CHECKSUM_SEED", vars::ZED_CLIENT_CHECKSUM_SEED),
37 ("ZED_MINIDUMP_ENDPOINT", vars::ZED_MINIDUMP_ENDPOINT),
38 (
39 "ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON",
40 vars::ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON,
41 ),
42 ("GIT_LFS_SKIP_SMUDGE", "1"), // breaks the livekit rust sdk examples which we don't actually depend on
43 ]
44 .into_iter()
45 .map(|(key, value)| (key.into(), value.into()))
46 .collect();
47
48 // todo(ci) instead of having these as optional YAML inputs,
49 // should we just generate two copies of the job (one for release-nightly
50 // and one for CI?)
51 let (input_flake_output, flake_output) = vars::input(
52 "flake-output",
53 WorkflowCallInput {
54 input_type: "string".into(),
55 default: Some("default".into()),
56 ..Default::default()
57 },
58 );
59 let (input_cachix_filter, cachix_filter) = vars::input(
60 "cachix-filter",
61 WorkflowCallInput {
62 input_type: "string".into(),
63 ..Default::default()
64 },
65 );
66
67 Workflow::default()
68 .name("Nix build")
69 .on(Event::default().workflow_call(
70 WorkflowCall::default()
71 .add_input(flake_output.0, flake_output.1)
72 .add_input(cachix_filter.0, cachix_filter.1),
73 ))
74 .add_job(
75 "nix-build-linux-x86",
76 Job::default()
77 .timeout_minutes(60u32)
78 .continue_on_error(true)
79 .cond(Expression::new(
80 "github.repository_owner == 'zed-industries'",
81 ))
82 .runs_on(runners::LINUX_DEFAULT)
83 .env(env.clone())
84 .add_step(steps::checkout_repo().add_with(("clean", "false")))
85 .add_step(steps::nix::install_nix())
86 .add_step(steps::nix::cachix_action(&input_cachix_filter))
87 .add_step(steps::nix::build(&input_flake_output)),
88 )
89 .add_job(
90 "nix-build-mac-arm",
91 Job::default()
92 .timeout_minutes(60u32)
93 .continue_on_error(true)
94 .cond(Expression::new(
95 "github.repository_owner == 'zed-industries'",
96 ))
97 .runs_on(runners::MAC_DEFAULT)
98 .env(env)
99 .add_step(steps::checkout_repo().add_with(("clean", "false")))
100 .add_step(steps::nix::set_path())
101 .add_step(steps::nix::cachix_action(&input_cachix_filter))
102 .add_step(steps::nix::build(&input_flake_output))
103 .add_step(steps::nix::limit_store()),
104 )
105}