diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..959b78e
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,46 @@
+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.*"
+ - "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"
+ - "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.
+ 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/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..492435c 100644
--- a/GitTools.sln
+++ b/GitTools.sln
@@ -50,6 +50,8 @@ 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
+ .github\dependabot.yml = .github\dependabot.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_setup", "_setup", "{A26D07EF-C593-41ED-AFD0-A2660857BEA6}"
@@ -66,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}"
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
-
+