prioritization.rs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. use crate::github;
  2. use crate::meeting::{Meeting, Query, QueryMap, Step};
  3. pub fn prepare_meeting<'a>() -> Meeting<Step<'a>> {
  4. Meeting {
  5. steps: vec![
  6. unpri_i_prioritize(),
  7. regressions(),
  8. nominations(),
  9. prs_waiting_on_team(),
  10. agenda(),
  11. final_review(),
  12. ],
  13. }
  14. }
  15. pub fn unpri_i_prioritize<'a>() -> Step<'a> {
  16. let mut queries = Vec::new();
  17. queries.push(QueryMap {
  18. name: "unpri_i_prioritize.all",
  19. query: github::Query {
  20. kind: github::QueryKind::List,
  21. filters: vec![("state", "open")],
  22. include_labels: vec!["I-prioritize"],
  23. exclude_labels: vec!["P-critical", "P-high", "P-medium", "P-low"],
  24. },
  25. });
  26. queries.push(QueryMap {
  27. name: "unpri_i_prioritize.t_compiler",
  28. query: github::Query {
  29. kind: github::QueryKind::List,
  30. filters: vec![("state", "open")],
  31. include_labels: vec!["I-prioritize", "T-compiler"],
  32. exclude_labels: vec!["P-critical", "P-high", "P-medium", "P-low"],
  33. },
  34. });
  35. queries.push(QueryMap {
  36. name: "unpri_i_prioritize.libs_impl",
  37. query: github::Query {
  38. kind: github::QueryKind::List,
  39. filters: vec![("state", "open")],
  40. include_labels: vec!["I-prioritize", "libs-impl"],
  41. exclude_labels: vec!["P-critical", "P-high", "P-medium", "P-low"],
  42. },
  43. });
  44. Step {
  45. name: "unpri_i_prioritize",
  46. actions: vec![Query {
  47. repo: "rust-lang/rust",
  48. queries,
  49. }],
  50. }
  51. }
  52. pub fn regressions<'a>() -> Step<'a> {
  53. let mut queries = Vec::new();
  54. queries.push(QueryMap {
  55. name: "regressions.stable_to_beta",
  56. query: github::Query {
  57. kind: github::QueryKind::List,
  58. filters: vec![("state", "open")],
  59. include_labels: vec!["regression-from-stable-to-beta"],
  60. exclude_labels: vec![
  61. "P-critical",
  62. "P-high",
  63. "P-medium",
  64. "P-low",
  65. "T-infra",
  66. "T-libs",
  67. "T-release",
  68. "T-rustdoc",
  69. ],
  70. },
  71. });
  72. queries.push(QueryMap {
  73. name: "regressions.stable_to_nightly",
  74. query: github::Query {
  75. kind: github::QueryKind::List,
  76. filters: vec![("state", "open")],
  77. include_labels: vec!["regression-from-stable-to-nightly"],
  78. exclude_labels: vec![
  79. "P-critical",
  80. "P-high",
  81. "P-medium",
  82. "P-low",
  83. "T-infra",
  84. "T-libs",
  85. "T-release",
  86. "T-rustdoc",
  87. ],
  88. },
  89. });
  90. queries.push(QueryMap {
  91. name: "regressions.stable_to_stable",
  92. query: github::Query {
  93. kind: github::QueryKind::List,
  94. filters: vec![("state", "open")],
  95. include_labels: vec!["regression-from-stable-to-stable"],
  96. exclude_labels: vec![
  97. "P-critical",
  98. "P-high",
  99. "P-medium",
  100. "P-low",
  101. "T-infra",
  102. "T-libs",
  103. "T-release",
  104. "T-rustdoc",
  105. ],
  106. },
  107. });
  108. Step {
  109. name: "regressions",
  110. actions: vec![Query {
  111. repo: "rust-lang/rust",
  112. queries,
  113. }],
  114. }
  115. }
  116. pub fn nominations<'a>() -> Step<'a> {
  117. let mut queries = Vec::new();
  118. queries.push(QueryMap {
  119. name: "nominations.stable_nominated",
  120. query: github::Query {
  121. kind: github::QueryKind::List,
  122. filters: vec![],
  123. include_labels: vec!["stable-nominated"],
  124. exclude_labels: vec!["stable-accepted"],
  125. },
  126. });
  127. queries.push(QueryMap {
  128. name: "nominations.beta_nominated",
  129. query: github::Query {
  130. kind: github::QueryKind::List,
  131. filters: vec![],
  132. include_labels: vec!["beta-nominated"],
  133. exclude_labels: vec!["beta-accepted"],
  134. },
  135. });
  136. queries.push(QueryMap {
  137. name: "nominations.i_nominated",
  138. query: github::Query {
  139. kind: github::QueryKind::List,
  140. filters: vec![("state", "open")],
  141. include_labels: vec!["I-nominated"],
  142. exclude_labels: vec![],
  143. },
  144. });
  145. queries.push(QueryMap {
  146. name: "nominations.i_nominated_t_compiler",
  147. query: github::Query {
  148. kind: github::QueryKind::List,
  149. filters: vec![("state", "open")],
  150. include_labels: vec!["I-nominated", "T-compiler"],
  151. exclude_labels: vec![],
  152. },
  153. });
  154. queries.push(QueryMap {
  155. name: "nominations.i_nominated_libs_impl",
  156. query: github::Query {
  157. kind: github::QueryKind::List,
  158. filters: vec![("state", "open")],
  159. include_labels: vec!["I-nominated", "libs-impl"],
  160. exclude_labels: vec![],
  161. },
  162. });
  163. Step {
  164. name: "nominations",
  165. actions: vec![Query {
  166. repo: "rust-lang/rust",
  167. queries,
  168. }],
  169. }
  170. }
  171. pub fn prs_waiting_on_team<'a>() -> Step<'a> {
  172. let mut queries = Vec::new();
  173. queries.push(QueryMap {
  174. name: "prs_waiting_on_team.all",
  175. query: github::Query {
  176. kind: github::QueryKind::List,
  177. filters: vec![("state", "open")],
  178. include_labels: vec!["S-waiting-on-team"],
  179. exclude_labels: vec![],
  180. },
  181. });
  182. queries.push(QueryMap {
  183. name: "prs_waiting_on_team.t_compiler",
  184. query: github::Query {
  185. kind: github::QueryKind::List,
  186. filters: vec![("state", "open")],
  187. include_labels: vec!["S-waiting-on-team", "T-compiler"],
  188. exclude_labels: vec![],
  189. },
  190. });
  191. queries.push(QueryMap {
  192. name: "prs_waiting_on_team.libs_impl",
  193. query: github::Query {
  194. kind: github::QueryKind::List,
  195. filters: vec![("state", "open")],
  196. include_labels: vec!["S-waiting-on-team", "libs-impl"],
  197. exclude_labels: vec![],
  198. },
  199. });
  200. Step {
  201. name: "prs_waiting_on_team",
  202. actions: vec![Query {
  203. repo: "rust-lang/rust",
  204. queries,
  205. }],
  206. }
  207. }
  208. pub fn agenda<'a>() -> Step<'a> {
  209. let mut queries = Vec::new();
  210. let mut actions = Vec::new();
  211. queries.push(QueryMap {
  212. name: "mcp.accepted",
  213. query: github::Query {
  214. kind: github::QueryKind::List,
  215. filters: vec![("state", "closed"), ("closed-days-ago", "7")],
  216. include_labels: vec!["major-change-accepted"],
  217. exclude_labels: vec![],
  218. },
  219. });
  220. queries.push(QueryMap {
  221. name: "mcp.seconded",
  222. query: github::Query {
  223. kind: github::QueryKind::List,
  224. filters: vec![("state", "open")],
  225. include_labels: vec!["major-change", "final-comment-period"],
  226. exclude_labels: vec![],
  227. },
  228. });
  229. queries.push(QueryMap {
  230. name: "mcp.new_not_seconded",
  231. query: github::Query {
  232. kind: github::QueryKind::List,
  233. filters: vec![("state", "open")],
  234. include_labels: vec!["major-change", "to-announce"],
  235. exclude_labels: vec!["final-comment-period"],
  236. },
  237. });
  238. queries.push(QueryMap {
  239. name: "mcp.old_not_seconded",
  240. query: github::Query {
  241. kind: github::QueryKind::List,
  242. filters: vec![("state", "open")],
  243. include_labels: vec!["major-change"],
  244. exclude_labels: vec!["to-announce", "final-comment-period"],
  245. },
  246. });
  247. actions.push(Query {
  248. repo: "rust-lang/compiler-team",
  249. queries,
  250. });
  251. let mut queries = Vec::new();
  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. queries.push(QueryMap {
  280. name: "stable_nominated.t_compiler",
  281. query: github::Query {
  282. kind: github::QueryKind::List,
  283. filters: vec![],
  284. include_labels: vec!["stable-nominated", "T-compiler"],
  285. exclude_labels: vec!["stable-accepted"],
  286. },
  287. });
  288. queries.push(QueryMap {
  289. name: "stable_nominated.t_rustdoc",
  290. query: github::Query {
  291. kind: github::QueryKind::List,
  292. filters: vec![],
  293. include_labels: vec!["stable-nominated", "T-rustdoc"],
  294. exclude_labels: vec!["stable-accepted"],
  295. },
  296. });
  297. queries.push(QueryMap {
  298. name: "stable_nominated.libs_impl",
  299. query: github::Query {
  300. kind: github::QueryKind::List,
  301. filters: vec![],
  302. include_labels: vec!["stable-nominated", "libs-impl"],
  303. exclude_labels: vec!["stable-accepted"],
  304. },
  305. });
  306. queries.push(QueryMap {
  307. name: "prs_waiting_on_team.t_compiler",
  308. query: github::Query {
  309. kind: github::QueryKind::List,
  310. filters: vec![("state", "open")],
  311. include_labels: vec!["S-waiting-on-team", "T-compiler"],
  312. exclude_labels: vec![],
  313. },
  314. });
  315. queries.push(QueryMap {
  316. name: "prs_waiting_on_team.libs_impl",
  317. query: github::Query {
  318. kind: github::QueryKind::List,
  319. filters: vec![("state", "open")],
  320. include_labels: vec!["S-waiting-on-team", "libs-impl"],
  321. exclude_labels: vec![],
  322. },
  323. });
  324. queries.push(QueryMap {
  325. name: "issues_of_note.p_critical",
  326. query: github::Query {
  327. kind: github::QueryKind::List,
  328. filters: vec![("state", "open")],
  329. include_labels: vec!["T-compiler", "P-critical"],
  330. exclude_labels: vec![],
  331. },
  332. });
  333. queries.push(QueryMap {
  334. name: "issues_of_note.unassigned_p_critical",
  335. query: github::Query {
  336. kind: github::QueryKind::List,
  337. filters: vec![("state", "open"), ("no", "assignee")],
  338. include_labels: vec!["T-compiler", "P-critical"],
  339. exclude_labels: vec![],
  340. },
  341. });
  342. queries.push(QueryMap {
  343. name: "issues_of_note.p_high",
  344. query: github::Query {
  345. kind: github::QueryKind::List,
  346. filters: vec![("state", "open")],
  347. include_labels: vec!["T-compiler", "P-high"],
  348. exclude_labels: vec![],
  349. },
  350. });
  351. queries.push(QueryMap {
  352. name: "issues_of_note.unassigned_p_high",
  353. query: github::Query {
  354. kind: github::QueryKind::List,
  355. filters: vec![("state", "open"), ("no", "assignee")],
  356. include_labels: vec!["T-compiler", "P-high"],
  357. exclude_labels: vec![],
  358. },
  359. });
  360. // - [N regression-from-stable-to-stable](https://github.com/rust-lang/rust/labels/regression-from-stable-to-stable)
  361. // - [M of those are not prioritized](https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Aregression-from-stable-to-stable+-label%3AP-critical+-label%3AP-high+-label%3AP-medium+-label%3AP-low).
  362. //
  363. // There are N (more|less) `P-critical` issues and M (more|less) `P-high` issues in comparison with last week.
  364. queries.push(QueryMap {
  365. name: "issues_of_note.regression_from_stable_to_beta",
  366. query: github::Query {
  367. kind: github::QueryKind::List,
  368. filters: vec![("state", "open")],
  369. include_labels: vec!["regression-from-stable-to-beta"],
  370. exclude_labels: vec![],
  371. },
  372. });
  373. queries.push(QueryMap {
  374. name: "issues_of_note.regression_from_stable_to_nightly",
  375. query: github::Query {
  376. kind: github::QueryKind::List,
  377. filters: vec![("state", "open")],
  378. include_labels: vec!["regression-from-stable-to-nightly"],
  379. exclude_labels: vec![],
  380. },
  381. });
  382. queries.push(QueryMap {
  383. name: "issues_of_note.regression_from_stable_to_stable",
  384. query: github::Query {
  385. kind: github::QueryKind::List,
  386. filters: vec![("state", "open")],
  387. include_labels: vec!["regression-from-stable-to-stable"],
  388. exclude_labels: vec![],
  389. },
  390. });
  391. queries.push(QueryMap {
  392. name: "p_critical.t_compiler",
  393. query: github::Query {
  394. kind: github::QueryKind::List,
  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: "p_critical.libs_impl",
  402. query: github::Query {
  403. kind: github::QueryKind::List,
  404. filters: vec![("state", "open")],
  405. include_labels: vec!["libs-impl", "P-critical"],
  406. exclude_labels: vec![],
  407. },
  408. });
  409. queries.push(QueryMap {
  410. name: "p_critical.t_rustdoc",
  411. query: github::Query {
  412. kind: github::QueryKind::List,
  413. filters: vec![("state", "open")],
  414. include_labels: vec!["T-rustdoc", "P-critical"],
  415. exclude_labels: vec![],
  416. },
  417. });
  418. queries.push(QueryMap {
  419. name: "beta_regressions.unassigned_p_high",
  420. query: github::Query {
  421. kind: github::QueryKind::List,
  422. filters: vec![("state", "open"), ("no", "assignee")],
  423. include_labels: vec!["regression-from-stable-to-beta", "P-high"],
  424. exclude_labels: vec!["T-infra", "T-release"],
  425. },
  426. });
  427. queries.push(QueryMap {
  428. name: "nightly_regressions.unassigned_p_high",
  429. query: github::Query {
  430. kind: github::QueryKind::List,
  431. filters: vec![("state", "open"), ("no", "assignee")],
  432. include_labels: vec!["regression-from-stable-to-nightly", "P-high"],
  433. exclude_labels: vec!["T-infra", "T-release"],
  434. },
  435. });
  436. queries.push(QueryMap {
  437. name: "i_nominated.t_compiler",
  438. query: github::Query {
  439. kind: github::QueryKind::List,
  440. filters: vec![("state", "open")],
  441. include_labels: vec!["I-nominated", "T-compiler"],
  442. exclude_labels: vec![],
  443. },
  444. });
  445. queries.push(QueryMap {
  446. name: "i_nominated.libs_impl",
  447. query: github::Query {
  448. kind: github::QueryKind::List,
  449. filters: vec![("state", "open")],
  450. include_labels: vec!["I-nominated", "libs-impl"],
  451. exclude_labels: vec![],
  452. },
  453. });
  454. actions.push(Query {
  455. repo: "rust-lang/rust",
  456. queries,
  457. });
  458. Step {
  459. name: "agenda",
  460. actions,
  461. }
  462. }
  463. pub fn final_review<'a>() -> Step<'a> {
  464. Step {
  465. name: "final_review",
  466. actions: vec![],
  467. }
  468. }