Skip to content

[Azure Functions] Add Build-AzureFunctionsNuget.ps1 helper script for local developement#7633

Merged
lucaspimentel merged 5 commits intomasterfrom
lpimentel/azure-functions/add-local-build-script
Oct 8, 2025
Merged

[Azure Functions] Add Build-AzureFunctionsNuget.ps1 helper script for local developement#7633
lucaspimentel merged 5 commits intomasterfrom
lpimentel/azure-functions/add-local-build-script

Conversation

@lucaspimentel
Copy link
Member

@lucaspimentel lucaspimentel commented Oct 8, 2025

Summary of changes

Adds a PowerShell helper script tracer/tools/Build-AzureFunctionsNuget.ps1 for local Azure Functions development and documents it in the Azure Functions development guide.

Reason for change

When developing changes to Datadog.Trace that need to be tested in Azure Functions, waiting for full CI builds is time-consuming. This script streamlines the local development workflow.

Implementation details

The script:

  • Cleans up previous builds from the artifacts directory
  • Removes the Datadog.AzureFunctions package from the local NuGet cache
  • Optionally downloads Datadog.Trace.Bundle from a specific Azure DevOps build (-BuildId parameter)
  • Builds Datadog.Trace and publishes to the bundle folder (net6.0 and net461 targets)
  • Builds the Datadog.AzureFunctions NuGet package
  • Optionally copies the built package to a specified path (-CopyTo parameter)
  • Supports -Verbose for detailed progress output

The script follows PowerShell best practices:

  • Comment-based help (supports Get-Help)
  • [CmdletBinding()] for common parameters (-Verbose, -ErrorAction, etc.)
  • Path resolution relative to script location (works from any directory)
  • Proper error handling with $ErrorActionPreference

Documentation added to docs/development/AzureFunctions.md with usage examples.

Test coverage

Manual testing - this is a development helper script.

Usage:

# Build using existing bundle
.\tracer\tools\Build-AzureFunctionsNuget.ps1

# Download bundle from a specific build first
.\tracer\tools\Build-AzureFunctionsNuget.ps1 -BuildId 12345

# Build and copy package to a specific location
.\tracer\tools\Build-AzureFunctionsNuget.ps1 -CopyTo 'D:\temp\nuget'

# Use -Verbose for detailed progress
.\tracer\tools\Build-AzureFunctionsNuget.ps1 -Verbose

# View full documentation
Get-Help .\tracer\tools\Build-AzureFunctionsNuget.ps1 -Full

Other details

N/A

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

lucaspimentel and others added 4 commits October 8, 2025 13:59
- Add -CopyTo parameter to copy built package to specified path
- Add -Verbose support throughout script for detailed progress
- Add comment-based help documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add Local Development section with usage examples and script description.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@lucaspimentel lucaspimentel changed the title Add Build-AzureFunctionsNuget.ps1 helper script Add Build-AzureFunctionsNuget.ps1 helper script for local developement Oct 8, 2025
@lucaspimentel lucaspimentel marked this pull request as ready for review October 8, 2025 18:35
@lucaspimentel lucaspimentel requested review from a team as code owners October 8, 2025 18:35
Copy link
Collaborator

@bouwkast bouwkast left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that this could just be a Nuke step instead of a separate powershell script

@pr-commenter
Copy link

pr-commenter bot commented Oct 8, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7633 compared to master:

  • 1 benchmarks are faster, with geometric mean 2.534
  • 4 benchmarks are slower, with geometric mean 1.355
  • 6 benchmarks have fewer allocations
  • 8 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 6.07 KB 5.99 KB -79 B -1.30%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 10.7μs 60.4ns 405ns 0 0 0 5.52 KB
