diff --git a/.sqlx/query-b2fa2e823f0f8e8fbd288cd0c102ad28a198463534efbefcf06f45c0f49872af.json b/.sqlx/query-0add3cb31e51020cacca079cecaf10e8394900fb5e492513fee1d6c84817a995.json similarity index 80% rename from .sqlx/query-b2fa2e823f0f8e8fbd288cd0c102ad28a198463534efbefcf06f45c0f49872af.json rename to .sqlx/query-0add3cb31e51020cacca079cecaf10e8394900fb5e492513fee1d6c84817a995.json index ade9b4eac..7e20c141e 100644 --- a/.sqlx/query-b2fa2e823f0f8e8fbd288cd0c102ad28a198463534efbefcf06f45c0f49872af.json +++ b/.sqlx/query-0add3cb31e51020cacca079cecaf10e8394900fb5e492513fee1d6c84817a995.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n build_time = NOW()\n WHERE\n id = $6\n RETURNING rid", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n build_finished = NOW()\n WHERE\n id = $6\n RETURNING rid", "describe": { "columns": [ { @@ -34,5 +34,5 @@ false ] }, - "hash": "b2fa2e823f0f8e8fbd288cd0c102ad28a198463534efbefcf06f45c0f49872af" + "hash": "0add3cb31e51020cacca079cecaf10e8394900fb5e492513fee1d6c84817a995" } diff --git a/.sqlx/query-771731efe02694173d758c04a4ec616e0171b05f09b71795af14270961fa8bd0.json b/.sqlx/query-20e23c3804282f206fcb8f2466a7d0d34e312cd5caeefcd77f0f1a94bd53fcb3.json similarity index 74% rename from .sqlx/query-771731efe02694173d758c04a4ec616e0171b05f09b71795af14270961fa8bd0.json rename to .sqlx/query-20e23c3804282f206fcb8f2466a7d0d34e312cd5caeefcd77f0f1a94bd53fcb3.json index f4299ecaa..4678102cd 100644 --- a/.sqlx/query-771731efe02694173d758c04a4ec616e0171b05f09b71795af14270961fa8bd0.json +++ b/.sqlx/query-20e23c3804282f206fcb8f2466a7d0d34e312cd5caeefcd77f0f1a94bd53fcb3.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n builds.id,\n builds.rustc_version,\n builds.docsrs_version,\n builds.build_status as \"build_status: BuildStatus\",\n builds.build_time,\n builds.errors\n FROM builds\n INNER JOIN releases ON releases.id = builds.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n WHERE\n crates.name = $1 AND\n releases.version = $2\n ORDER BY id DESC", + "query": "SELECT\n builds.id,\n builds.rustc_version,\n builds.docsrs_version,\n builds.build_status as \"build_status: BuildStatus\",\n COALESCE(builds.build_finished, builds.build_started) as build_time,\n builds.errors\n FROM builds\n INNER JOIN releases ON releases.id = builds.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n WHERE\n crates.name = $1 AND\n releases.version = $2\n ORDER BY id DESC", "describe": { "columns": [ { @@ -56,9 +56,9 @@ true, true, false, - true, + null, true ] }, - "hash": "771731efe02694173d758c04a4ec616e0171b05f09b71795af14270961fa8bd0" + "hash": "20e23c3804282f206fcb8f2466a7d0d34e312cd5caeefcd77f0f1a94bd53fcb3" } diff --git a/.sqlx/query-65f40f6603b1f3e736566c3d4e275bb47f6ebc389b0aa61f7732d1f354dc5259.json b/.sqlx/query-31b24e2e5aea1c5dcd742343aa18e4b1806f0926d3494747854a036421399546.json similarity index 70% rename from .sqlx/query-65f40f6603b1f3e736566c3d4e275bb47f6ebc389b0aa61f7732d1f354dc5259.json rename to .sqlx/query-31b24e2e5aea1c5dcd742343aa18e4b1806f0926d3494747854a036421399546.json index 7619e6c17..20c1dd68b 100644 --- a/.sqlx/query-65f40f6603b1f3e736566c3d4e275bb47f6ebc389b0aa61f7732d1f354dc5259.json +++ b/.sqlx/query-31b24e2e5aea1c5dcd742343aa18e4b1806f0926d3494747854a036421399546.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n crates.id AS crate_id,\n releases.id AS release_id,\n crates.name,\n releases.version,\n releases.description,\n releases.dependencies,\n releases.readme,\n releases.description_long,\n releases.release_time,\n release_build_status.build_status as \"build_status!: BuildStatus\",\n (\n -- this is the latest build ID that generated content\n -- it's used to invalidate some blob storage related caches.\n SELECT id\n FROM builds\n WHERE\n builds.rid = releases.id AND\n builds.build_status = 'success'\n ORDER BY build_time DESC\n LIMIT 1\n ) AS latest_build_id,\n releases.rustdoc_status,\n releases.archive_storage,\n releases.repository_url,\n releases.homepage_url,\n releases.keywords,\n releases.have_examples,\n releases.target_name,\n repositories.host as \"repo_host?\",\n repositories.stars as \"repo_stars?\",\n repositories.forks as \"repo_forks?\",\n repositories.issues as \"repo_issues?\",\n repositories.name as \"repo_name?\",\n releases.is_library,\n releases.yanked,\n releases.doc_targets,\n releases.license,\n releases.documentation_url,\n releases.default_target,\n (\n -- we're using the rustc version here to set the correct CSS file\n -- in the metadata.\n -- So we're only interested in successful builds here.\n SELECT rustc_version\n FROM builds\n WHERE\n builds.rid = releases.id AND\n builds.build_status = 'success'\n ORDER BY builds.build_time\n DESC LIMIT 1\n ) as \"rustc_version?\",\n doc_coverage.total_items,\n doc_coverage.documented_items,\n doc_coverage.total_items_needing_examples,\n doc_coverage.items_with_examples\n FROM releases\n INNER JOIN release_build_status ON releases.id = release_build_status.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n LEFT JOIN doc_coverage ON doc_coverage.release_id = releases.id\n LEFT JOIN repositories ON releases.repository_id = repositories.id\n WHERE crates.name = $1 AND releases.version = $2;", + "query": "SELECT\n crates.id AS crate_id,\n releases.id AS release_id,\n crates.name,\n releases.version,\n releases.description,\n releases.dependencies,\n releases.readme,\n releases.description_long,\n releases.release_time,\n release_build_status.build_status as \"build_status!: BuildStatus\",\n (\n -- this is the latest build ID that generated content\n -- it's used to invalidate some blob storage related caches.\n SELECT id\n FROM builds\n WHERE\n builds.rid = releases.id AND\n builds.build_status = 'success'\n ORDER BY build_finished DESC\n LIMIT 1\n ) AS latest_build_id,\n releases.rustdoc_status,\n releases.archive_storage,\n releases.repository_url,\n releases.homepage_url,\n releases.keywords,\n releases.have_examples,\n releases.target_name,\n repositories.host as \"repo_host?\",\n repositories.stars as \"repo_stars?\",\n repositories.forks as \"repo_forks?\",\n repositories.issues as \"repo_issues?\",\n repositories.name as \"repo_name?\",\n releases.is_library,\n releases.yanked,\n releases.doc_targets,\n releases.license,\n releases.documentation_url,\n releases.default_target,\n (\n -- we're using the rustc version here to set the correct CSS file\n -- in the metadata.\n -- So we're only interested in successful builds here.\n SELECT rustc_version\n FROM builds\n WHERE\n builds.rid = releases.id AND\n builds.build_status = 'success'\n ORDER BY builds.build_finished\n DESC LIMIT 1\n ) as \"rustc_version?\",\n doc_coverage.total_items,\n doc_coverage.documented_items,\n doc_coverage.total_items_needing_examples,\n doc_coverage.items_with_examples\n FROM releases\n INNER JOIN release_build_status ON releases.id = release_build_status.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n LEFT JOIN doc_coverage ON doc_coverage.release_id = releases.id\n LEFT JOIN repositories ON releases.repository_id = repositories.id\n WHERE crates.name = $1 AND releases.version = $2;", "describe": { "columns": [ { @@ -228,5 +228,5 @@ true ] }, - "hash": "65f40f6603b1f3e736566c3d4e275bb47f6ebc389b0aa61f7732d1f354dc5259" + "hash": "31b24e2e5aea1c5dcd742343aa18e4b1806f0926d3494747854a036421399546" } diff --git a/.sqlx/query-649f22aaffbd35cb00a820a68677797e8bbde159b10d04e3945520a61b63ecb0.json b/.sqlx/query-649f22aaffbd35cb00a820a68677797e8bbde159b10d04e3945520a61b63ecb0.json deleted file mode 100644 index 683c580da..000000000 --- a/.sqlx/query-649f22aaffbd35cb00a820a68677797e8bbde159b10d04e3945520a61b63ecb0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "INSERT INTO release_build_status(rid, last_build_time, build_status)\n SELECT\n summary.id,\n summary.last_build_time,\n CASE\n WHEN summary.success_count > 0 THEN 'success'::build_status\n WHEN summary.failure_count > 0 THEN 'failure'::build_status\n ELSE 'in_progress'::build_status\n END as build_status\n\n FROM (\n SELECT\n r.id,\n MAX(b.build_time) as last_build_time,\n SUM(CASE WHEN b.build_status = 'success' THEN 1 ELSE 0 END) as success_count,\n SUM(CASE WHEN b.build_status = 'failure' THEN 1 ELSE 0 END) as failure_count\n FROM\n releases as r\n LEFT OUTER JOIN builds AS b on b.rid = r.id\n WHERE\n r.id = $1\n GROUP BY r.id\n ) as summary\n\n ON CONFLICT (rid) DO UPDATE\n SET\n last_build_time = EXCLUDED.last_build_time,\n build_status=EXCLUDED.build_status", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [] - }, - "hash": "649f22aaffbd35cb00a820a68677797e8bbde159b10d04e3945520a61b63ecb0" -} diff --git a/.sqlx/query-7544bfef94310c33c8d34c30bc24e91b4aa2f198c1efd0f9ef562c0b85f4dddb.json b/.sqlx/query-7544bfef94310c33c8d34c30bc24e91b4aa2f198c1efd0f9ef562c0b85f4dddb.json new file mode 100644 index 000000000..1928a3804 --- /dev/null +++ b/.sqlx/query-7544bfef94310c33c8d34c30bc24e91b4aa2f198c1efd0f9ef562c0b85f4dddb.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO release_build_status(rid, last_build_time, build_status)\n SELECT\n summary.id,\n summary.last_build_time,\n CASE\n WHEN summary.success_count > 0 THEN 'success'::build_status\n WHEN summary.failure_count > 0 THEN 'failure'::build_status\n ELSE 'in_progress'::build_status\n END as build_status\n\n FROM (\n SELECT\n r.id,\n MAX(b.build_finished) as last_build_time,\n SUM(CASE WHEN b.build_status = 'success' THEN 1 ELSE 0 END) as success_count,\n SUM(CASE WHEN b.build_status = 'failure' THEN 1 ELSE 0 END) as failure_count\n FROM\n releases as r\n LEFT OUTER JOIN builds AS b on b.rid = r.id\n WHERE\n r.id = $1\n GROUP BY r.id\n ) as summary\n\n ON CONFLICT (rid) DO UPDATE\n SET\n last_build_time = EXCLUDED.last_build_time,\n build_status=EXCLUDED.build_status", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [] + }, + "hash": "7544bfef94310c33c8d34c30bc24e91b4aa2f198c1efd0f9ef562c0b85f4dddb" +} diff --git a/.sqlx/query-8552f463bfc719f100e0e678b1400ea593a24d5d0c9ef291f786a27669cd626d.json b/.sqlx/query-8552f463bfc719f100e0e678b1400ea593a24d5d0c9ef291f786a27669cd626d.json new file mode 100644 index 000000000..773538685 --- /dev/null +++ b/.sqlx/query-8552f463bfc719f100e0e678b1400ea593a24d5d0c9ef291f786a27669cd626d.json @@ -0,0 +1,57 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT\n rustc_version,\n docsrs_version,\n build_started,\n build_status as \"build_status: BuildStatus\",\n errors\n FROM builds\n WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rustc_version", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "docsrs_version", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "build_started", + "type_info": "Timestamptz" + }, + { + "ordinal": 3, + "name": "build_status: BuildStatus", + "type_info": { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + } + }, + { + "ordinal": 4, + "name": "errors", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + true, + true, + true, + false, + true + ] + }, + "hash": "8552f463bfc719f100e0e678b1400ea593a24d5d0c9ef291f786a27669cd626d" +} diff --git a/.sqlx/query-ed7323a8d06dbb475ec470892c1fff8b2ec47de33f2d74e0f1475fdf165e1ac2.json b/.sqlx/query-8d4e885b2e5a58241516f98b5739bbdca1225e112fb869858060666750b80f1f.json similarity index 66% rename from .sqlx/query-ed7323a8d06dbb475ec470892c1fff8b2ec47de33f2d74e0f1475fdf165e1ac2.json rename to .sqlx/query-8d4e885b2e5a58241516f98b5739bbdca1225e112fb869858060666750b80f1f.json index 251a03189..ed1802a4c 100644 --- a/.sqlx/query-ed7323a8d06dbb475ec470892c1fff8b2ec47de33f2d74e0f1475fdf165e1ac2.json +++ b/.sqlx/query-8d4e885b2e5a58241516f98b5739bbdca1225e112fb869858060666750b80f1f.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n releases.archive_storage,\n (\n SELECT id\n FROM builds\n WHERE\n builds.rid = releases.id AND\n builds.build_status = 'success'\n ORDER BY build_time DESC\n LIMIT 1\n ) AS latest_build_id\n FROM releases\n INNER JOIN crates ON releases.crate_id = crates.id\n WHERE\n name = $1 AND\n version = $2", + "query": "SELECT\n releases.archive_storage,\n (\n SELECT id\n FROM builds\n WHERE\n builds.rid = releases.id AND\n builds.build_status = 'success'\n ORDER BY build_finished DESC\n LIMIT 1\n ) AS latest_build_id\n FROM releases\n INNER JOIN crates ON releases.crate_id = crates.id\n WHERE\n name = $1 AND\n version = $2", "describe": { "columns": [ { @@ -25,5 +25,5 @@ null ] }, - "hash": "ed7323a8d06dbb475ec470892c1fff8b2ec47de33f2d74e0f1475fdf165e1ac2" + "hash": "8d4e885b2e5a58241516f98b5739bbdca1225e112fb869858060666750b80f1f" } diff --git a/.sqlx/query-224f12feb10c65e8345eb4346c123ba324fde11d9f5bd07ae264761dc38e1f2a.json b/.sqlx/query-a2c5c46a3e0058c3bd23d62f1844e3ca5d6b118da33795449e9386525eea912f.json similarity index 72% rename from .sqlx/query-224f12feb10c65e8345eb4346c123ba324fde11d9f5bd07ae264761dc38e1f2a.json rename to .sqlx/query-a2c5c46a3e0058c3bd23d62f1844e3ca5d6b118da33795449e9386525eea912f.json index aebb0a875..b54abcdb0 100644 --- a/.sqlx/query-224f12feb10c65e8345eb4346c123ba324fde11d9f5bd07ae264761dc38e1f2a.json +++ b/.sqlx/query-a2c5c46a3e0058c3bd23d62f1844e3ca5d6b118da33795449e9386525eea912f.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n builds.rustc_version,\n builds.docsrs_version,\n builds.build_status as \"build_status: BuildStatus\",\n builds.build_time,\n builds.output,\n builds.errors,\n releases.default_target\n FROM builds\n INNER JOIN releases ON releases.id = builds.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n WHERE builds.id = $1 AND crates.name = $2 AND releases.version = $3", + "query": "SELECT\n builds.rustc_version,\n builds.docsrs_version,\n builds.build_status as \"build_status: BuildStatus\",\n COALESCE(builds.build_finished, builds.build_started) as build_time,\n builds.output,\n builds.errors,\n releases.default_target\n FROM builds\n INNER JOIN releases ON releases.id = builds.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n WHERE builds.id = $1 AND crates.name = $2 AND releases.version = $3", "describe": { "columns": [ { @@ -61,11 +61,11 @@ true, true, false, - true, + null, true, true, true ] }, - "hash": "224f12feb10c65e8345eb4346c123ba324fde11d9f5bd07ae264761dc38e1f2a" + "hash": "a2c5c46a3e0058c3bd23d62f1844e3ca5d6b118da33795449e9386525eea912f" } diff --git a/.sqlx/query-5a92975ad3d17197b01235b08ea9ff9d5169f8bf7c50315ef96d838b37c18cf1.json b/.sqlx/query-d2fd21fb369b3105fe240d865fea786571008fe6088d142fd5f09a15b1a98344.json similarity index 70% rename from .sqlx/query-5a92975ad3d17197b01235b08ea9ff9d5169f8bf7c50315ef96d838b37c18cf1.json rename to .sqlx/query-d2fd21fb369b3105fe240d865fea786571008fe6088d142fd5f09a15b1a98344.json index a7c43486e..efef78f5e 100644 --- a/.sqlx/query-5a92975ad3d17197b01235b08ea9ff9d5169f8bf7c50315ef96d838b37c18cf1.json +++ b/.sqlx/query-d2fd21fb369b3105fe240d865fea786571008fe6088d142fd5f09a15b1a98344.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "INSERT INTO builds(rid, build_status, build_server)\n VALUES ($1, $2, $3)\n RETURNING id", + "query": "INSERT INTO builds(rid, build_status, build_server, build_started)\n VALUES ($1, $2, $3, NOW())\n RETURNING id", "describe": { "columns": [ { @@ -31,5 +31,5 @@ false ] }, - "hash": "5a92975ad3d17197b01235b08ea9ff9d5169f8bf7c50315ef96d838b37c18cf1" + "hash": "d2fd21fb369b3105fe240d865fea786571008fe6088d142fd5f09a15b1a98344" } diff --git a/.sqlx/query-d471c22a41a040f720ac678b085265f616eef21a09ffaaa243fc26f107ad6c87.json b/.sqlx/query-f93135119437ea6896864d413e0c6321ba93e043002509290acf736e7210caf2.json similarity index 86% rename from .sqlx/query-d471c22a41a040f720ac678b085265f616eef21a09ffaaa243fc26f107ad6c87.json rename to .sqlx/query-f93135119437ea6896864d413e0c6321ba93e043002509290acf736e7210caf2.json index f02ff0619..0a37c5564 100644 --- a/.sqlx/query-d471c22a41a040f720ac678b085265f616eef21a09ffaaa243fc26f107ad6c87.json +++ b/.sqlx/query-f93135119437ea6896864d413e0c6321ba93e043002509290acf736e7210caf2.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n crates.name,\n releases.version,\n releases.description,\n releases.target_name,\n releases.rustdoc_status,\n releases.default_target,\n releases.doc_targets,\n releases.yanked,\n builds.rustc_version as \"rustc_version?\"\n FROM releases\n INNER JOIN crates ON crates.id = releases.crate_id\n LEFT JOIN LATERAL (\n SELECT * FROM builds\n WHERE builds.rid = releases.id\n ORDER BY builds.build_time\n DESC LIMIT 1\n ) AS builds ON true\n WHERE crates.name = $1 AND releases.version = $2", + "query": "SELECT\n crates.name,\n releases.version,\n releases.description,\n releases.target_name,\n releases.rustdoc_status,\n releases.default_target,\n releases.doc_targets,\n releases.yanked,\n builds.rustc_version as \"rustc_version?\"\n FROM releases\n INNER JOIN crates ON crates.id = releases.crate_id\n LEFT JOIN LATERAL (\n SELECT * FROM builds\n WHERE builds.rid = releases.id\n ORDER BY builds.build_finished\n DESC LIMIT 1\n ) AS builds ON true\n WHERE crates.name = $1 AND releases.version = $2", "describe": { "columns": [ { @@ -67,5 +67,5 @@ true ] }, - "hash": "d471c22a41a040f720ac678b085265f616eef21a09ffaaa243fc26f107ad6c87" + "hash": "f93135119437ea6896864d413e0c6321ba93e043002509290acf736e7210caf2" } diff --git a/migrations/20241021050229_builds-started-finished.down.sql b/migrations/20241021050229_builds-started-finished.down.sql new file mode 100644 index 000000000..983b2e5aa --- /dev/null +++ b/migrations/20241021050229_builds-started-finished.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE builds DROP COLUMN build_started; +ALTER TABLE builds RENAME COLUMN build_finished TO build_time; diff --git a/migrations/20241021050229_builds-started-finished.up.sql b/migrations/20241021050229_builds-started-finished.up.sql new file mode 100644 index 000000000..5fe29b1fa --- /dev/null +++ b/migrations/20241021050229_builds-started-finished.up.sql @@ -0,0 +1,5 @@ +ALTER TABLE builds + ADD COLUMN build_started TIMESTAMP WITH TIME ZONE; + +ALTER TABLE builds + RENAME COLUMN build_time TO build_finished; diff --git a/src/db/add_package.rs b/src/db/add_package.rs index 027691d8c..3fa6a2436 100644 --- a/src/db/add_package.rs +++ b/src/db/add_package.rs @@ -162,7 +162,7 @@ pub async fn update_build_status(conn: &mut sqlx::PgConnection, release_id: i32) FROM ( SELECT r.id, - MAX(b.build_time) as last_build_time, + MAX(b.build_finished) as last_build_time, SUM(CASE WHEN b.build_status = 'success' THEN 1 ELSE 0 END) as success_count, SUM(CASE WHEN b.build_status = 'failure' THEN 1 ELSE 0 END) as failure_count FROM @@ -252,7 +252,7 @@ pub(crate) async fn finish_build( build_status = $3, build_server = $4, errors = $5, - build_time = NOW() + build_finished = NOW() WHERE id = $6 RETURNING rid", @@ -342,8 +342,8 @@ pub(crate) async fn initialize_build( let hostname = hostname::get()?; let build_id = sqlx::query_scalar!( - "INSERT INTO builds(rid, build_status, build_server) - VALUES ($1, $2, $3) + "INSERT INTO builds(rid, build_status, build_server, build_started) + VALUES ($1, $2, $3, NOW()) RETURNING id", release_id, BuildStatus::InProgress as BuildStatus, @@ -622,6 +622,7 @@ mod test { r#"SELECT rustc_version, docsrs_version, + build_started, build_status as "build_status: BuildStatus", errors FROM builds @@ -633,6 +634,7 @@ mod test { assert!(row.rustc_version.is_none()); assert!(row.docsrs_version.is_none()); + assert!(row.build_started.is_some()); assert_eq!(row.build_status, BuildStatus::Failure); assert_eq!(row.errors, Some("error message".into())); diff --git a/src/web/build_details.rs b/src/web/build_details.rs index f3433a489..e5f648408 100644 --- a/src/web/build_details.rs +++ b/src/web/build_details.rs @@ -72,7 +72,7 @@ pub(crate) async fn build_details_handler( builds.rustc_version, builds.docsrs_version, builds.build_status as "build_status: BuildStatus", - builds.build_time, + COALESCE(builds.build_finished, builds.build_started) as build_time, builds.output, builds.errors, releases.default_target diff --git a/src/web/builds.rs b/src/web/builds.rs index 46dcd0cd3..8c99f6f5b 100644 --- a/src/web/builds.rs +++ b/src/web/builds.rs @@ -234,7 +234,7 @@ async fn get_builds( builds.rustc_version, builds.docsrs_version, builds.build_status as "build_status: BuildStatus", - builds.build_time, + COALESCE(builds.build_finished, builds.build_started) as build_time, builds.errors FROM builds INNER JOIN releases ON releases.id = builds.rid @@ -286,7 +286,8 @@ mod tests { .collect(); assert_eq!(rows.len(), 1); - assert_eq!(rows[0].chars().filter(|&c| c == '—').count(), 3); + // third column contains build-start time, even when the rest is empty + assert_eq!(rows[0].chars().filter(|&c| c == '—').count(), 2); Ok(()) }); diff --git a/src/web/crate_details.rs b/src/web/crate_details.rs index 8bf20bc4b..0f0c6d186 100644 --- a/src/web/crate_details.rs +++ b/src/web/crate_details.rs @@ -142,7 +142,7 @@ impl CrateDetails { WHERE builds.rid = releases.id AND builds.build_status = 'success' - ORDER BY build_time DESC + ORDER BY build_finished DESC LIMIT 1 ) AS latest_build_id, releases.rustdoc_status, @@ -172,7 +172,7 @@ impl CrateDetails { WHERE builds.rid = releases.id AND builds.build_status = 'success' - ORDER BY builds.build_time + ORDER BY builds.build_finished DESC LIMIT 1 ) as "rustc_version?", doc_coverage.total_items, diff --git a/src/web/mod.rs b/src/web/mod.rs index 3c59f9853..113cdb5d5 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -685,7 +685,7 @@ impl MetaData { LEFT JOIN LATERAL ( SELECT * FROM builds WHERE builds.rid = releases.id - ORDER BY builds.build_time + ORDER BY builds.build_finished DESC LIMIT 1 ) AS builds ON true WHERE crates.name = $1 AND releases.version = $2"#, diff --git a/src/web/source.rs b/src/web/source.rs index a755706d8..5bd78facc 100644 --- a/src/web/source.rs +++ b/src/web/source.rs @@ -225,7 +225,7 @@ pub(crate) async fn source_browser_handler( WHERE builds.rid = releases.id AND builds.build_status = 'success' - ORDER BY build_time DESC + ORDER BY build_finished DESC LIMIT 1 ) AS latest_build_id FROM releases