agenda.rs 18 KB

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