agenda.rs 28 KB

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