From 2354e5573658dd8f379f5194c131717dc84b4d48 Mon Sep 17 00:00:00 2001 From: southerntofu Date: Wed, 30 Sep 2020 15:19:16 -0400 Subject: [PATCH] Some styling, some content --- content/_index.md | 10 ++++++++++ content/forgebuild.fr.md | 2 +- content/multi-CI.png | Bin 0 -> 20516 bytes content/solo-CI.png | Bin 0 -> 16813 bytes content/status.fr.md | 4 +++- content/status.md | 4 +++- sass/custom.scss | 7 +++++++ templates/project.html | 7 ++++++- templates/status.html | 10 +++++++++- templates/tests.html | 4 ++-- 10 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 content/multi-CI.png create mode 100644 content/solo-CI.png diff --git a/content/_index.md b/content/_index.md index fb00d2b..ae86f62 100644 --- a/content/_index.md +++ b/content/_index.md @@ -7,6 +7,16 @@ The forge suite is a collection of tools to automate tasks by tracking updates o forgehook can be hooked to forgebuild to trigger tasks automatically when updates are received, but both tools can be useful on their own and integrate with your own tooling. If either tool gets in your way instead of easing your life, this is considered a bug and should be addressed. +# Usecases + +## Multi-user CI/CD + +![Diagram showing the forge sending a webhook to the endpoint, which validates it then passes the information to forgehook, which notifies subscribers, triggering forgebuild tasks](multi-CI.png) + +## Solo, unprivileged CI/CD + +![Diagram showing the forge sending a webhook to the endpoint, which validates it then passes the information to forgebuild, triggering tasks](solo-CI.png) + # Motivations This project was started because popular CI/CD distributions (such as Drone CI or Gitlab CI) are very convoluted systems, deeply tied to an ecosystem. The forge suite aims to be more portable and to easily integrate into your own ecosystem. diff --git a/content/forgebuild.fr.md b/content/forgebuild.fr.md index 1050888..a0443ff 120000 --- a/content/forgebuild.fr.md +++ b/content/forgebuild.fr.md @@ -1 +1 @@ -../submodules/build/README.md \ No newline at end of file +../submodules/build/README.fr.md \ No newline at end of file diff --git a/content/multi-CI.png b/content/multi-CI.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2b4fc7125e05f6775aecf8be316915524cdda3 GIT binary patch literal 20516 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 GoBtQMHil{d literal 0 HcmV?d00001 diff --git a/content/status.fr.md b/content/status.fr.md index 5bbef3f..5ecaa80 100644 --- a/content/status.fr.md +++ b/content/status.fr.md @@ -1,4 +1,6 @@ +++ -title="Statut des tests" +title="Résultats des tests" template="status.html" +++ + +Ici tu trouveras les derniers résultats des tests pour la suite forge. Ils sont directement lancés sur le serveur après chaque commit. diff --git a/content/status.md b/content/status.md index 3aa2dd7..4db6b13 100644 --- a/content/status.md +++ b/content/status.md @@ -1,4 +1,6 @@ +++ -title="Tests status" +title="Tests results" template="status.html" +++ + +Here you can find the latest test results for the forge suite. They are run directly on this server, on every new commit. diff --git a/sass/custom.scss b/sass/custom.scss index f89eee0..d9606c0 100644 --- a/sass/custom.scss +++ b/sass/custom.scss @@ -19,3 +19,10 @@ td, th { .testrun > ul { list-style-type: none; } + +.widget-tests { + > h2 { + text-align: center; + text-decoration: underline; + } +} diff --git a/templates/project.html b/templates/project.html index 049ec78..4cbd880 100644 --- a/templates/project.html +++ b/templates/project.html @@ -3,9 +3,14 @@ {{ super() }} {% if page.extra.pipeline %} {% if page.extra.pipeline in config.extra.tests.pipelines %} +
+ {% else %} -

No such pipeline ({{ page.extra.pipeline }}) defined in config.extra.pipelines

+

No such pipeline ({{ page.extra.pipeline }}) defined in config.extra.pipelines

{% endif %} + {% else %} +

Test pipeline for project not defined in frontmatter (page.extra.pipeline).

{% endif %} {% endblock %} diff --git a/templates/status.html b/templates/status.html index 62c2225..21cb606 100644 --- a/templates/status.html +++ b/templates/status.html @@ -1,7 +1,15 @@ -{% extends "index.html" %}{% import "tests.html" as tests %} +{% extends "page.html" %}{% import "tests.html" as tests %} {% block title %}{{ page.title }}{% endblock title %} {% block main %} +{{ super() }} +{% if config.extra.tests.pipelines %} + +{% else %} +

No test pipeline configured in config.extra.tests.pipelines

+{% endif %} {% endblock main %} diff --git a/templates/tests.html b/templates/tests.html index 53d23b6..2d965a0 100644 --- a/templates/tests.html +++ b/templates/tests.html @@ -1,5 +1,5 @@ {% macro pipeline(directory, name) %} -

{{ name }}

+

{{ name }}

{% set latest = [] %} {% set data = [] %} {% for impl in config.extra.tests.pipelines[name].impl %} @@ -36,7 +36,7 @@ {% for impl in config.extra.tests.pipelines[name].impl %} {% set suite_index = loop.index0 %} -

{{ impl.name }}

+

{{ impl.name }}

{# This is a hack because we can't reverse a map (only arrays) #} {% set_global runs = [] %} {% for key, val in data[suite_index] %}{% set_global runs = runs | concat(with=key) %}{% endfor %}