reupload_sentry_symbols.rs

 1use gh_workflow::*;
 2
 3use crate::tasks::workflows::{
 4    runners::{self, Arch, Platform},
 5    steps::{self, CommonJobConditions, NamedJob, named},
 6    vars::{WorkflowInput, bundle_envs},
 7};
 8
 9pub fn reupload_sentry_symbols() -> Workflow {
10    let tag = WorkflowInput::string("tag", None)
11        .description("Git tag to rebuild and upload symbols for (e.g. v0.200.0-pre)");
12
13    let jobs = [
14        upload_job(&tag, Platform::Linux, Arch::X86_64),
15        upload_job(&tag, Platform::Linux, Arch::AARCH64),
16        upload_job(&tag, Platform::Mac, Arch::X86_64),
17        upload_job(&tag, Platform::Mac, Arch::AARCH64),
18        upload_job(&tag, Platform::Windows, Arch::X86_64),
19        upload_job(&tag, Platform::Windows, Arch::AARCH64),
20    ];
21
22    let mut workflow = named::workflow()
23        .on(Event::default()
24            .workflow_dispatch(WorkflowDispatch::default().add_input(tag.name, tag.input())))
25        .add_env(("CARGO_TERM_COLOR", "always"))
26        .add_env(("RUST_BACKTRACE", "1"));
27
28    for job in jobs {
29        workflow = workflow.add_job(job.name, job.job);
30    }
31
32    workflow
33}
34
35fn upload_job(tag: &WorkflowInput, platform: Platform, arch: Arch) -> NamedJob {
36    fn upload_symbols_unix() -> Step<Run> {
37        named::bash("./script/upload-sentry-symbols --verify")
38    }
39
40    fn upload_symbols_windows() -> Step<Run> {
41        named::pwsh("./script/upload-sentry-symbols.ps1 -Verify")
42    }
43
44    let runner = match platform {
45        Platform::Linux => arch.linux_bundler(),
46        Platform::Mac => runners::MAC_DEFAULT,
47        Platform::Windows => runners::WINDOWS_DEFAULT,
48    };
49
50    let mut job = Job::default()
51        .runs_on(runner)
52        .timeout_minutes(60u32)
53        .with_repository_owner_guard()
54        .envs(bundle_envs(platform))
55        .add_step(steps::checkout_repo().with_ref(tag))
56        .add_step(steps::setup_sentry());
57
58    if platform == Platform::Linux {
59        job = steps::install_linux_dependencies(job);
60    }
61
62    job = match platform {
63        Platform::Windows => job.add_step(upload_symbols_windows()),
64        _ => job.add_step(upload_symbols_unix()),
65    };
66
67    NamedJob {
68        name: format!("upload_{platform}_{arch}"),
69        job,
70    }
71}