master StartStopWithChild netcoreapp3.1 13.3μs 69.6ns 326ns 0 0 0 5.72 KB
master StartStopWithChild net472 22.2μs 122ns 712ns 0.987 0.329 0.11 6.07 KB
#7633 StartStopWithChild net6.0 10.1μs 56.9ns 382ns 0 0 0 5.49 KB
#7633 StartStopWithChild netcoreapp3.1 14.1μs 66.4ns 257ns 0 0 0 5.7 KB
#7633 StartStopWithChild net472 22.3μs 125ns 769ns 1.03 0.413 0.103 5.99 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 929μs 100ns 361ns 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.02ms 170ns 658ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.19ms 44.8ns 162ns 0 0 0 3.31 KB
#7633 WriteAndFlushEnrichedTraces net6.0 925μs 312ns 1.21μs 0 0 0 2.71 KB
#7633 WriteAndFlushEnrichedTraces netcoreapp3.1 1.03ms 190ns 659ns 0 0 0 2.7 KB
#7633 WriteAndFlushEnrichedTraces net472 1.19ms 102ns 366ns 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody‑net472 203.96 KB 210.13 KB 6.17 KB 3.02%
Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleMoreComplexBody‑net472 207.5 KB 213.66 KB 6.16 KB 2.97%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 345μs 1.2μs 4.66μs 0 0 0 178.25 KB
master AllCycleSimpleBody netcoreapp3.1 507μs 1.08μs 4.05μs 0 0 0 184.01 KB
master AllCycleSimpleBody net472 461μs 91.7ns 343ns 31.2 0 0 203.96 KB
master AllCycleMoreComplexBody net6.0 352μs 193ns 747ns 0 0 0 181.77 KB
master AllCycleMoreComplexBody netcoreapp3.1 508μs 855ns 3.31μs 0 0 0 187.44 KB
master AllCycleMoreComplexBody net472 468μs 155ns 578ns 32.4 0 0 207.5 KB
master ObjectExtractorSimpleBody net6.0 331ns 0.828ns 3.21ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 391ns 2.18ns 13.2ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 298ns 0.0436ns 0.169ns 0.0434 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.31μs 1.29ns 4.84ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.8μs 26.5ns 103ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.74μs 4ns 15.5ns 0.575 0 0 3.8 KB
#7633 AllCycleSimpleBody net6.0 348μs 1.76μs 8.62μs 0 0 0 178.33 KB
#7633 AllCycleSimpleBody netcoreapp3.1 512μs 1.73μs 6.71μs 0 0 0 184.01 KB
#7633 AllCycleSimpleBody net472 459μs 120ns 448ns 31.2 0 0 210.13 KB
#7633 AllCycleMoreComplexBody net6.0 354μs 1.75μs 6.78μs 0 0 0 181.77 KB
#7633 AllCycleMoreComplexBody netcoreapp3.1 515μs 2.19μs 8.48μs 0 0 0 187.44 KB
#7633 AllCycleMoreComplexBody net472 467μs 105ns 408ns 32.4 0 0 213.66 KB
#7633 ObjectExtractorSimpleBody net6.0 318ns 1.8ns 11.8ns 0 0 0 280 B
#7633 ObjectExtractorSimpleBody netcoreapp3.1 393ns 2.23ns 15.1ns 0 0 0 272 B
#7633 ObjectExtractorSimpleBody net472 292ns 0.0228ns 0.0823ns 0.0441 0 0 281 B
#7633 ObjectExtractorMoreComplexBody net6.0 6.46μs 8.4ns 32.5ns 0 0 0 3.78 KB
#7633 ObjectExtractorMoreComplexBody netcoreapp3.1 7.69μs 38.9ns 182ns 0 0 0 3.69 KB
#7633 ObjectExtractorMoreComplexBody net472 6.66μs 1.14ns 4.43ns 0.599 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 76.6μs 319ns 1.23μs 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 97.3μs 264ns 1.02μs 0 0 0 32.4 KB
master EncodeArgs net472 109μs 12.9ns 50.1ns 4.9 0 0 32.51 KB
master EncodeLegacyArgs net6.0 147μs 22.9ns 82.4ns 0 0 0 2.14 KB
master EncodeLegacyArgs netcoreapp3.1 199μs 56.1ns 202ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 271μs 35.9ns 134ns 0 0 0 2.16 KB
#7633 EncodeArgs net6.0 75.7μs 294ns 1.14μs 0 0 0 32.4 KB
#7633 EncodeArgs netcoreapp3.1 97.1μs 29.1ns 113ns 0 0 0 32.4 KB
#7633 EncodeArgs net472 109μs 7.91ns 28.5ns 4.92 0 0 32.51 KB
#7633 EncodeLegacyArgs net6.0 145μs 27.2ns 102ns 0 0 0 2.14 KB
#7633 EncodeLegacyArgs netcoreapp3.1 199μs 310ns 1.2μs 0 0 0 2.14 KB
#7633 EncodeLegacyArgs net472 264μs 80.2ns 311ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7633

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmark‑netcoreapp3.1 2.003 425,957.76 853,163.85

