cherry_pick.rs

 1use gh_workflow::*;
 2
 3use crate::tasks::workflows::{
 4    runners,
 5    steps::{self, NamedJob, named},
 6    vars::{self, Input, StepOutput},
 7};
 8
 9pub fn cherry_pick() -> Workflow {
10    let branch = Input::string("branch", None);
11    let commit = Input::string("commit", None);
12    let channel = Input::string("channel", None);
13    let pr_number = Input::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(branch: &Input, commit: &Input, channel: &Input) -> NamedJob {
28    fn authenticate_as_zippy() -> (Step<Use>, StepOutput) {
29        let step = named::uses(
30            "actions",
31            "create-github-app-token",
32            "bef1eaf1c0ac2b148ee2a0a74c65fbe6db0631f1",
33        ) // v2
34        .add_with(("app-id", vars::ZED_ZIPPY_APP_ID))
35        .add_with(("private-key", vars::ZED_ZIPPY_APP_PRIVATE_KEY))
36        .id("get-app-token");
37        let output = StepOutput::new(&step, "token");
38        (step, output)
39    }
40
41    fn cherry_pick(
42        branch: &Input,
43        commit: &Input,
44        channel: &Input,
45        token: &StepOutput,
46    ) -> Step<Run> {
47        named::bash(&format!("./script/cherry-pick {branch} {commit} {channel}"))
48            .add_env(("GIT_COMMITTER_NAME", "Zed Zippy"))
49            .add_env(("GIT_COMMITTER_EMAIL", "hi@zed.dev"))
50            .add_env(("GITHUB_TOKEN", token))
51    }
52
53    let (authenticate, token) = authenticate_as_zippy();
54
55    named::job(
56        Job::default()
57            .runs_on(runners::LINUX_SMALL)
58            .add_step(steps::checkout_repo())
59            .add_step(authenticate)
60            .add_step(cherry_pick(branch, commit, channel, &token)),
61    )
62}