129 lines · 4.7 KB · Rust
RawDownload
use crate::tasks::workflows::{    nix_build::build_nix,    release::{        ReleaseBundleJobs, create_sentry_release, download_workflow_artifacts, notify_on_failure,        prep_release_artifacts,    },    run_bundling::{bundle_linux, bundle_mac, bundle_windows},    run_tests::{clippy, run_platform_tests_no_filter},    runners::{Arch, Platform, ReleaseChannel},    steps::{CommonJobConditions, FluentBuilder, NamedJob},}; use super::{runners, steps, steps::named, vars};use gh_workflow::*; /// Generates the release_nightly.yml workflowpub fn release_nightly() -> Workflow {    let style = check_style();    // run only on windows as that's our fastest platform right now.    let tests = run_platform_tests_no_filter(Platform::Windows);    let clippy_job = clippy(Platform::Windows, None);    let nightly = Some(ReleaseChannel::Nightly);     let bundle = ReleaseBundleJobs {        linux_aarch64: bundle_linux(Arch::AARCH64, nightly, &[&style, &tests, &clippy_job]),        linux_x86_64: bundle_linux(Arch::X86_64, nightly, &[&style, &tests, &clippy_job]),        mac_aarch64: bundle_mac(Arch::AARCH64, nightly, &[&style, &tests, &clippy_job]),        mac_x86_64: bundle_mac(Arch::X86_64, nightly, &[&style, &tests, &clippy_job]),        windows_aarch64: bundle_windows(Arch::AARCH64, nightly, &[&style, &tests, &clippy_job]),        windows_x86_64: bundle_windows(Arch::X86_64, nightly, &[&style, &tests, &clippy_job]),    };     let nix_linux_x86 = build_nix(        Platform::Linux,        Arch::X86_64,        "default",        None,        &[&style, &tests],    );    let nix_mac_arm = build_nix(        Platform::Mac,        Arch::AARCH64,        "default",        None,        &[&style, &tests],    );    let update_nightly_tag = update_nightly_tag_job(&bundle);    let notify_on_failure = notify_on_failure(&bundle.jobs());     named::workflow()        .on(Event::default()            // Fire every day at 7:00am UTC (Roughly before EU workday and after US workday)            .schedule([Schedule::new("0 7 * * *")])            .push(Push::default().add_tag("nightly")))        .add_env(("CARGO_TERM_COLOR", "always"))        .add_env(("RUST_BACKTRACE", "1"))        .add_job(style.name, style.job)        .add_job(tests.name, tests.job)        .add_job(clippy_job.name, clippy_job.job)        .map(|mut workflow| {            for job in bundle.into_jobs() {                workflow = workflow.add_job(job.name, job.job);            }            workflow        })        .add_job(nix_linux_x86.name, nix_linux_x86.job)        .add_job(nix_mac_arm.name, nix_mac_arm.job)        .add_job(update_nightly_tag.name, update_nightly_tag.job)        .add_job(notify_on_failure.name, notify_on_failure.job)} fn check_style() -> NamedJob {    let job = release_job(&[])        .runs_on(runners::MAC_DEFAULT)        .add_step(steps::checkout_repo().with_full_history())        .add_step(steps::cargo_fmt())        .add_step(steps::script("./script/clippy"));     named::job(job)} fn release_job(deps: &[&NamedJob]) -> Job {    let job = Job::default()        .with_repository_owner_guard()        .timeout_minutes(60u32);    if deps.len() > 0 {        job.needs(deps.iter().map(|j| j.name.clone()).collect::<Vec<_>>())    } else {        job    }} fn update_nightly_tag_job(bundle: &ReleaseBundleJobs) -> NamedJob {    fn update_nightly_tag() -> Step<Run> {        named::bash(indoc::indoc! {r#"            if [ "$(git rev-parse nightly)" = "$(git rev-parse HEAD)" ]; then              echo "Nightly tag already points to current commit. Skipping tagging."              exit 0            fi            git config user.name github-actions            git config user.email github-actions@github.com            git tag -f nightly            git push origin nightly --force        "#})    }     NamedJob {        name: "update_nightly_tag".to_owned(),        job: steps::release_job(&bundle.jobs())            .runs_on(runners::LINUX_MEDIUM)            .add_step(steps::checkout_repo().with_full_history())            .add_step(download_workflow_artifacts())            .add_step(steps::script("ls -lR ./artifacts"))            .add_step(prep_release_artifacts())            .add_step(                steps::script("./script/upload-nightly")                    .add_env((                        "DIGITALOCEAN_SPACES_ACCESS_KEY",                        vars::DIGITALOCEAN_SPACES_ACCESS_KEY,                    ))                    .add_env((                        "DIGITALOCEAN_SPACES_SECRET_KEY",                        vars::DIGITALOCEAN_SPACES_SECRET_KEY,                    )),            )            .add_step(update_nightly_tag())            .add_step(create_sentry_release()),    }}