Files
git.stella-ops.org/src/Directory.Build.props

213 lines
14 KiB
XML

<Project>
<!-- ============================================================================
CONSOLIDATED Directory.Build.props
All build properties for the StellaOps repository.
Service versions managed separately in Directory.Versions.props.
============================================================================ -->
<!-- Import centralized service versioning -->
<Import Project="$(MSBuildThisFileDirectory)Directory.Versions.props" Condition="Exists('$(MSBuildThisFileDirectory)Directory.Versions.props')" />
<!-- ============================================================================
REPO-LEVEL SETTINGS (from root Directory.Build.props)
============================================================================ -->
<PropertyGroup>
<StellaOpsRepoRoot Condition="'$(StellaOpsRepoRoot)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)../'))</StellaOpsRepoRoot>
<StellaOpsDotNetPublicSource Condition="'$(StellaOpsDotNetPublicSource)' == ''">https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json</StellaOpsDotNetPublicSource>
<RestoreConfigFile Condition="'$(RestoreConfigFile)' == ''">$([System.IO.Path]::Combine('$(StellaOpsRepoRoot)','nuget.config'))</RestoreConfigFile>
</PropertyGroup>
<!-- Package metadata for NuGet publishing -->
<PropertyGroup>
<Authors>StellaOps</Authors>
<Company>StellaOps</Company>
<Product>StellaOps</Product>
<Copyright>Copyright (c) StellaOps. All rights reserved.</Copyright>
<PackageLicenseExpression>BUSL-1.1</PackageLicenseExpression>
<PackageProjectUrl>https://git.stella-ops.org/stella-ops.org/git.stella-ops.org</PackageProjectUrl>
<RepositoryUrl>https://git.stella-ops.org/stella-ops.org/git.stella-ops.org</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageReadmeFile Condition="Exists('README.md')">README.md</PackageReadmeFile>
<PackageTags>stellaops;security;sbom;vex;attestation;supply-chain</PackageTags>
</PropertyGroup>
<!-- CryptoPro support -->
<PropertyGroup>
<StellaOpsEnableCryptoPro Condition="'$(StellaOpsEnableCryptoPro)' == ''">false</StellaOpsEnableCryptoPro>
</PropertyGroup>
<PropertyGroup Condition="'$(StellaOpsEnableCryptoPro)' == 'true'">
<DefineConstants>$(DefineConstants);STELLAOPS_CRYPTO_PRO</DefineConstants>
</PropertyGroup>
<!-- ============================================================================
DETERMINISTIC BUILD SETTINGS (REP-004)
============================================================================ -->
<PropertyGroup>
<!-- Enable deterministic builds for reproducibility -->
<Deterministic>true</Deterministic>
<!-- Enable CI-specific determinism settings when running in CI -->
<ContinuousIntegrationBuild Condition="'$(CI)' == 'true' or '$(TF_BUILD)' == 'true' or '$(GITHUB_ACTIONS)' == 'true'">true</ContinuousIntegrationBuild>
<!-- Embed source revision for traceability -->
<SourceRevisionId Condition="'$(SourceRevisionId)' == '' and '$(GIT_SHA)' != ''">$(GIT_SHA)</SourceRevisionId>
<SourceRevisionId Condition="'$(SourceRevisionId)' == '' and '$(GITHUB_SHA)' != ''">$(GITHUB_SHA)</SourceRevisionId>
<!-- Map source paths for reproducible PDBs -->
<PathMap Condition="'$(ContinuousIntegrationBuild)' == 'true'">$(MSBuildProjectDirectory)=/src/</PathMap>
<!-- Reproducible package generation -->
<RepositoryCommit Condition="'$(RepositoryCommit)' == ''">$(SourceRevisionId)</RepositoryCommit>
<!-- Embed source files in PDB for debugging -->
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<!-- Include symbols in package for debugging -->
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>
<!-- ============================================================================
NUGET AND RESTORE SETTINGS
============================================================================ -->
<PropertyGroup>
<!-- Enforce TreatWarningsAsErrors globally per AGENTS.md Rule 8.1 -->
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<!-- Use the system-wide NuGet package cache (~/.nuget/packages) -->
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
<!-- Disable NuGet audit to prevent build failures when mirrors are unreachable -->
<NuGetAudit>false</NuGetAudit>
<!-- Suppress only XML documentation warnings -->
<NoWarn>$(NoWarn);CS1591</NoWarn>
<WarningsNotAsErrors>$(WarningsNotAsErrors)</WarningsNotAsErrors>
<RestoreNoWarn>$(RestoreNoWarn)</RestoreNoWarn>
<RestoreWarningsAsErrors></RestoreWarningsAsErrors>
<RestoreTreatWarningsAsErrors>false</RestoreTreatWarningsAsErrors>
<RestoreDisableImplicitNuGetFallbackFolder>true</RestoreDisableImplicitNuGetFallbackFolder>
<RestoreAdditionalProjectFallbackFolders>clear</RestoreAdditionalProjectFallbackFolders>
<RestoreAdditionalProjectFallbackFoldersExcludes>clear</RestoreAdditionalProjectFallbackFoldersExcludes>
<RestoreAdditionalFallbackFolders>clear</RestoreAdditionalFallbackFolders>
<RestoreAdditionalFallbackFoldersExcludes>clear</RestoreAdditionalFallbackFoldersExcludes>
</PropertyGroup>
<!-- Asset target fallback for backward compatibility -->
<PropertyGroup>
<AssetTargetFallback>$(AssetTargetFallback);net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0</AssetTargetFallback>
</PropertyGroup>
<!-- ============================================================================
PLUGIN OUTPUT PATHS AND DETECTION
============================================================================ -->
<PropertyGroup>
<!-- Concelier plugins -->
<ConcelierPluginOutputRoot Condition="'$(ConcelierPluginOutputRoot)' == ''">$(SolutionDir)plugins\concelier</ConcelierPluginOutputRoot>
<ConcelierPluginOutputRoot Condition="'$(ConcelierPluginOutputRoot)' == '' and '$(SolutionDir)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\plugins\concelier\'))</ConcelierPluginOutputRoot>
<IsConcelierPlugin Condition="'$(IsConcelierPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)').StartsWith('StellaOps.Concelier.Connector.'))">true</IsConcelierPlugin>
<IsConcelierPlugin Condition="'$(IsConcelierPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)').StartsWith('StellaOps.Concelier.Exporter.'))">true</IsConcelierPlugin>
<!-- Authority plugins -->
<AuthorityPluginOutputRoot Condition="'$(AuthorityPluginOutputRoot)' == ''">$(SolutionDir)plugins\authority</AuthorityPluginOutputRoot>
<AuthorityPluginOutputRoot Condition="'$(AuthorityPluginOutputRoot)' == '' and '$(SolutionDir)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\plugins\authority\'))</AuthorityPluginOutputRoot>
<IsAuthorityPlugin Condition="'$(IsAuthorityPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)').StartsWith('StellaOps.Authority.Plugin.'))">true</IsAuthorityPlugin>
<!-- Notify plugins -->
<NotifyPluginOutputRoot Condition="'$(NotifyPluginOutputRoot)' == '' and '$(SolutionDir)' != ''">$(SolutionDir)plugins\notify</NotifyPluginOutputRoot>
<NotifyPluginOutputRoot Condition="'$(NotifyPluginOutputRoot)' == '' and '$(SolutionDir)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\plugins\notify\'))</NotifyPluginOutputRoot>
<IsNotifyPlugin Condition="'$(IsNotifyPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)').StartsWith('StellaOps.Notify.Connectors.')) and !$([System.String]::Copy('$(MSBuildProjectName)').EndsWith('.Tests'))">true</IsNotifyPlugin>
<IsNotifyPlugin Condition="'$(IsNotifyPlugin)' == 'true' and $([System.String]::Copy('$(MSBuildProjectName)')) == 'StellaOps.Notify.Connectors.Shared'">false</IsNotifyPlugin>
<!-- Scanner plugins -->
<ScannerBuildxPluginOutputRoot Condition="'$(ScannerBuildxPluginOutputRoot)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\plugins\scanner\buildx\'))</ScannerBuildxPluginOutputRoot>
<IsScannerBuildxPlugin Condition="'$(IsScannerBuildxPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)')) == 'StellaOps.Scanner.Sbomer.BuildXPlugin'">true</IsScannerBuildxPlugin>
<ScannerOsAnalyzerPluginOutputRoot Condition="'$(ScannerOsAnalyzerPluginOutputRoot)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\plugins\scanner\analyzers\os\'))</ScannerOsAnalyzerPluginOutputRoot>
<IsScannerOsAnalyzerPlugin Condition="'$(IsScannerOsAnalyzerPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)').StartsWith('StellaOps.Scanner.Analyzers.OS.')) and !$([System.String]::Copy('$(MSBuildProjectName)').EndsWith('.Tests'))">true</IsScannerOsAnalyzerPlugin>
<ScannerLangAnalyzerPluginOutputRoot Condition="'$(ScannerLangAnalyzerPluginOutputRoot)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\plugins\scanner\analyzers\lang\'))</ScannerLangAnalyzerPluginOutputRoot>
<IsScannerLangAnalyzerPlugin Condition="'$(IsScannerLangAnalyzerPlugin)' == '' and $([System.String]::Copy('$(MSBuildProjectName)').StartsWith('StellaOps.Scanner.Analyzers.Lang.'))">true</IsScannerLangAnalyzerPlugin>
</PropertyGroup>
<!-- ============================================================================
TEST INFRASTRUCTURE PATHS
============================================================================ -->
<PropertyGroup>
<ConcelierTestingPath Condition="'$(ConcelierTestingPath)' == '' and Exists('$(MSBuildThisFileDirectory)__Tests\__Libraries\StellaOps.Concelier.Testing\StellaOps.Concelier.Testing.csproj')">$(MSBuildThisFileDirectory)__Tests\__Libraries\StellaOps.Concelier.Testing\</ConcelierTestingPath>
<ConcelierSharedTestsPath Condition="'$(ConcelierSharedTestsPath)' == '' and Exists('$(MSBuildThisFileDirectory)Concelier\StellaOps.Concelier.Tests.Shared\AssemblyInfo.cs')">$(MSBuildThisFileDirectory)Concelier\StellaOps.Concelier.Tests.Shared\</ConcelierSharedTestsPath>
</PropertyGroup>
<!-- ============================================================================
MODULE-SPECIFIC SUPPRESSIONS
============================================================================ -->
<!-- Concelier module: no additional suppressions -->
<PropertyGroup Condition="$(MSBuildProjectDirectory.Replace('\','/').Contains('/Concelier/'))">
</PropertyGroup>
<!-- ============================================================================
PROJECT REFERENCES
============================================================================ -->
<ItemGroup Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' and '$(IsTestProject)' != 'true'">
<ProjectReference Include="$(MSBuildThisFileDirectory)Router\__Libraries\StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Update="../StellaOps.Plugin/StellaOps.Plugin.csproj">
<Private>false</Private>
<ExcludeAssets>runtime</ExcludeAssets>
</ProjectReference>
</ItemGroup>
<!-- ============================================================================
TEST PROJECT CONFIGURATION
============================================================================ -->
<PropertyGroup Condition="$([System.String]::Copy('$(MSBuildProjectName)').EndsWith('.Tests'))">
<RestoreDisableParallel Condition="'$(RestoreDisableParallel)' == ''">true</RestoreDisableParallel>
</PropertyGroup>
<PropertyGroup Condition="$([System.String]::Copy('$(MSBuildProjectName)').EndsWith('.Tests')) and '$(UseXunitV3)' == ''">
<UseXunitV3>true</UseXunitV3>
</PropertyGroup>
<!-- Concelier shared test infrastructure (only when paths exist and not opted out) -->
<ItemGroup Condition="$([System.String]::Copy('$(MSBuildProjectName)').EndsWith('.Tests')) and '$(UseConcelierTestInfra)' != 'false'">
<Compile Include="$(ConcelierSharedTestsPath)AssemblyInfo.cs" Link="Shared\AssemblyInfo.cs" Condition="'$(ConcelierSharedTestsPath)' != ''" />
<Compile Include="$(ConcelierSharedTestsPath)ConcelierFixtureCollection.cs" Link="Shared\ConcelierFixtureCollection.cs" Condition="'$(ConcelierSharedTestsPath)' != ''" />
<ProjectReference Include="$(ConcelierTestingPath)StellaOps.Concelier.Testing.csproj" Condition="'$(ConcelierTestingPath)' != ''" />
<Using Include="StellaOps.Concelier.Testing" Condition="'$(ConcelierTestingPath)' != ''" />
</ItemGroup>
<!-- xUnit v3 test projects: applies to *.Tests (auto-detected) AND projects that set UseXunitV3=true locally -->
<PropertyGroup Condition="'$(UseXunitV3)' == 'true'">
<OutputType Condition="'$(OutputType)' == ''">Exe</OutputType>
<UseAppHost>true</UseAppHost>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<!-- Enable dotnet test support via Microsoft Testing Platform (xUnit v3 native runner).
This replaces the vstest/testhost approach (Microsoft.NET.Test.Sdk) which lacks net10.0 assets. -->
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<!-- Suppress xUnit analyzer warnings until tests are migrated:
- xUnit1031: Blocking task operations
- xUnit1041: Fixture issues
- xUnit1051: CancellationToken usage
- xUnit1026: Unused theory parameters
- xUnit1013: Expected assertion methods
- xUnit2013: Expected string assertions
- xUnit3003: Assertion methods -->
<NoWarn>$(NoWarn);xUnit1031;xUnit1041;xUnit1051;xUnit1026;xUnit1013;xUnit2013;xUnit3003</NoWarn>
<!-- Suppress nullable warnings in test projects (CS8602, CS8604, CS8601, CS8634, CS8714, CS8424) until tests are fixed -->
<NoWarn>$(NoWarn);CS8602;CS8604;CS8601;CS8634;CS8714;CS8424</NoWarn>
<!-- Suppress custom analyzers in tests (EXCITITOR001 - obsolete VexConsensus usage in test mocks) -->
<NoWarn>$(NoWarn);EXCITITOR001</NoWarn>
</PropertyGroup>
<ItemGroup Condition="$([System.String]::Copy('$(MSBuildProjectName)').EndsWith('.Tests')) and '$(UseXunitV3)' == 'true'">
<PackageReference Include="xunit.v3" />
<PackageReference Include="xunit.runner.visualstudio">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<Using Include="Xunit" />
</ItemGroup>
</Project>