Skip to content

Commit

Permalink
nixpkgs: split up issue labeling
Browse files Browse the repository at this point in the history
  • Loading branch information
LnL7 committed Nov 7, 2020
1 parent a1fa8ee commit 2ccdab7
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 46 deletions.
15 changes: 12 additions & 3 deletions ofborg/src/ghrepo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ use crate::commitstatus;
use crate::message;

use hubcaps::checks::{CheckRun, CheckRunOptions};
use hubcaps::issues::IssueRef;
use hubcaps::issues::Issue;
use hubcaps::labels::Label;
use hubcaps::pulls::Pull;
use hubcaps::repositories::Repository;
use hubcaps::review_requests::ReviewRequestOptions;
Expand All @@ -19,15 +20,23 @@ impl<'a> Client<'a> {
Client { repo }
}

pub fn get_issue_ref(&self, number: u64) -> IssueRef {
self.repo.issue(number)
pub fn get_issue(&self, number: u64) -> hubcaps::Result<Issue> {
self.repo.issue(number).get()
}

pub fn get_pull(&self, number: u64) -> hubcaps::Result<Pull> {
let pulls = self.repo.pulls();
pulls.get(number).get()
}

pub fn add_labels(&self, number: u64, labels: Vec<&str>) -> hubcaps::Result<Vec<Label>> {
self.repo.issue(number).labels().add(labels)
}

pub fn remove_label(&self, number: u64, label: &str) -> hubcaps::Result<()> {
self.repo.issue(number).labels().remove(label)
}

pub fn create_review_request(
&self,
number: u64,
Expand Down
45 changes: 26 additions & 19 deletions ofborg/src/tasks/eval/nixpkgs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ use std::path::Path;
use chrono::Utc;
use hubcaps::checks::{CheckRunOptions, CheckRunState, Conclusion, Output};
use hubcaps::gists::Gists;
use hubcaps::issues::IssueRef;
use tracing::{info, warn};
use uuid::Uuid;

Expand All @@ -33,7 +32,6 @@ static MAINTAINER_REVIEW_MAX_CHANGED_PATHS: usize = 64;
pub struct NixpkgsStrategy<'a> {
repo_client: &'a ghrepo::Client<'a>,
job: &'a EvaluationJob,
issue_ref: &'a IssueRef<'a>,
gists: &'a Gists<'a>,
nix: Nix,
tag_paths: &'a HashMap<String, Vec<String>>,
Expand All @@ -48,15 +46,13 @@ impl<'a> NixpkgsStrategy<'a> {
pub fn new(
repo_client: &'a ghrepo::Client<'a>,
job: &'a EvaluationJob,
issue_ref: &'a IssueRef,
gists: &'a Gists,
nix: Nix,
tag_paths: &'a HashMap<String, Vec<String>>,
) -> NixpkgsStrategy<'a> {
Self {
repo_client,
job,
issue_ref,
gists,
nix,
tag_paths,
Expand All @@ -69,16 +65,21 @@ impl<'a> NixpkgsStrategy<'a> {

fn tag_from_title(&self) {
let darwin = self
.issue_ref
.get()
.map(|iss| {
iss.title.to_lowercase().contains("darwin")
|| iss.title.to_lowercase().contains("macos")
.repo_client
.get_issue(self.job.pr.number)
.map(|issue| {
issue.title.to_lowercase().contains("darwin")
|| issue.title.to_lowercase().contains("macos")
})
.unwrap_or(false);

if darwin {
update_labels(&self.issue_ref, &[String::from("6.topic: darwin")], &[]);
update_labels(
&self.repo_client,
&self.job.pr,
&[String::from("6.topic: darwin")],
&[],
);
}
}

Expand All @@ -91,7 +92,8 @@ impl<'a> NixpkgsStrategy<'a> {
}

update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&tagger.tags_to_add(),
&tagger.tags_to_remove(),
);
Expand All @@ -117,7 +119,8 @@ impl<'a> NixpkgsStrategy<'a> {
stdenvtagger.changed(stdenvs.changed());
}
update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&stdenvtagger.tags_to_add(),
&stdenvtagger.tags_to_remove(),
);
Expand Down Expand Up @@ -196,7 +199,8 @@ impl<'a> NixpkgsStrategy<'a> {
let mut addremovetagger = PkgsAddedRemovedTagger::new();
addremovetagger.changed(&removed, &added);
update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&addremovetagger.tags_to_add(),
&addremovetagger.tags_to_remove(),
);
Expand All @@ -222,7 +226,8 @@ impl<'a> NixpkgsStrategy<'a> {
}

update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&rebuild_tags.tags_to_add(),
&rebuild_tags.tags_to_remove(),
);
Expand Down Expand Up @@ -295,12 +300,12 @@ impl<'a> NixpkgsStrategy<'a> {
let mut maint_tagger = MaintainerPRTagger::new();
let issue = self
.repo_client
.get_issue_ref(self.job.pr.number)
.get()
.get_issue(self.job.pr.number)
.map_err(|_e| Error::Fail(String::from("Failed to retrieve issue")))?;
maint_tagger.record_maintainer(&issue.user.login, &maint.maintainers_by_package());
update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&maint_tagger.tags_to_add(),
&maint_tagger.tags_to_remove(),
);
Expand Down Expand Up @@ -406,15 +411,17 @@ impl<'a> EvaluationStrategy for NixpkgsStrategy<'a> {

fn merge_conflict(&mut self) {
update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&["2.status: merge conflict".to_owned()],
&[],
);
}

fn after_merge(&mut self, status: &mut CommitStatus) -> StepResult<()> {
update_labels(
&self.issue_ref,
&self.repo_client,
&self.job.pr,
&[],
&["2.status: merge conflict".to_owned()],
);
Expand Down
55 changes: 31 additions & 24 deletions ofborg/src/tasks/evaluate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::commitstatus::CommitStatusError;
use crate::config::GithubAppVendingMachine;
use crate::files::file_to_str;
use crate::ghrepo;
use crate::message::{buildjob, evaluationjob};
use crate::message::{buildjob, evaluationjob, Pr};
use crate::nix;
use crate::stats::{self, Event};
use crate::systems;
Expand Down Expand Up @@ -238,8 +238,12 @@ impl<'a, E: stats::SysEvents + 'static> OneEval<'a, E> {
"Internal error writing commit status: {:?}, marking internal error",
cswerr
);
let issue_ref = self.repo_client.get_issue_ref(self.job.pr.number);
update_labels(&issue_ref, &[String::from("ofborg-internal-error")], &[]);
update_labels(
&self.repo_client,
&self.job.pr,
&[String::from("ofborg-internal-error")],
&[],
);

self.actions().skip(&self.job)
}
Expand All @@ -252,20 +256,19 @@ impl<'a, E: stats::SysEvents + 'static> OneEval<'a, E> {
let job = self.job;
let auto_schedule_build_archs: Vec<systems::System>;

let issue_ref = self.repo_client.get_issue_ref(job.pr.number);
match issue_ref.get() {
Ok(iss) => {
if iss.state == "closed" {
match self.repo_client.get_issue(job.pr.number) {
Ok(issue) => {
if issue.state == "closed" {
self.events.notify(Event::IssueAlreadyClosed);
info!("Skipping {} because it is closed", job.pr.number);
return Ok(self.actions().skip(&job));
}

if issue_is_wip(&iss) {
if issue_is_wip(&issue) {
auto_schedule_build_archs = vec![];
} else {
auto_schedule_build_archs = self.acl.build_job_architectures_for_user_repo(
&iss.user.login,
&issue.user.login,
&job.repo.full_name,
);
}
Expand All @@ -283,7 +286,6 @@ impl<'a, E: stats::SysEvents + 'static> OneEval<'a, E> {
Box::new(eval::NixpkgsStrategy::new(
&self.repo_client,
&job,
&issue_ref,
&self.gists,
self.nix.clone(),
&self.tag_paths,
Expand Down Expand Up @@ -507,9 +509,10 @@ pub fn make_gist<'a>(
)
}

pub fn update_labels(issueref: &hubcaps::issues::IssueRef, add: &[String], remove: &[String]) {
let l = issueref.labels();
let issue = issueref.get().expect("Failed to get issue");
pub fn update_labels(repo_client: &ghrepo::Client, pr: &Pr, add: &[String], remove: &[String]) {
let issue = repo_client
.get_issue(pr.number)
.expect("Failed to get issue");

let existing: Vec<String> = issue.labels.iter().map(|l| l.name.clone()).collect();

Expand All @@ -530,20 +533,24 @@ pub fn update_labels(issueref: &hubcaps::issues::IssueRef, add: &[String], remov
issue.number, to_add, to_remove, existing
);

l.add(to_add.clone()).unwrap_or_else(|e| {
panic!(
"Failed to add labels {:?} to issue #{}: {:?}",
to_add, issue.number, e
)
});

for label in to_remove {
l.remove(&label).unwrap_or_else(|e| {
repo_client
.add_labels(pr.number, to_add.clone())
.unwrap_or_else(|e| {
panic!(
"Failed to remove label {:?} from issue #{}: {:?}",
label, issue.number, e
"Failed to add labels {:?} to issue #{}: {:?}",
to_add, issue.number, e
)
});

for label in to_remove {
repo_client
.remove_label(pr.number, &label)
.unwrap_or_else(|e| {
panic!(
"Failed to remove label {:?} from issue #{}: {:?}",
label, issue.number, e
)
});
}
}

Expand Down

0 comments on commit 2ccdab7

Please sign in to comment.