agenda.rs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. use crate::actions::{Action, Query, QueryKind, QueryMap, Step};
  2. use crate::github;
  3. pub fn prioritization<'a>() -> Box<dyn Action> {
  4. let mut actions = Vec::new();
  5. let mut queries = Vec::new();
  6. // MCP/FCP queries
  7. queries.push(QueryMap {
  8. name: "mcp_new_not_seconded",
  9. kind: QueryKind::List,
  10. query: Box::new(github::Query {
  11. filters: vec![("state", "open")],
  12. include_labels: vec!["major-change", "to-announce"],
  13. exclude_labels: vec![
  14. "proposed-final-comment-period",
  15. "finished-final-comment-period",
  16. "final-comment-period",
  17. "major-change-accepted",
  18. "t-libs",
  19. "t-libs-api",
  20. ],
  21. }),
  22. });
  23. queries.push(QueryMap {
  24. name: "mcp_old_not_seconded",
  25. kind: QueryKind::List,
  26. query: Box::new(github::Query {
  27. filters: vec![("state", "open")],
  28. include_labels: vec!["major-change"],
  29. exclude_labels: vec![
  30. "to-announce",
  31. "proposed-final-comment-period",
  32. "finished-final-comment-period",
  33. "final-comment-period",
  34. "t-libs",
  35. "t-libs-api",
  36. ],
  37. }),
  38. });
  39. queries.push(QueryMap {
  40. name: "in_pre_fcp",
  41. kind: QueryKind::List,
  42. query: Box::new(github::Query {
  43. filters: vec![("state", "open")],
  44. include_labels: vec!["proposed-final-comment-period"],
  45. exclude_labels: vec!["t-libs", "t-libs-api"],
  46. }),
  47. });
  48. queries.push(QueryMap {
  49. name: "in_fcp",
  50. kind: QueryKind::List,
  51. query: Box::new(github::Query {
  52. filters: vec![("state", "open")],
  53. include_labels: vec!["final-comment-period"],
  54. exclude_labels: vec!["t-libs", "t-libs-api"],
  55. }),
  56. });
  57. queries.push(QueryMap {
  58. name: "mcp_accepted",
  59. kind: QueryKind::List,
  60. query: Box::new(github::Query {
  61. filters: vec![("state", "all")],
  62. include_labels: vec!["major-change-accepted", "to-announce"],
  63. exclude_labels: vec!["t-libs", "t-libs-api"],
  64. }),
  65. });
  66. queries.push(QueryMap {
  67. name: "fcp_finished",
  68. kind: QueryKind::List,
  69. query: Box::new(github::Query {
  70. filters: vec![("state", "all")],
  71. include_labels: vec![
  72. "finished-final-comment-period",
  73. "disposition-merge",
  74. "to-announce",
  75. ],
  76. exclude_labels: vec!["t-libs", "t-libs-api"],
  77. }),
  78. });
  79. actions.push(Query {
  80. repos: vec![("rust-lang", "compiler-team")],
  81. queries,
  82. });
  83. let mut queries = Vec::new();
  84. queries.push(QueryMap {
  85. name: "in_pre_fcp",
  86. kind: QueryKind::List,
  87. query: Box::new(github::Query {
  88. filters: vec![("state", "open")],
  89. include_labels: vec!["proposed-final-comment-period", "T-compiler"],
  90. exclude_labels: vec!["t-libs", "t-libs-api"],
  91. }),
  92. });
  93. queries.push(QueryMap {
  94. name: "in_fcp",
  95. kind: QueryKind::List,
  96. query: Box::new(github::Query {
  97. filters: vec![("state", "open")],
  98. include_labels: vec!["final-comment-period", "T-compiler"],
  99. exclude_labels: vec!["t-libs", "t-libs-api"],
  100. }),
  101. });
  102. queries.push(QueryMap {
  103. name: "fcp_finished",
  104. kind: QueryKind::List,
  105. query: Box::new(github::Query {
  106. filters: vec![("state", "all")],
  107. include_labels: vec![
  108. "finished-final-comment-period",
  109. "disposition-merge",
  110. "to-announce",
  111. ],
  112. exclude_labels: vec!["t-libs", "t-libs-api"],
  113. }),
  114. });
  115. actions.push(Query {
  116. repos: vec![("rust-lang", "rust")],
  117. queries,
  118. });
  119. let mut queries = Vec::new();
  120. queries.push(QueryMap {
  121. name: "in_pre_fcp",
  122. kind: QueryKind::List,
  123. query: Box::new(github::Query {
  124. filters: vec![("state", "open")],
  125. include_labels: vec!["proposed-final-comment-period"],
  126. exclude_labels: vec!["t-libs", "t-libs-api"],
  127. }),
  128. });
  129. queries.push(QueryMap {
  130. name: "in_fcp",
  131. kind: QueryKind::List,
  132. query: Box::new(github::Query {
  133. filters: vec![("state", "open")],
  134. include_labels: vec!["final-comment-period"],
  135. exclude_labels: vec!["t-libs", "t-libs-api"],
  136. }),
  137. });
  138. queries.push(QueryMap {
  139. name: "fcp_finished",
  140. kind: QueryKind::List,
  141. query: Box::new(github::Query {
  142. filters: vec![("state", "all")],
  143. include_labels: vec![
  144. "finished-final-comment-period",
  145. "disposition-merge",
  146. "to-announce",
  147. ],
  148. exclude_labels: vec!["t-libs", "t-libs-api"],
  149. }),
  150. });
  151. actions.push(Query {
  152. repos: vec![("rust-lang", "rust-forge")],
  153. queries,
  154. });
  155. let mut queries = Vec::new();
  156. // beta nomination queries
  157. queries.push(QueryMap {
  158. name: "beta_nominated_t_compiler",
  159. kind: QueryKind::List,
  160. query: Box::new(github::Query {
  161. filters: vec![],
  162. include_labels: vec!["beta-nominated", "T-compiler"],
  163. exclude_labels: vec!["beta-accepted"],
  164. }),
  165. });
  166. queries.push(QueryMap {
  167. name: "beta_nominated_t_rustdoc",
  168. kind: QueryKind::List,
  169. query: Box::new(github::Query {
  170. filters: vec![],
  171. include_labels: vec!["beta-nominated", "T-rustdoc"],
  172. exclude_labels: vec!["beta-accepted"],
  173. }),
  174. });
  175. // stable nomination queries
  176. queries.push(QueryMap {
  177. name: "stable_nominated_t_compiler",
  178. kind: QueryKind::List,
  179. query: Box::new(github::Query {
  180. filters: vec![],
  181. include_labels: vec!["stable-nominated", "T-compiler"],
  182. exclude_labels: vec!["stable-accepted"],
  183. }),
  184. });
  185. queries.push(QueryMap {
  186. name: "stable_nominated_t_rustdoc",
  187. kind: QueryKind::List,
  188. query: Box::new(github::Query {
  189. filters: vec![],
  190. include_labels: vec!["stable-nominated", "T-rustdoc"],
  191. exclude_labels: vec!["stable-accepted"],
  192. }),
  193. });
  194. // prs waiting on team queries
  195. queries.push(QueryMap {
  196. name: "prs_waiting_on_team_t_compiler",
  197. kind: QueryKind::List,
  198. query: Box::new(github::Query {
  199. filters: vec![("state", "open")],
  200. include_labels: vec!["S-waiting-on-team", "T-compiler"],
  201. exclude_labels: vec![],
  202. }),
  203. });
  204. // issues of note queries
  205. queries.push(QueryMap {
  206. name: "issues_of_note_p_critical",
  207. kind: QueryKind::Count,
  208. query: Box::new(github::Query {
  209. filters: vec![("state", "open")],
  210. include_labels: vec!["T-compiler", "P-critical"],
  211. exclude_labels: vec![],
  212. }),
  213. });
  214. queries.push(QueryMap {
  215. name: "issues_of_note_unassigned_p_critical",
  216. kind: QueryKind::Count,
  217. query: Box::new(github::Query {
  218. filters: vec![("state", "open"), ("no", "assignee")],
  219. include_labels: vec!["T-compiler", "P-critical"],
  220. exclude_labels: vec![],
  221. }),
  222. });
  223. queries.push(QueryMap {
  224. name: "issues_of_note_p_high",
  225. kind: QueryKind::Count,
  226. query: Box::new(github::Query {
  227. filters: vec![("state", "open")],
  228. include_labels: vec!["T-compiler", "P-high"],
  229. exclude_labels: vec![],
  230. }),
  231. });
  232. queries.push(QueryMap {
  233. name: "issues_of_note_unassigned_p_high",
  234. kind: QueryKind::Count,
  235. query: Box::new(github::Query {
  236. filters: vec![("state", "open"), ("no", "assignee")],
  237. include_labels: vec!["T-compiler", "P-high"],
  238. exclude_labels: vec![],
  239. }),
  240. });
  241. queries.push(QueryMap {
  242. name: "issues_of_note_regression_from_stable_to_beta_p_critical",
  243. kind: QueryKind::Count,
  244. query: Box::new(github::Query {
  245. filters: vec![("state", "open")],
  246. include_labels: vec!["regression-from-stable-to-beta", "P-critical"],
  247. exclude_labels: vec![],
  248. }),
  249. });
  250. queries.push(QueryMap {
  251. name: "issues_of_note_regression_from_stable_to_beta_p_high",
  252. kind: QueryKind::Count,
  253. query: Box::new(github::Query {
  254. filters: vec![("state", "open")],
  255. include_labels: vec!["regression-from-stable-to-beta", "P-high"],
  256. exclude_labels: vec![],
  257. }),
  258. });
  259. queries.push(QueryMap {
  260. name: "issues_of_note_regression_from_stable_to_beta_p_medium",
  261. kind: QueryKind::Count,
  262. query: Box::new(github::Query {
  263. filters: vec![("state", "open")],
  264. include_labels: vec!["regression-from-stable-to-beta", "P-medium"],
  265. exclude_labels: vec![],
  266. }),
  267. });
  268. queries.push(QueryMap {
  269. name: "issues_of_note_regression_from_stable_to_beta_p_low",
  270. kind: QueryKind::Count,
  271. query: Box::new(github::Query {
  272. filters: vec![("state", "open")],
  273. include_labels: vec!["regression-from-stable-to-beta", "P-low"],
  274. exclude_labels: vec![],
  275. }),
  276. });
  277. queries.push(QueryMap {
  278. name: "issues_of_note_regression_from_stable_to_nightly_p_critical",
  279. kind: QueryKind::Count,
  280. query: Box::new(github::Query {
  281. filters: vec![("state", "open")],
  282. include_labels: vec!["regression-from-stable-to-nightly", "P-critical"],
  283. exclude_labels: vec![],
  284. }),
  285. });
  286. queries.push(QueryMap {
  287. name: "issues_of_note_regression_from_stable_to_nightly_p_high",
  288. kind: QueryKind::Count,
  289. query: Box::new(github::Query {
  290. filters: vec![("state", "open")],
  291. include_labels: vec!["regression-from-stable-to-nightly", "P-high"],
  292. exclude_labels: vec![],
  293. }),
  294. });
  295. queries.push(QueryMap {
  296. name: "issues_of_note_regression_from_stable_to_nightly_p_medium",
  297. kind: QueryKind::Count,
  298. query: Box::new(github::Query {
  299. filters: vec![("state", "open")],
  300. include_labels: vec!["regression-from-stable-to-nightly", "P-medium"],
  301. exclude_labels: vec![],
  302. }),
  303. });
  304. queries.push(QueryMap {
  305. name: "issues_of_note_regression_from_stable_to_nightly_p_low",
  306. kind: QueryKind::Count,
  307. query: Box::new(github::Query {
  308. filters: vec![("state", "open")],
  309. include_labels: vec!["regression-from-stable-to-nightly", "P-low"],
  310. exclude_labels: vec![],
  311. }),
  312. });
  313. queries.push(QueryMap {
  314. name: "issues_of_note_regression_from_stable_to_stable_p_critical",
  315. kind: QueryKind::Count,
  316. query: Box::new(github::Query {
  317. filters: vec![("state", "open")],
  318. include_labels: vec!["regression-from-stable-to-stable", "P-critical"],
  319. exclude_labels: vec![],
  320. }),
  321. });
  322. queries.push(QueryMap {
  323. name: "issues_of_note_regression_from_stable_to_stable_p_high",
  324. kind: QueryKind::Count,
  325. query: Box::new(github::Query {
  326. filters: vec![("state", "open")],
  327. include_labels: vec!["regression-from-stable-to-stable", "P-high"],
  328. exclude_labels: vec![],
  329. }),
  330. });
  331. queries.push(QueryMap {
  332. name: "issues_of_note_regression_from_stable_to_stable_p_medium",
  333. kind: QueryKind::Count,
  334. query: Box::new(github::Query {
  335. filters: vec![("state", "open")],
  336. include_labels: vec!["regression-from-stable-to-stable", "P-medium"],
  337. exclude_labels: vec![],
  338. }),
  339. });
  340. queries.push(QueryMap {
  341. name: "issues_of_note_regression_from_stable_to_stable_p_low",
  342. kind: QueryKind::Count,
  343. query: Box::new(github::Query {
  344. filters: vec![("state", "open")],
  345. include_labels: vec!["regression-from-stable-to-stable", "P-low"],
  346. exclude_labels: vec![],
  347. }),
  348. });
  349. queries.push(QueryMap {
  350. name: "p_critical_t_compiler",
  351. kind: QueryKind::List,
  352. query: Box::new(github::Query {
  353. filters: vec![("state", "open")],
  354. include_labels: vec!["T-compiler", "P-critical"],
  355. exclude_labels: vec![],
  356. }),
  357. });
  358. queries.push(QueryMap {
  359. name: "p_critical_t_rustdoc",
  360. kind: QueryKind::List,
  361. query: Box::new(github::Query {
  362. filters: vec![("state", "open")],
  363. include_labels: vec!["T-rustdoc", "P-critical"],
  364. exclude_labels: vec![],
  365. }),
  366. });
  367. queries.push(QueryMap {
  368. name: "beta_regressions_p_high",
  369. kind: QueryKind::List,
  370. query: Box::new(github::Query {
  371. filters: vec![("state", "open")],
  372. include_labels: vec!["regression-from-stable-to-beta", "P-high"],
  373. exclude_labels: vec!["T-infra", "T-libs", "T-release", "T-rustdoc", "T-core"],
  374. }),
  375. });
  376. queries.push(QueryMap {
  377. name: "nightly_regressions_unassigned_p_high",
  378. kind: QueryKind::List,
  379. query: Box::new(github::Query {
  380. filters: vec![("state", "open"), ("no", "assignee")],
  381. include_labels: vec!["regression-from-stable-to-nightly", "P-high"],
  382. exclude_labels: vec!["T-infra", "T-libs", "T-release", "T-rustdoc", "T-core"],
  383. }),
  384. });
  385. queries.push(QueryMap {
  386. name: "nominated_t_compiler",
  387. kind: QueryKind::List,
  388. query: Box::new(github::Query {
  389. filters: vec![("state", "open")],
  390. include_labels: vec!["I-nominated", "T-compiler"],
  391. exclude_labels: vec![],
  392. }),
  393. });
  394. queries.push(QueryMap {
  395. name: "top_unreviewed_prs",
  396. kind: QueryKind::List,
  397. query: Box::new(github::graphql::LeastRecentlyReviewedPullRequests),
  398. });
  399. actions.push(Query {
  400. repos: vec![("rust-lang", "rust")],
  401. queries,
  402. });
  403. // retrieve some RFCs for the T-compiler agenda
  404. let mut queries = Vec::new();
  405. // https://github.com/rust-lang/rfcs/pulls?q=is%3Aopen+label%3AI-nominated+label%3AT-compiler
  406. queries.push(QueryMap {
  407. name: "nominated_rfcs_t_compiler",
  408. kind: QueryKind::List,
  409. query: Box::new(github::Query {
  410. filters: vec![("state", "open")],
  411. include_labels: vec!["T-compiler", "I-nominated"],
  412. exclude_labels: vec![],
  413. }),
  414. });
  415. actions.push(Query {
  416. repos: vec![("rust-lang", "rfcs")],
  417. queries,
  418. });
  419. Box::new(Step {
  420. name: "prioritization_agenda",
  421. actions,
  422. })
  423. }
  424. pub fn lang<'a>() -> Box<dyn Action> {
  425. Box::new(Step {
  426. name: "lang_agenda",
  427. actions: vec![
  428. Query {
  429. repos: vec![("rust-lang", "lang-team")],
  430. queries: vec![
  431. QueryMap {
  432. name: "pending_project_proposals",
  433. kind: QueryKind::List,
  434. query: Box::new(github::Query {
  435. filters: vec![("state", "open"), ("is", "issue")],
  436. include_labels: vec!["major-change"],
  437. exclude_labels: vec!["charter-needed"],
  438. }),
  439. },
  440. QueryMap {
  441. name: "pending_lang_team_prs",
  442. kind: QueryKind::List,
  443. query: Box::new(github::Query {
  444. filters: vec![("state", "open"), ("is", "pull-request")],
  445. include_labels: vec![],
  446. exclude_labels: vec![],
  447. }),
  448. },
  449. QueryMap {
  450. name: "scheduled_meetings",
  451. kind: QueryKind::List,
  452. query: Box::new(github::Query {
  453. filters: vec![("state", "open"), ("is", "issue")],
  454. include_labels: vec!["meeting-proposal", "meeting-scheduled"],
  455. exclude_labels: vec![],
  456. }),
  457. },
  458. ],
  459. },
  460. Query {
  461. repos: vec![("rust-lang", "rfcs")],
  462. queries: vec![QueryMap {
  463. name: "rfcs_waiting_to_be_merged",
  464. kind: QueryKind::List,
  465. query: Box::new(github::Query {
  466. filters: vec![("state", "open"), ("is", "pr")],
  467. include_labels: vec![
  468. "disposition-merge",
  469. "finished-final-comment-period",
  470. "T-lang",
  471. ],
  472. exclude_labels: vec![],
  473. }),
  474. }],
  475. },
  476. Query {
  477. repos: vec![
  478. ("rust-lang", "rfcs"),
  479. ("rust-lang", "rust"),
  480. ("rust-lang", "reference"),
  481. ("rust-lang", "lang-team"),
  482. ],
  483. queries: vec![
  484. QueryMap {
  485. name: "p_critical",
  486. kind: QueryKind::List,
  487. query: Box::new(github::Query {
  488. filters: vec![("state", "open")],
  489. include_labels: vec!["T-lang", "P-critical"],
  490. exclude_labels: vec![],
  491. }),
  492. },
  493. QueryMap {
  494. name: "nominated",
  495. kind: QueryKind::List,
  496. query: Box::new(github::Query {
  497. filters: vec![("state", "open")],
  498. include_labels: vec!["T-lang", "I-nominated"],
  499. exclude_labels: vec![],
  500. }),
  501. },
  502. QueryMap {
  503. name: "proposed_fcp",
  504. kind: QueryKind::List,
  505. query: Box::new(github::Query {
  506. filters: vec![("state", "open")],
  507. include_labels: vec!["T-lang", "proposed-final-comment-period"],
  508. exclude_labels: vec!["finished-final-comment-period"],
  509. }),
  510. },
  511. QueryMap {
  512. name: "in_fcp",
  513. kind: QueryKind::List,
  514. query: Box::new(github::Query {
  515. filters: vec![("state", "open")],
  516. include_labels: vec!["T-lang", "final-comment-period"],
  517. exclude_labels: vec!["finished-final-comment-period"],
  518. }),
  519. },
  520. QueryMap {
  521. name: "finished_fcp",
  522. kind: QueryKind::List,
  523. query: Box::new(github::Query {
  524. filters: vec![("state", "open")],
  525. include_labels: vec!["T-lang", "finished-final-comment-period"],
  526. exclude_labels: vec![],
  527. }),
  528. },
  529. ],
  530. },
  531. ],
  532. })
  533. }
  534. pub fn lang_planning<'a>() -> Box<dyn Action> {
  535. Box::new(Step {
  536. name: "lang_planning_agenda",
  537. actions: vec![
  538. Query {
  539. repos: vec![("rust-lang", "lang-team")],
  540. queries: vec![
  541. QueryMap {
  542. name: "pending_project_proposals",
  543. kind: QueryKind::List,
  544. query: Box::new(github::Query {
  545. filters: vec![("state", "open"), ("is", "issue")],
  546. include_labels: vec!["major-change"],
  547. exclude_labels: vec!["charter-needed"],
  548. }),
  549. },
  550. QueryMap {
  551. name: "pending_lang_team_prs",
  552. kind: QueryKind::List,
  553. query: Box::new(github::Query {
  554. filters: vec![("state", "open"), ("is", "pr")],
  555. include_labels: vec![],
  556. exclude_labels: vec![],
  557. }),
  558. },
  559. QueryMap {
  560. name: "proposed_meetings",
  561. kind: QueryKind::List,
  562. query: Box::new(github::Query {
  563. filters: vec![("state", "open"), ("is", "issue")],
  564. include_labels: vec!["meeting-proposal"],
  565. exclude_labels: vec!["meeting-scheduled"],
  566. }),
  567. },
  568. ],
  569. },
  570. Query {
  571. repos: vec![("rust-lang", "lang-team")],
  572. queries: vec![QueryMap {
  573. name: "active_initiatives",
  574. kind: QueryKind::List,
  575. query: Box::new(github::Query {
  576. filters: vec![("state", "open"), ("is", "issue")],
  577. include_labels: vec!["lang-initiative"],
  578. exclude_labels: vec![],
  579. }),
  580. }],
  581. },
  582. ],
  583. })
  584. }