agenda.rs 18 KB

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