agenda.rs 28 KB

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