diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index fbca413..2e2134a 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -26,6 +26,9 @@ jobs: with: dotnet-version: 10.0.x + - name: Build release binaries + run: dotnet build ModularityKit.Mutator.slnx -c Release + - name: Install DocFX run: dotnet tool update -g docfx diff --git a/Docs/Home.md b/Docs/Home.md new file mode 100644 index 0000000..ab26e6c --- /dev/null +++ b/Docs/Home.md @@ -0,0 +1,37 @@ +![ModularityKit.Mutator](../assets/brand/mutator-landing-banner.png) + +# ModularityKit.Mutator + +ModularityKit.Mutator is a .NET mutation runtime with governance, request lifecycle, approval flow, +and Redis-backed storage. + +## Packages + +| Package | What it covers | +| --- | --- | +| [`ModularityKit.Mutator`](../src/README.md) | mutation runtime, policies, execution, audit, history | +| [`ModularityKit.Mutator.Governance`](../src/Governance/README.md) | request lifecycle, approvals, resolution, governed execution | +| [`ModularityKit.Mutator.Governance.Redis`](../src/Redis/README.md) | Redis-backed storage and query provider | + +## Explore + +| Area | What to read | +| --- | --- | +| API reference | [`Docs/API/Reference.md`](API/Reference.md) | +| Core concepts | [`Docs/Core-Concepts.md`](Core-Concepts.md) | +| Execution model | [`Docs/ExecutionModel.md`](ExecutionModel.md) | +| Roadmap | [`Docs/Roadmap.md`](Roadmap.md) | + +## What this site contains + +- package overviews for the runtime and governance extensions +- conceptual docs for the mutation model and request flow +- generated API reference from XML docs + +## Build locally + +```bash +dotnet tool update -g docfx +dotnet build ModularityKit.Mutator.slnx -c Release +docfx docfx.json +``` diff --git a/README.md b/README.md index 780453e..e75896e 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Build the DocFX site locally with: ```bash dotnet tool update -g docfx +dotnet build ModularityKit.Mutator.slnx -c Release docfx docfx.json ``` diff --git a/docfx.json b/docfx.json index e1d23bd..392c87a 100644 --- a/docfx.json +++ b/docfx.json @@ -4,21 +4,13 @@ "src": [ { "files": [ - "src/ModularityKit.Mutator.csproj", - "src/ModularityKit.Mutator.Governance.csproj", - "src/Redis/ModularityKit.Mutator.Governance.Redis.csproj" - ], - "exclude": [ - "**/bin/**", - "**/obj/**" + "src/bin/Release/net10.0/ModularityKit.Mutator.dll", + "src/bin/Release/net10.0/ModularityKit.Mutator.Governance.dll", + "src/Redis/bin/Release/net10.0/ModularityKit.Mutator.Governance.Redis.dll" ] } ], - "dest": "obj/api", - "properties": { - "Configuration": "Release", - "TargetFramework": "net10.0" - } + "dest": "obj/api" } ], "build": { @@ -59,11 +51,15 @@ "dest": "_site", "globalMetadata": { "_appTitle": "ModularityKit.Mutator", + "_appName": "ModularityKit.Mutator", + "_appLogoPath": "assets/brand/logo.png", + "_appLogoUrl": "Docs/Home.html", "_appFooter": "ModularityKit.Mutator documentation", "_enableSearch": true }, "template": [ - "default" + "default", + "templates/modularitykit" ] } } diff --git a/templates/modularitykit/layout/_master.tmpl b/templates/modularitykit/layout/_master.tmpl new file mode 100644 index 0000000..3652e40 --- /dev/null +++ b/templates/modularitykit/layout/_master.tmpl @@ -0,0 +1,64 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} +{{!include(/^styles/.*/)}} +{{!include(/^fonts/.*/)}} +{{!include(favicon.ico)}} +{{!include(logo.svg)}} +{{!include(search-stopwords.json)}} + + + + {{>partials/head}} + {{^redirect_url}} + + Skip to content +
+
+ {{_appTitle}} + Mutation runtime, governance, and generated API reference. +
+
+
+
+ {{^_disableNavbar}} + {{>partials/navbar}} + {{/_disableNavbar}} + {{^_disableBreadcrumb}} + {{>partials/breadcrumb}} + {{/_disableBreadcrumb}} +
+ {{#_enableSearch}} +
+ {{>partials/searchResults}} +
+ {{/_enableSearch}} +
+ {{^_disableToc}} + {{>partials/toc}} +
+ {{/_disableToc}} + {{#_disableToc}} +
+ {{/_disableToc}} + {{#_disableAffix}} +
+ {{/_disableAffix}} + {{^_disableAffix}} +
+ {{/_disableAffix}} +
+ {{!body}} +
+
+ {{^_disableAffix}} + {{>partials/affix}} + {{/_disableAffix}} +
+
+ {{^_disableFooter}} + {{>partials/footer}} + {{/_disableFooter}} +
+ {{>partials/scripts}} + + {{/redirect_url}} + diff --git a/templates/modularitykit/partials/footer.tmpl.partial b/templates/modularitykit/partials/footer.tmpl.partial new file mode 100644 index 0000000..0a99398 --- /dev/null +++ b/templates/modularitykit/partials/footer.tmpl.partial @@ -0,0 +1,14 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +
+
+
+
+ ModularityKit.Mutator + Generated from XML docs and published from main. + + {{__global.backToTop}} + +
+
+
diff --git a/templates/modularitykit/partials/head.tmpl.partial b/templates/modularitykit/partials/head.tmpl.partial new file mode 100644 index 0000000..9bef6c6 --- /dev/null +++ b/templates/modularitykit/partials/head.tmpl.partial @@ -0,0 +1,35 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + + + + {{#_googleAnalyticsTagId}} + + + {{/_googleAnalyticsTagId}} + {{#redirect_url}} + + {{/redirect_url}} + {{^redirect_url}} + + + {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} + + + {{#_description}}{{/_description}} + {{#description}}{{/description}} + + + + + + + {{#_noindex}}{{/_noindex}} + {{#_enableSearch}}{{/_enableSearch}} + {{#_enableNewTab}}{{/_enableNewTab}} + {{/redirect_url}} + diff --git a/templates/modularitykit/partials/logo.tmpl.partial b/templates/modularitykit/partials/logo.tmpl.partial new file mode 100644 index 0000000..de85075 --- /dev/null +++ b/templates/modularitykit/partials/logo.tmpl.partial @@ -0,0 +1,9 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + + + {{_appName}} + + {{_appTitle}} + Docs + + diff --git a/templates/modularitykit/partials/navbar.tmpl.partial b/templates/modularitykit/partials/navbar.tmpl.partial new file mode 100644 index 0000000..713f0f6 --- /dev/null +++ b/templates/modularitykit/partials/navbar.tmpl.partial @@ -0,0 +1,29 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +
+
+
+ + {{>partials/logo}} +
+
+
    +
  • Home
  • +
  • Core
  • +
  • Governance
  • +
  • Redis
  • +
  • API
  • +
+
+
+ +
+
+
+
+
diff --git a/templates/modularitykit/styles/main.css b/templates/modularitykit/styles/main.css new file mode 100644 index 0000000..f9d4820 --- /dev/null +++ b/templates/modularitykit/styles/main.css @@ -0,0 +1,190 @@ +:root { + --site-bg: #f6f7f9; + --site-surface: #ffffff; + --site-border: #d9dee7; + --site-text: #122033; + --site-muted: #5b6778; + --site-accent: #143a5a; + --site-accent-strong: #0d2940; + --site-accent-soft: #e8eef5; +} + +html, +body { + background: var(--site-bg); + color: var(--site-text); +} + +a { + color: var(--site-accent); +} + +a:hover, +a:focus { + color: var(--site-accent-strong); +} + +.skip-link { + position: absolute; + left: -9999px; + top: 0; + z-index: 1000; + padding: 0.75rem 1rem; + background: var(--site-accent-strong); + color: #fff; +} + +.skip-link:focus { + left: 1rem; + top: 1rem; +} + +.site-topbar { + background: linear-gradient(90deg, var(--site-accent-strong), var(--site-accent)); + color: #fff; + border-bottom: 1px solid rgba(255, 255, 255, 0.12); +} + +.site-topbar__inner { + display: flex; + align-items: center; + gap: 1rem; + min-height: 2.75rem; +} + +.site-topbar__brand { + font-weight: 700; + letter-spacing: 0; +} + +.site-topbar__text { + color: rgba(255, 255, 255, 0.82); +} + +.site-frame { + background: var(--site-bg); +} + +.site-navbar { + background: var(--site-surface); + border: 0; + border-bottom: 1px solid var(--site-border); + border-radius: 0; + margin-bottom: 0; +} + +.site-navbar .container { + display: flex; + align-items: center; + gap: 1rem; +} + +.site-navbar__header { + flex: 0 0 auto; +} + +.site-nav { + margin-left: 1rem; +} + +.site-nav > li > a { + color: var(--site-muted); + font-weight: 600; +} + +.site-nav > li > a:hover, +.site-nav > li > a:focus { + color: var(--site-accent-strong); + background: var(--site-accent-soft); +} + +.site-search { + margin-right: 0; +} + +.site-brand { + display: flex; + align-items: center; + gap: 0.75rem; + height: auto; + padding: 0.75rem 0; +} + +.site-brand__logo { + width: 2.25rem; + height: 2.25rem; + object-fit: contain; +} + +.site-brand__copy { + display: flex; + flex-direction: column; + line-height: 1.05; +} + +.site-brand__title { + color: var(--site-text); + font-weight: 700; +} + +.site-brand__subtitle { + color: var(--site-muted); + font-size: 0.8rem; +} + +.body-content { + padding-top: 1.25rem; +} + +.content { + background: var(--site-surface); + border: 1px solid var(--site-border); + border-radius: 6px; + padding: 1.5rem; + box-shadow: 0 1px 2px rgba(18, 32, 51, 0.04); +} + +.site-footer .footer { + background: var(--site-surface); + border-top: 1px solid var(--site-border); +} + +.site-footer__inner { + display: flex; + align-items: center; + gap: 1rem; + min-height: 4rem; +} + +.site-footer__brand { + font-weight: 700; +} + +.site-footer__text { + color: var(--site-muted); +} + +@media (max-width: 767px) { + .site-topbar__inner, + .site-footer__inner, + .site-navbar .container { + flex-direction: column; + align-items: flex-start; + } + + .site-search { + width: 100%; + } + + .site-search .form-control { + width: 100%; + } + + .site-nav { + margin-left: 0; + } + + .site-brand { + padding-bottom: 0.25rem; + } +} diff --git a/toc.yml b/toc.yml index 123148f..350c008 100644 --- a/toc.yml +++ b/toc.yml @@ -1,5 +1,5 @@ - name: Home - href: README.md + href: Docs/Home.md - name: Packages items: - name: ModularityKit.Mutator