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}