bump_patch_version.rs

 1use gh_workflow::*;
 2
 3use crate::tasks::workflows::{
 4    runners,
 5    steps::{self, 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) -> Step<Use> {
26        steps::checkout_repo_with_token(token).add_with(("ref", branch.to_string()))
27    }
28
29    fn bump_patch_version(token: &StepOutput) -> Step<Run> {
30        named::bash(indoc::indoc! {r#"
31            channel="$(cat crates/zed/RELEASE_CHANNEL)"
32
33            tag_suffix=""
34            case $channel in
35              stable)
36                ;;
37              preview)
38                tag_suffix="-pre"
39                ;;
40              *)
41                echo "this must be run on either of stable|preview release branches" >&2
42                exit 1
43                ;;
44            esac
45            which cargo-set-version > /dev/null || cargo install cargo-edit -f --no-default-features --features "set-version"
46            output="$(cargo set-version -p zed --bump patch 2>&1 | sed 's/.* //')"
47            git commit -am "Bump to $output for @$GITHUB_ACTOR"
48            git tag "v${output}${tag_suffix}"
49            git push origin HEAD "v${output}${tag_suffix}"
50        "#})
51        .shell(steps::BASH_SHELL)
52        .add_env(("GIT_COMMITTER_NAME", "Zed Zippy"))
53        .add_env((
54            "GIT_COMMITTER_EMAIL",
55            "234243425+zed-zippy[bot]@users.noreply.github.com",
56        ))
57        .add_env(("GIT_AUTHOR_NAME", "Zed Zippy"))
58        .add_env((
59            "GIT_AUTHOR_EMAIL",
60            "234243425+zed-zippy[bot]@users.noreply.github.com",
61        ))
62        .add_env(("GITHUB_TOKEN", token))
63    }
64
65    let (authenticate, token) = steps::authenticate_as_zippy();
66
67    named::job(
68        Job::default()
69            .cond(Expression::new(
70                "github.repository_owner == 'zed-industries'",
71            ))
72            .runs_on(runners::LINUX_XL)
73            .add_step(authenticate)
74            .add_step(checkout_branch(branch, &token))
75            .add_step(bump_patch_version(&token)),
76    )
77}