Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Merge pull request #18 from kurmann/17-add-nuget-workflow-template-fo…
Browse files Browse the repository at this point in the history
…r-entity-lib-as-well

17 add nuget workflow template for entity lib as well
  • Loading branch information
kurmann authored Apr 1, 2024
2 parents da65ef7 + 8e2d129 commit 49e496a
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 10 deletions.
61 changes: 53 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -112,18 +114,61 @@ 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.

### 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

### 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.
Expand Down
4 changes: 2 additions & 2 deletions Templates.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

<!-- Die Version sollte mit jeder Veröffentlichung auf Nuget.org erhöht werden. Die Release Notes dürfen Umbrüche
enthalten, jedoch keine spezifischen Markdown-Formatierungen wie fett oder kursiv oder Überschriften -->
<PackageVersion>1.8.0-beta.2</PackageVersion>
<PackageReleaseNotes>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.
<PackageVersion>1.9.0-beta</PackageVersion>
<PackageReleaseNotes>Neues Template für GitHub-Workflow zur Erstellung und Veröffentlichung des NuGet-Packets für die Entity Library.
</PackageReleaseNotes>

<PackageReadmeFile>README.md</PackageReadmeFile>
Expand Down
31 changes: 31 additions & 0 deletions templates/entitylib-github-workflow/.github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
@@ -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
38 changes: 38 additions & 0 deletions templates/entitylib-github-workflow/.template.config/template.json
Original file line number Diff line number Diff line change
@@ -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"
]
}
]
}
]
}

0 comments on commit 49e496a

Please sign in to comment.