Faster 🎉 in #7633

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmarkWithAttack‑netcoreapp3.1 2.534 752,732.39 297,099.78

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 397μs 77.6ns 290ns 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 426μs 213ns 798ns 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 430μs 49.6ns 192ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 286μs 60.1ns 225ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 674μs 14.8μs 148μs 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 310μs 17.6ns 65.7ns 0 0 0 2.29 KB
#7633 RunWafRealisticBenchmark net6.0 394μs 146ns 526ns 0 0 0 4.55 KB
#7633 RunWafRealisticBenchmark netcoreapp3.1 811μs 13.3μs 130μs 0 0 0 4.48 KB
#7633 RunWafRealisticBenchmark net472 432μs 69.7ns 270ns 0 0 0 4.66 KB
#7633 RunWafRealisticBenchmarkWithAttack net6.0 287μs 33.2ns 129ns 0 0 0 2.24 KB
#7633 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 298μs 533ns 2.06μs 0 0 0 2.22 KB
#7633 RunWafRealisticBenchmarkWithAttack net472 310μs 18.8ns 70.4ns 0 0 0 2.29 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 62.2μs 19.6ns 67.9ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 72.7μs 45.7ns 171ns 0 0 0 17.42 KB
master SendRequest net472 0.00154ns 0.000973ns 0.00377ns 0 0 0 0 b
#7633 SendRequest net6.0 61.8μs 215ns 774ns 0 0 0 14.52 KB
#7633 SendRequest netcoreapp3.1 71.9μs 69.6ns 251ns 0 0 0 17.42 KB
#7633 SendRequest net472 0.0033ns 0.00184ns 0.00714ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7633

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net6.0 1.190 1,345,653.12 1,600,750.78
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net6.0 1.113 800,680.47 891,533.75

More allocations ⚠️ in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net6.0 6 B 7 B 1 B 16.67%

