From 111736c2fe5ec823e7a136745efe72d7dedd3f6c Mon Sep 17 00:00:00 2001 From: Patrick Kurmann Date: Mon, 1 Apr 2024 15:39:00 +0200 Subject: [PATCH 1/6] created entitylib github workflow template json --- .../.template.config/template.json | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 templates/entitylib-github-workflow/.template.config/template.json diff --git a/templates/entitylib-github-workflow/.template.config/template.json b/templates/entitylib-github-workflow/.template.config/template.json new file mode 100644 index 0000000..d641cd0 --- /dev/null +++ b/templates/entitylib-github-workflow/.template.config/template.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Patrick Kurmann", + "classifications": [ + "Common", + "GitHubActions" + ], + "identity": "Kurmann.Videoschnitt.EntityLib.GitHubWorkfow", + "name": "Entity Library GitHub Workflow", + "shortName": "entitylib-github-workflow", + "sourceName": "EntityLib.GitHubWorkfow", + "description": "Creates a GitHub Actions workflow for publishing a entity library to NuGet.org.", + "tags": { + "language": "YAML", + "type": "item" + }, + "preferNameDirectory": true, + "sources": [ + { + "modifiers": [ + { + "exclude": [ + ".vs/**", + ".template_config/**", + "**/bin/**", + "**/obj/**", + "/bin/**", + "/obj/**", + ".git/**", + "Readme.md", + "LICENSE", + "nuget.csproj" + ] + } + ] + } + ] +} \ No newline at end of file From 22047966d0b18f450140acb6f37b95d1d41b3dd4 Mon Sep 17 00:00:00 2001 From: Patrick Kurmann Date: Mon, 1 Apr 2024 15:39:15 +0200 Subject: [PATCH 2/6] document entiy lib workflow --- README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/README.md b/README.md index 65694dd..fe5b0d9 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,39 @@ ergibt eine Class-Library im "src"-Verzeichnis mit den .NET-Projekten Dieses Setup ist optimal für Entwickler, die sich auf die Implementierung von Domänenlogik mit einem klaren Fokus auf funktionale Programmierprinzipien und testgetriebene Entwicklung konzentrieren möchten. +### Entity Library GitHub Workflow + +Kurzname: **entitylib-github-workflow** + +Das `Entity Library GitHub Workflow` Template erweitert die Sammlung von .NET Templates um eine automatisierte CI/CD Pipeline speziell für die `Entity Library`. Es generiert eine GitHub Actions Workflow-Konfiguration, die spezifisch für das Bauen, Testen und optional das Veröffentlichen einer .NET Class-Library, welche die Domänenlogik beinhaltet, auf NuGet.org ausgelegt ist. + +#### Features Entity Library GitHub Workflow + +- **Automatisierte CI/CD Pipeline**: Konfiguriert GitHub Actions für das automatische Bauen und Testen der Entity Library bei jedem Push oder Pull Request. +- **NuGet-Veröffentlichung**: Ermöglicht die automatische Veröffentlichung der gebauten Library auf NuGet.org, abhängig von spezifischen Triggern oder Tags. +- **Angepasste Workflow-Events**: Unterstützt verschiedene GitHub Event-Typen wie `push`, `pull_request` oder manuell ausgelöste Workflows. +- **Testautomatisierung**: Führt automatisch alle definierten Unit- und Integrationstests als Teil des CI-Prozesses aus. +- **Flexibilität und Anpassbarkeit**: Ermöglicht einfache Anpassungen der Workflow-Schritte, um spezifische Anforderungen oder Projektkonfigurationen zu berücksichtigen. + +#### Anwendung Entity Library GitHub Workflow + +```bash +dotnet new entitylib-github-workflow -o . +``` + +erzeugt folgende Verzeichnisstruktur im Arbeitsverzeichnis + +```text +working-directory/ +└── .github/ + └── workflows/ + └── entitylib-ci-cd.yml +``` + +Die Konfigurationsdatei `entitylib-ci-cd.yml` ist so voreingestellt, dass sie die Entity Library bei jedem `push` auf den `main`-Zweig oder bei jedem `pull_request` gegen den `main`-Zweig baut und testet. Optional kann die Konfiguration so erweitert werden, dass erfolgreiche Builds automatisch auf NuGet.org veröffentlicht werden, sobald ein neuer Release-Tag gepusht wird. + +Dieses Template ist eine essenzielle Erweiterung für Teams, die die Entity Library in ihre Entwicklungspipeline integrieren möchten, um eine kontinuierliche Qualitätssicherung und -verbesserung der Domänenlogik zu gewährleisten. + ## Empfehlungen Zum Erstellen eines kompletten Service Collection Integrated Moduls mitsamt Repository-Struktur wird die kombination der Templates `scimodule`, `scimodule-github-workflow` und `scimodule-vscode-debugconfig` empfohlen. From 419b4ffb411b6e5434da793b5d09075956415da0 Mon Sep 17 00:00:00 2001 From: Patrick Kurmann Date: Mon, 1 Apr 2024 15:39:28 +0200 Subject: [PATCH 3/6] document on package release notes --- Templates.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Templates.csproj b/Templates.csproj index 310e69e..534c637 100644 --- a/Templates.csproj +++ b/Templates.csproj @@ -12,8 +12,8 @@ - 1.8.0-beta.2 - Vollständige csproj-Eigenschaften für die Nuget-Veröffentlichung. Das SCI Modul und Entity Lib haben somit alle Nuget-relevanten Eigenschaften in der csproj-Datei definiert. + 1.9.0-beta + Neues Template für GitHub-Workflow zur Erstellung und Veröffentlichung des NuGet-Packets für die Entity Library. README.md From c6827a6d8b1a1b96756a96d89d143e6b91e29b93 Mon Sep 17 00:00:00 2001 From: Patrick Kurmann Date: Mon, 1 Apr 2024 15:39:40 +0200 Subject: [PATCH 4/6] define github pipeline --- .../.github/workflows/dotnet.yml | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 templates/entitylib-github-workflow/.github/workflows/dotnet.yml diff --git a/templates/entitylib-github-workflow/.github/workflows/dotnet.yml b/templates/entitylib-github-workflow/.github/workflows/dotnet.yml new file mode 100644 index 0000000..7b6a42e --- /dev/null +++ b/templates/entitylib-github-workflow/.github/workflows/dotnet.yml @@ -0,0 +1,31 @@ +name: .NET CI/CD + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build_and_pack: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Restore dependencies for Module + run: dotnet restore src/Entities/Entities.csproj + + - name: Pack Entities + run: dotnet pack src/Entities/Entities.csproj --output ./nupkgs + + # Veröffentlichen der NuGet-Pakete + - name: Push NuGet and Symbol Packages + run: | + dotnet nuget push ./nupkgs/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + dotnet nuget push ./nupkgs/*.snupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate From b74fd28c943cf3d73a0476a9d0fb61719ffc3a29 Mon Sep 17 00:00:00 2001 From: Patrick Kurmann Date: Mon, 1 Apr 2024 15:41:41 +0200 Subject: [PATCH 5/6] mentioning nuget api key --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index fe5b0d9..aca4369 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,12 @@ Dieses Template ist eine essenzielle Erweiterung für Teams, die die Entity Libr ## Empfehlungen +### NuGet API Key + +Um die automatische Veröffentlichung Ihrer NuGet-Pakete über die GitHub Actions Workflow zu ermöglichen, ist es notwendig, den `NUGET_API_KEY` in den GitHub Secrets jedes Repositories zu hinterlegen. Dieser API-Key ermöglicht es GitHub Actions, die Pakete in Ihrem Namen auf NuGet.org zu veröffentlichen. Sie können den API-Key von Ihrem NuGet.org-Konto erhalten und sollten diesen sicher im Abschnitt Settings > Secrets > Actions Ihres GitHub-Repositories speichern. Durch das Setzen dieses Secrets stellen Sie sicher, dass Ihre CI/CD Pipeline die Pakete erfolgreich auf NuGet.org pushen kann, ohne Ihren API-Key offenlegen zu müssen. + +### Komplette Erstellung eines SCI Modul Repository + Zum Erstellen eines kompletten Service Collection Integrated Moduls mitsamt Repository-Struktur wird die kombination der Templates `scimodule`, `scimodule-github-workflow` und `scimodule-vscode-debugconfig` empfohlen. Bitte vorher zum **Wurzelverzeichnis** des neu erstellte GitHub-**Repositorys** wechseln. From 8e2d1290f1417a678b64ac706480c5bff3b69868 Mon Sep 17 00:00:00 2001 From: Patrick Kurmann Date: Mon, 1 Apr 2024 15:45:12 +0200 Subject: [PATCH 6/6] document resulted file structure --- README.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index aca4369..864de90 100644 --- a/README.md +++ b/README.md @@ -36,15 +36,17 @@ Das `ServiceCollectionIntegratedModuleTemplate` ist das erste Template in dieser #### Anwendung SCI Module ```bash -dotnet new scimodule -n MediaFileWatcher -o src +dotnet new scimodule -n Projektname -o src ``` ergibt ein Modul im "src"-Verzeichnis mit den .NET-Projekten -- `Kurmann.Videoschnitt.MediaFileWatcher.Application` -- `Kurmann.Videoschnitt.MediaFileWatcher.Module` -- `Kurmann.Videoschnitt.MediaFileWatcher.Entities` -- `Kurmann.Videoschnitt.MediaFileWatcher.Tests` +```text +working-directory/ +└── src/ + └── Kurmann.Videoschnitt.Projektname + └── Kurmann.Videoschnitt.Projektname.Application +``` ### SCI Module GitHub Workflow @@ -112,13 +114,17 @@ Das `Entity Library Template` wurde entwickelt, um die Erstellung von Class-Libr #### Anwendung Entity Library ```bash -dotnet new entitylib -n DomainLogic -o src +dotnet new entitylib -n EntityLibName -o src ``` ergibt eine Class-Library im "src"-Verzeichnis mit den .NET-Projekten -- `Kurmann.Videoschnitt.DomainLogic` -- `Kurmann.Videoschnitt.DomainLogic.Tests` +```text +working-directory/ +└── src/ + └── Kurmann.Videoschnitt.EntityLibName + └── Kurmann.Videoschnitt.EntityLibName.Tests +``` Dieses Setup ist optimal für Entwickler, die sich auf die Implementierung von Domänenlogik mit einem klaren Fokus auf funktionale Programmierprinzipien und testgetriebene Entwicklung konzentrieren möchten.