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

Template für ein komplettes Service-Repository erstellt und mit den neusten Workflows versehen #59

Merged
merged 15 commits into from
Apr 26, 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
21 changes: 0 additions & 21 deletions Templates.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,9 @@
<!-- Package-Tages zur Katalogisierung auf Nuget.org. Mehrere Tags mit Semikolen ";" trennen. -->
<PackageTags>dotnet-new;templates;</PackageTags>

<!-- 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.4.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>
<PackageIcon>PackageIcon.png</PackageIcon>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest

env:
CSPROJ_FILE: src/ProjectName/ProjectName.csproj
CSPROJ_FILE: src/Entities/Entities.csproj
DOTNET_VERSION: '8.0.x'

steps:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:
pull-requests: read

env:
CSPROJ_FILE: src/ProjectName/ProjectName.csproj
CSPROJ_FILE: src/Entities/Entities.csproj
DOTNET_VERSION: '8.0.x'

jobs:
Expand Down
23 changes: 1 addition & 22 deletions templates/entities-repo/src/Entities/Entities.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,11 @@
<PackageId>NamespacePlaceholder.ProjectName</PackageId>

<!-- Package-Tages zur Katalogisierung auf Nuget.org. Mehrere Tags mit Semikolen ";" trennen. -->
<PackageTags>Kurmann;Entities</PackageTags>

<!-- Die URL des GIT-Repositories -->
<RepositoryUrl></RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>NamespacePlaceholder</PackageTags>

<!-- Die Kurzbeschreibung des NuGet-Packets. Die längere Beschreibung wird als README.md eingebunden -->
<Description>ProjectDescription</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.1.0</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>

<!-- Die README.md-Datei, die im NuGet-Paket eingebettet wird. Entspricht gleichzeitig der GitHub Readme-Datei. -->
<PackageReadmeFile>README.md</PackageReadmeFile>

Expand Down
10 changes: 1 addition & 9 deletions templates/nuget-classlib/ClassLibrary/ClassLibrary.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,11 @@
<PackageId>Kurmann.ClassLibrary</PackageId>

<!-- Package-Tages zur Katalogisierung auf Nuget.org. Mehrere Tags mit Semikolen ";" trennen. -->
<PackageTags>Videoschnitt</PackageTags>

<!-- Die URL des GIT-Repositories -->
<RepositoryUrl></RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>RootNamespace</PackageTags>

<!-- Die Kurzbeschreibung des NuGet-Packets. Die längere Beschreibung wird als README.md eingebunden -->
<Description></Description>

<!-- 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.1.0-alpha</PackageVersion>

<!-- Die Release Notes gelten pro Version und sollten dementsprechend bei jeder neuen Version angepasst werden. -->
<!-- Die Notes dürfen Umbrüche enthalten, jedoch keine spezifischen Markdown-Formatierungen wie fett oder kursiv oder Überschriften -->
<PackageReleaseNotes>
Expand Down
11 changes: 11 additions & 0 deletions templates/services-repo/.devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"customizations": {
"vscode": {
"extensions": [
"GitHub.copilot",
"GitHub.vscode-github-actions",
"ms-dotnettools.csdevkit"
]
}
}
}
39 changes: 39 additions & 0 deletions templates/services-repo/.github/release-drafter-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Konfigurationsdatei für das Release-Drafter-Tool.
# release-drafter-config.yml

# Definiert die Vorlage für den Namen des Releases.
name-template: 'v$RESOLVED_VERSION' # Automatisch erhöhte Versionsnummer

# Definiert die Vorlage für den Namen des Release-Tags.
tag-template: 'v$RESOLVED_VERSION' # Automatisch erhöhte Versionsnummer

# Kategorien für das Changelog, identifiziert durch Labels auf Pull Requests.
categories:
- title: 'Features'
labels:
- 'enhancement'
- title: 'Bug Fixes'
labels:
- 'bug'
- title: 'Dokumentation'
labels:
- 'documentation'

# Layout des Changelogs, formatiert nach den Änderungen in den Pull Requests.
template: |
## Änderungen
$CHANGES

# Version-Resolver bestimmt die Art der Versionserhöhung basierend auf den PR Labels.
version-resolver:
major:
labels:
- 'breaking'
minor:
labels:
- 'enhancement'
patch:
labels:
- 'bug'
- 'documentation'
default: minor
45 changes: 45 additions & 0 deletions templates/services-repo/.github/workflows/draft_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Draft Release

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

