run_bundling.rs

  1use crate::tasks::workflows::{
  2    steps::named,
  3    vars::{mac_bundle_envs, windows_bundle_envs},
  4};
  5
  6use super::{runners, steps, vars};
  7use gh_workflow::*;
  8
  9pub fn run_bundling() -> Workflow {
 10    named::workflow()
 11        .on(Event::default().pull_request(
 12            PullRequest::default().types([PullRequestType::Labeled, PullRequestType::Synchronize]),
 13        ))
 14        .concurrency(
 15            Concurrency::new(Expression::new(
 16                "${{ github.workflow }}-${{ github.head_ref || github.ref }}",
 17            ))
 18            .cancel_in_progress(true),
 19        )
 20        .add_env(("CARGO_TERM_COLOR", "always"))
 21        .add_env(("CARGO_INCREMENTAL", "0"))
 22        .add_env(("RUST_BACKTRACE", "1"))
 23        .add_env(("ZED_CLIENT_CHECKSUM_SEED", vars::ZED_CLIENT_CHECKSUM_SEED))
 24        .add_env(("ZED_MINIDUMP_ENDPOINT", vars::ZED_SENTRY_MINIDUMP_ENDPOINT))
 25        .add_job("bundle_mac", bundle_mac())
 26        .add_job("bundle_linux_x86_64", bundle_linux(runners::Arch::X86_64))
 27        .add_job("bundle_linux_arm64", bundle_linux(runners::Arch::ARM64))
 28        .add_job(
 29            "bundle_windows_x86_64",
 30            bundle_windows_job(runners::Arch::X86_64),
 31        )
 32        .add_job(
 33            "bundle_windows_arm64",
 34            bundle_windows_job(runners::Arch::ARM64),
 35        )
 36}
 37
 38fn bundle_job() -> Job {
 39    Job::default()
 40        .cond(Expression::new(
 41                "(github.event.action == 'labeled' && github.event.label.name == 'run-bundling') ||
 42                 (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'run-bundling'))",
 43            ))
 44        .timeout_minutes(60u32)
 45}
 46
 47fn bundle_mac() -> Job {
 48    bundle_job()
 49        .runs_on(runners::MAC_DEFAULT)
 50        .envs(mac_bundle_envs())
 51        .add_step(steps::checkout_repo())
 52        .add_step(steps::setup_node())
 53        .add_step(steps::setup_sentry())
 54        .add_step(steps::clear_target_dir_if_large(runners::Platform::Mac))
 55        .add_step(steps::script("./script/bundle-mac"))
 56        .add_step(steps::upload_artifact(
 57            "Zed_${{ github.event.pull_request.head.sha || github.sha }}-aarch64.dmg",
 58            "target/aarch64-apple-darwin/release/Zed.dmg",
 59        ))
 60        .add_step(steps::upload_artifact(
 61            "Zed_${{ github.event.pull_request.head.sha || github.sha }}-x86_64.dmg",
 62            "target/x86_64-apple-darwin/release/Zed.dmg",
 63        ))
 64}
 65
 66fn bundle_linux(arch: runners::Arch) -> Job {
 67    let artifact_name = format!("zed-{}-{}.tar.gz", vars::GITHUB_SHA, arch.triple());
 68    let remote_server_artifact_name = format!(
 69        "zed-remote-server-{}-{}.tar.gz",
 70        vars::GITHUB_SHA,
 71        arch.triple()
 72    );
 73    let mut job = bundle_job()
 74        .runs_on(arch.linux_bundler())
 75        .add_step(steps::checkout_repo())
 76        .add_step(steps::setup_sentry())
 77        .add_step(steps::script("./script/linux"));
 78    // todo(ci) can we do this on arm too?
 79    if arch == runners::Arch::X86_64 {
 80        job = job.add_step(steps::script("./script/install-mold"));
 81    }
 82    job.add_step(steps::script("./script/bundle-linux"))
 83        .add_step(steps::upload_artifact(
 84            &artifact_name,
 85            "target/release/zed-*.tar.gz",
 86        ))
 87        .add_step(steps::upload_artifact(
 88            &remote_server_artifact_name,
 89            "target/release/zed-remote-server-*.tar.gz",
 90        ))
 91}
 92
 93fn bundle_windows_job(arch: runners::Arch) -> Job {
 94    use vars::GITHUB_SHA;
 95    bundle_job()
 96        .runs_on(runners::WINDOWS_DEFAULT)
 97        .envs(windows_bundle_envs())
 98        .add_step(steps::checkout_repo())
 99        .add_step(steps::setup_sentry())
100        .add_step(bundle_windows(arch))
101        .add_step(steps::upload_artifact(
102            &format!("Zed_{GITHUB_SHA}-{arch}.exe"),
103            "${{ env.SETUP_PATH }}",
104        ))
105}
106
107fn bundle_windows(arch: runners::Arch) -> Step<Run> {
108    let step = match arch {
109        runners::Arch::X86_64 => named::pwsh("script/bundle-windows.ps1 -Architecture x86_64"),
110        runners::Arch::ARM64 => named::pwsh("script/bundle-windows.ps1 -Architecture aarch64"),
111    };
112    step.working_directory("${{ env.ZED_WORKSPACE }}")
113}