1use gh_workflow::*;
2
3use crate::tasks::workflows::{
4 runners,
5 steps::{self, NamedJob, named},
6 vars::{self, StepOutput, WorkflowInput},
7};
8
9pub fn cherry_pick() -> Workflow {
10 let branch = WorkflowInput::string("branch", None);
11 let commit = WorkflowInput::string("commit", None);
12 let channel = WorkflowInput::string("channel", None);
13 let pr_number = WorkflowInput::string("pr_number", None);
14 let cherry_pick = run_cherry_pick(&branch, &commit, &channel);
15 named::workflow()
16 .run_name(format!("cherry_pick to {channel} #{pr_number}"))
17 .on(Event::default().workflow_dispatch(
18 WorkflowDispatch::default()
19 .add_input(commit.name, commit.input())
20 .add_input(branch.name, branch.input())
21 .add_input(channel.name, channel.input())
22 .add_input(pr_number.name, pr_number.input()),
23 ))
24 .add_job(cherry_pick.name, cherry_pick.job)
25}
26
27fn run_cherry_pick(
28 branch: &WorkflowInput,
29 commit: &WorkflowInput,
30 channel: &WorkflowInput,
31) -> NamedJob {
32 fn authenticate_as_zippy() -> (Step<Use>, StepOutput) {
33 let step = named::uses(
34 "actions",
35 "create-github-app-token",
36 "bef1eaf1c0ac2b148ee2a0a74c65fbe6db0631f1",
37 ) // v2
38 .add_with(("app-id", vars::ZED_ZIPPY_APP_ID))
39 .add_with(("private-key", vars::ZED_ZIPPY_APP_PRIVATE_KEY))
40 .id("get-app-token");
41 let output = StepOutput::new(&step, "token");
42 (step, output)
43 }
44
45 fn cherry_pick(
46 branch: &WorkflowInput,
47 commit: &WorkflowInput,
48 channel: &WorkflowInput,
49 token: &StepOutput,
50 ) -> Step<Run> {
51 named::bash(&format!("./script/cherry-pick {branch} {commit} {channel}"))
52 .add_env(("GIT_COMMITTER_NAME", "Zed Zippy"))
53 .add_env(("GIT_COMMITTER_EMAIL", "hi@zed.dev"))
54 .add_env(("GITHUB_TOKEN", token))
55 }
56
57 let (authenticate, token) = authenticate_as_zippy();
58
59 named::job(
60 Job::default()
61 .runs_on(runners::LINUX_SMALL)
62 .add_step(steps::checkout_repo())
63 .add_step(authenticate)
64 .add_step(cherry_pick(branch, commit, channel, &token)),
65 )
66}