bump_patch_version.rs

 1use gh_workflow::*;
 2
 3use crate::tasks::workflows::{
 4    runners,
 5    steps::{self, CheckoutStep, named},
 6    vars::{StepOutput, WorkflowInput},
 7};
 8
 9pub fn bump_patch_version() -> Workflow {
10    let branch = WorkflowInput::string("branch", None).description("Branch name to run on");
11    let bump_patch_version_job = run_bump_patch_version(&branch);
12    named::workflow()
13        .on(Event::default()
14            .workflow_dispatch(WorkflowDispatch::default().add_input(branch.name, branch.input())))
15        .concurrency(
16            Concurrency::new(Expression::new(format!(
17                "${{{{ github.workflow }}}}-{branch}"
18            )))
19            .cancel_in_progress(true),
20        )
21        .add_job(bump_patch_version_job.name, bump_patch_version_job.job)
22}
23
24fn run_bump_patch_version(branch: &WorkflowInput) -> steps::NamedJob {
25    fn checkout_branch(branch: &WorkflowInput, token: &StepOutput) -> CheckoutStep {
26        steps::checkout_repo()
27            .with_token(token)
28            .with_ref(branch.to_string())
29    }
30
31    fn bump_patch_version(token: &StepOutput) -> Step<Run> {
32        named::bash(indoc::indoc! {r#"
33            channel="$(cat crates/zed/RELEASE_CHANNEL)"
34
35            tag_suffix=""
36            case $channel in
37              stable)
38                ;;
39              preview)
40                tag_suffix="-pre"
41                ;;
42              *)
43                echo "this must be run on either of stable|preview release branches" >&2
44                exit 1
45                ;;
46            esac
47            which cargo-set-version > /dev/null || cargo install cargo-edit -f --no-default-features --features "set-version"
48            output="$(cargo set-version -p zed --bump patch 2>&1 | sed 's/.* //')"
49            git commit -am "Bump to $output for @$GITHUB_ACTOR"
50            git tag "v${output}${tag_suffix}"
51            git push origin HEAD "v${output}${tag_suffix}"
52        "#})
53        .add_env(("GIT_COMMITTER_NAME", "Zed Zippy"))
54        .add_env((
55            "GIT_COMMITTER_EMAIL",
56            "234243425+zed-zippy[bot]@users.noreply.github.com",
57        ))
58        .add_env(("GIT_AUTHOR_NAME", "Zed Zippy"))
59        .add_env((
60            "GIT_AUTHOR_EMAIL",
61            "234243425+zed-zippy[bot]@users.noreply.github.com",
62        ))
63        .add_env(("GITHUB_TOKEN", token))
64    }
65
66    let (authenticate, token) = steps::authenticate_as_zippy();
67
68    named::job(
69        Job::default()
70            .cond(Expression::new(
71                "github.repository_owner == 'zed-industries'",
72            ))
73            .runs_on(runners::LINUX_XL)
74            .add_step(authenticate)
75            .add_step(checkout_branch(branch, &token))
76            .add_step(bump_patch_version(&token)),
77    )
78}