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

Commit

Permalink
use new draft release workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
kurmann committed Apr 25, 2024
1 parent a0b8bd7 commit bf52217
Showing 1 changed file with 21 additions and 43 deletions.
64 changes: 21 additions & 43 deletions templates/entities-repo/.github/workflows/draft_release.yml
Original file line number Diff line number Diff line change
@@ -1,67 +1,45 @@
name: .NET CI/CD

# 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 (Stunden und Minuten)
# zum Zeitpunkt des Builds hinzugefügt, was jede Version einzigartig macht.
name: Draft Release

on:
push:
branches:
- '**'
workflow_dispatch:

permissions:
contents: write # Erlaubt das Erstellen von Releases und das Schreiben von Tags.
pull-requests: read # Ermöglicht das Lesen von PR-Informationen für den Release-Entwurf.

jobs:
build_and_pack:
build_and_test:
runs-on: ubuntu-latest

env:
PROJECT_FILE: src/Entities/Entities.csproj

# Deklaration der BASE_VERSION-Umgebungsvariable, die im Workflow mit der in der .csproj-Datei festgelegten Version überschrieben wird.
BASE_VERSION: 1.0.0
PROJECT_FILE: src/ProjectName/ProjectName.csproj
DOTNET_VERSION: '8.0.x'

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Install dependencies
run: dotnet restore ${{ env.PROJECT_FILE }}

- name: Test
run: dotnet test ${{ env.PROJECT_FILE }}

# Schritt: Lese die PackageVersion aus der .csproj Datei
# Dieser Schritt nutzt grep und sed, um den Wert des PackageVersion-Elements aus der .csproj-Datei zu extrahieren.
# Der extrahierte Wert wird dann als Umgebungsvariable gesetzt, damit er in nachfolgenden Schritten verwendet werden kann.
- 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
# Schritt: Build und Pack
# Basierend auf dem Branch, der den Workflow ausgelöst hat, entscheidet dieser Schritt,
# ob ein normales Release (main-Branch) oder ein Zwischenrelease (andere Branches) durchgeführt wird.
# Für ein Zwischenrelease wird der ausgelesenen Basisversion ein Datumssuffix hinzugefügt.
# Das Datumssuffix wird basierend auf dem aktuellen Datum und der Uhrzeit zum Zeitpunkt des Builds generiert.
# Schema für Suffix: .preview.YYYYMMDDHHMMSS
- name: Build and Pack
run: |
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
dotnet pack ${{ env.PROJECT_FILE }} --configuration Release --output nupkgs
else
# Generiert das aktuelle Datum und Uhrzeit als Suffix im kompatiblen Format.
datetimeSuffix=$(date +"%Y%m%d%H%M") # Entfernt Punkte und führende Nullen in der Uhrzeit
version="${{ env.BASE_VERSION }}-preview.$datetimeSuffix"
dotnet pack ${{ env.PROJECT_FILE }} /p:PackageVersion=$version --configuration Release --output nupkgs
echo "Zwischenversion ist $version"
fi
- name: Push NuGet Package
run: dotnet nuget push "nupkgs/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
release_draft:
runs-on: ubuntu-latest
needs: build_and_test
steps:
- uses: actions/checkout@v4
- name: Run Release Drafter
uses: release-drafter/release-drafter@v6
with:
config-name: 'release-drafter-config.yml'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 comments on commit bf52217

Please sign in to comment.