From 87f1a9f79648eceeb1ac65d976c3e8be24384173 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 8 May 2026 02:53:49 +0200 Subject: [PATCH 01/10] Add information about crate builds --- ...29096357aa95c67c76905a6709a66247450ff.json | 15 ---- ...ff6ec8e7ea47c4d005d6cc00dbc60f69380cf.json | 34 ------- ...ccd8494d47310bdd2df36b2cdfbafde7d1fa6.json | 22 ----- ...2e90e944d9009d75ad527e7442e312be98ea9.json | 26 ------ ...781ea30207795b833c4951f3c8303c49e699e.json | 12 --- ...9df8f6419c177167ae0bfe8685033b6b8709e.json | 23 ----- ...ead19f890f2baf677654f404f51ba48e57013.json | 22 ----- ...bcda64bb73c661cea397cba418e2d80f44de8.json | 15 ++++ ...d6c0d9a4f94384eb9aceb42dfc8c0a1bc7d2.json} | 10 ++- ...c53f9d42da5178f23f1046c4df621a7d17307.json | 22 ----- ...c951c1d43e600ef5bc25d23c1fe42f6136869.json | 12 --- ...622930ec24b54edba59a4cdd0581ef9ce1ede.json | 89 ------------------- ...6f2a16cc17c471eb199d557ab6b32656ccef8.json | 15 ---- ...587e898f0f4fc035f0f26820766839c72ec7c.json | 23 ----- ...b704acf7b879860b7e5c55a1df04202e0ec65.json | 14 --- ...55cf4451f8f3b683c6bd1033e8ebaab97692e.json | 22 ----- ...d79b9dd72f6b389dadca630745928612fa725.json | 16 ---- ...8692cb4abb0a4b62d611679c956be3fb9494f.json | 14 --- ...2bbb76530bcc207d2899736b8ca6e564d2a51.json | 14 --- ...d6054a31d0a2df37a8a1d7659208092929ce8.json | 14 --- ...a9dfb847ca73426f9e5c20bf907d9236d10b9.json | 22 ----- ...3889c846d64fa11463719e65496b950ae039f.json | 20 ----- ...7af117701e86fd1119c77da01271940a0ea31.json | 12 --- ...a659e7fb431beb0017fbcfd21132f105ce722.json | 22 ----- ...54d6e8803d2ae453f30295e3cfb9fe77cea4.json} | 16 ++-- ...caffd9f0ee426e02cb3512df288434e40029f.json | 58 ------------ ...c53c9583651187631d656c779e6d08676e5a4.json | 22 ----- ...4903b6a9745d315b2b71c298934ac42649362.json | 46 ---------- ...8301fc7b92dfda3fea892f1957eda0c3ae018.json | 29 ------ ...622c402acbe2080f4d0c5079251532b7ceb87.json | 22 ----- ...0f0fbf063b196803b8c5605356d40a31fc636.json | 22 ----- ...7cbc597f224b532a5312983962aef8b187c2a.json | 20 ----- ...f80844b1091964e8bdb0f55e55209077d15b1.json | 22 ----- ...1e60ca47f46dde782fce4fdcb42789cf2fd16.json | 14 --- ...6895567b750b025e4848c54a8cda7d872c48b.json | 22 ----- .../src/docbuilder/rustwide_builder.rs | 12 ++- .../docs_rs_web/src/handlers/build_details.rs | 34 ++++--- crates/bin/docs_rs_web/src/handlers/builds.rs | 19 ++++ .../templates/crate/build_details.html | 13 ++- .../docs_rs_web/templates/crate/builds.html | 18 ++-- .../docs_rs_web/templates/style/style.scss | 3 + .../20260508232425_build-logs.down.sql | 1 + .../20260508232425_build-logs.up.sql | 4 + crates/lib/docs_rs_database/src/releases.rs | 14 +++ crates/lib/docs_rs_types/src/build_status.rs | 3 + 45 files changed, 130 insertions(+), 794 deletions(-) delete mode 100644 .sqlx/query-007a6d355f893370b544dda0d6129096357aa95c67c76905a6709a66247450ff.json delete mode 100644 .sqlx/query-0b4084390b6c738c6f26c2dd13eff6ec8e7ea47c4d005d6cc00dbc60f69380cf.json delete mode 100644 .sqlx/query-0c639107bd612677b3f24a5204accd8494d47310bdd2df36b2cdfbafde7d1fa6.json delete mode 100644 .sqlx/query-1002ada46a8b06269d7aa42acc52e90e944d9009d75ad527e7442e312be98ea9.json delete mode 100644 .sqlx/query-192d91c85fff00d311fa28dd7f5781ea30207795b833c4951f3c8303c49e699e.json delete mode 100644 .sqlx/query-1fc879cc103367a688f9f7bcc079df8f6419c177167ae0bfe8685033b6b8709e.json delete mode 100644 .sqlx/query-265729219105c1d8021fe898dcbead19f890f2baf677654f404f51ba48e57013.json create mode 100644 .sqlx/query-34e1db318e99d8dd22dd70b63c9bcda64bb73c661cea397cba418e2d80f44de8.json rename .sqlx/{query-9cc5a9e57ba5da30aea23342ea590b53abd0867ebbd6ed2fe109984b1960c6d4.json => query-36fb7958d27b78132f8da6333bf8d6c0d9a4f94384eb9aceb42dfc8c0a1bc7d2.json} (74%) delete mode 100644 .sqlx/query-398d7622c18e45ddc5beffdcd5ec53f9d42da5178f23f1046c4df621a7d17307.json delete mode 100644 .sqlx/query-3a46fdff86a84ce2140ad14a5bdc951c1d43e600ef5bc25d23c1fe42f6136869.json delete mode 100644 .sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json delete mode 100644 .sqlx/query-4a7812c6d849bbe2df34107d81b6f2a16cc17c471eb199d557ab6b32656ccef8.json delete mode 100644 .sqlx/query-4fba2b9b3ef48ae8cb05538daff587e898f0f4fc035f0f26820766839c72ec7c.json delete mode 100644 .sqlx/query-5f31665c91028ac845408991812b704acf7b879860b7e5c55a1df04202e0ec65.json delete mode 100644 .sqlx/query-61e8789f7d2ddcfa951dc86c5f455cf4451f8f3b683c6bd1033e8ebaab97692e.json delete mode 100644 .sqlx/query-6a448c78dd3fc7c95f13567969dd79b9dd72f6b389dadca630745928612fa725.json delete mode 100644 .sqlx/query-86cb6c0a4d2e6b18df6339f12a98692cb4abb0a4b62d611679c956be3fb9494f.json delete mode 100644 .sqlx/query-87cd28092cc0d8646d48687bedd2bbb76530bcc207d2899736b8ca6e564d2a51.json delete mode 100644 .sqlx/query-8cdeaffe16408187897e5c8f2b0d6054a31d0a2df37a8a1d7659208092929ce8.json delete mode 100644 .sqlx/query-8d1fc18ed39b0b5588dfa3958e6a9dfb847ca73426f9e5c20bf907d9236d10b9.json delete mode 100644 .sqlx/query-915642dcaea4c90bb15b7ad4c6b3889c846d64fa11463719e65496b950ae039f.json delete mode 100644 .sqlx/query-946de01935ee281874744ced08e7af117701e86fd1119c77da01271940a0ea31.json delete mode 100644 .sqlx/query-96b68919f9016705a1a36ef11a5a659e7fb431beb0017fbcfd21132f105ce722.json rename .sqlx/{query-20e978cf93a568649b762fb1f93c63ad7d64bfa34b5663ace054d30113ab833e.json => query-97163721e6ceb324c9d70dee136d54d6e8803d2ae453f30295e3cfb9fe77cea4.json} (50%) delete mode 100644 .sqlx/query-99961669a88e08e3803172d1755caffd9f0ee426e02cb3512df288434e40029f.json delete mode 100644 .sqlx/query-a68160fad4a1adbfe54d44f5efcc53c9583651187631d656c779e6d08676e5a4.json delete mode 100644 .sqlx/query-abf12aa0c7f3d2d626c212f5e3d4903b6a9745d315b2b71c298934ac42649362.json delete mode 100644 .sqlx/query-b4ebc9f3e0770457003c321070f8301fc7b92dfda3fea892f1957eda0c3ae018.json delete mode 100644 .sqlx/query-db4dacb4c559c87d8d6ed3b3b3e622c402acbe2080f4d0c5079251532b7ceb87.json delete mode 100644 .sqlx/query-dd166cd7a74629273eee01c62640f0fbf063b196803b8c5605356d40a31fc636.json delete mode 100644 .sqlx/query-de03b48baa8a4561687aab398857cbc597f224b532a5312983962aef8b187c2a.json delete mode 100644 .sqlx/query-e00a426fa250609748b3013a2a4f80844b1091964e8bdb0f55e55209077d15b1.json delete mode 100644 .sqlx/query-ec35a33dd4ea3758a2f82ac5a441e60ca47f46dde782fce4fdcb42789cf2fd16.json delete mode 100644 .sqlx/query-fe722f4ac37ede24ffd1dd0cb736895567b750b025e4848c54a8cda7d872c48b.json create mode 100644 crates/lib/docs_rs_database/migrations/20260508232425_build-logs.down.sql create mode 100644 crates/lib/docs_rs_database/migrations/20260508232425_build-logs.up.sql diff --git a/.sqlx/query-007a6d355f893370b544dda0d6129096357aa95c67c76905a6709a66247450ff.json b/.sqlx/query-007a6d355f893370b544dda0d6129096357aa95c67c76905a6709a66247450ff.json deleted file mode 100644 index f13d5b020..000000000 --- a/.sqlx/query-007a6d355f893370b544dda0d6129096357aa95c67c76905a6709a66247450ff.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds SET output = $2 WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4", - "Text" - ] - }, - "nullable": [] - }, - "hash": "007a6d355f893370b544dda0d6129096357aa95c67c76905a6709a66247450ff" -} diff --git a/.sqlx/query-0b4084390b6c738c6f26c2dd13eff6ec8e7ea47c4d005d6cc00dbc60f69380cf.json b/.sqlx/query-0b4084390b6c738c6f26c2dd13eff6ec8e7ea47c4d005d6cc00dbc60f69380cf.json deleted file mode 100644 index 8a1259bdd..000000000 --- a/.sqlx/query-0b4084390b6c738c6f26c2dd13eff6ec8e7ea47c4d005d6cc00dbc60f69380cf.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT build_status as \"build_status!: BuildStatus\"\n FROM crates\n INNER JOIN releases ON crates.id = releases.crate_id\n INNER JOIN release_build_status ON releases.id = release_build_status.rid\n WHERE crates.name = $1 AND releases.version = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "build_status!: BuildStatus", - "type_info": { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - } - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "0b4084390b6c738c6f26c2dd13eff6ec8e7ea47c4d005d6cc00dbc60f69380cf" -} diff --git a/.sqlx/query-0c639107bd612677b3f24a5204accd8494d47310bdd2df36b2cdfbafde7d1fa6.json b/.sqlx/query-0c639107bd612677b3f24a5204accd8494d47310bdd2df36b2cdfbafde7d1fa6.json deleted file mode 100644 index 090497497..000000000 --- a/.sqlx/query-0c639107bd612677b3f24a5204accd8494d47310bdd2df36b2cdfbafde7d1fa6.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT crate_id as \"id: CrateId\"\n FROM releases\n WHERE id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id: CrateId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "0c639107bd612677b3f24a5204accd8494d47310bdd2df36b2cdfbafde7d1fa6" -} diff --git a/.sqlx/query-1002ada46a8b06269d7aa42acc52e90e944d9009d75ad527e7442e312be98ea9.json b/.sqlx/query-1002ada46a8b06269d7aa42acc52e90e944d9009d75ad527e7442e312be98ea9.json deleted file mode 100644 index f1374e312..000000000 --- a/.sqlx/query-1002ada46a8b06269d7aa42acc52e90e944d9009d75ad527e7442e312be98ea9.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "INSERT INTO repositories (host, host_id, name, description, last_commit, stars, forks, issues, updated_at)\n VALUES ('github.com', $1, $2, 'Fake description!', NOW(), $3, $4, $5, NOW())\n RETURNING id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Int4", - "Int4", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "1002ada46a8b06269d7aa42acc52e90e944d9009d75ad527e7442e312be98ea9" -} diff --git a/.sqlx/query-192d91c85fff00d311fa28dd7f5781ea30207795b833c4951f3c8303c49e699e.json b/.sqlx/query-192d91c85fff00d311fa28dd7f5781ea30207795b833c4951f3c8303c49e699e.json deleted file mode 100644 index 1cb245393..000000000 --- a/.sqlx/query-192d91c85fff00d311fa28dd7f5781ea30207795b833c4951f3c8303c49e699e.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM builds", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "192d91c85fff00d311fa28dd7f5781ea30207795b833c4951f3c8303c49e699e" -} diff --git a/.sqlx/query-1fc879cc103367a688f9f7bcc079df8f6419c177167ae0bfe8685033b6b8709e.json b/.sqlx/query-1fc879cc103367a688f9f7bcc079df8f6419c177167ae0bfe8685033b6b8709e.json deleted file mode 100644 index d5ee6c7da..000000000 --- a/.sqlx/query-1fc879cc103367a688f9f7bcc079df8f6419c177167ae0bfe8685033b6b8709e.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT\n r.doc_targets\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n WHERE\n c.name = $1 AND\n r.version = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "doc_targets", - "type_info": "Json" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - true - ] - }, - "hash": "1fc879cc103367a688f9f7bcc079df8f6419c177167ae0bfe8685033b6b8709e" -} diff --git a/.sqlx/query-265729219105c1d8021fe898dcbead19f890f2baf677654f404f51ba48e57013.json b/.sqlx/query-265729219105c1d8021fe898dcbead19f890f2baf677654f404f51ba48e57013.json deleted file mode 100644 index b31520820..000000000 --- a/.sqlx/query-265729219105c1d8021fe898dcbead19f890f2baf677654f404f51ba48e57013.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id\n FROM crates\n WHERE name = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "265729219105c1d8021fe898dcbead19f890f2baf677654f404f51ba48e57013" -} diff --git a/.sqlx/query-34e1db318e99d8dd22dd70b63c9bcda64bb73c661cea397cba418e2d80f44de8.json b/.sqlx/query-34e1db318e99d8dd22dd70b63c9bcda64bb73c661cea397cba418e2d80f44de8.json new file mode 100644 index 000000000..415e7624a --- /dev/null +++ b/.sqlx/query-34e1db318e99d8dd22dd70b63c9bcda64bb73c661cea397cba418e2d80f44de8.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO builds_logs(build_id, logs)\n VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Json" + ] + }, + "nullable": [] + }, + "hash": "34e1db318e99d8dd22dd70b63c9bcda64bb73c661cea397cba418e2d80f44de8" +} diff --git a/.sqlx/query-9cc5a9e57ba5da30aea23342ea590b53abd0867ebbd6ed2fe109984b1960c6d4.json b/.sqlx/query-36fb7958d27b78132f8da6333bf8d6c0d9a4f94384eb9aceb42dfc8c0a1bc7d2.json similarity index 74% rename from .sqlx/query-9cc5a9e57ba5da30aea23342ea590b53abd0867ebbd6ed2fe109984b1960c6d4.json rename to .sqlx/query-36fb7958d27b78132f8da6333bf8d6c0d9a4f94384eb9aceb42dfc8c0a1bc7d2.json index 68c85967b..41c5a83a8 100644 --- a/.sqlx/query-9cc5a9e57ba5da30aea23342ea590b53abd0867ebbd6ed2fe109984b1960c6d4.json +++ b/.sqlx/query-36fb7958d27b78132f8da6333bf8d6c0d9a4f94384eb9aceb42dfc8c0a1bc7d2.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 COALESCE(builds.build_finished, builds.build_started) as build_time,\n builds.output,\n builds.errors,\n builds.error_kind,\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 builds.error_kind,\n releases.default_target,\n builds_logs.logs\n FROM builds\n INNER JOIN releases ON releases.id = builds.rid\n INNER JOIN crates ON releases.crate_id = crates.id\n LEFT OUTER JOIN builds_logs ON builds_logs.build_id = builds.id\n WHERE builds.id = $1 AND crates.name = $2 AND releases.version = $3", "describe": { "columns": [ { @@ -53,6 +53,11 @@ "ordinal": 7, "name": "default_target", "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "logs", + "type_info": "Json" } ], "parameters": { @@ -70,8 +75,9 @@ true, true, true, + true, true ] }, - "hash": "9cc5a9e57ba5da30aea23342ea590b53abd0867ebbd6ed2fe109984b1960c6d4" + "hash": "36fb7958d27b78132f8da6333bf8d6c0d9a4f94384eb9aceb42dfc8c0a1bc7d2" } diff --git a/.sqlx/query-398d7622c18e45ddc5beffdcd5ec53f9d42da5178f23f1046c4df621a7d17307.json b/.sqlx/query-398d7622c18e45ddc5beffdcd5ec53f9d42da5178f23f1046c4df621a7d17307.json deleted file mode 100644 index 48048871a..000000000 --- a/.sqlx/query-398d7622c18e45ddc5beffdcd5ec53f9d42da5178f23f1046c4df621a7d17307.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT crate_id as \"crate_id: CrateId\" FROM releases WHERE id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "crate_id: CrateId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "398d7622c18e45ddc5beffdcd5ec53f9d42da5178f23f1046c4df621a7d17307" -} diff --git a/.sqlx/query-3a46fdff86a84ce2140ad14a5bdc951c1d43e600ef5bc25d23c1fe42f6136869.json b/.sqlx/query-3a46fdff86a84ce2140ad14a5bdc951c1d43e600ef5bc25d23c1fe42f6136869.json deleted file mode 100644 index f33c7c861..000000000 --- a/.sqlx/query-3a46fdff86a84ce2140ad14a5bdc951c1d43e600ef5bc25d23c1fe42f6136869.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "ALTER SEQUENCE crates_id_seq RESTART WITH 1", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "3a46fdff86a84ce2140ad14a5bdc951c1d43e600ef5bc25d23c1fe42f6136869" -} diff --git a/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json b/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json deleted file mode 100644 index b4228a578..000000000 --- a/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT\n r.rustdoc_status,\n r.default_target,\n r.doc_targets,\n r.archive_storage,\n r.source_size as \"source_size!\",\n cov.total_items,\n b.id as build_id,\n b.build_status::TEXT as build_status,\n b.docsrs_version,\n b.rustc_version,\n b.documentation_size,\n b.memory_peak\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n INNER JOIN builds as b ON r.id = b.rid\n LEFT OUTER JOIN doc_coverage AS cov ON r.id = cov.release_id\n WHERE\n c.name = $1 AND\n r.version = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rustdoc_status", - "type_info": "Bool" - }, - { - "ordinal": 1, - "name": "default_target", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "doc_targets", - "type_info": "Json" - }, - { - "ordinal": 3, - "name": "archive_storage", - "type_info": "Bool" - }, - { - "ordinal": 4, - "name": "source_size!", - "type_info": "Int8" - }, - { - "ordinal": 5, - "name": "total_items", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "build_id", - "type_info": "Int4" - }, - { - "ordinal": 7, - "name": "build_status", - "type_info": "Text" - }, - { - "ordinal": 8, - "name": "docsrs_version", - "type_info": "Varchar" - }, - { - "ordinal": 9, - "name": "rustc_version", - "type_info": "Varchar" - }, - { - "ordinal": 10, - "name": "documentation_size", - "type_info": "Int8" - }, - { - "ordinal": 11, - "name": "memory_peak", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - true, - true, - true, - false, - true, - true, - false, - null, - true, - true, - true, - true - ] - }, - "hash": "45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede" -} diff --git a/.sqlx/query-4a7812c6d849bbe2df34107d81b6f2a16cc17c471eb199d557ab6b32656ccef8.json b/.sqlx/query-4a7812c6d849bbe2df34107d81b6f2a16cc17c471eb199d557ab6b32656ccef8.json deleted file mode 100644 index 960489039..000000000 --- a/.sqlx/query-4a7812c6d849bbe2df34107d81b6f2a16cc17c471eb199d557ab6b32656ccef8.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE release_build_status\n SET last_build_time = $1\n FROM releases\n INNER JOIN crates ON crates.id = releases.crate_id\n WHERE release_build_status.rid = releases.id\n AND crates.name = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Timestamptz", - "Text" - ] - }, - "nullable": [] - }, - "hash": "4a7812c6d849bbe2df34107d81b6f2a16cc17c471eb199d557ab6b32656ccef8" -} diff --git a/.sqlx/query-4fba2b9b3ef48ae8cb05538daff587e898f0f4fc035f0f26820766839c72ec7c.json b/.sqlx/query-4fba2b9b3ef48ae8cb05538daff587e898f0f4fc035f0f26820766839c72ec7c.json deleted file mode 100644 index 36491fedc..000000000 --- a/.sqlx/query-4fba2b9b3ef48ae8cb05538daff587e898f0f4fc035f0f26820766839c72ec7c.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id FROM queue WHERE name = $1 AND version = $2;", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "4fba2b9b3ef48ae8cb05538daff587e898f0f4fc035f0f26820766839c72ec7c" -} diff --git a/.sqlx/query-5f31665c91028ac845408991812b704acf7b879860b7e5c55a1df04202e0ec65.json b/.sqlx/query-5f31665c91028ac845408991812b704acf7b879860b7e5c55a1df04202e0ec65.json deleted file mode 100644 index 60f1c5eab..000000000 --- a/.sqlx/query-5f31665c91028ac845408991812b704acf7b879860b7e5c55a1df04202e0ec65.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE releases SET yanked = true WHERE id = $1 AND version = '0.3.0'", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [] - }, - "hash": "5f31665c91028ac845408991812b704acf7b879860b7e5c55a1df04202e0ec65" -} diff --git a/.sqlx/query-61e8789f7d2ddcfa951dc86c5f455cf4451f8f3b683c6bd1033e8ebaab97692e.json b/.sqlx/query-61e8789f7d2ddcfa951dc86c5f455cf4451f8f3b683c6bd1033e8ebaab97692e.json deleted file mode 100644 index 3398d4f9d..000000000 --- a/.sqlx/query-61e8789f7d2ddcfa951dc86c5f455cf4451f8f3b683c6bd1033e8ebaab97692e.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id FROM builds WHERE rid = $1 ORDER BY id ASC", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "61e8789f7d2ddcfa951dc86c5f455cf4451f8f3b683c6bd1033e8ebaab97692e" -} diff --git a/.sqlx/query-6a448c78dd3fc7c95f13567969dd79b9dd72f6b389dadca630745928612fa725.json b/.sqlx/query-6a448c78dd3fc7c95f13567969dd79b9dd72f6b389dadca630745928612fa725.json deleted file mode 100644 index 25c98a9f7..000000000 --- a/.sqlx/query-6a448c78dd3fc7c95f13567969dd79b9dd72f6b389dadca630745928612fa725.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n build_status = 'failure',\n errors = $2,\n error_kind = $3\n WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4", - "Text", - "Text" - ] - }, - "nullable": [] - }, - "hash": "6a448c78dd3fc7c95f13567969dd79b9dd72f6b389dadca630745928612fa725" -} diff --git a/.sqlx/query-86cb6c0a4d2e6b18df6339f12a98692cb4abb0a4b62d611679c956be3fb9494f.json b/.sqlx/query-86cb6c0a4d2e6b18df6339f12a98692cb4abb0a4b62d611679c956be3fb9494f.json deleted file mode 100644 index 447afc045..000000000 --- a/.sqlx/query-86cb6c0a4d2e6b18df6339f12a98692cb4abb0a4b62d611679c956be3fb9494f.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE releases SET default_target = 'x86_64-unknown-linux-gnu' WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [] - }, - "hash": "86cb6c0a4d2e6b18df6339f12a98692cb4abb0a4b62d611679c956be3fb9494f" -} diff --git a/.sqlx/query-87cd28092cc0d8646d48687bedd2bbb76530bcc207d2899736b8ca6e564d2a51.json b/.sqlx/query-87cd28092cc0d8646d48687bedd2bbb76530bcc207d2899736b8ca6e564d2a51.json deleted file mode 100644 index c7c7353b1..000000000 --- a/.sqlx/query-87cd28092cc0d8646d48687bedd2bbb76530bcc207d2899736b8ca6e564d2a51.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE releases SET features = NULL WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [] - }, - "hash": "87cd28092cc0d8646d48687bedd2bbb76530bcc207d2899736b8ca6e564d2a51" -} diff --git a/.sqlx/query-8cdeaffe16408187897e5c8f2b0d6054a31d0a2df37a8a1d7659208092929ce8.json b/.sqlx/query-8cdeaffe16408187897e5c8f2b0d6054a31d0a2df37a8a1d7659208092929ce8.json deleted file mode 100644 index 4f5d74702..000000000 --- a/.sqlx/query-8cdeaffe16408187897e5c8f2b0d6054a31d0a2df37a8a1d7659208092929ce8.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE releases\n SET files = NULL\n WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [] - }, - "hash": "8cdeaffe16408187897e5c8f2b0d6054a31d0a2df37a8a1d7659208092929ce8" -} diff --git a/.sqlx/query-8d1fc18ed39b0b5588dfa3958e6a9dfb847ca73426f9e5c20bf907d9236d10b9.json b/.sqlx/query-8d1fc18ed39b0b5588dfa3958e6a9dfb847ca73426f9e5c20bf907d9236d10b9.json deleted file mode 100644 index fd8f3842a..000000000 --- a/.sqlx/query-8d1fc18ed39b0b5588dfa3958e6a9dfb847ca73426f9e5c20bf907d9236d10b9.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT yanked\n FROM releases\n WHERE id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "yanked", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - true - ] - }, - "hash": "8d1fc18ed39b0b5588dfa3958e6a9dfb847ca73426f9e5c20bf907d9236d10b9" -} diff --git a/.sqlx/query-915642dcaea4c90bb15b7ad4c6b3889c846d64fa11463719e65496b950ae039f.json b/.sqlx/query-915642dcaea4c90bb15b7ad4c6b3889c846d64fa11463719e65496b950ae039f.json deleted file mode 100644 index 80e54a1b7..000000000 --- a/.sqlx/query-915642dcaea4c90bb15b7ad4c6b3889c846d64fa11463719e65496b950ae039f.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT COUNT(*) FROM repositories", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "count", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - null - ] - }, - "hash": "915642dcaea4c90bb15b7ad4c6b3889c846d64fa11463719e65496b950ae039f" -} diff --git a/.sqlx/query-946de01935ee281874744ced08e7af117701e86fd1119c77da01271940a0ea31.json b/.sqlx/query-946de01935ee281874744ced08e7af117701e86fd1119c77da01271940a0ea31.json deleted file mode 100644 index bb7672ba2..000000000 --- a/.sqlx/query-946de01935ee281874744ced08e7af117701e86fd1119c77da01271940a0ea31.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM queue", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "946de01935ee281874744ced08e7af117701e86fd1119c77da01271940a0ea31" -} diff --git a/.sqlx/query-96b68919f9016705a1a36ef11a5a659e7fb431beb0017fbcfd21132f105ce722.json b/.sqlx/query-96b68919f9016705a1a36ef11a5a659e7fb431beb0017fbcfd21132f105ce722.json deleted file mode 100644 index 984eff3ac..000000000 --- a/.sqlx/query-96b68919f9016705a1a36ef11a5a659e7fb431beb0017fbcfd21132f105ce722.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT relname\n FROM pg_class\n INNER JOIN pg_namespace ON\n pg_class.relnamespace = pg_namespace.oid\n WHERE pg_class.relkind = 'S'\n AND pg_namespace.nspname = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "relname", - "type_info": "Name" - } - ], - "parameters": { - "Left": [ - "Name" - ] - }, - "nullable": [ - false - ] - }, - "hash": "96b68919f9016705a1a36ef11a5a659e7fb431beb0017fbcfd21132f105ce722" -} diff --git a/.sqlx/query-20e978cf93a568649b762fb1f93c63ad7d64bfa34b5663ace054d30113ab833e.json b/.sqlx/query-97163721e6ceb324c9d70dee136d54d6e8803d2ae453f30295e3cfb9fe77cea4.json similarity index 50% rename from .sqlx/query-20e978cf93a568649b762fb1f93c63ad7d64bfa34b5663ace054d30113ab833e.json rename to .sqlx/query-97163721e6ceb324c9d70dee136d54d6e8803d2ae453f30295e3cfb9fe77cea4.json index 7e974f7ff..a67f78b42 100644 --- a/.sqlx/query-20e978cf93a568649b762fb1f93c63ad7d64bfa34b5663ace054d30113ab833e.json +++ b/.sqlx/query-97163721e6ceb324c9d70dee136d54d6e8803d2ae453f30295e3cfb9fe77cea4.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n builds.id as \"id: BuildId\",\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 CASE\n WHEN builds.build_started IS NULL\n -- for old builds, `build_started` is empty.\n THEN NULL\n ELSE\n CASE\n -- for in-progress builds we show the duration until now\n WHEN builds.build_status = 'in_progress' THEN (CURRENT_TIMESTAMP - builds.build_started)\n -- there are broken builds where the status is `error`, and `build_finished` is NULL\n WHEN builds.build_finished IS NULL THEN NULL\n -- for finished builds we can show the full duration\n ELSE (builds.build_finished - builds.build_started)\n END\n END AS \"build_duration?: Duration\",\n builds.memory_peak,\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 builds.id DESC", + "query": "SELECT\n builds.id as \"id: BuildId\",\n builds.rustc_version,\n builds.docsrs_version,\n builds.build_status as \"build_status: BuildStatus\",\n builds_logs.logs,\n COALESCE(builds.build_finished, builds.build_started) as build_time,\n CASE\n WHEN builds.build_started IS NULL\n -- for old builds, `build_started` is empty.\n THEN NULL\n ELSE\n CASE\n -- for in-progress builds we show the duration until now\n WHEN builds.build_status = 'in_progress' THEN (CURRENT_TIMESTAMP - builds.build_started)\n -- there are broken builds where the status is `error`, and `build_finished` is NULL\n WHEN builds.build_finished IS NULL THEN NULL\n -- for finished builds we can show the full duration\n ELSE (builds.build_finished - builds.build_started)\n END\n END AS \"build_duration?: Duration\",\n builds.memory_peak,\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 LEFT OUTER JOIN builds_logs ON builds_logs.build_id = builds.id\n WHERE\n crates.name = $1 AND\n releases.version = $2\n ORDER BY builds.id DESC", "describe": { "columns": [ { @@ -36,21 +36,26 @@ }, { "ordinal": 4, + "name": "logs", + "type_info": "Json" + }, + { + "ordinal": 5, "name": "build_time", "type_info": "Timestamptz" }, { - "ordinal": 5, + "ordinal": 6, "name": "build_duration?: Duration", "type_info": "Interval" }, { - "ordinal": 6, + "ordinal": 7, "name": "memory_peak", "type_info": "Int8" }, { - "ordinal": 7, + "ordinal": 8, "name": "errors", "type_info": "Text" } @@ -66,11 +71,12 @@ true, true, false, + true, null, null, true, true ] }, - "hash": "20e978cf93a568649b762fb1f93c63ad7d64bfa34b5663ace054d30113ab833e" + "hash": "97163721e6ceb324c9d70dee136d54d6e8803d2ae453f30295e3cfb9fe77cea4" } diff --git a/.sqlx/query-99961669a88e08e3803172d1755caffd9f0ee426e02cb3512df288434e40029f.json b/.sqlx/query-99961669a88e08e3803172d1755caffd9f0ee426e02cb3512df288434e40029f.json deleted file mode 100644 index 9c5e18816..000000000 --- a/.sqlx/query-99961669a88e08e3803172d1755caffd9f0ee426e02cb3512df288434e40029f.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT\n rustc_version,\n docsrs_version,\n build_status as \"build_status: BuildStatus\",\n error_kind,\n errors\n FROM\n crates as c\n INNER JOIN releases as r on c.id = r.crate_id\n INNER JOIN builds as b on b.rid = r.id\n WHERE c.name = $1 and r.version = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rustc_version", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "docsrs_version", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "build_status: BuildStatus", - "type_info": { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - } - }, - { - "ordinal": 3, - "name": "error_kind", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "errors", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - true, - true, - false, - true, - true - ] - }, - "hash": "99961669a88e08e3803172d1755caffd9f0ee426e02cb3512df288434e40029f" -} diff --git a/.sqlx/query-a68160fad4a1adbfe54d44f5efcc53c9583651187631d656c779e6d08676e5a4.json b/.sqlx/query-a68160fad4a1adbfe54d44f5efcc53c9583651187631d656c779e6d08676e5a4.json deleted file mode 100644 index 21931971c..000000000 --- a/.sqlx/query-a68160fad4a1adbfe54d44f5efcc53c9583651187631d656c779e6d08676e5a4.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id FROM releases WHERE id = $1;", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "a68160fad4a1adbfe54d44f5efcc53c9583651187631d656c779e6d08676e5a4" -} diff --git a/.sqlx/query-abf12aa0c7f3d2d626c212f5e3d4903b6a9745d315b2b71c298934ac42649362.json b/.sqlx/query-abf12aa0c7f3d2d626c212f5e3d4903b6a9745d315b2b71c298934ac42649362.json deleted file mode 100644 index 7f51ff4d8..000000000 --- a/.sqlx/query-abf12aa0c7f3d2d626c212f5e3d4903b6a9745d315b2b71c298934ac42649362.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT\n releases.features \"features?: Vec\"\n FROM releases\n INNER JOIN crates ON crates.id = releases.crate_id\n WHERE crates.name = $1 AND releases.version = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "features?: Vec", - "type_info": { - "Custom": { - "name": "feature[]", - "kind": { - "Array": { - "Custom": { - "name": "feature", - "kind": { - "Composite": [ - [ - "name", - "Text" - ], - [ - "subfeatures", - "TextArray" - ] - ] - } - } - } - } - } - } - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - true - ] - }, - "hash": "abf12aa0c7f3d2d626c212f5e3d4903b6a9745d315b2b71c298934ac42649362" -} diff --git a/.sqlx/query-b4ebc9f3e0770457003c321070f8301fc7b92dfda3fea892f1957eda0c3ae018.json b/.sqlx/query-b4ebc9f3e0770457003c321070f8301fc7b92dfda3fea892f1957eda0c3ae018.json deleted file mode 100644 index b574cffd1..000000000 --- a/.sqlx/query-b4ebc9f3e0770457003c321070f8301fc7b92dfda3fea892f1957eda0c3ae018.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT\n r.rustdoc_status,\n r.is_library\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n LEFT OUTER JOIN doc_coverage AS cov ON r.id = cov.release_id\n WHERE\n c.name = $1 AND\n r.version = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rustdoc_status", - "type_info": "Bool" - }, - { - "ordinal": 1, - "name": "is_library", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - true, - true - ] - }, - "hash": "b4ebc9f3e0770457003c321070f8301fc7b92dfda3fea892f1957eda0c3ae018" -} diff --git a/.sqlx/query-db4dacb4c559c87d8d6ed3b3b3e622c402acbe2080f4d0c5079251532b7ceb87.json b/.sqlx/query-db4dacb4c559c87d8d6ed3b3b3e622c402acbe2080f4d0c5079251532b7ceb87.json deleted file mode 100644 index 67cdefa69..000000000 --- a/.sqlx/query-db4dacb4c559c87d8d6ed3b3b3e622c402acbe2080f4d0c5079251532b7ceb87.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id as \"id: CrateId\" FROM crates WHERE name = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id: CrateId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "db4dacb4c559c87d8d6ed3b3b3e622c402acbe2080f4d0c5079251532b7ceb87" -} diff --git a/.sqlx/query-dd166cd7a74629273eee01c62640f0fbf063b196803b8c5605356d40a31fc636.json b/.sqlx/query-dd166cd7a74629273eee01c62640f0fbf063b196803b8c5605356d40a31fc636.json deleted file mode 100644 index 6721d72bf..000000000 --- a/.sqlx/query-dd166cd7a74629273eee01c62640f0fbf063b196803b8c5605356d40a31fc636.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT login FROM owners\n INNER JOIN owner_rels ON owners.id = owner_rels.oid\n WHERE owner_rels.cid = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "login", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "dd166cd7a74629273eee01c62640f0fbf063b196803b8c5605356d40a31fc636" -} diff --git a/.sqlx/query-de03b48baa8a4561687aab398857cbc597f224b532a5312983962aef8b187c2a.json b/.sqlx/query-de03b48baa8a4561687aab398857cbc597f224b532a5312983962aef8b187c2a.json deleted file mode 100644 index 4098d58a7..000000000 --- a/.sqlx/query-de03b48baa8a4561687aab398857cbc597f224b532a5312983962aef8b187c2a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id\n FROM releases", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false - ] - }, - "hash": "de03b48baa8a4561687aab398857cbc597f224b532a5312983962aef8b187c2a" -} diff --git a/.sqlx/query-e00a426fa250609748b3013a2a4f80844b1091964e8bdb0f55e55209077d15b1.json b/.sqlx/query-e00a426fa250609748b3013a2a4f80844b1091964e8bdb0f55e55209077d15b1.json deleted file mode 100644 index dec83179a..000000000 --- a/.sqlx/query-e00a426fa250609748b3013a2a4f80844b1091964e8bdb0f55e55209077d15b1.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT rustdoc_status FROM releases WHERE id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rustdoc_status", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [ - true - ] - }, - "hash": "e00a426fa250609748b3013a2a4f80844b1091964e8bdb0f55e55209077d15b1" -} diff --git a/.sqlx/query-ec35a33dd4ea3758a2f82ac5a441e60ca47f46dde782fce4fdcb42789cf2fd16.json b/.sqlx/query-ec35a33dd4ea3758a2f82ac5a441e60ca47f46dde782fce4fdcb42789cf2fd16.json deleted file mode 100644 index ded21e53a..000000000 --- a/.sqlx/query-ec35a33dd4ea3758a2f82ac5a441e60ca47f46dde782fce4fdcb42789cf2fd16.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE releases SET dependencies = dependencies::jsonb #- '{0,2}' WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4" - ] - }, - "nullable": [] - }, - "hash": "ec35a33dd4ea3758a2f82ac5a441e60ca47f46dde782fce4fdcb42789cf2fd16" -} diff --git a/.sqlx/query-fe722f4ac37ede24ffd1dd0cb736895567b750b025e4848c54a8cda7d872c48b.json b/.sqlx/query-fe722f4ac37ede24ffd1dd0cb736895567b750b025e4848c54a8cda7d872c48b.json deleted file mode 100644 index b49b3b0a0..000000000 --- a/.sqlx/query-fe722f4ac37ede24ffd1dd0cb736895567b750b025e4848c54a8cda7d872c48b.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT id FROM crates WHERE name = $1;", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "fe722f4ac37ede24ffd1dd0cb736895567b750b025e4848c54a8cda7d872c48b" -} diff --git a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs index 1be47adcd..d11e61cd6 100644 --- a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs +++ b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs @@ -12,6 +12,7 @@ use docs_rs_database::{ releases::{ add_doc_coverage, finish_build, finish_release, initialize_build, initialize_crate, initialize_release, update_build_with_error, update_crate_data_in_database, + add_build_logs, }, service_config::{ConfigName, get_config, set_config}, }; @@ -739,7 +740,8 @@ impl RustwideBuilder { &metadata, collect_metrics, )?; - target_build_logs.insert(target, target_res.build_log); + let successful = target_res.successful(); + target_build_logs.insert(target, (target_res.build_log, successful)); } let (file_list, new_alg) = @@ -778,13 +780,19 @@ impl RustwideBuilder { let successful = res.successful(); { + let mut build_logs = Vec::new(); + let _span = info_span!("store_build_logs").entered(); let build_log_path = format!("build-logs/{build_id}/{default_target}.txt"); + let successful = res.successful(); self.blocking_storage.store_one(build_log_path, res.build_log)?; - for (target, log) in target_build_logs { + build_logs.push((format!("{default_target}.txt"), successful)); + for (target, (log, successful)) in target_build_logs { let build_log_path = format!("build-logs/{build_id}/{target}.txt"); self.blocking_storage.store_one(build_log_path, log)?; + build_logs.push((format!("{target}.txt"), successful)); } + self.runtime.block_on(add_build_logs(&mut async_conn, build_id, build_logs))?; } if successful { diff --git a/crates/bin/docs_rs_web/src/handlers/build_details.rs b/crates/bin/docs_rs_web/src/handlers/build_details.rs index f8992619e..d5ea8c923 100644 --- a/crates/bin/docs_rs_web/src/handlers/build_details.rs +++ b/crates/bin/docs_rs_web/src/handlers/build_details.rs @@ -36,7 +36,7 @@ pub(crate) struct BuildDetails { struct BuildDetailsPage { metadata: MetaData, build_details: BuildDetails, - all_log_filenames: Vec, + all_log_filenames: Vec<(String, Option)>, current_filename: Option, params: RustdocParams, } @@ -92,10 +92,12 @@ pub(crate) async fn build_details_handler( builds.output, builds.errors, builds.error_kind, - releases.default_target + releases.default_target, + builds_logs.logs FROM builds INNER JOIN releases ON releases.id = builds.rid INNER JOIN crates ON releases.crate_id = crates.id + LEFT OUTER JOIN builds_logs ON builds_logs.build_id = builds.id WHERE builds.id = $1 AND crates.name = $2 AND releases.version = $3"#, id.0, params.name() as _, @@ -127,16 +129,22 @@ pub(crate) async fn build_details_handler( // toFor a long time only for one target, then we started storing the logs for other // targets. In any case, all the logfiles are put into a folder we can just query. let prefix = format!("build-logs/{id}/"); - let all_log_filenames: Vec<_> = storage - .list_prefix(&prefix) // the result from S3 is ordered by key - .await - .map_ok(|path| { - path.strip_prefix(&prefix) - .expect("since we query for the prefix, it has to be always there") - .to_owned() - }) - .try_collect() - .await?; + + // A list of `(path, build_successful)`. + let all_log_filenames: Vec<(String, Option)> = if let Some(logs) = row.logs { + serde_json::from_value::>(logs).unwrap_or_default().into_iter().map(|(path, successful)| (path, Some(successful))).collect() + } else { + storage + .list_prefix(&prefix) // the result from S3 is ordered by key + .await + .map_ok(|path| { + (path.strip_prefix(&prefix) + .expect("since we query for the prefix, it has to be always there") + .to_owned(), None) + }) + .try_collect() + .await? + }; let current_filename = if let Some(filename) = build_params.filename { // if we have a given filename in the URL, we use that one. @@ -145,7 +153,7 @@ pub(crate) async fn build_details_handler( // without a filename in the URL, we try to show the build log // for the default target, if we have one. let wanted_filename = format!("{default_target}.txt"); - if all_log_filenames.contains(&wanted_filename) { + if all_log_filenames.iter().any(|(filename, _)| *filename == wanted_filename) { Some(wanted_filename) } else { None diff --git a/crates/bin/docs_rs_web/src/handlers/builds.rs b/crates/bin/docs_rs_web/src/handlers/builds.rs index 7700425e8..a9d8b677a 100644 --- a/crates/bin/docs_rs_web/src/handlers/builds.rs +++ b/crates/bin/docs_rs_web/src/handlers/builds.rs @@ -35,6 +35,23 @@ pub(crate) struct Build { build_duration: Option, memory_peak: Option, errors: Option, + logs: Option, +} + +impl Build { + pub(crate) fn build_status(&self) -> BuildStatus { + // FIXME: Postgresql can directly interact with JSON fields, should we try to do this + // in the query instead? + if let Some(logs) = &self.logs + && let logs = serde_json::from_value::>(logs.clone()).expect("builds_logs table got updated") + && self.build_status.is_success() + && logs.iter().any(|(_, success)| !success) + { + BuildStatus::PartialFailure + } else { + self.build_status + } + } } #[derive(Template)] @@ -191,6 +208,7 @@ async fn get_builds( builds.rustc_version, builds.docsrs_version, builds.build_status as "build_status: BuildStatus", + builds_logs.logs, COALESCE(builds.build_finished, builds.build_started) as build_time, CASE WHEN builds.build_started IS NULL @@ -211,6 +229,7 @@ async fn get_builds( FROM builds INNER JOIN releases ON releases.id = builds.rid INNER JOIN crates ON releases.crate_id = crates.id + LEFT OUTER JOIN builds_logs ON builds_logs.build_id = builds.id WHERE crates.name = $1 AND releases.version = $2 diff --git a/crates/bin/docs_rs_web/templates/crate/build_details.html b/crates/bin/docs_rs_web/templates/crate/build_details.html index 1d3165834..fab29462d 100644 --- a/crates/bin/docs_rs_web/templates/crate/build_details.html +++ b/crates/bin/docs_rs_web/templates/crate/build_details.html @@ -31,11 +31,20 @@

Build #{{ build_details.id }} {%- endif -%}