Skip to content

Commit eba0010

Browse files
committed
don't show in progress items in build queue
1 parent 41d5e31 commit eba0010

File tree

1 file changed

+69
-12
lines changed

1 file changed

+69
-12
lines changed

src/web/releases.rs

Lines changed: 69 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -806,14 +806,6 @@ pub(crate) async fn build_queue_handler(
806806
// reverse the list, so the oldest comes first
807807
active_cdn_deployments.reverse();
808808

809-
let mut queue = spawn_blocking(move || build_queue.queued_crates()).await?;
810-
for krate in queue.iter_mut() {
811-
// The priority here is inverted: in the database if a crate has a higher priority it
812-
// will be built after everything else, which is counter-intuitive for people not
813-
// familiar with docs.rs's inner workings.
814-
krate.priority = -krate.priority;
815-
}
816-
817809
let in_progress_builds: Vec<(String, String)> = sqlx::query!(
818810
r#"SELECT
819811
crates.name,
@@ -831,6 +823,25 @@ pub(crate) async fn build_queue_handler(
831823
.map(|rec| (rec.name, rec.version))
832824
.collect();
833825

826+
let queue: Vec<QueuedCrate> = spawn_blocking(move || build_queue.queued_crates())
827+
.await?
828+
.into_iter()
829+
.filter(|krate| {
830+
!in_progress_builds.iter().any(|(name, version)| {
831+
// use `.any` instead of `.contains` to avoid cloning name& version for the match
832+
*name == krate.name && *version == krate.version
833+
})
834+
})
835+
.map(|mut krate| {
836+
// The priority here is inverted: in the database if a crate has a higher priority it
837+
// will be built after everything else, which is counter-intuitive for people not
838+
// familiar with docs.rs's inner workings.
839+
krate.priority = -krate.priority;
840+
841+
krate
842+
})
843+
.collect();
844+
834845
Ok(BuildQueuePage {
835846
description: "crate documentation scheduled to build & deploy",
836847
queue,
@@ -1710,14 +1721,13 @@ mod tests {
17101721
cdn::queue_crate_invalidation(&mut conn, &env.config(), "krate_2").await
17111722
})?;
17121723

1713-
let empty = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1714-
assert!(empty
1724+
let content = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1725+
assert!(content
17151726
.select(".release > div > strong")
17161727
.expect("missing heading")
17171728
.any(|el| el.text_contents().contains("active CDN deployments")));
17181729

1719-
let full = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1720-
let items = full
1730+
let items = content
17211731
.select(".queue-list > li")
17221732
.expect("missing list items")
17231733
.collect::<Vec<_>>();
@@ -1780,6 +1790,53 @@ mod tests {
17801790
});
17811791
}
17821792

1793+
#[test]
1794+
fn test_releases_queue_in_progress() {
1795+
wrapper(|env| {
1796+
let web = env.frontend();
1797+
1798+
// we have two queued releases, where the build for one is already in progress
1799+
let queue = env.build_queue();
1800+
queue.add_crate("foo", "1.0.0", 0, None)?;
1801+
queue.add_crate("bar", "0.1.0", 0, None)?;
1802+
1803+
env.fake_release()
1804+
.name("foo")
1805+
.version("1.0.0")
1806+
.builds(vec![FakeBuild::default()
1807+
.build_status(BuildStatus::InProgress)
1808+
.rustc_version("rustc (blabla 2022-01-01)")
1809+
.docsrs_version("docs.rs 4.0.0")])
1810+
.create()?;
1811+
1812+
let full = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1813+
1814+
let lists = full
1815+
.select(".queue-list")
1816+
.expect("missing queues")
1817+
.collect::<Vec<_>>();
1818+
assert_eq!(lists.len(), 2);
1819+
1820+
let in_progress_items: Vec<_> = lists[0]
1821+
.as_node()
1822+
.select("li > a")
1823+
.expect("missing in progress list items")
1824+
.map(|node| node.text_contents().trim().to_string())
1825+
.collect();
1826+
assert_eq!(in_progress_items, vec!["foo 1.0.0"]);
1827+
1828+
let queued_items: Vec<_> = lists[1]
1829+
.as_node()
1830+
.select("li > a")
1831+
.expect("missing queued list items")
1832+
.map(|node| node.text_contents().trim().to_string())
1833+
.collect();
1834+
assert_eq!(queued_items, vec!["bar 0.1.0"]);
1835+
1836+
Ok(())
1837+
});
1838+
}
1839+
17831840
#[test]
17841841
fn home_page_links() {
17851842
wrapper(|env| {

0 commit comments

Comments
 (0)