From 97a0b80cc0cd82dd34cc33c0b6c0ff0326549c49 Mon Sep 17 00:00:00 2001
From: darthsharp <48331467+darthsharp@users.noreply.github.com>
Date: Sat, 28 Mar 2026 15:50:34 +0100
Subject: [PATCH 1/4] chore: centralize NuGet package versioning and remove
explicit versions from project files
- Added `Directory.Packages.props` for central NuGet package version management.
- Removed explicit version specifications from individual `.csproj` files.
- Updated solution to include `Directory.Packages.props`.
---
Directory.Packages.props | 34 +++++++++++++++++++
GitTools.sln | 1 +
build/Build.csproj | 2 +-
.../CreativeCoders.Git.Abstractions.csproj | 4 +--
...ders.Git.Auth.CredentialManagerCore.csproj | 4 +--
.../CreativeCoders.Git.csproj | 6 ++--
.../CreativeCoders.GitTool.Base.csproj | 8 ++---
...CreativeCoders.GitTool.Cli.Commands.csproj | 4 +--
.../CreativeCoders.GitTool.Cli.GtApp.csproj | 4 +--
.../CreativeCoders.GitTool.GitHub.csproj | 8 ++---
.../CreativeCoders.GitTool.GitLab.csproj | 6 ++--
...uth.CredentialManagerCore.UnitTests.csproj | 18 +++++-----
.../CreativeCoders.Git.UnitTests.csproj | 16 ++++-----
...tiveCoders.GitTool.GitHub.UnitTests.csproj | 16 ++++-----
...tiveCoders.GitTool.GitLab.UnitTests.csproj | 16 ++++-----
.../CreativeCoders.GitTool.Tests.csproj | 16 ++++-----
16 files changed, 99 insertions(+), 64 deletions(-)
create mode 100644 Directory.Packages.props
diff --git a/Directory.Packages.props b/Directory.Packages.props
new file mode 100644
index 0000000..11ee905
--- /dev/null
+++ b/Directory.Packages.props
@@ -0,0 +1,34 @@
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/GitTools.sln b/GitTools.sln
index 6b7c6f5..c2092fd 100644
--- a/GitTools.sln
+++ b/GitTools.sln
@@ -50,6 +50,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__global", "__global", "{95
LICENSE = LICENSE
README.md = README.md
global.json = global.json
+ Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_setup", "_setup", "{A26D07EF-C593-41ED-AFD0-A2660857BEA6}"
diff --git a/build/Build.csproj b/build/Build.csproj
index caf68a7..3a934a9 100644
--- a/build/Build.csproj
+++ b/build/Build.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/source/Git/CreativeCoders.Git.Abstractions/CreativeCoders.Git.Abstractions.csproj b/source/Git/CreativeCoders.Git.Abstractions/CreativeCoders.Git.Abstractions.csproj
index 38dcfa6..cb39ec5 100644
--- a/source/Git/CreativeCoders.Git.Abstractions/CreativeCoders.Git.Abstractions.csproj
+++ b/source/Git/CreativeCoders.Git.Abstractions/CreativeCoders.Git.Abstractions.csproj
@@ -5,8 +5,8 @@
-
-
+
+
diff --git a/source/Git/CreativeCoders.Git.Auth.CredentialManagerCore/CreativeCoders.Git.Auth.CredentialManagerCore.csproj b/source/Git/CreativeCoders.Git.Auth.CredentialManagerCore/CreativeCoders.Git.Auth.CredentialManagerCore.csproj
index 9d8b465..d425713 100644
--- a/source/Git/CreativeCoders.Git.Auth.CredentialManagerCore/CreativeCoders.Git.Auth.CredentialManagerCore.csproj
+++ b/source/Git/CreativeCoders.Git.Auth.CredentialManagerCore/CreativeCoders.Git.Auth.CredentialManagerCore.csproj
@@ -5,8 +5,8 @@
-
-
+
+
diff --git a/source/Git/CreativeCoders.Git/CreativeCoders.Git.csproj b/source/Git/CreativeCoders.Git/CreativeCoders.Git.csproj
index 4795f10..176c451 100644
--- a/source/Git/CreativeCoders.Git/CreativeCoders.Git.csproj
+++ b/source/Git/CreativeCoders.Git/CreativeCoders.Git.csproj
@@ -5,9 +5,9 @@
-
-
-
+
+
+
diff --git a/source/GitTool/CreativeCoders.GitTool.Base/CreativeCoders.GitTool.Base.csproj b/source/GitTool/CreativeCoders.GitTool.Base/CreativeCoders.GitTool.Base.csproj
index 613a962..efd9da2 100644
--- a/source/GitTool/CreativeCoders.GitTool.Base/CreativeCoders.GitTool.Base.csproj
+++ b/source/GitTool/CreativeCoders.GitTool.Base/CreativeCoders.GitTool.Base.csproj
@@ -5,10 +5,10 @@
-
-
-
-
+
+
+
+
diff --git a/source/GitTool/CreativeCoders.GitTool.Cli.Commands/CreativeCoders.GitTool.Cli.Commands.csproj b/source/GitTool/CreativeCoders.GitTool.Cli.Commands/CreativeCoders.GitTool.Cli.Commands.csproj
index 925be94..2720180 100644
--- a/source/GitTool/CreativeCoders.GitTool.Cli.Commands/CreativeCoders.GitTool.Cli.Commands.csproj
+++ b/source/GitTool/CreativeCoders.GitTool.Cli.Commands/CreativeCoders.GitTool.Cli.Commands.csproj
@@ -7,8 +7,8 @@
-
-
+
+
diff --git a/source/GitTool/CreativeCoders.GitTool.Cli.GtApp/CreativeCoders.GitTool.Cli.GtApp.csproj b/source/GitTool/CreativeCoders.GitTool.Cli.GtApp/CreativeCoders.GitTool.Cli.GtApp.csproj
index 6bd35e1..7a40e23 100644
--- a/source/GitTool/CreativeCoders.GitTool.Cli.GtApp/CreativeCoders.GitTool.Cli.GtApp.csproj
+++ b/source/GitTool/CreativeCoders.GitTool.Cli.GtApp/CreativeCoders.GitTool.Cli.GtApp.csproj
@@ -13,8 +13,8 @@
-
-
+
+
diff --git a/source/GitTool/CreativeCoders.GitTool.GitHub/CreativeCoders.GitTool.GitHub.csproj b/source/GitTool/CreativeCoders.GitTool.GitHub/CreativeCoders.GitTool.GitHub.csproj
index 579ed7a..6f334fe 100644
--- a/source/GitTool/CreativeCoders.GitTool.GitHub/CreativeCoders.GitTool.GitHub.csproj
+++ b/source/GitTool/CreativeCoders.GitTool.GitHub/CreativeCoders.GitTool.GitHub.csproj
@@ -5,10 +5,10 @@
-
-
-
-
+
+
+
+
diff --git a/source/GitTool/CreativeCoders.GitTool.GitLab/CreativeCoders.GitTool.GitLab.csproj b/source/GitTool/CreativeCoders.GitTool.GitLab/CreativeCoders.GitTool.GitLab.csproj
index 0332cb7..2ae1c09 100644
--- a/source/GitTool/CreativeCoders.GitTool.GitLab/CreativeCoders.GitTool.GitLab.csproj
+++ b/source/GitTool/CreativeCoders.GitTool.GitLab/CreativeCoders.GitTool.GitLab.csproj
@@ -5,9 +5,9 @@
-
-
-
+
+
+
diff --git a/tests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests.csproj b/tests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests.csproj
index 546ee84..03d79e6 100644
--- a/tests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests.csproj
+++ b/tests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests/CreativeCoders.Git.Auth.CredentialManagerCore.UnitTests.csproj
@@ -5,24 +5,24 @@
-
-
-
-
-
-
+
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/tests/CreativeCoders.Git.UnitTests/CreativeCoders.Git.UnitTests.csproj b/tests/CreativeCoders.Git.UnitTests/CreativeCoders.Git.UnitTests.csproj
index b25d634..8a7dc83 100644
--- a/tests/CreativeCoders.Git.UnitTests/CreativeCoders.Git.UnitTests.csproj
+++ b/tests/CreativeCoders.Git.UnitTests/CreativeCoders.Git.UnitTests.csproj
@@ -5,23 +5,23 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/tests/CreativeCoders.GitTool.GitHub.UnitTests/CreativeCoders.GitTool.GitHub.UnitTests.csproj b/tests/CreativeCoders.GitTool.GitHub.UnitTests/CreativeCoders.GitTool.GitHub.UnitTests.csproj
index 2061174..32d8364 100644
--- a/tests/CreativeCoders.GitTool.GitHub.UnitTests/CreativeCoders.GitTool.GitHub.UnitTests.csproj
+++ b/tests/CreativeCoders.GitTool.GitHub.UnitTests/CreativeCoders.GitTool.GitHub.UnitTests.csproj
@@ -5,23 +5,23 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/tests/CreativeCoders.GitTool.GitLab.UnitTests/CreativeCoders.GitTool.GitLab.UnitTests.csproj b/tests/CreativeCoders.GitTool.GitLab.UnitTests/CreativeCoders.GitTool.GitLab.UnitTests.csproj
index e642bc3..681f234 100644
--- a/tests/CreativeCoders.GitTool.GitLab.UnitTests/CreativeCoders.GitTool.GitLab.UnitTests.csproj
+++ b/tests/CreativeCoders.GitTool.GitLab.UnitTests/CreativeCoders.GitTool.GitLab.UnitTests.csproj
@@ -5,23 +5,23 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/tests/CreativeCoders.GitTool.Tests/CreativeCoders.GitTool.Tests.csproj b/tests/CreativeCoders.GitTool.Tests/CreativeCoders.GitTool.Tests.csproj
index f81dccf..cc4bb43 100644
--- a/tests/CreativeCoders.GitTool.Tests/CreativeCoders.GitTool.Tests.csproj
+++ b/tests/CreativeCoders.GitTool.Tests/CreativeCoders.GitTool.Tests.csproj
@@ -10,23 +10,23 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
From 176f429d1ddd366d4ac2b23ee4671928327e949c Mon Sep 17 00:00:00 2001
From: darthsharp <48331467+darthsharp@users.noreply.github.com>
Date: Sat, 28 Mar 2026 15:56:17 +0100
Subject: [PATCH 2/4] chore: add Dependabot configuration and workflows for
automated dependency updates
- Introduced `.github/dependabot.yml` to manage dependency update scheduling and grouping.
- Added `dependabot-auto-merge.yml` for automating merges of minor and patch updates.
- Added `dependabot-manual.yml` to enable manual dependency checks and updates.
- Updated solution file to include new Dependabot configuration and workflows.
---
.github/dependabot.yml | 55 +++++++++++++++++++++
.github/workflows/dependabot-auto-merge.yml | 40 +++++++++++++++
.github/workflows/dependabot-manual.yml | 54 ++++++++++++++++++++
GitTools.sln | 3 ++
4 files changed, 152 insertions(+)
create mode 100644 .github/dependabot.yml
create mode 100644 .github/workflows/dependabot-auto-merge.yml
create mode 100644 .github/workflows/dependabot-manual.yml
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..d191eda
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,55 @@
+version: 2
+
+updates:
+ - package-ecosystem: "nuget"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ day: "monday"
+ time: "06:00"
+ timezone: "Europe/Berlin"
+ open-pull-requests-limit: 10
+ groups:
+ # Tier 1: Dev/Test dependencies — auto-merge on patch + minor
+ dev-dependencies:
+ patterns:
+ - "xunit*"
+ - "XunitXml.TestLogger"
+ - "FakeItEasy"
+ - "AwesomeAssertions"
+ - "Microsoft.NET.Test.Sdk"
+ - "coverlet.collector"
+ - "JetBrains.Annotations"
+ - "Cake.*"
+ # Tier 2: Production dependencies — auto-merge on patch only
+ microsoft-packages:
+ patterns:
+ - "Microsoft.Extensions.*"
+ - "Microsoft.AspNetCore.*"
+ - "Microsoft.EntityFrameworkCore*"
+ - "Microsoft.CodeAnalysis.*"
+ - "Microsoft.JSInterop"
+ runtime-libraries:
+ patterns:
+ - "Castle.Core"
+ - "Polly"
+ - "Newtonsoft.Json"
+ - "NHibernate"
+ - "LiteDB"
+ - "System.IO.Abstractions*"
+ - "System.Reactive"
+ - "System.IO.Ports"
+ - "Spectre.Console"
+ - "Swashbuckle.AspNetCore"
+ - "MimeMapping"
+ - "Octokit"
+ - "YamlDotNet"
+ - "log4net"
+ # Catch-all: Any package not matched by the groups above.
+ # Dependabot assigns each package to the first matching group only,
+ # so this will never include packages already covered above.
+ other-dependencies:
+ patterns:
+ - "*"
+ labels:
+ - "dependencies"
diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
new file mode 100644
index 0000000..9859f0d
--- /dev/null
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -0,0 +1,40 @@
+name: dependabot-auto-merge
+
+on:
+ pull_request:
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ auto-merge:
+ runs-on: ubuntu-latest
+ if: github.actor == 'dependabot[bot]'
+ steps:
+ - name: Fetch Dependabot metadata
+ id: metadata
+ uses: dependabot/fetch-metadata@v2
+ with:
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
+
+ # Tier 1: Dev/Test dependencies — auto-merge on patch + minor
+ - name: "Auto-merge Tier 1 (patch + minor)"
+ if: >-
+ steps.metadata.outputs.dependency-group == 'dev-dependencies' &&
+ (steps.metadata.outputs.update-type == 'version-update:semver-patch' ||
+ steps.metadata.outputs.update-type == 'version-update:semver-minor')
+ run: gh pr merge --auto --squash "$PR_URL"
+ env:
+ PR_URL: ${{ github.event.pull_request.html_url }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ # Tier 2: Production dependencies — auto-merge on patch only
+ - name: "Auto-merge Tier 2 (patch only)"
+ if: >-
+ steps.metadata.outputs.dependency-group != 'dev-dependencies' &&
+ steps.metadata.outputs.update-type == 'version-update:semver-patch'
+ run: gh pr merge --auto --squash "$PR_URL"
+ env:
+ PR_URL: ${{ github.event.pull_request.html_url }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/dependabot-manual.yml b/.github/workflows/dependabot-manual.yml
new file mode 100644
index 0000000..df05cd6
--- /dev/null
+++ b/.github/workflows/dependabot-manual.yml
@@ -0,0 +1,54 @@
+name: dependabot-manual
+
+on:
+ workflow_dispatch:
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ check-outdated:
+ name: Check outdated NuGet packages
+ runs-on: ubuntu-latest
+ env:
+ TERM: xterm
+ DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: 1
+ steps:
+ - uses: actions/checkout@v5
+ with:
+ fetch-depth: 0
+
+ - name: 'Cache: ~/.nuget/packages'
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.nuget/packages
+ key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }}
+
+ - name: Check for outdated packages
+ run: |
+ echo "## Outdated NuGet Packages" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo '```' >> $GITHUB_STEP_SUMMARY
+ dotnet list package --outdated 2>&1 | tee -a $GITHUB_STEP_SUMMARY
+ echo '```' >> $GITHUB_STEP_SUMMARY
+
+ - name: Trigger Dependabot update
+ run: |
+ set -euo pipefail
+
+ echo "Triggering Dependabot update via GitHub CLI..."
+ if response=$(gh api \
+ --method POST \
+ "/repos/${{ github.repository }}/dependabot/updates" \
+ --input - <<< '{}' 2>&1); then
+ echo "Dependabot trigger sent successfully."
+ echo "$response"
+ else
+ echo "Failed to trigger Dependabot update. gh api output:"
+ echo "$response"
+ exit 1
+ fi
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/GitTools.sln b/GitTools.sln
index c2092fd..492435c 100644
--- a/GitTools.sln
+++ b/GitTools.sln
@@ -51,6 +51,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__global", "__global", "{95
README.md = README.md
global.json = global.json
Directory.Packages.props = Directory.Packages.props
+ .github\dependabot.yml = .github\dependabot.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_setup", "_setup", "{A26D07EF-C593-41ED-AFD0-A2660857BEA6}"
@@ -67,6 +68,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ci", "ci", "{E91F4387-0278-
.github\workflows\pull-request.yml = .github\workflows\pull-request.yml
.github\workflows\release.yml = .github\workflows\release.yml
.github\workflows\sync-ai-config.yml = .github\workflows\sync-ai-config.yml
+ .github\workflows\dependabot-auto-merge.yml = .github\workflows\dependabot-auto-merge.yml
+ .github\workflows\dependabot-manual.yml = .github\workflows\dependabot-manual.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{DE982092-6508-4062-99D5-6A6EE9ECB81F}"
From d7ba5782ebac572cd987c1cedccce1dd950893f2 Mon Sep 17 00:00:00 2001
From: darthsharp <48331467+darthsharp@users.noreply.github.com>
Date: Sat, 28 Mar 2026 15:58:15 +0100
Subject: [PATCH 3/4] chore(dependabot): clean up unused package patterns in
configuration
---
.github/dependabot.yml | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index d191eda..4adf064 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -20,31 +20,15 @@ updates:
- "Microsoft.NET.Test.Sdk"
- "coverlet.collector"
- "JetBrains.Annotations"
- - "Cake.*"
# Tier 2: Production dependencies — auto-merge on patch only
microsoft-packages:
patterns:
- "Microsoft.Extensions.*"
- - "Microsoft.AspNetCore.*"
- - "Microsoft.EntityFrameworkCore*"
- - "Microsoft.CodeAnalysis.*"
- - "Microsoft.JSInterop"
runtime-libraries:
patterns:
- - "Castle.Core"
- - "Polly"
- "Newtonsoft.Json"
- - "NHibernate"
- - "LiteDB"
- - "System.IO.Abstractions*"
- - "System.Reactive"
- - "System.IO.Ports"
- "Spectre.Console"
- - "Swashbuckle.AspNetCore"
- - "MimeMapping"
- "Octokit"
- - "YamlDotNet"
- - "log4net"
# Catch-all: Any package not matched by the groups above.
# Dependabot assigns each package to the first matching group only,
# so this will never include packages already covered above.
From 1e8348dbdcd98c1bc6b2000c31b34a368a50e1fc Mon Sep 17 00:00:00 2001
From: darthsharp <48331467+darthsharp@users.noreply.github.com>
Date: Sat, 28 Mar 2026 16:00:12 +0100
Subject: [PATCH 4/4] chore(dependabot): add new package patterns for
CreativeCoders and runtime libraries
---
.github/dependabot.yml | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 4adf064..959b78e 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -18,17 +18,24 @@ updates:
- "FakeItEasy"
- "AwesomeAssertions"
- "Microsoft.NET.Test.Sdk"
- - "coverlet.collector"
+ - "coverlet.*"
- "JetBrains.Annotations"
+ - "CreativeCoders.CakeBuild"
# Tier 2: Production dependencies — auto-merge on patch only
microsoft-packages:
patterns:
- "Microsoft.Extensions.*"
+ creativecoders-packages:
+ patterns:
+ - "CreativeCoders.*"
runtime-libraries:
patterns:
+ - "Devlooped.CredentialManager"
+ - "GitLabApiClient"
+ - "LibGit2Sharp"
- "Newtonsoft.Json"
- - "Spectre.Console"
- "Octokit"
+ - "Spectre.Console"
# Catch-all: Any package not matched by the groups above.
# Dependabot assigns each package to the first matching group only,
# so this will never include packages already covered above.