diff --git a/.sqlx/query-b43ea10c6fd75dfe251c3dc3001649a13b9893722b23c2bbcec1f015e57b5613.json b/.sqlx/query-b43ea10c6fd75dfe251c3dc3001649a13b9893722b23c2bbcec1f015e57b5613.json new file mode 100644 index 0000000..2e3fd85 --- /dev/null +++ b/.sqlx/query-b43ea10c6fd75dfe251c3dc3001649a13b9893722b23c2bbcec1f015e57b5613.json @@ -0,0 +1,26 @@ +{ + "db_name": "SQLite", + "query": "SELECT id, start AS \"start: time::OffsetDateTime\" FROM runs WHERE hash = ? ", + "describe": { + "columns": [ + { + "name": "id", + "ordinal": 0, + "type_info": "Text" + }, + { + "name": "start: time::OffsetDateTime", + "ordinal": 1, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false + ] + }, + "hash": "b43ea10c6fd75dfe251c3dc3001649a13b9893722b23c2bbcec1f015e57b5613" +} diff --git a/src/server/web.rs b/src/server/web.rs index 196b510..71ceffe 100644 --- a/src/server/web.rs +++ b/src/server/web.rs @@ -1,7 +1,6 @@ mod admin; mod api; mod base; -mod commit; mod index; mod link; mod pages; @@ -21,8 +20,8 @@ use self::{ get_api_worker_bench_repo_by_hash_tree_tar_gz, get_api_worker_repo_by_hash_tree_tar_gz, post_api_worker_status, }, - commit::get_commit_by_hash, index::get_index, + pages::commit::get_commit_by_hash, queue::{get_queue, get_queue_inner}, worker::get_worker_by_name, }; diff --git a/src/server/web/admin/queue.rs b/src/server/web/admin/queue.rs index 5de92a3..e0b18f1 100644 --- a/src/server/web/admin/queue.rs +++ b/src/server/web/admin/queue.rs @@ -7,7 +7,14 @@ use serde::Deserialize; use sqlx::SqlitePool; use time::OffsetDateTime; -use crate::{config::Config, server::web::paths::PathAdminQueueAdd, somehow}; +use crate::{ + config::Config, + server::web::{ + base::{Base, Tab}, + paths::{PathAdminQueueAdd, PathQueue}, + }, + somehow, +}; #[derive(Deserialize)] pub struct FormAdminQueueAdd { @@ -36,6 +43,6 @@ pub async fn post_admin_queue_add( .execute(&db) .await?; - // TODO Replace with typed link - Ok(Redirect::to(&format!("{}queue/", config.web_base))) + let link = Base::new(config, Tab::None).link(PathQueue {}); + Ok(Redirect::to(&format!("{link}"))) } diff --git a/src/server/web/link.rs b/src/server/web/link.rs index 12eed95..b69cd2c 100644 --- a/src/server/web/link.rs +++ b/src/server/web/link.rs @@ -1,4 +1,5 @@ use askama::Template; +use time::OffsetDateTime; use crate::server::util; @@ -51,6 +52,25 @@ impl LinkRunShort { } } +#[derive(Template)] +#[template( + ext = "html", + source = "Run from {{ date }}" +)] +pub struct LinkRunDate { + link: Link, + date: String, // TODO base.date(...)? +} + +impl LinkRunDate { + pub fn new(base: &Base, id: String, start: OffsetDateTime) -> Self { + Self { + link: base.link(PathRunById { id }), + date: util::format_time(start), + } + } +} + #[derive(Template)] #[template(ext = "html", source = "{{ name }}")] pub struct LinkWorker { diff --git a/src/server/web/pages.rs b/src/server/web/pages.rs index e69de29..17e223d 100644 --- a/src/server/web/pages.rs +++ b/src/server/web/pages.rs @@ -0,0 +1 @@ +pub mod commit; diff --git a/src/server/web/commit.rs b/src/server/web/pages/commit.rs similarity index 78% rename from src/server/web/commit.rs rename to src/server/web/pages/commit.rs index 942358b..22134ac 100644 --- a/src/server/web/commit.rs +++ b/src/server/web/pages/commit.rs @@ -7,19 +7,26 @@ use axum::{ use futures::TryStreamExt; use sqlx::SqlitePool; -use crate::{config::Config, server::util, somehow}; - -use super::{ - base::{Base, Link, Tab}, - link::LinkCommit, - paths::{PathAdminQueueAdd, PathCommitByHash}, +use crate::{ + config::Config, + server::{ + util, + web::{ + base::{Base, Link, Tab}, + link::{LinkCommit, LinkRunDate}, + paths::{PathAdminQueueAdd, PathCommitByHash}, + }, + }, + somehow, }; #[derive(Template)] -#[template(path = "commit.html")] -struct CommitTemplate { +#[template(path = "pages/commit.html")] +struct Page { link_admin_queue_add: Link, base: Base, + + summary: String, hash: String, author: String, author_date: String, @@ -27,9 +34,9 @@ struct CommitTemplate { commit_date: String, parents: Vec, children: Vec, - summary: String, message: String, reachable: i64, + runs: Vec, } pub async fn get_commit_by_hash( @@ -88,9 +95,25 @@ pub async fn get_commit_by_hash( .try_collect::>() .await?; - Ok(CommitTemplate { + let runs = sqlx::query!( + "\ + SELECT \ + id, \ + start AS \"start: time::OffsetDateTime\" \ + FROM runs WHERE hash = ? \ + ", + path.hash + ) + .fetch(&db) + .map_ok(|r| LinkRunDate::new(&base, r.id, r.start)) + .try_collect::>() + .await?; + + Ok(Page { link_admin_queue_add: base.link(PathAdminQueueAdd {}), base, + + summary: util::format_commit_summary(&commit.message), hash: commit.hash, author: commit.author, author_date: util::format_time(commit.author_date), @@ -98,9 +121,9 @@ pub async fn get_commit_by_hash( commit_date: util::format_time(commit.committer_date), parents, children, - summary: util::format_commit_summary(&commit.message), message: commit.message.trim_end().to_string(), reachable: commit.reachable, + runs, } .into_response()) } diff --git a/templates/commit.html b/templates/pages/commit.html similarity index 71% rename from templates/commit.html rename to templates/pages/commit.html index f59d943..ec83c3d 100644 --- a/templates/commit.html +++ b/templates/pages/commit.html @@ -4,9 +4,11 @@ {% block title %}{{ summary }}{% endblock %} {% block body %} +

Commit

-
- commit {{ hash }} + +
+ commit {{ hash }}
Author:
{{ author }}
@@ -34,9 +36,23 @@ title="{% call util::commit_title(reachable) %}">{{ message }}
+

Runs

+ +{% if runs.is_empty() %} +There aren't any runs yet. +{% else %} +
    + {% for run in runs %} +
  • {{ run|safe }}
  • + {% endfor %} +
+{% endif %} +
- + with a of + .
+ {% endblock %}