Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
29f984f
ci(craft): publish each NuGet package as its own craft target (#5753)
ric-oliv Oct 21, 2026
04cac0d
feat: add Sentry.Quartz for cron monitoring of Quartz.NET 4.x jobs (#…
michaelmairegger Oct 21, 2026
8333e3b
chore: update scripts/update-cli.ps1 to 3.8.1 (#5768)
github-actions[bot] Oct 22, 2026
bd407cf
ci: skip generated code when collecting coverage (#5773)
ric-oliv Oct 22, 2026
4ca2609
chore(deps): update Cocoa SDK to v9.31.0 (#5769)
github-actions[bot] Oct 22, 2026
418367a
ci: skip the device test app in the macOS build and stop serializing …
ric-oliv Oct 22, 2026
7ececf8
ci: install only the .NET SDK in the Unsupported AOT jobs (#5774)
ric-oliv Oct 22, 2026
916d3d4
ci: Use craft's built-in version bumping (#5775)
sentry-junior[bot] Oct 22, 2026
aa4bd9a
test: pin System.Security.Cryptography.Pkcs in DiagnosticSource integ…
jamescrosswell Oct 22, 2026
1d52ea0
chore: update scripts/update-cli.ps1 to 3.8.2 (#5778)
github-actions[bot] Oct 23, 2026
f080ba4
chore: update scripts/update-java.ps1 to 8.61.1 (#5777)
github-actions[bot] Oct 23, 2026
ff0355e
ci: cache the Cocoa SDK build (#5781)
ric-oliv Oct 23, 2026
b41b96c
Bump sharpie.bind.tool from 27.0.0.722 to 27.1.0.18 (#5779)
dependabot[bot] Oct 23, 2026
b21628f
build(deps): bump the github-actions group across 2 directories with …
dependabot[bot] Oct 26, 2026
d147028
ci: stop installing and logging what the jobs don't use (#5807)
ric-oliv Oct 27, 2026
14c086d
ci: install tzdata in the Alpine CI image (#5818)
schalkpienaar Oct 27, 2026
c1680a3
ci: speed up the Windows jobs (#5808)
ric-oliv Oct 27, 2026
d3053c1
ci: run the samples and integration tests in their own jobs (#5809)
ric-oliv Oct 27, 2026
d4dc935
ci: run the iOS and Android integration tests in their own jobs (#5810)
ric-oliv Oct 27, 2026
7c4dc43
ci: test unsupported AOT runtimes in the build legs (#5811)
ric-oliv Oct 27, 2026
f90333b
ci: run the Android emulator jobs on standard runners (#5812)
ric-oliv Oct 27, 2026
7b78cf0
ci: run the time zone tests on musl instead of skipping them (#5820)
schalkpienaar Oct 28, 2026
29bf3a4
chore: update scripts/update-java.ps1 to 8.62.0 (#5824)
github-actions[bot] Oct 28, 2026
3bba861
fix: drop attachments whose stream turns out empty when the envelope …
bitsandfoxes Oct 28, 2026
4b89b2f
ci: retry the powershell-yaml install when it fails (#5819)
ric-oliv Oct 29, 2026
46524ca
feat(hangfire): Add an option to monitor all recurring jobs (#5742)
wedamija Oct 29, 2026
f39654d
chore: update modules/sentry-native to 0.17.5 (#5826)
github-actions[bot] Oct 29, 2026
85c8a62
chore: Remove unused ExceptionHandlingSynchronizationContext (#5827)
sentry-junior[bot] Oct 29, 2026
5eeb216
fix(hangfire): Skip jobs with unsupported schedules when monitoring a…
wedamija Oct 29, 2026
fe691cc
feat(quartz): Add an option to monitor all scheduled jobs (#5741)
wedamija Oct 29, 2026
6381270
feat: add Sentry.Quartz3 for cron monitoring of Quartz.NET 3.x jobs (…
wedamija Oct 29, 2026
5d33189
perf: reduce allocations when pushing scopes via ILogger.BeginScope (…
martincostello Oct 29, 2026
11b5491
Merge branch 'main' into version7
jamescrosswell Oct 29, 2026
c9470fa
test(quartz3): Add MonitorAllJobs and ExcludedJobs to API snapshots
jamescrosswell Oct 29, 2026
d26b28a
test: fix main's new tests and snapshots for version7
jamescrosswell Oct 30, 2026
d28aa8b
ci: point the device tests' workload restore at maui-device
jamescrosswell Oct 30, 2026
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
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"sharpie.bind.tool": {
"version": "27.0.0.722",
"version": "27.1.0.18",
"commands": [
"sharpie"
],
Expand Down
25 changes: 22 additions & 3 deletions .craft.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
minVersion: 2.26.3
changelogPolicy: auto
preReleaseCommand: bash scripts/bump-version.sh
minVersion: 3.0.0
changelog:
policy: auto
versioning:
policy: auto
targets:
- name: nuget
# Craft reads Sentry.slnx and the project files to find our packages, and publishes each one as
# its own target in dependency order, so a retried release only pushes the packages that failed.
# It doesn't evaluate MSBuild: the test apps with their own Directory.Build.props look packable
# to it, so they're excluded by name. A package that the filters miss is silently not published:
# run `craft targets` after adding a package or a test app and check the list.
workspaces: true
solutionPath: Sentry.slnx
includeWorkspaces: '/^Sentry/'
excludeWorkspaces: '/(TrimTest|CrashableApp)$/'
- name: github
- name: registry
# Every package carries name/packageUrl/mainDocsUrl so craft can create the registry entry
Expand Down Expand Up @@ -92,3 +103,11 @@ targets:
name: Sentry.Profiling
packageUrl: https://www.nuget.org/packages/Sentry.Profiling
mainDocsUrl: https://docs.sentry.io/platforms/dotnet/profiling/
nuget:Sentry.Quartz:
name: Sentry.Quartz
packageUrl: https://www.nuget.org/packages/Sentry.Quartz
mainDocsUrl: https://docs.sentry.io/platforms/dotnet/crons/quartz/
nuget:Sentry.Quartz3:
name: Sentry.Quartz3
packageUrl: https://www.nuget.org/packages/Sentry.Quartz3
mainDocsUrl: https://docs.sentry.io/platforms/dotnet/crons/quartz/
7 changes: 5 additions & 2 deletions .generated.NoMobile.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -119,14 +119,13 @@
<Project Path="samples/Sentry.Samples.OpenTelemetry.AzureFunctions/Sentry.Samples.OpenTelemetry.AzureFunctions.csproj" />
<Project Path="samples/Sentry.Samples.OpenTelemetry.Console/Sentry.Samples.OpenTelemetry.Console.csproj" />
<Project Path="samples/Sentry.Samples.OpenTelemetry.MongoDB/Sentry.Samples.OpenTelemetry.MongoDB.csproj" />
<Project Path="samples/Sentry.Samples.Quartz/Sentry.Samples.Quartz.csproj" />
<Project Path="samples/Sentry.Samples.Serilog/Sentry.Samples.Serilog.csproj" />
</Folder>
<Folder Name="/scripts/">
<File Path="scripts/accept-verifier-changes.ps1" />
<File Path="scripts/build-sentry-cocoa.sh" />
<File Path="scripts/build-sentry-native.ps1" />
<File Path="scripts/bump-version.ps1" />
<File Path="scripts/bump-version.sh" />
<File Path="scripts/commit-formatted-code.sh" />
<File Path="scripts/device-test-utils.ps1" />
<File Path="scripts/device-test.ps1" />
Expand Down Expand Up @@ -170,6 +169,8 @@
<Project Path="src/Sentry.OpenTelemetry.Exporter/Sentry.OpenTelemetry.Exporter.csproj" />
<Project Path="src/Sentry.OpenTelemetry/Sentry.OpenTelemetry.csproj" />
<Project Path="src/Sentry.Profiling/Sentry.Profiling.csproj" />
<Project Path="src/Sentry.Quartz/Sentry.Quartz.csproj" />
<Project Path="src/Sentry.Quartz3/Sentry.Quartz3.csproj" />
<Project Path="src/Sentry.Serilog/Sentry.Serilog.csproj" />
<Project Path="src/Sentry/Sentry.csproj" />
</Folder>
Expand Down Expand Up @@ -205,6 +206,8 @@
<Project Path="test/Sentry.OpenTelemetry.Exporter.Tests/Sentry.OpenTelemetry.Exporter.Tests.csproj" />
<Project Path="test/Sentry.OpenTelemetry.Tests/Sentry.OpenTelemetry.Tests.csproj" />
<Project Path="test/Sentry.Profiling.Tests/Sentry.Profiling.Tests.csproj" />
<Project Path="test/Sentry.Quartz.Tests/Sentry.Quartz.Tests.csproj" />
<Project Path="test/Sentry.Quartz3.Tests/Sentry.Quartz3.Tests.csproj" />
<Project Path="test/Sentry.Serilog.Tests/Sentry.Serilog.Tests.csproj" />
<Project Path="test/Sentry.Testing.CrashableApp/Sentry.Testing.CrashableApp.csproj" />
<Project Path="test/Sentry.Testing/Sentry.Testing.csproj" />
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ body:
- Sentry.NLog
- Sentry.OpenTelemetry
- Sentry.Profiling
- Sentry.Quartz
- Sentry.Quartz3
- Sentry.Serilog
- Other
validations:
Expand Down
112 changes: 84 additions & 28 deletions .github/actions/environment/action.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,60 @@
name: Setup Environment
description: Sets env vars and installs dependencies
inputs:
projects:
description: The solution filters and project files the job builds, separated by spaces, so only the workloads they need are installed. Jobs that build everything pass Sentry.slnx.
required: true
runs:
using: composite

steps:

# The Windows images keep .NET under Program Files, where workloads install as MSI packages, and the NuGet cache
# in the user profile on C:. So .NET goes next to the workspace, where workloads install as plain files. The x64
# runners put the workspace on D:, so the NuGet packages go there too. The arm64 runners only have C:, so the
# NuGet packages and TEMP go on a Dev Drive there. Defender already excludes C:\ on these images.
- name: Install .NET and NuGet packages on a fast drive
if: runner.os == 'Windows'
shell: pwsh
run: |
$root = Split-Path $env:GITHUB_WORKSPACE
"DOTNET_INSTALL_DIR=$root\.dotnet" >> $env:GITHUB_ENV
if ($root.StartsWith('C:'))
{
try
{
# Only volumes mounted after this get no antivirus filters
fsutil devdrv enable /disallowAv | Out-Host
'create vdisk file="C:\devdrive.vhdx" maximum=81920 type=expandable', 'select vdisk file="C:\devdrive.vhdx"', 'attach vdisk', 'convert gpt', 'create partition primary' |
Set-Content "$env:RUNNER_TEMP\diskpart.txt"
diskpart /s "$env:RUNNER_TEMP\diskpart.txt" | Out-Host
if ($LASTEXITCODE -ne 0) { throw "diskpart failed with exit code $LASTEXITCODE" }
$partition = Get-DiskImage -ImagePath 'C:\devdrive.vhdx' | Get-Disk | Get-Partition | Where-Object Type -eq 'Basic'
$partition | Format-Volume -DevDrive -Confirm:$false -Force | Out-Host
$partition | Add-PartitionAccessPath -AccessPath 'X:\'
# Right after the mount, trust can fail with "Access is denied" while the volume is still in use
for ($attempt = 1; $attempt -le 5; $attempt++)
{
fsutil devdrv trust X: | Out-Host
if ($LASTEXITCODE -eq 0) { break }
Start-Sleep -Seconds 3
}
if ($LASTEXITCODE -ne 0) { Write-Warning "Couldn't mark X: as a trusted Dev Drive, so antivirus filters may still scan it" }
fsutil devdrv query X: | Out-Host
New-Item -ItemType Directory 'X:\tmp' | Out-Null
'TEMP=X:\tmp' >> $env:GITHUB_ENV
'TMP=X:\tmp' >> $env:GITHUB_ENV
$root = 'X:'
}
catch
{
# The Dev Drive is a speedup, so the job goes on without it
Write-Warning "Couldn't set up the Dev Drive, so the NuGet packages stay next to the workspace: $_"
}
}
"NUGET_PACKAGES=$root\.nuget\packages" >> $env:GITHUB_ENV
$global:LASTEXITCODE = 0

- name: Set Global Environment Variables
shell: bash
run: |
Expand Down Expand Up @@ -36,37 +86,20 @@ runs:

# Java 21 is needed by .NET Android
- name: Install Java 21
if: ${{ !matrix.container }}
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
if: ${{ !matrix.container && env.NO_MOBILE != 'true' }}
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: temurin
java-version: '21'

- name: Setup Android SDK
if: ${{ !matrix.container }}
if: ${{ !matrix.container && env.NO_MOBILE != 'true' }}
uses: android-actions/setup-android@be39fa834029ff78f1a44aa3bb0819b8fc2bd8fd # v4.0.4
with:
# Exclude "tools" because the emulator is not needed (nor available for Windows/Linux ARM64)
packages: platform-tools platforms;android-35 platforms;android-36 platforms;android-37.0 build-tools;36.0.0
log-accepted-android-sdk-licenses: false

- name: Install Mono (macOS)
if: runner.os == 'macOS'
shell: bash
# Attempt to install Mono, allowing it to fail silently
# Then ensure mono is correctly linked, overwriting any conflicting symlinks
run: |
brew install mono || true
brew link --overwrite mono

- name: Install Mono (Ubuntu)
if: ${{ runner.os == 'Linux' && !matrix.container }}
shell: bash
run: |
sudo apt install -y mono-devel
# restore perms for actions/setup-dotnet
sudo chmod -R a+rw /usr/share/dotnet

- name: Install .NET SDK
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
Expand All @@ -85,14 +118,37 @@ runs:

- name: Install .NET Workloads
shell: bash
env:
PROJECTS: ${{ inputs.projects }}
run: |
set -euo pipefail
pwd
dotnet workload restore \
--temp-dir "${{ runner.temp }}" \
--skip-sign-check
dotnet workload restore test/AndroidTestApp/AndroidTestApp.csproj \
--temp-dir "${{ runner.temp }}" \
--skip-sign-check
# Restore the Android test app explicitly to ensure runtime packs are available
dotnet restore test/AndroidTestApp/AndroidTestApp.csproj -r android-x64 --nologo || true
projects=()
for item in $PROJECTS; do
if [[ "$item" == *.slnf ]]; then
# dotnet workload restore doesn't accept a solution filter, but it accepts the projects in one
found=$(grep -o '"[^"]*\.csproj"' "$item" | tr -d '"' | sed 's#\\\\#/#g' || true)
if [[ -z "$found" ]]; then
echo "::error::Found no projects in $item, so there are no workloads to restore"
exit 1
fi
projects+=($found)
else
projects+=("$item")
fi
done
if [[ ${#projects[@]} -eq 0 ]]; then
echo "::error::Pass the solution filters or project files this job builds as projects, so only their workloads are installed"
exit 1
fi
dotnet workload restore "${projects[@]}" --temp-dir "${{ runner.temp }}" --skip-sign-check
# Sentry.Android.AssemblyReader.Tests builds the Android test app with an MSBuild task, not a project reference,
# so workload restore doesn't see it. grep reads a here-string because with pipefail, printf piped into grep -q
# fails with SIGPIPE when grep exits before printf has written everything.
if grep -q -E 'Sentry\.slnx$|Sentry\.Android\.AssemblyReader\.Tests|AndroidTestApp' <<< "$(printf '%s\n' "${projects[@]}")"; then
dotnet workload restore test/AndroidTestApp/AndroidTestApp.csproj \
--temp-dir "${{ runner.temp }}" \
--skip-sign-check
# Restore the Android test app explicitly to ensure runtime packs are available
dotnet restore test/AndroidTestApp/AndroidTestApp.csproj -r android-x64 --nologo || true
fi
4 changes: 2 additions & 2 deletions .github/alpine/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ FROM ${BASE}
RUN apk update

# common
RUN apk add bash build-base cmake curl git gpg icu lsb-release-minimal nodejs npm sudo tar wget
RUN apk add bash build-base cmake curl git gpg icu lsb-release-minimal nodejs npm sudo tar tzdata wget

# sentry-native
RUN apk add curl-dev docker-cli libunwind-dev libunwind-static linux-headers openssl-dev zlib-dev xz-dev xz-static
Expand All @@ -14,7 +14,7 @@ RUN apk add curl-dev docker-cli libunwind-dev libunwind-static linux-headers ope
RUN apk add grpc-plugins openjdk11 powershell
ENV PROTOBUF_PROTOC=/usr/bin/protoc
ENV GRPC_PROTOC_PLUGIN=/usr/bin/grpc_csharp_plugin
RUN pwsh -Command Install-Module Pester -Scope AllUsers -Force
RUN pwsh -Command "Install-Module Pester -Scope AllUsers -Force -ErrorAction Stop"

# mono (3.22+)
RUN if ! apk add mono; then \
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/alpine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}

- uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4.4.0
with:
# The action runs this image privileged, so it's pinned like the action
image: docker.io/tonistiigi/binfmt@sha256:400a4873b838d1b89194d982c45e5fb3cda4593fbfd7e08a02e76b03b21166f0
- uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0

- uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
Expand Down
Loading
Loading