Skip to content

Commit 300eee2

Browse files
committed
Merge branch 'main' into fix/udp-discovery-tcp-connection
2 parents b86877d + ae5d758 commit 300eee2

File tree

88 files changed

+5470
-2412
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+5470
-2412
lines changed

.gitattributes

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Set default behavior to automatically normalize line endings to CRLF
2+
* text=auto eol=crlf
3+
4+
# Explicitly declare text files you want to always be normalized and converted
5+
# to native line endings on checkout.
6+
*.cs text eol=crlf
7+
*.xaml text eol=crlf
8+
*.xml text eol=crlf
9+
*.json text eol=crlf
10+
*.md text eol=crlf
11+
*.txt text eol=crlf
12+
*.yml text eol=crlf
13+
*.yaml text eol=crlf
14+
*.sln text eol=crlf
15+
*.csproj text eol=crlf
16+
*.props text eol=crlf
17+
*.targets text eol=crlf
18+
*.config text eol=crlf
19+
*.resx text eol=crlf
20+
*.settings text eol=crlf
21+
*.manifest text eol=crlf
22+
*.rc text eol=crlf
23+
*.def text eol=crlf
24+
*.bat text eol=crlf
25+
*.cmd text eol=crlf
26+
*.ps1 text eol=crlf
27+
*.sh text eol=lf
28+
*.gitignore text eol=crlf
29+
*.gitattributes text eol=crlf
30+
31+
# Denote all files that are truly binary and should not be modified.
32+
*.png binary
33+
*.jpg binary
34+
*.jpeg binary
35+
*.gif binary
36+
*.ico binary
37+
*.pdf binary
38+
*.exe binary
39+
*.dll binary
40+
*.so binary
41+
*.dylib binary
42+
*.lib binary
43+
*.a binary
44+
*.pdb binary
45+
*.pfx binary
46+
*.snk binary
47+
*.zip binary
48+
*.gz binary
49+
*.tar binary
50+
*.tgz binary
51+
*.bz2 binary
52+
*.7z binary
53+
*.nupkg binary
54+
55+
# Preserve specific line endings where required
56+
Makefile text eol=lf
57+
makefile text eol=lf
58+
*.mk text eol=lf
59+
60+
# Note: We intentionally use eol=crlf as the default (line 2) rather than auto
61+
# because this is a Windows desktop application (.NET/WPF) and we want consistent
62+
# CRLF line endings across all development environments (Windows, WSL, etc.)

.github/dependabot.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@ updates:
77
labels:
88
- "dependencies"
99
- "nuget"
10+
commit-message:
11+
prefix: "deps: "
1012

1113
- package-ecosystem: "github-actions"
1214
directory: "/"
1315
schedule:
1416
interval: "weekly"
1517
labels:
1618
- "dependencies"
17-
- "github-actions"
19+
- "github-actions"
20+
commit-message:
21+
prefix: "deps: "

.github/workflows/build.yaml

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
runs-on: windows-latest
99

1010
steps:
11-
- uses: actions/checkout@v4
11+
- uses: actions/checkout@v5
1212

1313
- name: Setup .NET
1414
uses: actions/setup-dotnet@v4
@@ -18,24 +18,69 @@ jobs:
1818
- name: Restore dependencies
1919
run: dotnet restore
2020

21-
- name: Build
22-
run: dotnet build --no-restore --configuration Release
21+
- name: Build with Analysis
22+
run: dotnet build --no-restore --configuration Release /p:EnforceCodeStyleInBuild=true
2323

24-
- name: Test
24+
- name: Test with Coverage
2525
run: dotnet test --no-build --verbosity normal --configuration Release --collect:"XPlat Code Coverage" --results-directory ./TestResults/ /p:CoverletOutputFormat=cobertura
2626

27-
- name: Upload coverage reports
27+
- name: Install ReportGenerator
28+
run: dotnet tool install -g dotnet-reportgenerator-globaltool
29+
30+
- name: Generate Coverage Report
31+
run: reportgenerator -reports:"./TestResults/**/coverage.cobertura.xml" -targetdir:"./CoverageReport" -reporttypes:"HtmlInline_AzurePipelines;TextSummary;MarkdownSummaryGithub" -verbosity:Warning
32+
33+
- name: Upload Coverage Report
2834
uses: actions/upload-artifact@v4
2935
with:
3036
name: coverage-report
31-
path: ./TestResults/**/coverage.cobertura.xml
32-
if-no-files-found: warn # Don't fail the build if no tests are found / run
37+
path: ./CoverageReport/
38+
if-no-files-found: warn
3339

