-
Notifications
You must be signed in to change notification settings - Fork 828
Add AmbientMetadata.Build component #6623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add AmbientMetadata.Build component #6623
Conversation
I love porting until I realize my commit history is lost. 🤣 |
src/Libraries/Microsoft.Extensions.AmbientMetadata.Build/BuildMetadata.cs
Outdated
Show resolved
Hide resolved
// Azure DevOps environment variables: https://learn.microsoft.com/azure/devops/pipelines/build/variables#build-variables-devops-services | ||
internal static string? AzureBuildId = Environment.GetEnvironmentVariable("Build_BuildId"); | ||
internal static string? AzureBuildNumber = Environment.GetEnvironmentVariable("Build_BuildNumber"); | ||
internal static string? AzureSourceBranchName = Environment.GetEnvironmentVariable("Build_SourceBranchName"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Couldn't this alternatively be fetched by the InitializeSourceControlInformation
and related targets in MSBuild that are used for SourceLink, that way this would work for local builds as well as CI.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
updated to fetch data from MSBuild properties, which by default are initialized from environment variables.
…hub.com/evgenyfedorov2/dotnet-extensions into users/evgenyfedorov2/add_build_metadata
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the purpose of the empty src/Libraries/Microsoft.Extensions.AmbientMetadata.Build/Microsoft.Extensions.AmbientMetadata.Build.json
file?
src/Generators/Microsoft.Gen.BuildMetadata/BuildMetadataGenerator.cs
Outdated
Show resolved
Hide resolved
src/Generators/Microsoft.Gen.BuildMetadata/Microsoft.Gen.BuildMetadata.csproj
Outdated
Show resolved
Hide resolved
Removed :) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces a new AmbientMetadata.Build component that provides automatic build metadata collection from CI/CD pipelines. The component uses source generation to extract build information at compile time and register it in the dependency injection container as IOptions.
Key changes:
- New BuildMetadata class with properties for build ID, number, branch name, and source version
- Source generator that reads MSBuild properties and generates configuration extensions
- Support for both Azure DevOps and GitHub Actions CI environments
Reviewed Changes
Copilot reviewed 20 out of 24 changed files in this pull request and generated 2 comments.
Show a summary per file
File | Description |
---|---|
src/Libraries/Microsoft.Extensions.AmbientMetadata.Build/BuildMetadata.cs | Defines the core data model for build metadata |
src/Generators/Microsoft.Gen.BuildMetadata/BuildMetadataGenerator.cs | Main source generator that creates build metadata extensions |
src/Libraries/Microsoft.Extensions.AmbientMetadata.Build/BuildMetadataServiceCollectionExtensions.cs | Extension methods for registering BuildMetadata in DI container |
src/Libraries/Microsoft.Extensions.AmbientMetadata.Build/buildTransitive/Microsoft.Extensions.AmbientMetadata.Build.props | MSBuild properties file that maps CI environment variables to build properties |
test/Libraries/Microsoft.Extensions.AmbientMetadata.Build.Tests/ | Unit tests for the build metadata functionality |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
...s/Microsoft.Extensions.AmbientMetadata.Build.Tests/ConfigurationBindingQuirkBehaviorTests.cs
Outdated
Show resolved
Hide resolved
...s/Microsoft.Extensions.AmbientMetadata.Build.Tests/ConfigurationBindingQuirkBehaviorTests.cs
Outdated
Show resolved
Hide resolved
…s/ConfigurationBindingQuirkBehaviorTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Copilot reviewed 20 out of 24 changed files in this pull request and generated 2 comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
...sions.AmbientMetadata.Build/buildTransitive/Microsoft.Extensions.AmbientMetadata.Build.props
Outdated
Show resolved
Hide resolved
9e1009a
to
7ed6565
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Copilot reviewed 20 out of 24 changed files in this pull request and generated 2 comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
return !string.IsNullOrEmpty(value) && | ||
string.Equals(value, "true", System.StringComparison.OrdinalIgnoreCase); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The boolean parsing logic only recognizes 'true' as true and treats everything else (including 'false') as false. Consider using bool.TryParse
for more robust boolean parsing that handles both 'true' and 'false' values correctly.
return !string.IsNullOrEmpty(value) && | |
string.Equals(value, "true", System.StringComparison.OrdinalIgnoreCase); | |
return bool.TryParse(value, out var result) && result; |
Copilot uses AI. Check for mistakes.
Adding a brand new component - Build metadata, which automatically grabs build information from the CI/CD pipelines, deserializes it into a strong type
BuildMetadata
and registers it in Dependency Injection container asIOptions<BuildMetadata>
.The component uses source generation to collect build information and immediately express it via C# code.
Initially, only GitHub Actions and Azure DevOps are supported
Microsoft Reviewers: Open in CodeFlow