101 lines
3.3 KiB
Rust
101 lines
3.3 KiB
Rust
use gh_workflow::{
|
|
Event, Expression, Input, Job, PullRequest, PullRequestType, Push, Run, Step, UsesJob, Workflow,
|
|
};
|
|
use indexmap::IndexMap;
|
|
use indoc::indoc;
|
|
|
|
use crate::tasks::workflows::{
|
|
runners,
|
|
steps::{NamedJob, named},
|
|
vars::{self, JobOutput, StepOutput, one_workflow_per_non_main_branch_and_token},
|
|
};
|
|
|
|
pub(crate) fn bump_version() -> Workflow {
|
|
let (determine_bump_type, bump_type) = determine_bump_type();
|
|
let bump_type = bump_type.as_job_output(&determine_bump_type);
|
|
|
|
let call_bump_version = call_bump_version(&determine_bump_type, bump_type);
|
|
|
|
named::workflow()
|
|
.on(Event::default()
|
|
.push(Push::default().add_branch("main"))
|
|
.pull_request(PullRequest::default().add_type(PullRequestType::Labeled)))
|
|
.concurrency(one_workflow_per_non_main_branch_and_token("labels"))
|
|
.add_job(determine_bump_type.name, determine_bump_type.job)
|
|
.add_job(call_bump_version.name, call_bump_version.job)
|
|
}
|
|
|
|
pub(crate) fn call_bump_version(
|
|
depending_job: &NamedJob,
|
|
bump_type: JobOutput,
|
|
) -> NamedJob<UsesJob> {
|
|
let job = Job::default()
|
|
.cond(Expression::new(format!(
|
|
indoc! {
|
|
"(github.event.action == 'labeled' && {} != 'patch') ||
|
|
github.event_name == 'push'"
|
|
},
|
|
bump_type.expr()
|
|
)))
|
|
.uses(
|
|
"zed-industries",
|
|
"zed",
|
|
".github/workflows/extension_bump.yml",
|
|
"main",
|
|
)
|
|
.add_need(depending_job.name.clone())
|
|
.with(
|
|
Input::default()
|
|
.add("bump-type", bump_type.to_string())
|
|
.add("force-bump", true),
|
|
)
|
|
.secrets(IndexMap::from([
|
|
("app-id".to_owned(), vars::ZED_ZIPPY_APP_ID.to_owned()),
|
|
(
|
|
"app-secret".to_owned(),
|
|
vars::ZED_ZIPPY_APP_PRIVATE_KEY.to_owned(),
|
|
),
|
|
]));
|
|
|
|
named::job(job)
|
|
}
|
|
|
|
fn determine_bump_type() -> (NamedJob, StepOutput) {
|
|
let (get_bump_type, output) = get_bump_type();
|
|
let job = Job::default()
|
|
.runs_on(runners::LINUX_DEFAULT)
|
|
.add_step(get_bump_type)
|
|
.outputs([(output.name.to_owned(), output.to_string())]);
|
|
(named::job(job), output)
|
|
}
|
|
|
|
fn get_bump_type() -> (Step<Run>, StepOutput) {
|
|
let step = named::bash(
|
|
indoc! {r#"
|
|
if [ "$HAS_MAJOR_LABEL" = "true" ]; then
|
|
bump_type="major"
|
|
elif [ "$HAS_MINOR_LABEL" = "true" ]; then
|
|
bump_type="minor"
|
|
else
|
|
bump_type="patch"
|
|
fi
|
|
echo "bump_type=$bump_type" >> $GITHUB_OUTPUT
|
|
"#},
|
|
)
|
|
.add_env(("HAS_MAJOR_LABEL",
|
|
indoc!{
|
|
"${{ (github.event.action == 'labeled' && github.event.label.name == 'major') ||
|
|
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'major')) }}"
|
|
}))
|
|
.add_env(("HAS_MINOR_LABEL",
|
|
indoc!{
|
|
"${{ (github.event.action == 'labeled' && github.event.label.name == 'minor') ||
|
|
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'minor')) }}"
|
|
}))
|
|
.id("get-bump-type");
|
|
|
|
let step_output = StepOutput::new(&step, "bump_type");
|
|
|
|
(step, step_output)
|
|
}
|