nix_build.rs

 1use crate::tasks::workflows::{
 2    runners::{Arch, Platform},
 3    steps::{CommonJobConditions, NamedJob},
 4};
 5
 6use super::{runners, steps, steps::named, vars};
 7use gh_workflow::*;
 8
 9pub(crate) fn build_nix(
10    platform: Platform,
11    arch: Arch,
12    flake_output: &str,
13    cachix_filter: Option<&str>,
14    deps: &[&NamedJob],
15) -> NamedJob {
16    pub fn install_nix() -> Step<Use> {
17        named::uses(
18            "cachix",
19            "install-nix-action",
20            "02a151ada4993995686f9ed4f1be7cfbb229e56f", // v31
21        )
22        .add_with(("github_access_token", vars::GITHUB_TOKEN))
23    }
24
25    pub fn cachix_action(cachix_filter: Option<&str>) -> Step<Use> {
26        let mut step = named::uses(
27            "cachix",
28            "cachix-action",
29            "0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad", // v16
30        )
31        .add_with(("name", "zed"))
32        .add_with(("authToken", vars::CACHIX_AUTH_TOKEN))
33        .add_with(("cachixArgs", "-v"));
34        if let Some(cachix_filter) = cachix_filter {
35            step = step.add_with(("pushFilter", cachix_filter));
36        }
37        step
38    }
39
40    pub fn build(flake_output: &str) -> Step<Run> {
41        named::bash(&format!(
42            "nix build .#{} -L --accept-flake-config",
43            flake_output
44        ))
45    }
46
47    let runner = match platform {
48        Platform::Windows => unimplemented!(),
49        Platform::Linux => runners::LINUX_X86_BUNDLER,
50        Platform::Mac => runners::MAC_DEFAULT,
51    };
52    let mut job = Job::default()
53        .timeout_minutes(60u32)
54        .continue_on_error(true)
55        .with_repository_owner_guard()
56        .runs_on(runner)
57        .add_env(("ZED_CLIENT_CHECKSUM_SEED", vars::ZED_CLIENT_CHECKSUM_SEED))
58        .add_env(("ZED_MINIDUMP_ENDPOINT", vars::ZED_SENTRY_MINIDUMP_ENDPOINT))
59        .add_env((
60            "ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON",
61            vars::ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON,
62        ))
63        .add_env(("GIT_LFS_SKIP_SMUDGE", "1")) // breaks the livekit rust sdk examples which we don't actually depend on
64        .add_step(steps::checkout_repo());
65
66    if deps.len() > 0 {
67        job = job.needs(deps.iter().map(|d| d.name.clone()).collect::<Vec<String>>());
68    }
69
70    job = job
71        .add_step(install_nix())
72        .add_step(cachix_action(cachix_filter))
73        .add_step(build(&flake_output));
74
75    NamedJob {
76        name: format!("build_nix_{platform}_{arch}"),
77        job,
78    }
79}