Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T06:47:06.635Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

bump_version.rs

110 lines · 3.8 KB · rust
1use gh_workflow::{
2    Event, Expression, Input, Job, Level, Permissions, PullRequest, PullRequestType, Push, Run,
3    Step, UsesJob, Workflow, WorkflowDispatch,
4};
5use indoc::indoc;
6
7use crate::tasks::workflows::{
8    GenerateWorkflowArgs, GitSha,
9    extensions::WithAppSecrets,
10    runners,
11    steps::{CommonJobConditions, NamedJob, named},
12    vars::{JobOutput, StepOutput, one_workflow_per_non_main_branch_and_token},
13};
14
15pub(crate) fn bump_version(args: &GenerateWorkflowArgs) -> Workflow {
16    let (determine_bump_type, bump_type) = determine_bump_type();
17    let bump_type = bump_type.as_job_output(&determine_bump_type);
18
19    let call_bump_version = call_bump_version(args.sha.as_ref(), &determine_bump_type, bump_type);
20
21    named::workflow()
22        .on(Event::default()
23            .push(
24                Push::default()
25                    .add_branch("main")
26                    .add_ignored_path(".github/**"),
27            )
28            .pull_request(PullRequest::default().add_type(PullRequestType::Labeled))
29            .workflow_dispatch(WorkflowDispatch::default()))
30        .permissions(Permissions::default())
31        .concurrency(one_workflow_per_non_main_branch_and_token("labels"))
32        .add_job(determine_bump_type.name, determine_bump_type.job)
33        .add_job(call_bump_version.name, call_bump_version.job)
34}
35
36pub(crate) fn call_bump_version(
37    target_ref: Option<&GitSha>,
38    depending_job: &NamedJob,
39    bump_type: JobOutput,
40) -> NamedJob<UsesJob> {
41    let job = Job::default()
42        .cond(Expression::new(format!(
43            "github.event.action != 'labeled' || {} != 'patch'",
44            bump_type.expr()
45        )))
46        .permissions(
47            Permissions::default()
48                .contents(Level::Write)
49                .issues(Level::Write)
50                .pull_requests(Level::Write)
51                .actions(Level::Write),
52        )
53        .uses(
54            "zed-industries",
55            "zed",
56            ".github/workflows/extension_bump.yml",
57            target_ref.map_or("main", AsRef::as_ref),
58        )
59        .add_need(depending_job.name.clone())
60        .with(
61            Input::default()
62                .add("bump-type", bump_type.to_string())
63                .add("force-bump", "${{ github.event_name != 'push' }}"),
64        )
65        .with_app_secrets();
66
67    named::job(job)
68}
69
70fn determine_bump_type() -> (NamedJob, StepOutput) {
71    let (get_bump_type, output) = get_bump_type();
72    let job = Job::default()
73        .with_repository_owner_guard()
74        .permissions(Permissions::default())
75        .runs_on(runners::LINUX_SMALL)
76        .add_step(get_bump_type)
77        .outputs([(output.name.to_owned(), output.to_string())]);
78    (named::job(job), output)
79}
80
81fn get_bump_type() -> (Step<Run>, StepOutput) {
82    let step = named::bash(
83        indoc! {r#"
84            if [ "$HAS_MAJOR_LABEL" = "true" ]; then
85                bump_type="major"
86            elif [ "$HAS_MINOR_LABEL" = "true" ]; then
87                bump_type="minor"
88            else
89                bump_type="patch"
90            fi
91            echo "bump_type=$bump_type" >> $GITHUB_OUTPUT
92        "#},
93    )
94    .add_env(("HAS_MAJOR_LABEL",
95        indoc!{
96            "${{ (github.event.action == 'labeled' && github.event.label.name == 'major') ||
97            (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'major')) }}"
98        }))
99    .add_env(("HAS_MINOR_LABEL",
100        indoc!{
101            "${{ (github.event.action == 'labeled' && github.event.label.name == 'minor') ||
102            (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'minor')) }}"
103        }))
104    .id("get-bump-type");
105
106    let step_output = StepOutput::new(&step, "bump_type");
107
108    (step, step_output)
109}
110
Served at tenant.openagents/omega Member data and write actions are omitted.