Fewer allocations 🎉 in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net472 73 B 0 b -73 B -100.00%
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net472 47 B 0 b -47 B -100.00%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.9ms 6.85μs 26.5μs 0 0 0 640.01 KB
master OriginalCharSlice netcoreapp3.1 2.14ms 7.66μs 28.7μs 0 0 0 640 KB
master OriginalCharSlice net472 2.57ms 189ns 709ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.35ms 237ns 916ns 0 0 0 6 B
master OptimizedCharSlice netcoreapp3.1 1.7ms 1.07μs 4.14μs 0 0 0 1 B
master OptimizedCharSlice net472 2ms 201ns 780ns 0 0 0 73 B
master OptimizedCharSliceWithPool net6.0 801μs 62.3ns 241ns 0 0 0 4 B
master OptimizedCharSliceWithPool netcoreapp3.1 844μs 62.2ns 241ns 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.15ms 64.3ns 241ns 0 0 0 47 B
#7633 OriginalCharSlice net6.0 1.9ms 401ns 1.55μs 0 0 0 640.01 KB
#7633 OriginalCharSlice netcoreapp3.1 2.1ms 3.85μs 13.9μs 0 0 0 640 KB
#7633 OriginalCharSlice net472 2.67ms 159ns 615ns 100 0 0 641.95 KB
#7633 OptimizedCharSlice net6.0 1.6ms 241ns 935ns 0 0 0 7 B
#7633 OptimizedCharSlice netcoreapp3.1 1.67ms 186ns 719ns 0 0 0 1 B
#7633 OptimizedCharSlice net472 1.89ms 333ns 1.25μs 0 0 0 0 b
#7633 OptimizedCharSliceWithPool net6.0 892μs 44.1ns 165ns 0 0 0 4 B
#7633 OptimizedCharSliceWithPool netcoreapp3.1 836μs 396ns 1.53μs 0 0 0 0 b
#7633 OptimizedCharSliceWithPool net472 1.18ms 112ns 418ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 55.66 KB 56.25 KB 597 B 1.07%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 41.61 KB 42.01 KB 399 B 0.96%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 718μs 904ns 3.26μs 0 0 0 41.61 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 700μs 3.79μs 20.8μs 0 0 0 41.79 KB
master WriteAndFlushEnrichedTraces net472 864μs 1.37μs 4.94μs 4.46 0 0 55.66 KB
#7633 WriteAndFlushEnrichedTraces net6.0 682μs 3.77μs 23μs 0 0 0 42.01 KB
#7633 WriteAndFlushEnrichedTraces netcoreapp3.1 718μs 2.97μs 18.8μs 0 0 0 41.92 KB
#7633 WriteAndFlushEnrichedTraces net472 957μs 2.9μs 11.2μs 8.33 0 0 56.25 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 2μs 3.41ns 13.2ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.61μs 7.27ns 28.1ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.73μs 4.21ns 15.8ns 0.151 0.0137 0 987 B
#7633 ExecuteNonQuery net6.0 1.95μs 7.45ns 28.9ns 0 0 0 1.02 KB
#7633 ExecuteNonQuery netcoreapp3.1 2.58μs 12.6ns 50.4ns 0 0 0 1.02 KB
#7633 ExecuteNonQuery net472 2.82μs 5.42ns 21ns 0.154 0.014 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.72μs 7.79ns 31.2ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.4μs 5.49ns 20.6ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.54μs 5.88ns 22.8ns 0.159 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.84μs 1.15ns 4.45ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.51μs 8.38ns 30.2ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.88μs 5.45ns 21.1ns 0.174 0 0 1.1 KB
#7633 CallElasticsearch net6.0 1.74μs 3.15ns 12.2ns 0 0 0 1.03 KB
#7633 CallElasticsearch netcoreapp3.1 2.17μs 11ns 51.6ns 0 0 0 1.03 KB
#7633 CallElasticsearch net472 3.54μs 5.05ns 19.6ns 0.159 0 0 1.04 KB
#7633 CallElasticsearchAsync net6.0 1.86μs 5.41ns 21ns 0 0 0 1.01 KB
#7633 CallElasticsearchAsync netcoreapp3.1 2.51μs 9ns 34.8ns 0 0 0 1.08 KB
#7633 CallElasticsearchAsync net472 3.67μs 3.88ns 15ns 0.164 0 0 1.1 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.94μs 5.55ns 21.5ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.3μs 9.34ns 33.7ns 0 0 0 952 B
master ExecuteAsync net472 2.51μs 2.53ns 9.79ns 0.139 0 0 915 B
#7633 ExecuteAsync net6.0 1.75μs 8.94ns 41.9ns 0 0 0 952 B
#7633 ExecuteAsync netcoreapp3.1 2.36μs 3.3ns 12.8ns 0 0 0 952 B
#7633 ExecuteAsync net472 2.62μs 7.01ns 27.1ns 0.145 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 6.86μs 14.9ns 57.9ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.52μs 19.1ns 71.4ns 0 0 0 2.9 KB
master SendAsync net472 12.3μs 10.9ns 42.3ns 0.49 0 0 3.18 KB
#7633 SendAsync net6.0 7.17μs 24.8ns 96.1ns 0 0 0 2.36 KB
#7633 SendAsync netcoreapp3.1 8.52μs 31.4ns 122ns 0 0 0 2.9 KB
#7633 SendAsync net472 12μs 7.53ns 29.2ns 0.477 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7633

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 1.270 416,300.00 528,600.00