permissions:
contents: write
pull-requests: read

jobs:
build_and_test:
runs-on: ubuntu-latest

env:
CSPROJ_FILE: src/Services/Services.csproj
DOTNET_VERSION: '8.0.x'

steps:
- uses: actions/checkout@v4

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

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

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

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 }}
101 changes: 101 additions & 0 deletions templates/services-repo/.github/workflows/publish_package.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Publish NuGet Package on Release

on:
release:
types: [published, prereleased]
workflow_dispatch:

permissions:
contents: write
packages: write
pull-requests: read

env:
CSPROJ_FILE: src/Services/Services.csproj
DOTNET_VERSION: '8.0.x'

jobs:
get_release_or_prerelease:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Get latest release or prerelease
id: get_release_or_prerelease
run: |
RELEASES_JSON=$(gh release list --json tagName,name,isPrerelease --exclude-drafts)
LATEST_RELEASE_OR_PRERELEASE_JSON=$(echo "$RELEASES_JSON" | jq -r '.[0]')

RELEASE_TAG_NAME=$(echo "$LATEST_RELEASE_OR_PRERELEASE_JSON" | jq -r '.tagName')
RELEASE_NAME=$(echo "$LATEST_RELEASE_OR_PRERELEASE_JSON" | jq -r '.name')
RELEASE_IS_PRERELEASE=$(echo "$LATEST_RELEASE_OR_PRERELEASE_JSON" | jq -r '.isPrerelease')
RELEASE_VERSION="${RELEASE_TAG_NAME#"v"}"

REPO_URL="https://github.com/${GITHUB_REPOSITORY}"
RELEASE_URL="${REPO_URL}/releases/tag/${RELEASE_TAG_NAME}"

echo "release_version=$RELEASE_VERSION" >> "$GITHUB_OUTPUT"
echo "release_tag_name=$RELEASE_TAG_NAME" >> "$GITHUB_OUTPUT"
echo "release_url=$RELEASE_URL" >> "$GITHUB_OUTPUT"
echo "release_is_prerelease=$RELEASE_IS_PRERELEASE" >> "$GITHUB_OUTPUT"

echo "Found latest $(if [ "$RELEASE_IS_PRERELEASE" = "true" ]; then echo "prerelease"; else echo "release"; fi): $RELEASE_TAG_NAME"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
outputs:
release_version: ${{ steps.get_release_or_prerelease.outputs.release_version }}
release_tag_name: ${{ steps.get_release_or_prerelease.outputs.release_tag_name }}
release_url: ${{ steps.get_release_or_prerelease.outputs.release_url }}
release_is_prerelease: ${{ steps.get_release_or_prerelease.outputs.release_is_prerelease }}

build_and_publish:
needs: get_release_or_prerelease
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Restore dependencies
run: dotnet restore ${{ env.CSPROJ_FILE }}

- name: Build
run: dotnet build ${{ env.CSPROJ_FILE }} --no-restore --configuration Release

- name: Pack
run: |
echo "Using version ${{ needs.get_release_or_prerelease.outputs.release_version }} from setup job."
dotnet pack ${{ env.CSPROJ_FILE }} --no-build --configuration Release \
-p:PackageVersion=${{ needs.get_release_or_prerelease.outputs.release_version }} \
-p:PackageReleaseNotes=${{ needs.get_release_or_prerelease.outputs.release_url }} \
-p:PackageProjectUrl="https://github.com/${{ github.repository }}" \
-p:RepositoryUrl="https://github.com/${{ github.repository }}.git" \
-p:RepositoryType="git" \
--include-symbols -p:SymbolPackageFormat=snupkg \
-o nupkgs
shell: bash

- name: List output files
run: |
echo "Listing built packages in nupkgs directory:"
ls nupkgs/
shell: bash

- name: Push NuGet Package
run: |
cd nupkgs
dotnet nuget push "*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
shell: pwsh

- name: Push to GitHub Packages
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cd nupkgs
dotnet nuget push "*.nupkg" --api-key $env:GITHUB_TOKEN --source "https://nuget.pkg.github.com/${{ github.repository_owner }}" --skip-duplicate
shell: pwsh


Loading