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

11 automated nuget preview versions #13

Merged
merged 5 commits into from
Apr 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 39 additions & 12 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
@@ -1,27 +1,54 @@
name: Pack .NET Template

# Versionierungsstrategie:
# Für den main-Branch werden Releases mit der in der .csproj-Datei festgelegten Version erstellt,
# die manuell vor dem Merge angepasst werden sollte. Dies ermöglicht eine präzise Kontrolle über Major und Minor Releases.
# Für alle anderen Branches werden automatische Zwischenreleases mit einem Datumssuffix generiert, um kontinuierliches Testing und Feedback
# für Entwicklungsstände zu ermöglichen. Das Datumssuffix wird basierend auf dem aktuellen Datum und der Uhrzeit zum Zeitpunkt des Builds hinzugefügt,
# was jede Version einzigartig macht.

on:
push:
branches:
- main
- '**'

jobs:
pack:
runs-on: ubuntu-latest

env:
PROJECT_FILE: Templates.csproj
BASE_VERSION: '1.0.0' # Wird dynamisch überschrieben

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4

- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'

- name: Restore NuGet packages
run: dotnet restore
- name: Restore NuGet packages
run: dotnet restore ${{ env.PROJECT_FILE }}

- name: Pack .NET Template Project
run: dotnet pack --configuration Release --no-build --output nupkg
# Schritt: Lese die PackageVersion aus der .csproj Datei und setze sie als Umgebungsvariable
- name: Read Package Version from .csproj and Set as Env Var
run: |
version=$(grep '<PackageVersion>' ${{ env.PROJECT_FILE }} | sed -n -e 's/.*<PackageVersion>\(.*\)<\/PackageVersion>.*/\1/p')
echo "Base version is $version"
echo "BASE_VERSION=$version" >> $GITHUB_ENV

- name: Publish to NuGet.org
run: dotnet nuget push "nupkg/*.nupkg" --api-key ${{secrets.NUGET_API_KEY}} --source https://api.nuget.org/v3/index.json
# Schritt: Pack .NET Template Project mit dynamischer Versionierung für Zwischenreleases
- name: Pack .NET Template Project
run: |
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
dotnet pack ${{ env.PROJECT_FILE }} --configuration Release --output nupkg
else
datetimeSuffix=$(date +"%Y%m%d%H%M")
version="${{ env.BASE_VERSION }}-preview.$datetimeSuffix"
dotnet pack ${{ env.PROJECT_FILE }} /p:PackageVersion=$version --configuration Release --output nupkg
echo "Zwischenversion ist $version"
fi

- name: Publish to NuGet.org
run: dotnet nuget push "nupkg/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
35 changes: 26 additions & 9 deletions Templates.csproj
Original file line number Diff line number Diff line change
@@ -1,20 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageType>Template</PackageType>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>Kurmann.Templates</PackageId>
<Title>Templates</Title>
<Authors>Patrick Kurmann</Authors>
<Description>Vorlagen für .NET-Entwicklung im Kurmann-Namespace.</Description>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/kurmann/Templates</RepositoryUrl>

<!-- Package-Tages zur Katalogisierung auf Nuget.org. Mehrere Tags mit Semikolen ";" trennen. -->
<PackageTags>dotnet-new;templates;</PackageTags>
<TargetFramework>netstandard2.0</TargetFramework>

<!-- 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>0.3.0-beta.1</PackageVersion>
<PackageReleaseNotes>Korrektur: Workflow-Vorlage übernimmt korrekt den Bibliotheks-Namen in den Kurmann-Namespace.
</PackageReleaseNotes>
<!-- Die URL des GIT-Repositories -->
<RepositoryUrl>https://github.com/kurmann/Templates</RepositoryUrl>
<RepositoryType>git</RepositoryType>

<!-- Die Kurzbeschreibung des NuGet-Packets. Die längere Beschreibung wird als README.md eingebunden -->
<Description>Vorlagen für .NET-Entwicklung im Kurmann-Namespace.</Description>

<!-- Versionsverwaltung und -strategie:
Die <PackageVersion> hier definiert die Basisversion für NuGet-Paketveröffentlichungen.
Für reguläre, stabile Releases (auf dem 'main'-Branch) sollte diese Version manuell gemäß den SemVer-Richtlinien (MAJOR.MINOR.PATCH) aktualisiert werden,
bevor Änderungen in den 'main'-Branch gemerged werden. Dies stellt sicher, dass die Veröffentlichung die richtige Versionsnummer erhält.

Zwischenreleases, die automatisch über GitHub Actions für Nicht-'main'-Branches generiert werden, fügen der hier definierten Basisversion
ein datumsbasiertes Suffix hinzu (z.B. -preview.YYYYMMDDHHMM), um die Einzigartigkeit und den Pre-Release-Status dieser Builds zu kennzeichnen.
Es ist nicht notwendig und wird nicht empfohlen, Pre-Release-Identifier wie 'alpha', 'beta', oder 'rc' manuell hier einzufügen,
da dies über den CI/CD-Prozess automatisiert gehandhabt wird. Alle Änderungen, die spezifisch Pre-Release-Versionen betreffen,
sollten stattdessen durch den CI/CD-Prozess gesteuert werden.

Die Release Notes für jede Version sollten separat gepflegt und vor dem Merge in den 'main'-Branch aktualisiert werden. -->
<PackageVersion>0.3.1</PackageVersion>

<!-- Die Release Notes sollten mindestens vor jeder Minor-Version in der README.md-Datei aktualisiert werden. -->
<PackageReleaseNotes>Siehe README.md für Details.</PackageReleaseNotes>

<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
Expand Down