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}