More allocations ⚠️ in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net472 57.34 KB 65.54 KB 8.19 KB 14.29%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 250.04 KB 274.38 KB 24.34 KB 9.73%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 256.62 KB 275.09 KB 18.46 KB 7.19%

Fewer allocations 🎉 in #7633

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 286.72 KB 283.29 KB -3.43 KB -1.20%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 45.18 KB 43.48 KB -1.7 KB -3.75%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 86.15 KB 43.4 KB -42.75 KB -49.62%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 42.2μs 156ns 563ns 0 0 0 45.18 KB
master StringConcatBenchmark netcoreapp3.1 49.7μs 277ns 2.39μs 0 0 0 86.15 KB
master StringConcatBenchmark net472 57.6μs 99.1ns 357ns 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 446μs 2.15μs 8.61μs 0 0 0 250.04 KB
master StringConcatAspectBenchmark netcoreapp3.1 445μs 5.15μs 50.7μs 0 0 0 256.62 KB
master StringConcatAspectBenchmark net472 410μs 2.02μs 8.81μs 0 0 0 286.72 KB
#7633 StringConcatBenchmark net6.0 42.6μs 238ns 1.5μs 0 0 0 43.48 KB
#7633 StringConcatBenchmark netcoreapp3.1 50.5μs 289ns 2.42μs 0 0 0 43.4 KB
#7633 StringConcatBenchmark net472 56.9μs 142ns 513ns 0 0 0 65.54 KB
#7633 StringConcatAspectBenchmark net6.0 485μs 2.28μs 8.82μs 0 0 0 274.38 KB
#7633 StringConcatAspectBenchmark netcoreapp3.1 530μs 2.22μs 8μs 0 0 0 275.09 KB
#7633 StringConcatAspectBenchmark net472 403μs 2.24μs 13.4μs 0 0 0 283.29 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.52μs 12.6ns 54.9ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.62μs 12.2ns 45.5ns 0 0 0 1.7 KB
master EnrichedLog net472 3.74μs 4.96ns 19.2ns 0.245 0 0 1.64 KB
#7633 EnrichedLog net6.0 2.53μs 0.969ns 3.36ns 0 0 0 1.7 KB
#7633 EnrichedLog netcoreapp3.1 3.53μs 8.83ns 34.2ns 0 0 0 1.7 KB
#7633 EnrichedLog net472 3.67μs 5.67ns 22ns 0.255 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 125μs 79.7ns 287ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 133μs 704ns 3.59μs 0 0 0 4.31 KB
master EnrichedLog net472 167μs 49.7ns 172ns 0 0 0 4.52 KB
#7633 EnrichedLog net6.0 124μs 43.7ns 157ns 0 0 0 4.31 KB
#7633 EnrichedLog netcoreapp3.1 129μs 92.5ns 320ns 0 0 0 4.31 KB
#7633 EnrichedLog net472 168μs 43.5ns 163ns 0 0 0 4.52 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.96μs 11.6ns 40.2ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.75μs 18.2ns 70.5ns 0 0 0 2.26 KB
master EnrichedLog net472 7.73μs 8.3ns 32.1ns 0.309 0 0 2.08 KB
#7633 EnrichedLog net6.0 4.8μs 7.98ns 30.9ns 0 0 0 2.26 KB
#7633 EnrichedLog netcoreapp3.1 6.84μs 26.8ns 104ns 0 0 0 2.26 KB
#7633 EnrichedLog net472 7.67μs 6.1ns 23.6ns 0.305 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 2.01μs 9.85ns 43ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.56μs 12.7ns 56.9ns 0 0 0 1.2 KB
master SendReceive net472 3.03μs 4.22ns 16.3ns 0.181 0 0 1.2 KB
#7633 SendReceive net6.0 2.12μs 8.01ns 31ns 0 0 0 1.2 KB
#7633 SendReceive netcoreapp3.1 2.65μs 12.9ns 54.9ns 0 0 0 1.2 KB
#7633 SendReceive net472 3.04μs 3.3ns 12.4ns 0.182 0 0 1.2 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.08μs 15.7ns 60.8ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.47μs 8.64ns 31.2ns 0 0 0 1.63 KB
master EnrichedLog net472 6.44μs 10.9ns 42.2ns 0.32 0 0 2.03 KB
#7633 EnrichedLog net6.0 4.17μs 3.49ns 13.5ns 0 0 0 1.58 KB
#7633 EnrichedLog netcoreapp3.1 5.46μs 8.15ns 31.6ns 0 0 0 1.63 KB
#7633 EnrichedLog net472 6.53μs 3.58ns 13.9ns 0.294 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 746ns 3.85ns 17.7ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 954ns 0.171ns 0.664ns 0 0 0 576 B
master StartFinishSpan net472 870ns 0.195ns 0.73ns 0.0918 0 0 578 B
master StartFinishScope net6.0 902ns 2.87ns 11.1ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.17μs 1.01ns 3.91ns 0 0 0 696 B
master StartFinishScope net472 1.05μs 1.12ns 4.34ns 0.0995 0 0 658 B
#7633 StartFinishSpan net6.0 760ns 0.23ns 0.86ns 0 0 0 576 B
#7633 StartFinishSpan netcoreapp3.1 924ns 4.63ns 21.7ns 0 0 0 576 B
#7633 StartFinishSpan net472 906ns 0.0699ns 0.252ns 0.0912 0 0 578 B
#7633 StartFinishScope net6.0 895ns 4.65ns 21.8ns 0 0 0 696 B
#7633 StartFinishScope netcoreapp3.1 1.15μs 0.338ns 1.31ns 0 0 0 696 B
#7633 StartFinishScope net472 1.09μs 1.06ns 3.96ns 0.104 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.03μs 5.02ns 20.7ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.43μs 7.21ns 32.2ns 0 0 0 696 B
master RunOnMethodBegin net472 1.42μs 2.46ns 9.54ns 0.0994 0 0 658 B
#7633 RunOnMethodBegin net6.0 1.01μs 5.04ns 22.5ns 0 0 0 696 B
#7633 RunOnMethodBegin netcoreapp3.1 1.43μs 6.49ns 25.1ns 0 0 0 696 B
#7633 RunOnMethodBegin net472 1.43μs 0.869ns 3.13ns 0.0999 0 0 658 B

