SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
1851bae verified
Raw History Blame Contribute Delete
1.67 kB
use gh_workflow::generate::Generate;
use gh_workflow::*;
use crate::jobs::{sync_all_issues_job, sync_pr_job};
/// Generate the bounty management workflow (v2).
///
/// Two jobs cover the full bounty lifecycle:
/// - `sync-all-issues`: fetches all open issues with any bounty label and
/// reconciles their label sets in one pass. Triggered on label/assignment
/// events and daily on a schedule.
/// - `sync-pr`: propagates bounty value labels from linked issues to the PR on
/// open/edit, and applies the rewarded lifecycle on merge.
pub fn generate_bounty_workflow() {
let events = Event::default()
.pull_request(
PullRequest::default()
.add_type(PullRequestType::Opened)
.add_type(PullRequestType::Edited)
.add_type(PullRequestType::Reopened),
)
.pull_request_target(PullRequestTarget::default().add_type(PullRequestType::Closed))
.issues(
Issues::default()
.add_type(IssuesType::Assigned)
.add_type(IssuesType::Unassigned)
.add_type(IssuesType::Labeled)
.add_type(IssuesType::Unlabeled),
)
.add_cron_schedule("0 2 * * *");
let workflow = Workflow::default()
.name("Bounty Management")
.on(events)
.permissions(
Permissions::default()
.issues(Level::Write)
.pull_requests(Level::Write),
)
.add_job("sync-all-issues", sync_all_issues_job())
.add_job("sync-pr", sync_pr_job());
Generate::new(workflow)
.name("bounty.yml")
.generate()
.unwrap();
}