prioritization.rs 20 KB

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