1use crate::tasks::workflows::{
2 steps::{FluentBuilder, 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_x86_64", bundle_mac_job(runners::Arch::X86_64))
26 .add_job("bundle_mac_arm64", bundle_mac_job(runners::Arch::ARM64))
27 .add_job("bundle_linux_x86_64", bundle_linux(runners::Arch::X86_64))
28 .add_job("bundle_linux_arm64", bundle_linux(runners::Arch::ARM64))
29 .add_job(
30 "bundle_windows_x86_64",
31 bundle_windows_job(runners::Arch::X86_64),
32 )
33 .add_job(
34 "bundle_windows_arm64",
35 bundle_windows_job(runners::Arch::ARM64),
36 )
37}
38
39fn bundle_job() -> Job {
40 Job::default()
41 .cond(Expression::new(
42 "(github.event.action == 'labeled' && github.event.label.name == 'run-bundling') ||
43 (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'run-bundling'))",
44 ))
45 .timeout_minutes(60u32)
46}
47
48fn bundle_mac_job(arch: runners::Arch) -> Job {
49 use vars::GITHUB_SHA;
50 bundle_job()
51 .runs_on(runners::MAC_DEFAULT)
52 .envs(mac_bundle_envs())
53 .add_step(steps::checkout_repo())
54 .add_step(steps::setup_node())
55 .add_step(steps::setup_sentry())
56 .add_step(steps::clear_target_dir_if_large(runners::Platform::Mac))
57 .add_step(bundle_mac(arch))
58 .add_step(steps::upload_artifact(
59 &format!("Zed_{GITHUB_SHA}-{arch}.dmg"),
60 &format!("target/{arch}-apple-darwin/release/Zed.dmg"),
61 ))
62 .add_step(steps::upload_artifact(
63 &format!("zed-remote-server-{GITHUB_SHA}-macos-{arch}.gz"),
64 &format!("target/zed-remote-server-macos-{arch}.gz"),
65 ))
66}
67
68pub fn bundle_mac(arch: runners::Arch) -> Step<Run> {
69 named::bash(&format!("./script/bundle-mac {arch}-apple-darwin"))
70}
71
72fn bundle_linux(arch: runners::Arch) -> Job {
73 let artifact_name = format!("zed-{}-{}.tar.gz", vars::GITHUB_SHA, arch.triple());
74 let remote_server_artifact_name = format!(
75 "zed-remote-server-{}-{}.tar.gz",
76 vars::GITHUB_SHA,
77 arch.triple()
78 );
79 bundle_job()
80 .runs_on(arch.linux_bundler())
81 .add_step(steps::checkout_repo())
82 .add_step(steps::setup_sentry())
83 .map(steps::install_linux_dependencies)
84 .add_step(steps::script("./script/bundle-linux"))
85 .add_step(steps::upload_artifact(
86 &artifact_name,
87 "target/release/zed-*.tar.gz",
88 ))
89 .add_step(steps::upload_artifact(
90 &remote_server_artifact_name,
91 "target/release/zed-remote-server-*.tar.gz",
92 ))
93}
94
95fn bundle_windows_job(arch: runners::Arch) -> Job {
96 use vars::GITHUB_SHA;
97 bundle_job()
98 .runs_on(runners::WINDOWS_DEFAULT)
99 .envs(windows_bundle_envs())
100 .add_step(steps::checkout_repo())
101 .add_step(steps::setup_sentry())
102 .add_step(bundle_windows(arch))
103 .add_step(steps::upload_artifact(
104 &format!("Zed_{GITHUB_SHA}-{arch}.exe"),
105 "${{ env.SETUP_PATH }}",
106 ))
107}
108
109fn bundle_windows(arch: runners::Arch) -> Step<Run> {
110 let step = match arch {
111 runners::Arch::X86_64 => named::pwsh("script/bundle-windows.ps1 -Architecture x86_64"),
112 runners::Arch::ARM64 => named::pwsh("script/bundle-windows.ps1 -Architecture aarch64"),
113 };
114 step.working_directory("${{ env.ZED_WORKSPACE }}")
115}