SHA256
feat: Change license from MIT to Apache-2.0
- Added LICENSE.md file with Apache License 2.0 text. - Created NOTICE file for attribution of third-party components. - Updated README.md to reflect the new license and included details about the Apache-2.0 license. - Documented the license change in the diary entry for July 12, 2026. - Updated installation instructions in getting-started.md to reflect per-user installation. - Added reusable license header to all source files. - Updated various documentation files to mention the new Apache-2.0 license. - Changed legal mentions in example content to reflect the new license.
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@
|
||||
Quelle der Wahrheit für Agenten-Kollaboration an diesem Tool.
|
||||
|
||||
## Was das Tool ist
|
||||
Eigenständiger Static-Site-Generator (C#/.NET 10, Assembly `webstatic`), MIT.
|
||||
Eigenständiger Static-Site-Generator (C#/.NET 10, Assembly `webstatic`), Apache-2.0.
|
||||
Kein Python. Suchindex via `npx pagefind` (optional). Früher Submodul der
|
||||
GCBoK-Website (`www/build`), jetzt unter `/opt/GitCover/webstatic`.
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# AGENTS — GitCover.WebStaticBuilder
|
||||
|
||||
Guidelines für KI-Agenten, die an diesem Tool (nicht an der GCBoK-Website) arbeiten.
|
||||
Guidelines für KI-Agenten, die an diesem Tool (nicht an einer der GCC/GCBoK-Websites) arbeiten.
|
||||
|
||||
## Wesen des Projekts
|
||||
- Eigenständiger **Static-Site-Generator** (C# / .NET 10, kompilierte Konsolen-App, Assembly `webstatic`).
|
||||
- Früher: Submodul `OSS/build_webstatic` innerhalb der GCBoK-Website (`www/build/`).
|
||||
Seit 2026-07 eigenständiges OSS-Tool unter `/opt/GitCover/webstatic` (KMU-fähig).
|
||||
Seit 2026-07 eigenständiges OSS-Tool (per-user-Install unter `~/.local/share/GitCover/webstatic`, optionale System-Installation unter `/opt/GitCover/webstatic`; KMU-fähig).
|
||||
- **Kein Python.** Einzige externe Build-Abhängigkeit: `npx pagefind` (Suchindex, optional).
|
||||
- Lizenz: **MIT** (`LICENSE`).
|
||||
- Lizenz: **Apache-2.0** (`LICENSE.md`, `NOTICE`) — explizite Patentlizenz §3 + Retorsionsklausel.
|
||||
|
||||
## Build & Verify (kanonisch)
|
||||
```bash
|
||||
@@ -24,9 +24,26 @@ dotnet bin/Release/net10.0/webstatic.dll serve --port 8000 # lokale V
|
||||
- **Pfade generisch:** nie hartkodiert auf `www/` — alles über `Directories` (aus `BuildConfig.Paths` relativ zum Site-Root).
|
||||
- **i18n:** UI-Texte über `{{ i18n.<bereich>.<key> }}` in Templates; Daten in `i18n.json`; Substitution via `I18n.cs` (Fallback Englisch).
|
||||
|
||||
### Author & Urheberschaft (Axel Druschel)
|
||||
- **Alle Development-Arbeit wird von Axel Druschel ausgeführt** — bei jeder Änderung ist er
|
||||
als **Author** zu benennen (Entwickler-Attribution in Artefakten).
|
||||
- **Git-Identität (commit author):** immer `gc-dev-afjd` / `axel.druschel@gitcover.de`
|
||||
(Handle, **nicht** der Klarname). Also:
|
||||
`git -c user.name=gc-dev-afjd -c user.email=axel.druschel@gitcover.de commit`.
|
||||
Im Repo vorkonfiguriert via `git config user.name/user.email`.
|
||||
- **Quelldatei-Header `Author:`** nennt den **Klarnamen** `Axel Druschel` (Attribution
|
||||
des Urhebers); das steht unabhängig von der Git-Handle-Identität.
|
||||
- **Apache-2.0-konform:** Die `Copyright`-Zeile in `LICENSE.md`/`NOTICE` und den
|
||||
Quelldatei-Headern nennt den **Rechteinhaber** `GitCover Commons gUG (haftungsbeschränkt)` (die
|
||||
juristische Person). `Author: Axel Druschel` benennt zusätzlich den Urheber/Entwickler —
|
||||
das widerspricht Apache-2.0 nicht (die Lizenz regelt nur die Rechtegewährung
|
||||
durch den Rechteinhaber, nicht die Urheberbenennung).
|
||||
- Quelldatei-Header (kanonisch in `docs/license-header.md`) enthalten daher:
|
||||
`Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)` + `Author: Axel Druschel` + `SPDX-License-Identifier: Apache-2.0`.
|
||||
|
||||
## Verzeichnisstruktur
|
||||
`plans/` (Pläne), `docs/` (Anleitungen), `diary/` (Dev-Tagebuch), `src/` (Code),
|
||||
`tests/` (Tests), `webstatic.example/` (KMU-Vorlage), `install.sh`, `LICENSE`.
|
||||
`tests/` (Tests), `webstatic.example/` (KMU-Vorlage), `install.sh`, `LICENSE.md`.
|
||||
|
||||
## Guardrails
|
||||
- Umlaute in Prosa verwenden (`ä ö ü ß`), nicht `ae/oe/ue`.
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
<AssemblyName>webstatic</AssemblyName>
|
||||
<Version>1.0.0</Version>
|
||||
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
|
||||
<Description>GitCover.WebStaticBuilder — Static site generator for multilingual, SEO-friendly, compliance-friendly websites (OSS, MIT).</Description>
|
||||
<Description>GitCover.WebStaticBuilder — Static site generator for multilingual, SEO-friendly, compliance-friendly websites (OSS, Apache-2.0).</Description>
|
||||
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 GitCover Commons gUG
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## Third-Party Dependencies
|
||||
|
||||
This software uses the following third-party NuGet packages. Their license
|
||||
terms apply to the respective portions of the distributed binaries. The source
|
||||
code of GitCover.WebStaticBuilder itself remains under the MIT license above.
|
||||
|
||||
### Markdig
|
||||
|
||||
- **Package:** Markdig (https://www.nuget.org/packages/Markdig)
|
||||
- **Purpose:** Markdown → HTML rendering (CommonMark compliant, extensible)
|
||||
- **License:** BSD-2-Clause (https://github.com/xoofx/markdig/blob/master/license.txt)
|
||||
- **Copyright:** © Alexandre Mutel (xoofx)
|
||||
- **Repository:** https://github.com/xoofx/markdig
|
||||
|
||||
> Redistribution and use in source and binary forms, with or without
|
||||
> modification, are permitted provided that the following conditions are met:
|
||||
> 1. Redistributions of source code must retain the above copyright notice,
|
||||
> this list of conditions and the following disclaimer.
|
||||
> 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
> this list of conditions and the following disclaimer in the documentation
|
||||
> and/or other materials provided with the distribution.
|
||||
>
|
||||
> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
> ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
> LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
> CONSEQUENTIAL DAMAGES HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
> WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
> OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
> ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
### YamlDotNet
|
||||
|
||||
- **Package:** YamlDotNet (https://www.nuget.org/packages/YamlDotNet)
|
||||
- **Purpose:** YAML frontmatter parsing for Markdown content files
|
||||
- **License:** MIT (https://github.com/aaubry/YamlDotNet/blob/master/LICENSE)
|
||||
- **Copyright:** © Antoine Aubry and contributors
|
||||
- **Repository:** https://github.com/aaubry/YamlDotNet
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
### Summary
|
||||
|
||||
| Package | License | Compatible with MIT? |
|
||||
|-------------|---------------|----------------------|
|
||||
| Markdig | BSD-2-Clause | Yes (permissive) |
|
||||
| YamlDotNet | MIT | Yes (same license) |
|
||||
|
||||
Both dependencies are permissive licenses compatible with MIT. No copyleft
|
||||
(GPL/AGPL/LGPL) components are used.
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or Derivative
|
||||
Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and do
|
||||
not modify the License. You may add Your own attribution notices
|
||||
within Derivative Works that You distribute, alongside or as an
|
||||
addendum to the NOTICE text from the Work, provided that such
|
||||
additional attribution notices cannot be construed as modifying
|
||||
the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,19 @@
|
||||
GitCover.WebStaticBuilder
|
||||
Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
|
||||
This product includes software developed by GitCover Commons gUG (haftungsbeschränkt)
|
||||
(https://gitcover.org).
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
use this product except in compliance with the License. A copy of the
|
||||
License is provided in the file LICENSE.
|
||||
|
||||
Third-party components distributed with this product:
|
||||
|
||||
- Markdig (BSD-2-Clause)
|
||||
https://github.com/xoofx/markdig
|
||||
- YamlDotNet (MIT)
|
||||
https://github.com/aaubry/YamlDotNet
|
||||
|
||||
The above components retain their respective licenses; their license texts
|
||||
and notices are reproduced in the documentation and source distributions.
|
||||
@@ -10,7 +10,7 @@ früheren C#-Builderskript der GCBoK-Website durch ein generisches, für KMU
|
||||
einsetzbares Werkzeug.
|
||||
|
||||
- **Sprache:** C# / .NET 10 (kompilierte Konsole)
|
||||
- **Lizenz:** MIT (siehe `LICENSE` für Third-Party-Dependency-Lizenzen)
|
||||
- **Lizenz:** Apache-2.0 (siehe `LICENSE.md`; enthält explizite Patentlizenz §3 + Retorsionsklausel, `NOTICE` für Dritt-Komponenten)
|
||||
- **Kein Python:** einzige externe Abhängigkeit ist `npx pagefind` (Suchindex, optional)
|
||||
- **Funktionen:** Markdown + YAML-Frontmatter → statisches HTML pro Sprache,
|
||||
Navigation, SEO-Kopf (OpenGraph/JSON-LD), `sitemap.xml`, `robots.txt`,
|
||||
@@ -141,5 +141,6 @@ src/ C#-Quellcode (GitCover.WebStaticBuilder)
|
||||
tests/ (künftig) Unit/Integrationstests
|
||||
webstatic.example/ Vorlage-Site für KMU
|
||||
install.sh KMU-Installation
|
||||
LICENSE MIT + Third-Party-Dependency-Lizenzen
|
||||
LICENSE Apache-2.0 (enthält Patentlizenz §3 + Retorsionsklausel)
|
||||
NOTICE Dritt-Komponenten-Attribution (Markdig BSD-2, YamlDotNet MIT)
|
||||
```
|
||||
|
||||
+55
-1
@@ -11,5 +11,59 @@
|
||||
- MT-Helfer: `TranslationService` (Azure/DeepL via REST, kein Extra-NuGet), `translate --check/--draft`.
|
||||
- Pagefind im Post-Build, per Config (`pagefind`) abschaltbar.
|
||||
- `init`/`serve` (HttpListener) Subcommands; `webstatic.example/` KMU-Vorlage.
|
||||
- `install.sh` (→ `/opt/GitCover/webstatic`), `LICENSE` (MIT), AGENTS/MEMORY/SKILLS/.hermes, plans/00.
|
||||
- `install.sh` (→ `/opt/GitCover/webstatic`), `LICENSE.md` (MIT), AGENTS/MEMORY/SKILLS/.hermes, plans/00.
|
||||
- Verifiziert: `dotnet build -c Release` ✓; Beispiel baut de/en/vi mit i18n, Pagefind, Mermaid ✓.
|
||||
|
||||
## 2026-07-12 — Praxiseinsatz GCC + Tool-Erkenntnisse
|
||||
|
||||
### Realer Einsatz: gcc.gitcover.org auf webstatic migriert
|
||||
- Zweite GitCover-Site (nach GCBoK) erfolgreich mit der `webstatic`-CLI gebaut —
|
||||
validiert den Tool-Workflow (Phase 3/4) unter realen Bedingungen.
|
||||
- Migration: Python-Build (`build/`, `build-env/`, `*.py`) vollständig entfernt;
|
||||
Multi-Page-Modell, `*.de.md` autoritativ (DE-Quelle explizit suffixiert), Banner
|
||||
(`00-banner.*.md`) 1:1 aus gcbok übernommen, Eyebrow + Titel als
|
||||
`<div class="page-header">` (`.eyebrow--green` + `<h1 class="page-title">`) auf
|
||||
**allen** Content-Seiten vorangestellt.
|
||||
- `pagefind: false` in `webstatic.json` → Such-Toggle im Chrome ist dann
|
||||
nicht funktional (bewusst, da GCC keinen Volltextindex braucht).
|
||||
|
||||
### Wichtige Tool-Erkenntnis (für docs/plans)
|
||||
- webstatic stellt KEIN `{{ title }}`/`{{ eyebrow }}`-**Seitentoken** bereit.
|
||||
Frontmatter-`title`/`eyebrow` speisen nur `<title>`/Meta (SEO) und die
|
||||
Navigations-Labels. Jede Seite muss Eyebrow + Titel **selbst im Body** tragen
|
||||
(wie gcbok es in der Hero-/`01-`-Datei tut) — sonst fehlen die Überschriften
|
||||
auf der generierten Seite. Das ist Design-Intent, kein Bug.
|
||||
|
||||
### Installation: per-user ist die aktive
|
||||
- Aktive Installation ist die **per-user Betatester-Install** unter
|
||||
`~/.local/share/GitCover/webstatic` (Launcher `~/.local/bin/webstatic`),
|
||||
**nicht** `/opt/GitCover/webstatic` (existiert nicht).
|
||||
- Stand lokal `7065c07`, Remote `89f720a` → Update via `webstatic update` verfügbar.
|
||||
- `plan 01` Fix 1 („veraltete `/opt`-Binary") ist damit gegenstandslos; die
|
||||
übrigen Fixes 2–7 sind bereits im Code umgesetzt (Help/Version vor Build,
|
||||
Content-Check, Artefakte aus Git, Default-Envs = `development`/`staging`/`deploy`,
|
||||
`tests/README.md` vorhanden).
|
||||
|
||||
### Status
|
||||
- Version `1.0.0.0`. Subcommands vorhanden: `build`, `serve`, `init`, `translate`, `status`.
|
||||
- Environments im Code: `development` (foldet `--work`/`--preview`/`--review`),
|
||||
`staging`, `deploy`. `plan 00` §6/§7 noch mit `work`/`review` veraltet — korrigiert.
|
||||
|
||||
### 2026-07-12 (später) — Lizenzwechsel MIT → Apache-2.0
|
||||
- **Grund:** Builder implementiert an vielen Stellen patentrelevante Logik; Apache-2.0
|
||||
bietet explizite **Patentlizenz (§3)** + **Retorsionsklausel** (Patentlizenz erlischt
|
||||
bei Patentklage) — Schutz gegen Patent-Trolle, den MIT nicht leistet.
|
||||
- `LICENSE` → **`LICENSE.md`** (kanonischer Dateiname im Repo/Remote; MIT-Text durch
|
||||
vollständigen Apache-2.0-Text ersetzt).
|
||||
- Neue **`NOTICE`** (Repo-Root): Attribution Dritt-Komponenten `Markdig` (BSD-2),
|
||||
`YamlDotNet` (MIT).
|
||||
- `csproj`: `PackageLicenseExpression` = `Apache-2.0`; Description „(OSS, Apache-2.0)".
|
||||
- Kompakter **SPDX-Header** (`// Copyright … // SPDX-License-Identifier: Apache-2.0`)
|
||||
in alle 12 `.cs`-Dateien eingefügt (Build verifiziert, 0 Warnungen/Fehler).
|
||||
- Wiederverwendbarer Baustein + Rationale in `docs/license-header.md`.
|
||||
- Docs angepasst: `README.md`, `AGENTS.md`, `plans/00` §12 + Repo-Struktur,
|
||||
`.hermes/skills.md`, `webstatic.example`-Inhalte, Tagebuch.
|
||||
- **Hinweis Dev-Repo:** `/mnt/brx5/work/OSS/build_webstatic` ist ein eigenständiger
|
||||
Checkout (Remote `git.gitcover.org:OSS/build_webstatic.git`). Dort ist `LICENSE.md`
|
||||
noch MIT — bei Gelegenheit dort ebenfalls auf Apache-2.0 + `NOTICE` syncen, sonst
|
||||
würde ein Pull den Wechsel im per-user-Clone überschreiben.
|
||||
|
||||
+20
-6
@@ -13,12 +13,15 @@ JavaScript-Framework.
|
||||
```bash
|
||||
git clone <repo> build_webstatic
|
||||
cd build_webstatic
|
||||
./install.sh # klont nach /opt/GitCover/webstatic (Default: Clone-Modus)
|
||||
./install.sh # per-user: ~/.local/share/GitCover/webstatic (Default, Betatester)
|
||||
```
|
||||
Der Clone-Modus legt ein echtes Git-Repo in `/opt/GitCover/webstatic` an, sodass
|
||||
spätere Updates via `git pull` (mit `git stash`/`git stash pop` für lokale
|
||||
Anpassungen) möglich sind. Alternativ `WEBSTATIC_INSTALL_MODE=copy ./install.sh`
|
||||
für eine reine Binary-Kopie. Nach der Installation ist `webstatic` im PATH verfügbar.
|
||||
Die **per-user Betatester-Installation** (Default) legt ein echtes Git-Repo unter
|
||||
`~/.local/share/GitCover/webstatic` an und setzt den Launcher `~/.local/bin/webstatic`.
|
||||
Updates erfolgen ohne `sudo` via `webstatic update` (stash/pull/merge/rebuild —
|
||||
Hermes-Konzept). Eine optionale **System-Installation** (root) unter
|
||||
`/opt/GitCover/webstatic` ist via
|
||||
`WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic WEBSTATIC_BIN_DIR=/usr/local/bin ./install.sh`
|
||||
möglich. Nach der Installation ist `webstatic` im PATH verfügbar.
|
||||
|
||||
## 3. Neue Website anlegen
|
||||
```bash
|
||||
@@ -56,16 +59,27 @@ Ihr Inhalt …
|
||||
- Sprachvarianten: `02-start.de.md` (Default), `02-start.en.md`, `02-start.vi.md`
|
||||
(fehlende Sprache fällt auf `.de.md` zurück).
|
||||
|
||||
> **Wichtig — Titel/Eyebrow erscheinen NICHT automatisch als Überschrift.**
|
||||
> `title` und `eyebrow` aus dem Frontmatter speisen nur `<title>`/Meta (SEO) und
|
||||
> die Navigations-Labels. webstatic stellt **kein** `{{ title }}`/`{{ eyebrow }}`
|
||||
> Seitentoken bereit. Tragen Sie Eyebrow + Titel daher **selbst im Body** der
|
||||
> jeweiligen Markdown-Datei ein (z. B. als `<p class="eyebrow">…</p>` +
|
||||
> `<h1>…</h1>`), sonst fehlen die sichtbaren Überschriften auf der Seite.
|
||||
|
||||
## 5. Bauen & Vorschau
|
||||
```bash
|
||||
webstatic build --env development # localhost:8000
|
||||
webstatic serve --port 8000 # lokaler Server (Strg+C beendet)
|
||||
```
|
||||
Die client-seitige Volltextsuche (Pagefind) wird im Post-Build erzeugt, sofern
|
||||
Node.js vorhanden ist. Mit `"pagefind": false` in `webstatic.json` wird sie
|
||||
komplett deaktiviert (Such-Toggle im Chrome dann nicht funktional) — nützlich,
|
||||
wenn eine Site keinen Index benötigt.
|
||||
|
||||
## 6. Veröffentlichen
|
||||
| Ziel | Befehl |
|
||||
|------|--------|
|
||||
| Development (lokal, work/preview/review) | `webstatic build --env development` |
|
||||
| Development (lokal; `--preview`/`--work`/`--review` = `development`) | `webstatic build --env development` |
|
||||
| Staging | `webstatic build --env staging` |
|
||||
| Production | `webstatic build --env deploy` |
|
||||
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# Lizenz-Header & NOTICE — wiederverwendbare Bausteine
|
||||
|
||||
**Lizenz:** Apache-2.0 (`LICENSE.md`). Bewusst gewählt statt MIT, weil der Builder
|
||||
an vielen Stellen patentrelevante Logik implementiert. Apache-2.0 bietet eine
|
||||
**explizite Patentlizenz** (§3) sowie eine **Retorsionsklausel** (die
|
||||
Patentlizenz erlischt, sobald jemand Patentklage wegen dieser Software erhebt) —
|
||||
der Schutz gegen Patent-Trolle, den MIT nicht leistet.
|
||||
|
||||
Diese Datei enthält die Bausteine, die **immer in gleicher Form** eingebunden
|
||||
werden (Quelldatei-Header + `NOTICE`). Bei Änderungen hier auch `LICENSE.md`,
|
||||
`NOTICE`, `csproj` (`PackageLicenseExpression`) und die Doc-Verweise pflegen.
|
||||
|
||||
---
|
||||
|
||||
## 1. Quelldatei-Header (kompakt, empfohlen)
|
||||
|
||||
Form: **Copyright + Author + SPDX-Identifier**. Kompakt, maschinenlesbar, sachlich korrekt.
|
||||
`Copyright` nennt den Rechteinhaber (GitCover Commons gUG (haftungsbeschränkt) (haftungsbeschränkt)), `Author` den Entwickler (Axel Druschel).
|
||||
In jede `.cs`-Datei **ganz oben** (vor `using`/Namespace):
|
||||
|
||||
```csharp
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
```
|
||||
|
||||
## 2. Quelldatei-Header (vollständiges Apache-Boilerplate)
|
||||
|
||||
Alternative, falls ein Reviewer das kanonische Apache-Format bevorzugt:
|
||||
|
||||
```csharp
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
```
|
||||
|
||||
## 3. NOTICE-Datei (Repo-Root, Pflicht bei Apache-2.0)
|
||||
|
||||
Inhalt der `NOTICE` im Repository-Root (Attribution der Dritt-Komponenten;
|
||||
der Text hier ist identisch mit der committeten `NOTICE`):
|
||||
|
||||
```
|
||||
GitCover.WebStaticBuilder
|
||||
Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
|
||||
This product includes software developed by GitCover Commons gUG (haftungsbeschränkt)
|
||||
(https://gitcover.org).
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
use this product except in compliance with the License. A copy of the
|
||||
License is provided in the file LICENSE.
|
||||
|
||||
Third-party components distributed with this product:
|
||||
|
||||
- Markdig (BSD-2-Clause)
|
||||
https://github.com/xoofx/markdig
|
||||
- YamlDotNet (MIT)
|
||||
https://github.com/aaubry/YamlDotNet
|
||||
|
||||
The above components retain their respective licenses; their license texts
|
||||
and notices are reproduced in the documentation and source distributions.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Hinweise
|
||||
|
||||
- **SPDX** (`SPDX-License-Identifier`) wird von GitHub, NuGet, dotnet und den
|
||||
meisten Scanner erkannt — der kompakte Header (Block 1) genügt rechtlich.
|
||||
- Bei **Abänderung** von Dateien verlangt Apache-2.0 §4(b) einen hinweisenden
|
||||
Vermerk („Changed files" / Changelog). Der Header selbst bleibt unverändert.
|
||||
- `NOTICE` muss bei Weitergabe (Distribution) erhalten bleiben (§4(d)).
|
||||
- Dritt-Komponenten: `Markdig` (BSD-2), `YamlDotNet` (MIT) — beide mit
|
||||
Apache-2.0 verträglich; ihre Lizenztexte in `NOTICE` geführt.
|
||||
@@ -1,7 +1,8 @@
|
||||
# GitCover.WebStaticBuilder — Produktbeschreibung & Umsetzungsplan
|
||||
|
||||
> Status: Implementierung (Phase 1 abgeschlossen, Build verifiziert). Eigenständiges OSS-Static-Site-Tool der GitCover Commons.
|
||||
> Lizenz: MIT. Sprachen: C# / .NET 10 (keine Python-Abhängigkeiten).
|
||||
> Status: Implementierung (Phase 1–3 abgeschlossen, Build verifiziert, zwei reale Sites gebaut). Eigenständiges OSS-Static-Site-Tool der GitCover Commons.
|
||||
> Lizenz: Apache-2.0 (explizite Patentlizenz §3 + Retorsionsklausel gegen Patentklagen). Sprachen: C# / .NET 10 (keine Python-Abhängigkeiten).
|
||||
> Version: `1.0.0.0`.
|
||||
|
||||
## 1. Zweck
|
||||
`GitCover.WebStaticBuilder` (CLI-Befehl `webstatic`) ist ein schlanker, kompilierter Static-Site-Generator für mehrsprachige, SEO-optimierte, compliance-freundliche Websites. Er liest Markdown-Quellen mit YAML-Frontmatter, rendert sie pro Sprache zu statischem HTML, erzeugt Navigation, SEO-Kopf (OpenGraph/JSON-LD), Sitemap, robots.txt und einen client-seitigen Volltextindex (Pagefind) — ohne Server, Datenbank oder Build-Service.
|
||||
@@ -34,17 +35,19 @@ Das Tool ist die Verallgemeinerung des Builders, der die GCBoK-Website erzeugt,
|
||||
- Kultur-korrekte Datums-/Zahlformate über `System.Globalization` (vorbereitet).
|
||||
- Optional: MT-Provider (Azure/DeepL) erzeugt **Entwürfe** für fehlende Inhaltsübersetzungen (klar markiert, separater Ordner `.translation-drafts/`).
|
||||
|
||||
## 6. Umgebungen (Arbeitsumgebung / Review / Staging / Public Deployment)
|
||||
## 6. Umgebungen (Arbeitsumgebung / Staging / Public Deployment)
|
||||
| Umgebung | `--env` | baseUrl (Beispiel) | cdn | Zweck / Ort |
|
||||
|---|---|---|---|---|
|
||||
| **Arbeitsumgebung** | `work` (`--preview`) | `http://localhost:8000` | `/assets` | Lokale Entwicklung; Build→lokales `dist/`, Vorschau via `serve` |
|
||||
| **Review** | `review` | `https://review.gitcover.org` | CDN | Freigabe/Vorschau (Konzept) |
|
||||
| **Arbeitsumgebung** | `development` (`--preview`/`--work`/`--review` sind Aliase) | `http://localhost:8000` | `/assets` | Lokale Entwicklung; Build→lokales `dist/`, Vorschau via `serve` |
|
||||
| **Staging** | `staging` | `https://gcbok.gitcover.org` | `https://gitcover.org/assets` | Abnahme (brx5 `/var/www/gcbok.gitcover.org`) |
|
||||
| **Public Deployment** | `deploy` | `https://gcbok.org` | `https://gitcover.org/assets` | Production (manueller Upload WebFTP) |
|
||||
|
||||
Hinweis: `work`/`preview`/`review` werden im Code alle auf `development` gefaltet.
|
||||
Die Default-Environments in `BuildConfig.Defaults()` sind `development`/`staging`/`deploy`.
|
||||
|
||||
## 7. CLI-Referenz
|
||||
```
|
||||
webstatic build --env <work|review|staging|deploy> [--content DIR] [--templates DIR]
|
||||
webstatic build --env <development|staging|deploy> [--content DIR] [--templates DIR]
|
||||
[--assets DIR] [--output DIR] [--base-url URL] [--cdn PATH]
|
||||
[--langs de,en,vi] [--default-lang de] [--config FILE] [--root DIR]
|
||||
[--verbose] [--dry-run]
|
||||
@@ -52,15 +55,19 @@ webstatic translate --check # fehlende Übersetzungen melden
|
||||
webstatic translate --draft # Entwürfe erzeugen (MT, API-Key nötig)
|
||||
webstatic init <sitename> # KMU-Onboarding: Site scaffolden
|
||||
webstatic serve [--port 8000] # lokale Vorschau (.NET HttpListener)
|
||||
webstatic status # rendert der Site README.md im Terminal
|
||||
```
|
||||
Aliase `--preview`=`work`, `--staging`=`staging`, `--deploy`=`deploy` bleiben erhalten.
|
||||
Aliase `--preview`/`--work`/`--review` = `development`, `--staging` = `staging`,
|
||||
`--deploy` = `deploy`. Subcommands: `build`, `serve`, `init`, `translate`, `status`.
|
||||
|
||||
## 8. Konfiguration (`webstatic.json`)
|
||||
- `site` (name/title/description je Sprache), `default_language`, `languages` (name/og_locale/href_lang/label), `paths` (content/templates/assets/output/legal/i18n), `glossary_section` + `glossary.href/label`, `pagefind` (bool), `translator` (provider/key_env/endpoint/region), `environments` (work/review/staging/deploy mit base_url/cdn).
|
||||
- `site` (name/title/description je Sprache), `default_language`, `languages` (name/og_locale/href_lang/label), `paths` (content/templates/assets/output/legal/i18n), `glossary_section` + `glossary.href/label`, `pagefind` (bool), `translator` (provider/key_env/endpoint/region), `environments` (`development`/`staging`/`deploy` mit base_url/cdn).
|
||||
- Priorität: CLI-Flags > `webstatic.json` > eingebaute Defaults.
|
||||
|
||||
## 9. Installation für KMU (`install.sh`)
|
||||
- Bash-Skript (kein Python): prüft .NET 10, `dotnet build -c Release`, kopiert nach **`/opt/GitCover/webstatic`**, Symlink `webstatic`→App nach `/usr/local/bin`, setzt `WEBSTATIC_BUILDER`.
|
||||
- Bash-Skript (kein Python): prüft .NET 10, `dotnet build -c Release`.
|
||||
- **Default (per-user):** kopiert nach `~/.local/share/GitCover/webstatic`, Launcher `~/.local/bin/webstatic`; Updates via `webstatic update`.
|
||||
- **Optional (System, root):** `WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic WEBSTATIC_BIN_DIR=/usr/local/bin ./install.sh` kopiert nach `/opt/GitCover/webstatic`, Symlink `webstatic`→App nach `/usr/local/bin`.
|
||||
- Idempotent; meldet Voraussetzungen.
|
||||
|
||||
## 10. Onboarding-Flow für KMU
|
||||
@@ -77,18 +84,23 @@ build_webstatic/
|
||||
src/ # C#-Quellcode (GitCover.WebStaticBuilder)
|
||||
tests/ # (künftig) Unit/Integrationstests
|
||||
webstatic.example/ # Vorlage-Site für KMU
|
||||
install.sh README.md LICENSE (MIT) AGENTS.md MEMORY.md SKILLS.md
|
||||
install.sh README.md LICENSE (Apache-2.0) NOTICE AGENTS.md MEMORY.md SKILLS.md
|
||||
```
|
||||
|
||||
## 12. Lizenz & Compliance
|
||||
- Code: **MIT** (`LICENSE`). Kompatibel mit allen genutzten NuGet-Paketen.
|
||||
- Code: **Apache-2.0** (`LICENSE.md`, `NOTICE`). Bietet im Gegensatz zu MIT eine
|
||||
**explizite Patentlizenz** (§3) sowie eine **Retorsionsklausel** (Patentlizenz
|
||||
erlischt bei Patentklage über die Software) — bewusst gewählt, weil der Builder
|
||||
an vielen Stellen patentrelevante Logik implementiert. Kompatibel mit den
|
||||
NuGet-Deps `Markdig` (BSD-2) und `YamlDotNet` (MIT); deren Lizenzen bleiben in
|
||||
`NOTICE` erhalten. GPLv2-inkompatibel, GPLv3+ ok.
|
||||
- Inhalte der GCBoK-Site: separat (angestrebt CC BY-SA 4.0) — betrifft das Tool nicht.
|
||||
|
||||
## 13. Umsetzungsphasen
|
||||
- **Phase 0 — Dev-Setup:** `build_webstatic` auf `/mnt/brx5/work/OSS/build_webstatic` (kopiert aus `www/build`, Python/`build.csx` entfernt, Verzeichnisstruktur plans/docs/diary/src/tests).
|
||||
- **Phase 1 — Refactor (DONE):** Umbenennung `GitCover.WebStaticBuilder`; Python entfernt; Config/Umgebungsmodell; i18n (`I18n.cs` + Platzhalter); MT-Helfer; Pagefind; `webstatic.example`; `install.sh`; Docs/LIZENZ. Build & Verify auf Beispielsite ✓.
|
||||
- **Phase 2 — Install & Verify:** `install.sh` → `/opt/GitCover/webstatic`; Standalone-Smoke-Test.
|
||||
- **Phase 3 — Website-Repo:** Submodul `www/build` entfernen; `www/build.sh` durch Bash ersetzen; alle Docs (AGENTS/MEMORY/SKILLS/CONTEXT/README/docs/DEPLOYMENT/oss/*/.hermes) auf neuen Pfad/Tool/Umgebungen/kein-Python aktualisieren; GCBoK-Preview-Build + Dead-Link-Check.
|
||||
- **Phase 2 — Install & Verify (DONE):** Per-user Betatester-Install unter `~/.local/share/GitCover/webstatic` (Launcher `~/.local/bin/webstatic`) ist die **aktive** Installation; optionale System-Installation unter `/opt/GitCover/webstatic` (root). `webstatic update` aktualisiert den per-user-Clone (stash/pull/merge/rebuild, Hermes-Konzept). Standalone-Smoke-Test ✓.
|
||||
- **Phase 3 — Website-Repo (DONE):** GCBoK-Repo und GCC-Repo nutzen ausschließlich die `webstatic`-CLI (Python/`www/build*` entfernt). gcc.gitcover.org am 2026-07-12 migriert (Multi-Page, `*.de.md` autoritativ, Banner aus gcbok, Eyebrow+Titel als Seiten-Header auf allen Seiten). `pagefind` pro Site per `pagefind: false` abschaltbar.
|
||||
- **Phase 4 — Onboarding:** `init`/`serve`/`build` als KMU-Flow (Konzept finalisieren).
|
||||
- **Phase 5 — Abschluss:** Zusammenfassung; Commit/Signierung nur auf Wunsch.
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Plan 01 — Offensichtliche Fixes
|
||||
|
||||
> Status: Draft (2026-07-11). Aus der Code-Inspektion und Testläufen gegen das
|
||||
> GCBoK-Website-Repo (`/mnt/brx5/REPOS/GCC/gcbok.gitcover.org`) und das
|
||||
> Dev-Quell-Repo (`/mnt/brx5/work/OSS/build_webstatic`) abgeleitet.
|
||||
> Status: **Größtenteils umgesetzt (Stand 2026-07-12).** Die meisten Fixes sind
|
||||
> bereits im Code landen (Commits `18c2108` CLI-Fixes, `7065c07` Link-Fixes u. a.).
|
||||
> Fix 1 ist gegenstandslos (keine `/opt`-Installation vorhanden).
|
||||
|
||||
## Kontext
|
||||
|
||||
@@ -12,32 +12,22 @@ Dabei zeigten sich Probleme, die hier zur Behebung anstehen.
|
||||
|
||||
## Fix 1 — Installierte Binary ist veraltet (`/opt/GitCover/webstatic`)
|
||||
|
||||
**Symptom:** `webstatic --version` und `webstatic --help` crashen mit
|
||||
`DirectoryNotFoundException: .../content` — der Build läuft los, bevor
|
||||
`--help`/`--version` ausgewertet werden.
|
||||
**Status: gegenstandslos (2026-07-12).** Es existiert **keine** Installation
|
||||
unter `/opt/GitCover/webstatic`. Die aktiv genutzte Installation ist die
|
||||
**per-user Betatester-Install** unter `~/.local/share/GitCover/webstatic`
|
||||
(Launcher `~/.local/bin/webstatic`, Commit `7065c07`). Ein Remote-Stand
|
||||
(`89f720a`) ist verfügbar → Aktualisierung via `webstatic update`.
|
||||
|
||||
**Ursache:** `/opt/GitCover/webstatic/src/Program.cs` (7223 B, 11. Jul 15:59)
|
||||
ist älter als der aktuelle Dev-Stand (`src/Program.cs`, 380 Zeilen). Die
|
||||
installierte Binary wurde aus einem Zwischenstand gebaut, in dem
|
||||
`--help`/`--version`-Checks erst *nach* `Builder.Build()` kamen. Der aktuelle
|
||||
Dev-Stand hat die Checks bereits an richtiger Position (Zeile 50–64, vor dem
|
||||
Build-Aufruf Zeile 118).
|
||||
Das ursprüngliche Symptom (Crash von `--help`/`--version` wegen fehlender
|
||||
`content/`-Prüfung) ist ohnehin bereits behoben (Commit `18c2108`:
|
||||
„CLI-Fixes: Help/Version vor Build, Content-Check, Default-Envs, Artefakte aus
|
||||
Git"). `webstatic --version` liefert `1.0.0.0` + Commit-Hash (Exit 0).
|
||||
|
||||
**Maßnahme:**
|
||||
1. Dev-Quellbaum baut sauber (`dotnet build -c Release` ✓ verifiziert).
|
||||
2. System-Installation aktualisieren:
|
||||
```bash
|
||||
sudo env PATH="$PATH" \
|
||||
WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic \
|
||||
WEBSTATIC_BIN_DIR=/usr/local/bin \
|
||||
/mnt/brx5/work/OSS/build_webstatic/install.sh
|
||||
```
|
||||
(oder `webstatic update`, falls die Installation ein Clone ist —
|
||||
`/opt/GitCover/webstatic/.git` prüfen).
|
||||
3. Verifizieren: `webstatic --version` (erwartet: `1.0.0.0` + Commit-Hash),
|
||||
`webstatic --help` (erwartet: Hilfe-Text, Exit 0),
|
||||
`webstatic build --root /mnt/brx5/REPOS/GCC/gcbok.gitcover.org/www --env development --verbose`
|
||||
(erwartet: erfolgreicher Build, Exit 0).
|
||||
**Maßnahme (falls dennoch eine System-Installation gewünscht):**
|
||||
```bash
|
||||
sudo env PATH="$PATH" WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic \
|
||||
WEBSTATIC_BIN_DIR=/usr/local/bin ./install.sh
|
||||
```
|
||||
|
||||
## Fix 2 — `--help`/`--version` sollten VOR Config-Laden und `Directories.Init` geprüft werden
|
||||
|
||||
@@ -150,9 +140,9 @@ dotnet bin/Release/net10.0/webstatic.dll --help # Exit 0
|
||||
dotnet bin/Release/net10.0/webstatic.dll build --root . # klare Fehlermeldung, Exit 1
|
||||
dotnet bin/Release/net10.0/webstatic.dll build --root webstatic.example --env development # Exit 0
|
||||
git status # keine Artefakte, clean
|
||||
# System-Install aktualisieren und GCBoK bauen:
|
||||
sudo env PATH="$PATH" WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic \
|
||||
WEBSTATIC_BIN_DIR=/usr/local/bin ./install.sh
|
||||
# Per-user-Install aktualisieren und GCBoK bauen:
|
||||
cd ~/.local/share/GitCover/webstatic && git stash && git pull && ./install.sh
|
||||
webstatic --version
|
||||
webstatic build --root /mnt/brx5/REPOS/GCC/gcbok.gitcover.org/www --env development --verbose
|
||||
webstatic build --root /mnt/brx5/REPOS/GCC/gcc.gitcover.org/www --env development --verbose
|
||||
```
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Text.Json;
|
||||
|
||||
namespace GitCover.WebStaticBuilder;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Text.RegularExpressions;
|
||||
using YamlDotNet.Serialization;
|
||||
using YamlDotNet.Serialization.NamingConventions;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
namespace GitCover.WebStaticBuilder;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Markdig;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using Markdig;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using YamlDotNet.Serialization;
|
||||
|
||||
namespace GitCover.WebStaticBuilder;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Text;
|
||||
|
||||
namespace GitCover.WebStaticBuilder;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
namespace GitCover.WebStaticBuilder;
|
||||
|
||||
/// <summary>Machine-translation provider (optional, requires an API key via environment).</summary>
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// Copyright 2026 GitCover Commons gUG (haftungsbeschränkt)
|
||||
// Author: Axel Druschel
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text;
|
||||
|
||||
@@ -12,7 +12,7 @@ navbar: true
|
||||
## Einführung
|
||||
|
||||
Diese Seite wurde mit **GitCover.WebStaticBuilder** erzeugt — einem statischen, mehrsprachigen
|
||||
Generator für compliance-freundliche Websites (MIT, OSS).
|
||||
Generator für compliance-freundliche Websites (Apache-2.0, OSS).
|
||||
|
||||
## Funktionen
|
||||
|
||||
|
||||
@@ -13,4 +13,4 @@ navbar: false
|
||||
|
||||
Beispiel-Website · Ansprechpartner: webmaster@example.org
|
||||
|
||||
© 2026 Beispiel-Website. Erstellt mit GitCover.WebStaticBuilder (MIT).
|
||||
© 2026 Beispiel-Website. Erstellt mit GitCover.WebStaticBuilder (Apache-2.0).
|
||||
|
||||
Reference in New Issue
Block a user