34-
- name: Upload coverage to Codacy
35-
uses: codacy/codacy-coverage-reporter-action@v1
36-
with:
37-
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
38-
coverage-reports: ./TestResults/**/coverage.cobertura.xml # Or specific path if known
40+
- name: Add Coverage to Step Summary
41+
if: github.event_name == 'pull_request'
42+
run: |
43+
if (Test-Path "./CoverageReport/SummaryGithub.md") {
44+
$summary = Get-Content "./CoverageReport/SummaryGithub.md" -Raw
45+
echo "## Code Coverage Report" >> $env:GITHUB_STEP_SUMMARY
46+
echo "$summary" >> $env:GITHUB_STEP_SUMMARY
47+
}
48+
shell: pwsh
49+
50+
- name: Comment Coverage on PR
51+
if: github.event_name == 'pull_request'
52+
run: |
53+
if (Test-Path "./CoverageReport/SummaryGithub.md") {
54+
$summary = Get-Content "./CoverageReport/SummaryGithub.md" -Raw
55+
$commentBody = @"
56+
## 📊 Code Coverage Report
57+
58+
$summary
59+
60+
---
61+
*Coverage report generated by [ReportGenerator](https://github.com/danielpalme/ReportGenerator) • [View full report in build artifacts](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})*
62+
"@
63+
64+
# Clean up any existing coverage comments first
65+
Write-Host "Cleaning up existing coverage comments..."
66+
$existingComments = gh api repos/${{ github.repository }}/issues/${{ github.event.number }}/comments --jq '.[] | select(.user.login == "github-actions[bot]" and (.body | contains("📊 Code Coverage Report"))) | .id'
67+
68+
if ($existingComments) {
69+
$commentIds = $existingComments -split "`n" | Where-Object { $_.Trim() -ne "" }
70+
foreach ($commentId in $commentIds) {
71+
Write-Host "Deleting existing coverage comment: $commentId"
72+
gh api repos/${{ github.repository }}/issues/comments/$commentId --method DELETE
73+
}
74+
Write-Host "Cleaned up $($commentIds.Count) existing coverage comment(s)"
75+
}
76+
77+
# Create new comment
78+
Write-Host "Creating new coverage comment"
79+
$commentBody | gh pr comment ${{ github.event.number }} --body-file -
80+
}
81+
shell: pwsh
82+
env:
83+
GH_TOKEN: ${{ github.token }}
3984

4085
- name: Build MSI Installer
4186
run: |

.github/workflows/claude.yml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Claude Code
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
pull_request_review_comment:
7+
types: [created]
8+
issues:
9+
types: [opened, assigned]
10+
pull_request_review:
11+
types: [submitted]
12+
13+
jobs:
14+
claude:
15+
if: |
16+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20+
runs-on: ubuntu-latest
21+
permissions:
22+
contents: read
23+
pull-requests: read
24+
issues: read
25+
id-token: write
26+
actions: read # Required for Claude to read CI results on PRs
27+
steps:
28+
- name: Checkout repository
29+
uses: actions/checkout@v5
30+
with:
31+
fetch-depth: 1
32+
33+
- name: Run Claude Code
34+
id: claude
35+
uses: anthropics/claude-code-action@beta
36+
with:
37+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38+
39+
# This is an optional setting that allows Claude to read CI results on PRs
40+
additional_permissions: |
41+
actions: read
42+
43+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
44+
# model: "claude-opus-4-20250514"
45+
46+
# Optional: Customize the trigger phrase (default: @claude)
47+
# trigger_phrase: "/claude"
48+
49+
# Optional: Trigger when specific user is assigned to an issue
50+
# assignee_trigger: "claude-bot"
51+
52+
# Optional: Allow Claude to run specific commands
53+
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
54+
55+
# Optional: Add custom instructions for Claude to customize its behavior for your project
56+
# custom_instructions: |
57+
# Follow our coding standards
58+
# Ensure all new code has tests
59+
# Use TypeScript for new files
60+
61+
# Optional: Custom environment variables for Claude
62+
# claude_env: |
63+
# NODE_ENV: test
64+

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
runs-on: windows-latest
1010

1111
steps:
12-
- uses: actions/checkout@v4
12+
- uses: actions/checkout@v5
1313

1414
- name: Setup .NET
1515
uses: actions/setup-dotnet@v4

0 commit comments

Comments
 (0)