@lucaspimentel lucaspimentel changed the title Add Build-AzureFunctionsNuget.ps1 helper script for local developement [Azure Functions] Add Build-AzureFunctionsNuget.ps1 helper script for local developement Oct 8, 2025
@dd-trace-dotnet-ci-bot
Copy link

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing the following branches/commits:

Execution-time benchmarks measure the whole time it takes to execute a program. And are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are shown in red. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.

Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).

gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (72ms)  : 71, 73
     .   : milestone, 72,
    master - mean (72ms)  : 71, 73
     .   : milestone, 72,

    section Baseline
    This PR (7633) - mean (68ms)  : 66, 70
     .   : milestone, 68,
    master - mean (68ms)  : 66, 71
     .   : milestone, 68,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (1,051ms)  : 989, 1113
     .   : milestone, 1051,
    master - mean (1,053ms)  : 1004, 1101
     .   : milestone, 1053,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (106ms)  : 105, 108
     .   : milestone, 106,
    master - mean (106ms)  : 105, 108
     .   : milestone, 106,

    section Baseline
    This PR (7633) - mean (106ms)  : 103, 108
     .   : milestone, 106,
    master - mean (106ms)  : 103, 108
     .   : milestone, 106,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (738ms)  : 719, 758
     .   : milestone, 738,
    master - mean (743ms)  : 718, 768
     .   : milestone, 743,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (100ms)  : 100, 101
     .   : milestone, 100,
    master - mean (101ms)  : 100, 101
     .   : milestone, 101,

    section Baseline
    This PR (7633) - mean (100ms)  : 97, 102
     .   : milestone, 100,
    master - mean (100ms)  : 97, 102
     .   : milestone, 100,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (772ms)  : 731, 813
     .   : milestone, 772,
    master - mean (774ms)  : 721, 828
     .   : milestone, 774,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (94ms)  : 87, 100
     .   : milestone, 94,
    master - mean (92ms)  : 91, 94
     .   : milestone, 92,

    section Baseline
    This PR (7633) - mean (92ms)  : 90, 94
     .   : milestone, 92,
    master - mean (92ms)  : 90, 94
     .   : milestone, 92,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (658ms)  : 642, 673
     .   : milestone, 658,
    master - mean (662ms)  : 648, 676
     .   : milestone, 662,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (212ms)  : crit, 200, 224
     .   : crit, milestone, 212,
    master - mean (196ms)  : 193, 199
     .   : milestone, 196,

    section Baseline
    This PR (7633) - mean (204ms)  : 197, 210
     .   : milestone, 204,
    master - mean (192ms)  : 189, 195
     .   : milestone, 192,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (1,200ms)  : 1133, 1267
     .   : milestone, 1200,
    master - mean (1,163ms)  : 1106, 1221
     .   : milestone, 1163,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (295ms)  : crit, 288, 303
     .   : crit, milestone, 295,
    master - mean (278ms)  : 273, 283
     .   : milestone, 278,

    section Baseline
    This PR (7633) - mean (290ms)  : 285, 295
     .   : milestone, 290,
    master - mean (277ms)  : 271, 282
     .   : milestone, 277,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (976ms)  : 931, 1022
     .   : milestone, 976,
    master - mean (935ms)  : 888, 981
     .   : milestone, 935,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (294ms)  : 287, 301
     .   : milestone, 294,
    master - mean (281ms)  : 276, 285
     .   : milestone, 281,

    section Baseline
    This PR (7633) - mean (295ms)  : 285, 306
     .   : milestone, 295,
    master - mean (280ms)  : 274, 286
     .   : milestone, 280,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (1,034ms)  : 985, 1082
     .   : milestone, 1034,
    master - mean (987ms)  : 941, 1034
     .   : milestone, 987,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7633) - mean (290ms)  : crit, 286, 295
     .   : crit, milestone, 290,
    master - mean (268ms)  : 265, 272
     .   : milestone, 268,

    section Baseline
    This PR (7633) - mean (290ms)  : 283, 297
     .   : milestone, 290,
    master - mean (268ms)  : 265, 272
     .   : milestone, 268,

    section CallTarget+Inlining+NGEN
    This PR (7633) - mean (887ms)  : 850, 925
     .   : milestone, 887,
    master - mean (850ms)  : 832, 869
     .   : milestone, 850,

Loading

@lucaspimentel
Copy link
Member Author

I think that this could just be a Nuke step instead of a separate powershell script

Yeah, I started doing it in Nuke in #7537, but to do it in C# and using Nuke the "right way" was a bit convoluted and Nuke ended up doing more work than I needed because of all the existing dependencies, so I only kept the DownloadBundleNugetFromBuild nuke step in that PR and removed the rest.

I find it much easier to write a stand-alone script than dealing with nuke for stuff like this. I don't want nuke go through 10 steps only to dotnet build the one project I need to build for 2 specific TFMs. 🤷🏽‍♂️

@lucaspimentel
Copy link
Member Author

Fwiw, I've been using a version of this script locally for months. I just cleaned it up so I can add it to the repo and not loose it 😅

@lucaspimentel lucaspimentel merged commit d4adcd5 into master Oct 8, 2025
154 checks passed
@lucaspimentel lucaspimentel deleted the lpimentel/azure-functions/add-local-build-script branch October 8, 2025 20:47
@github-actions github-actions bot added this to the vNext-v3 milestone Oct 8, 2025
@bouwkast bouwkast added the area:builds project files, build scripts, pipelines, versioning, releases, packages label Oct 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:builds project files, build scripts, pipelines, versioning, releases, packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants