workflows.rs

  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}