agenda.rs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  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. QueryMap {
  172. name: "beta_nominated_t_rustdoc",
  173. kind: QueryKind::List,
  174. query: Arc::new(github::Query {
  175. filters: vec![],
  176. include_labels: vec!["beta-nominated", "T-rustdoc"],
  177. exclude_labels: vec!["beta-accepted"],
  178. }),
  179. },
  180. // stable nomination queries
  181. QueryMap {
  182. name: "stable_nominated_t_compiler",
  183. kind: QueryKind::List,
  184. query: Arc::new(github::Query {
  185. filters: vec![],
  186. include_labels: vec!["stable-nominated", "T-compiler"],
  187. exclude_labels: vec!["stable-accepted"],
  188. }),
  189. },
  190. QueryMap {
  191. name: "stable_nominated_t_rustdoc",
  192. kind: QueryKind::List,
  193. query: Arc::new(github::Query {
  194. filters: vec![],
  195. include_labels: vec!["stable-nominated", "T-rustdoc"],
  196. exclude_labels: vec!["stable-accepted"],
  197. }),
  198. },
  199. // prs waiting on team queries
  200. QueryMap {
  201. name: "prs_waiting_on_team_t_compiler",
  202. kind: QueryKind::List,
  203. query: Arc::new(github::Query {
  204. filters: vec![("state", "open")],
  205. include_labels: vec!["S-waiting-on-team", "T-compiler"],
  206. exclude_labels: vec![],
  207. }),
  208. },
  209. // issues of note queries
  210. QueryMap {
  211. name: "issues_of_note_p_critical",
  212. kind: QueryKind::Count,
  213. query: Arc::new(github::Query {
  214. filters: vec![("state", "open")],
  215. include_labels: vec!["T-compiler", "P-critical"],
  216. exclude_labels: vec![],
  217. }),
  218. },
  219. QueryMap {
  220. name: "issues_of_note_unassigned_p_critical",
  221. kind: QueryKind::Count,
  222. query: Arc::new(github::Query {
  223. filters: vec![("state", "open"), ("no", "assignee")],
  224. include_labels: vec!["T-compiler", "P-critical"],
  225. exclude_labels: vec![],
  226. }),
  227. },
  228. QueryMap {
  229. name: "issues_of_note_p_high",
  230. kind: QueryKind::Count,
  231. query: Arc::new(github::Query {
  232. filters: vec![("state", "open")],
  233. include_labels: vec!["T-compiler", "P-high"],
  234. exclude_labels: vec![],
  235. }),
  236. },
  237. QueryMap {
  238. name: "issues_of_note_unassigned_p_high",
  239. kind: QueryKind::Count,
  240. query: Arc::new(github::Query {
  241. filters: vec![("state", "open"), ("no", "assignee")],
  242. include_labels: vec!["T-compiler", "P-high"],
  243. exclude_labels: vec![],
  244. }),
  245. },
  246. QueryMap {
  247. name: "issues_of_note_regression_from_stable_to_beta_p_critical",
  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-critical"],
  252. exclude_labels: vec![],
  253. }),
  254. },
  255. QueryMap {
  256. name: "issues_of_note_regression_from_stable_to_beta_p_high",
  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-high"],
  261. exclude_labels: vec![],
  262. }),
  263. },
  264. QueryMap {
  265. name: "issues_of_note_regression_from_stable_to_beta_p_medium",
  266. kind: QueryKind::Count,
  267. query: Arc::new(github::Query {
  268. filters: vec![("state", "open")],
  269. include_labels: vec!["regression-from-stable-to-beta", "P-medium"],
  270. exclude_labels: vec![],
  271. }),
  272. },
  273. QueryMap {
  274. name: "issues_of_note_regression_from_stable_to_beta_p_low",
  275. kind: QueryKind::Count,
  276. query: Arc::new(github::Query {
  277. filters: vec![("state", "open")],
  278. include_labels: vec!["regression-from-stable-to-beta", "P-low"],
  279. exclude_labels: vec![],
  280. }),
  281. },
  282. QueryMap {
  283. name: "issues_of_note_regression_from_stable_to_nightly_p_critical",
  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-critical"],
  288. exclude_labels: vec![],
  289. }),
  290. },
  291. QueryMap {
  292. name: "issues_of_note_regression_from_stable_to_nightly_p_high",
  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-high"],
  297. exclude_labels: vec![],
  298. }),
  299. },
  300. QueryMap {
  301. name: "issues_of_note_regression_from_stable_to_nightly_p_medium",
  302. kind: QueryKind::Count,
  303. query: Arc::new(github::Query {
  304. filters: vec![("state", "open")],
  305. include_labels: vec!["regression-from-stable-to-nightly", "P-medium"],
  306. exclude_labels: vec![],
  307. }),
  308. },
  309. QueryMap {
  310. name: "issues_of_note_regression_from_stable_to_nightly_p_low",
  311. kind: QueryKind::Count,
  312. query: Arc::new(github::Query {
  313. filters: vec![("state", "open")],
  314. include_labels: vec!["regression-from-stable-to-nightly", "P-low"],
  315. exclude_labels: vec![],
  316. }),
  317. },
  318. QueryMap {
  319. name: "issues_of_note_regression_from_stable_to_stable_p_critical",
  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-critical"],
  324. exclude_labels: vec![],
  325. }),
  326. },
  327. QueryMap {
  328. name: "issues_of_note_regression_from_stable_to_stable_p_high",
  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-high"],
  333. exclude_labels: vec![],
  334. }),
  335. },
  336. QueryMap {
  337. name: "issues_of_note_regression_from_stable_to_stable_p_medium",
  338. kind: QueryKind::Count,
  339. query: Arc::new(github::Query {
  340. filters: vec![("state", "open")],
  341. include_labels: vec!["regression-from-stable-to-stable", "P-medium"],
  342. exclude_labels: vec![],
  343. }),
  344. },
  345. QueryMap {
  346. name: "issues_of_note_regression_from_stable_to_stable_p_low",
  347. kind: QueryKind::Count,
  348. query: Arc::new(github::Query {
  349. filters: vec![("state", "open")],
  350. include_labels: vec!["regression-from-stable-to-stable", "P-low"],
  351. exclude_labels: vec![],
  352. }),
  353. },
  354. QueryMap {
  355. name: "p_critical_t_compiler",
  356. kind: QueryKind::List,
  357. query: Arc::new(github::Query {
  358. filters: vec![("state", "open")],
  359. include_labels: vec!["T-compiler", "P-critical"],
  360. exclude_labels: vec![],
  361. }),
  362. },
  363. QueryMap {
  364. name: "p_critical_t_rustdoc",
  365. kind: QueryKind::List,
  366. query: Arc::new(github::Query {
  367. filters: vec![("state", "open")],
  368. include_labels: vec!["T-rustdoc", "P-critical"],
  369. exclude_labels: vec![],
  370. }),
  371. },
  372. QueryMap {
  373. name: "beta_regressions_p_high",
  374. kind: QueryKind::List,
  375. query: Arc::new(github::Query {
  376. filters: vec![("state", "open")],
  377. include_labels: vec!["regression-from-stable-to-beta", "P-high"],
  378. exclude_labels: vec![
  379. "T-infra",
  380. "T-libs",
  381. "T-libs-api",
  382. "T-release",
  383. "T-rustdoc",
  384. "T-core",
  385. ],
  386. }),
  387. },
  388. QueryMap {
  389. name: "nightly_regressions_unassigned_p_high",
  390. kind: QueryKind::List,
  391. query: Arc::new(github::Query {
  392. filters: vec![("state", "open"), ("no", "assignee")],
  393. include_labels: vec!["regression-from-stable-to-nightly", "P-high"],
  394. exclude_labels: vec![
  395. "T-infra",
  396. "T-libs",
  397. "T-libs-api",
  398. "T-release",
  399. "T-rustdoc",
  400. "T-core",
  401. ],
  402. }),
  403. },
  404. QueryMap {
  405. name: "nominated_t_compiler",
  406. kind: QueryKind::List,
  407. query: Arc::new(github::Query {
  408. filters: vec![("state", "open")],
  409. include_labels: vec!["I-compiler-nominated"],
  410. exclude_labels: vec![],
  411. }),
  412. },
  413. QueryMap {
  414. name: "top_unreviewed_prs",
  415. kind: QueryKind::List,
  416. query: Arc::new(github::LeastRecentlyReviewedPullRequests),
  417. },
  418. ],
  419. },
  420. Query {
  421. repos: vec![("rust-lang", "rfcs")],
  422. queries: vec![
  423. // retrieve some RFCs for the T-compiler agenda
  424. // https://github.com/rust-lang/rfcs/pulls?q=is%3Aopen+label%3AI-compiler-nominated
  425. QueryMap {
  426. name: "nominated_rfcs_t_compiler",
  427. kind: QueryKind::List,
  428. query: Arc::new(github::Query {
  429. filters: vec![("state", "open")],
  430. include_labels: vec!["I-compiler-nominated"],
  431. exclude_labels: vec![],
  432. }),
  433. },
  434. ],
  435. },
  436. ],
  437. })
  438. }
  439. pub fn lang<'a>() -> Box<dyn Action + Send + Sync> {
  440. Box::new(Step {
  441. name: "lang_agenda",
  442. actions: vec![
  443. Query {
  444. repos: vec![("rust-lang", "lang-team")],
  445. queries: vec![
  446. QueryMap {
  447. name: "pending_project_proposals",
  448. kind: QueryKind::List,
  449. query: Arc::new(github::Query {
  450. filters: vec![("state", "open"), ("is", "issue")],
  451. include_labels: vec!["major-change"],
  452. exclude_labels: vec!["charter-needed", "proposed-final-comment-period"],
  453. }),
  454. },
  455. QueryMap {
  456. name: "pending_lang_team_prs",
  457. kind: QueryKind::List,
  458. query: Arc::new(github::Query {
  459. filters: vec![("state", "open"), ("is", "pull-request")],
  460. include_labels: vec![],
  461. exclude_labels: vec![],
  462. }),
  463. },
  464. QueryMap {
  465. name: "scheduled_meetings",
  466. kind: QueryKind::List,
  467. query: Arc::new(github::Query {
  468. filters: vec![("state", "open"), ("is", "issue")],
  469. include_labels: vec!["meeting-proposal", "meeting-scheduled"],
  470. exclude_labels: vec![],
  471. }),
  472. },
  473. ],
  474. },
  475. Query {
  476. repos: vec![("rust-lang", "rfcs")],
  477. queries: vec![QueryMap {
  478. name: "rfcs_waiting_to_be_merged",
  479. kind: QueryKind::List,
  480. query: Arc::new(github::Query {
  481. filters: vec![("state", "open"), ("is", "pr")],
  482. include_labels: vec![
  483. "disposition-merge",
  484. "finished-final-comment-period",
  485. "T-lang",
  486. ],
  487. exclude_labels: vec![],
  488. }),
  489. }],
  490. },
  491. Query {
  492. repos: vec![
  493. ("rust-lang", "rfcs"),
  494. ("rust-lang", "rust"),
  495. ("rust-lang", "reference"),
  496. ("rust-lang", "lang-team"),
  497. ("rust-lang", "compiler-team"),
  498. ],
  499. queries: vec![
  500. QueryMap {
  501. name: "p_critical",
  502. kind: QueryKind::List,
  503. query: Arc::new(github::Query {
  504. filters: vec![("state", "open")],
  505. include_labels: vec!["T-lang", "P-critical"],
  506. exclude_labels: vec![],
  507. }),
  508. },
  509. QueryMap {
  510. name: "nominated",
  511. kind: QueryKind::List,
  512. query: Arc::new(github::Query {
  513. filters: vec![("state", "open")],
  514. include_labels: vec!["I-lang-nominated"],
  515. exclude_labels: vec![],
  516. }),
  517. },
  518. QueryMap {
  519. name: "proposed_fcp",
  520. kind: QueryKind::List,
  521. query: Arc::new(github::Query {
  522. filters: vec![("state", "open")],
  523. include_labels: vec!["T-lang", "proposed-final-comment-period"],
  524. exclude_labels: vec!["finished-final-comment-period"],
  525. }),
  526. },
  527. QueryMap {
  528. name: "in_fcp",
  529. kind: QueryKind::List,
  530. query: Arc::new(github::Query {
  531. filters: vec![("state", "open")],
  532. include_labels: vec!["T-lang", "final-comment-period"],
  533. exclude_labels: vec!["finished-final-comment-period"],
  534. }),
  535. },
  536. QueryMap {
  537. name: "finished_fcp",
  538. kind: QueryKind::List,
  539. query: Arc::new(github::Query {
  540. filters: vec![("state", "open")],
  541. include_labels: vec!["T-lang", "finished-final-comment-period"],
  542. exclude_labels: vec![],
  543. }),
  544. },
  545. ],
  546. },
  547. ],
  548. })
  549. }
  550. pub fn lang_planning<'a>() -> Box<dyn Action + Send + Sync> {
  551. Box::new(Step {
  552. name: "lang_planning_agenda",
  553. actions: vec![
  554. Query {
  555. repos: vec![("rust-lang", "lang-team")],
  556. queries: vec![
  557. QueryMap {
  558. name: "pending_project_proposals",
  559. kind: QueryKind::List,
  560. query: Arc::new(github::Query {
  561. filters: vec![("state", "open"), ("is", "issue")],
  562. include_labels: vec!["major-change"],
  563. exclude_labels: vec!["charter-needed"],
  564. }),
  565. },
  566. QueryMap {
  567. name: "pending_lang_team_prs",
  568. kind: QueryKind::List,
  569. query: Arc::new(github::Query {
  570. filters: vec![("state", "open"), ("is", "pr")],
  571. include_labels: vec![],
  572. exclude_labels: vec![],
  573. }),
  574. },
  575. QueryMap {
  576. name: "proposed_meetings",
  577. kind: QueryKind::List,
  578. query: Arc::new(github::Query {
  579. filters: vec![("state", "open"), ("is", "issue")],
  580. include_labels: vec!["meeting-proposal"],
  581. exclude_labels: vec!["meeting-scheduled"],
  582. }),
  583. },
  584. ],
  585. },
  586. Query {
  587. repos: vec![("rust-lang", "lang-team")],
  588. queries: vec![QueryMap {
  589. name: "active_initiatives",
  590. kind: QueryKind::List,
  591. query: Arc::new(github::Query {
  592. filters: vec![("state", "open"), ("is", "issue")],
  593. include_labels: vec!["lang-initiative"],
  594. exclude_labels: vec![],
  595. }),
  596. }],
  597. },
  598. ],
  599. })
  600. }
  601. // Things to add (maybe):
  602. // - Compiler RFCs
  603. // - P-high issues
  604. pub fn compiler_backlog_bonanza<'a>() -> Box<dyn Action> {
  605. Box::new(Step {
  606. name: "compiler_backlog_bonanza",
  607. actions: vec![Query {
  608. repos: vec![("rust-lang", "rust")],
  609. queries: vec![QueryMap {
  610. name: "tracking_issues",
  611. kind: QueryKind::List,
  612. query: Arc::new(github::Query {
  613. filters: vec![("state", "open")],
  614. include_labels: vec!["C-tracking-issue"],
  615. exclude_labels: vec!["T-libs-api", "T-libs", "T-lang", "T-rustdoc"],
  616. }),
  617. }],
  618. }],
  619. })
  620. }
  621. // Lists available agenda pages
  622. pub static INDEX: &str = r#"
  623. <html>
  624. <body>
  625. <ul>
  626. <li><a href="/agenda/lang/triage">T-lang triage agenda</a></li>
  627. <li><a href="/agenda/lang/planning">T-lang planning agenda</a></li>
  628. </ul>
  629. </body>
  630. </html>
  631. "#;