prioritization.rs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  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 queries
  210. queries.push(QueryMap {
  211. name: "mcp_accepted",
  212. query: github::Query {
  213. kind: github::QueryKind::List,
  214. filters: vec![("state", "all")],
  215. include_labels: vec!["major-change-accepted", "to-announce"],
  216. exclude_labels: vec![],
  217. },
  218. });
  219. queries.push(QueryMap {
  220. name: "mcp_seconded",
  221. query: github::Query {
  222. kind: github::QueryKind::List,
  223. filters: vec![("state", "open")],
  224. include_labels: vec!["major-change", "final-comment-period"],
  225. exclude_labels: vec![],
  226. },
  227. });
  228. queries.push(QueryMap {
  229. name: "mcp_new_not_seconded",
  230. query: github::Query {
  231. kind: github::QueryKind::List,
  232. filters: vec![("state", "open")],
  233. include_labels: vec!["major-change", "to-announce"],
  234. exclude_labels: vec!["final-comment-period"],
  235. },
  236. });
  237. queries.push(QueryMap {
  238. name: "mcp_old_not_seconded",
  239. query: github::Query {
  240. kind: github::QueryKind::List,
  241. filters: vec![("state", "open")],
  242. include_labels: vec!["major-change"],
  243. exclude_labels: vec!["to-announce", "final-comment-period"],
  244. },
  245. });
  246. actions.push(Query {
  247. repo: "rust-lang/compiler-team",
  248. queries,
  249. });
  250. let mut queries = Vec::new();
  251. // beta nomination queries
  252. queries.push(QueryMap {
  253. name: "beta_nominated_t_compiler",
  254. query: github::Query {
  255. kind: github::QueryKind::List,
  256. filters: vec![],
  257. include_labels: vec!["beta-nominated", "T-compiler"],
  258. exclude_labels: vec!["beta-accepted"],
  259. },
  260. });
  261. queries.push(QueryMap {
  262. name: "beta_nominated_libs_impl",
  263. query: github::Query {
  264. kind: github::QueryKind::List,
  265. filters: vec![],
  266. include_labels: vec!["beta-nominated", "libs-impl"],
  267. exclude_labels: vec!["beta-accepted"],
  268. },
  269. });
  270. queries.push(QueryMap {
  271. name: "beta_nominated_t_rustdoc",
  272. query: github::Query {
  273. kind: github::QueryKind::List,
  274. filters: vec![],
  275. include_labels: vec!["beta-nominated", "T-rustdoc"],
  276. exclude_labels: vec!["beta-accepted"],
  277. },
  278. });
  279. // stable nomination queries
  280. queries.push(QueryMap {
  281. name: "stable_nominated_t_compiler",
  282. query: github::Query {
  283. kind: github::QueryKind::List,
  284. filters: vec![],
  285. include_labels: vec!["stable-nominated", "T-compiler"],
  286. exclude_labels: vec!["stable-accepted"],
  287. },
  288. });
  289. queries.push(QueryMap {
  290. name: "stable_nominated_libs_impl",
  291. query: github::Query {
  292. kind: github::QueryKind::List,
  293. filters: vec![],
  294. include_labels: vec!["stable-nominated", "libs-impl"],
  295. exclude_labels: vec!["stable-accepted"],
  296. },
  297. });
  298. queries.push(QueryMap {
  299. name: "stable_nominated_t_rustdoc",
  300. query: github::Query {
  301. kind: github::QueryKind::List,
  302. filters: vec![],
  303. include_labels: vec!["stable-nominated", "T-rustdoc"],
  304. exclude_labels: vec!["stable-accepted"],
  305. },
  306. });
  307. // prs waiting on team queries
  308. queries.push(QueryMap {
  309. name: "prs_waiting_on_team_t_compiler",
  310. query: github::Query {
  311. kind: github::QueryKind::List,
  312. filters: vec![("state", "open")],
  313. include_labels: vec!["S-waiting-on-team", "T-compiler"],
  314. exclude_labels: vec![],
  315. },
  316. });
  317. queries.push(QueryMap {
  318. name: "prs_waiting_on_team_libs_impl",
  319. query: github::Query {
  320. kind: github::QueryKind::List,
  321. filters: vec![("state", "open")],
  322. include_labels: vec!["S-waiting-on-team", "libs-impl"],
  323. exclude_labels: vec![],
  324. },
  325. });
  326. // issues of note queries
  327. queries.push(QueryMap {
  328. name: "issues_of_note_p_critical",
  329. query: github::Query {
  330. kind: github::QueryKind::Count,
  331. filters: vec![("state", "open")],
  332. include_labels: vec!["T-compiler", "P-critical"],
  333. exclude_labels: vec![],
  334. },
  335. });
  336. queries.push(QueryMap {
  337. name: "issues_of_note_unassigned_p_critical",
  338. query: github::Query {
  339. kind: github::QueryKind::Count,
  340. filters: vec![("state", "open"), ("no", "assignee")],
  341. include_labels: vec!["T-compiler", "P-critical"],
  342. exclude_labels: vec![],
  343. },
  344. });
  345. queries.push(QueryMap {
  346. name: "issues_of_note_p_high",
  347. query: github::Query {
  348. kind: github::QueryKind::Count,
  349. filters: vec![("state", "open")],
  350. include_labels: vec!["T-compiler", "P-high"],
  351. exclude_labels: vec![],
  352. },
  353. });
  354. queries.push(QueryMap {
  355. name: "issues_of_note_unassigned_p_high",
  356. query: github::Query {
  357. kind: github::QueryKind::Count,
  358. filters: vec![("state", "open"), ("no", "assignee")],
  359. include_labels: vec!["T-compiler", "P-high"],
  360. exclude_labels: vec![],
  361. },
  362. });
  363. queries.push(QueryMap {
  364. name: "issues_of_note_regression_from_stable_to_beta_p_critical",
  365. query: github::Query {
  366. kind: github::QueryKind::Count,
  367. filters: vec![("state", "open")],
  368. include_labels: vec!["regression-from-stable-to-beta", "P-critical"],
  369. exclude_labels: vec![],
  370. },
  371. });
  372. queries.push(QueryMap {
  373. name: "issues_of_note_regression_from_stable_to_beta_p_high",
  374. query: github::Query {
  375. kind: github::QueryKind::Count,
  376. filters: vec![("state", "open")],
  377. include_labels: vec!["regression-from-stable-to-beta", "P-high"],
  378. exclude_labels: vec![],
  379. },
  380. });
  381. queries.push(QueryMap {
  382. name: "issues_of_note_regression_from_stable_to_beta_p_medium",
  383. query: github::Query {
  384. kind: github::QueryKind::Count,
  385. filters: vec![("state", "open")],
  386. include_labels: vec!["regression-from-stable-to-beta", "P-medium"],
  387. exclude_labels: vec![],
  388. },
  389. });
  390. queries.push(QueryMap {
  391. name: "issues_of_note_regression_from_stable_to_beta_p_low",
  392. query: github::Query {
  393. kind: github::QueryKind::Count,
  394. filters: vec![("state", "open")],
  395. include_labels: vec!["regression-from-stable-to-beta", "P-low"],
  396. exclude_labels: vec![],
  397. },
  398. });
  399. queries.push(QueryMap {
  400. name: "issues_of_note_regression_from_stable_to_nightly_p_critical",
  401. query: github::Query {
  402. kind: github::QueryKind::Count,
  403. filters: vec![("state", "open")],
  404. include_labels: vec!["regression-from-stable-to-nightly", "P-critical"],
  405. exclude_labels: vec![],
  406. },
  407. });
  408. queries.push(QueryMap {
  409. name: "issues_of_note_regression_from_stable_to_nightly_p_high",
  410. query: github::Query {
  411. kind: github::QueryKind::Count,
  412. filters: vec![("state", "open")],
  413. include_labels: vec!["regression-from-stable-to-nightly", "P-high"],
  414. exclude_labels: vec![],
  415. },
  416. });
  417. queries.push(QueryMap {
  418. name: "issues_of_note_regression_from_stable_to_nightly_p_medium",
  419. query: github::Query {
  420. kind: github::QueryKind::Count,
  421. filters: vec![("state", "open")],
  422. include_labels: vec!["regression-from-stable-to-nightly", "P-medium"],
  423. exclude_labels: vec![],
  424. },
  425. });
  426. queries.push(QueryMap {
  427. name: "issues_of_note_regression_from_stable_to_nightly_p_low",
  428. query: github::Query {
  429. kind: github::QueryKind::Count,
  430. filters: vec![("state", "open")],
  431. include_labels: vec!["regression-from-stable-to-nightly", "P-low"],
  432. exclude_labels: vec![],
  433. },
  434. });
  435. queries.push(QueryMap {
  436. name: "issues_of_note_regression_from_stable_to_stable_p_critical",
  437. query: github::Query {
  438. kind: github::QueryKind::Count,
  439. filters: vec![("state", "open")],
  440. include_labels: vec!["regression-from-stable-to-stable", "P-critical"],
  441. exclude_labels: vec![],
  442. },
  443. });
  444. queries.push(QueryMap {
  445. name: "issues_of_note_regression_from_stable_to_stable_p_high",
  446. query: github::Query {
  447. kind: github::QueryKind::Count,
  448. filters: vec![("state", "open")],
  449. include_labels: vec!["regression-from-stable-to-stable", "P-high"],
  450. exclude_labels: vec![],
  451. },
  452. });
  453. queries.push(QueryMap {
  454. name: "issues_of_note_regression_from_stable_to_stable_p_medium",
  455. query: github::Query {
  456. kind: github::QueryKind::Count,
  457. filters: vec![("state", "open")],
  458. include_labels: vec!["regression-from-stable-to-stable", "P-medium"],
  459. exclude_labels: vec![],
  460. },
  461. });
  462. queries.push(QueryMap {
  463. name: "issues_of_note_regression_from_stable_to_stable_p_low",
  464. query: github::Query {
  465. kind: github::QueryKind::Count,
  466. filters: vec![("state", "open")],
  467. include_labels: vec!["regression-from-stable-to-stable", "P-low"],
  468. exclude_labels: vec![],
  469. },
  470. });
  471. queries.push(QueryMap {
  472. name: "p_critical_t_compiler",
  473. query: github::Query {
  474. kind: github::QueryKind::List,
  475. filters: vec![("state", "open")],
  476. include_labels: vec!["T-compiler", "P-critical"],
  477. exclude_labels: vec![],
  478. },
  479. });
  480. queries.push(QueryMap {
  481. name: "p_critical_libs_impl",
  482. query: github::Query {
  483. kind: github::QueryKind::List,
  484. filters: vec![("state", "open")],
  485. include_labels: vec!["libs-impl", "P-critical"],
  486. exclude_labels: vec![],
  487. },
  488. });
  489. queries.push(QueryMap {
  490. name: "p_critical_t_rustdoc",
  491. query: github::Query {
  492. kind: github::QueryKind::List,
  493. filters: vec![("state", "open")],
  494. include_labels: vec!["T-rustdoc", "P-critical"],
  495. exclude_labels: vec![],
  496. },
  497. });
  498. queries.push(QueryMap {
  499. name: "beta_regressions_unassigned_p_high",
  500. query: github::Query {
  501. kind: github::QueryKind::List,
  502. filters: vec![("state", "open"), ("no", "assignee")],
  503. include_labels: vec!["regression-from-stable-to-beta", "P-high"],
  504. exclude_labels: vec!["T-infra", "T-libs", "T-release", "T-rustdoc"],
  505. },
  506. });
  507. queries.push(QueryMap {
  508. name: "nightly_regressions_unassigned_p_high",
  509. query: github::Query {
  510. kind: github::QueryKind::List,
  511. filters: vec![("state", "open"), ("no", "assignee")],
  512. include_labels: vec!["regression-from-stable-to-nightly", "P-high"],
  513. exclude_labels: vec!["T-infra", "T-libs", "T-release", "T-rustdoc"],
  514. },
  515. });
  516. queries.push(QueryMap {
  517. name: "i_nominated_t_compiler",
  518. query: github::Query {
  519. kind: github::QueryKind::List,
  520. filters: vec![("state", "open")],
  521. include_labels: vec!["I-nominated", "T-compiler"],
  522. exclude_labels: vec![],
  523. },
  524. });
  525. queries.push(QueryMap {
  526. name: "i_nominated_libs_impl",
  527. query: github::Query {
  528. kind: github::QueryKind::List,
  529. filters: vec![("state", "open")],
  530. include_labels: vec!["I-nominated", "libs-impl"],
  531. exclude_labels: vec![],
  532. },
  533. });
  534. actions.push(Query {
  535. repo: "rust-lang/rust",
  536. queries,
  537. });
  538. Box::new(Step {
  539. name: "agenda",
  540. actions,
  541. })
  542. }
  543. pub fn final_review<'a>() -> Box<Step<'a>> {
  544. Box::new(Step {
  545. name: "final_review",
  546. actions: vec![],
  547. })
  548. }