├── src ├── Monitoring │ ├── grafana-init │ │ ├── grafana-version.txt │ │ ├── .gitattributes │ │ ├── grafana.env │ │ ├── grafana-override.conf │ │ └── vault-env.py │ ├── ComponentGovernance │ │ └── .gitignore │ ├── Sdk │ │ ├── Import.ps1 │ │ ├── PolyFill.cs │ │ ├── Microsoft.DotNet.Monitoring.Sdk.csproj │ │ └── HttpResponseExtensions.cs │ ├── Monitoring.ArcadeServices │ │ ├── notifications │ │ │ ├── Staging │ │ │ │ ├── teamsHook.notification.json │ │ │ │ ├── statusHook.notification.json │ │ │ │ ├── statusHook.imageless.notification.json │ │ │ │ └── statusHook.imageless.12h_reminder.notification.json │ │ │ └── Production │ │ │ │ ├── teamsHook.notification.json │ │ │ │ ├── statusHook.notification.json │ │ │ │ ├── statusHook.imageless.notification.json │ │ │ │ └── statusHook.imageless.12h_reminder.notification.json │ │ ├── datasource │ │ │ ├── Staging │ │ │ │ ├── Azure Data Explorer.datasource.json │ │ │ │ ├── Deployment Annotations.datasource.json │ │ │ │ └── Azure Monitor.datasource.json │ │ │ └── Production │ │ │ │ ├── Azure Data Explorer.datasource.json │ │ │ │ ├── Deployment Annotations.datasource.json │ │ │ │ └── Azure Monitor.datasource.json │ │ └── Monitoring.ArcadeServices.proj │ └── Microsoft.DotNet.Monitoring.Sdk.Tests │ │ └── Microsoft.DotNet.Monitoring.Sdk.Tests.csproj ├── DotNet.Status.Web │ ├── DotNet.Status.Web │ │ ├── wwwroot │ │ │ └── robots.txt │ │ ├── Pages │ │ │ ├── _ViewStart.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ ├── Status.cshtml.cs │ │ │ ├── Error.cshtml │ │ │ ├── _Layout.cshtml │ │ │ ├── Index.cshtml │ │ │ └── Routes.cshtml │ │ ├── TeamsMessages │ │ │ ├── IAction.cs │ │ │ ├── Target.cs │ │ │ ├── Section.cs │ │ │ ├── OpenUri.cs │ │ │ └── MessageCard.cs │ │ ├── Models │ │ │ ├── IssuesHookChange.cs │ │ │ ├── IssuesHookLabel.cs │ │ │ ├── IssuesHookUser.cs │ │ │ ├── IssueOrPullRequestCommentChangesBody.cs │ │ │ ├── IssueOrPullRequestCommentChanges.cs │ │ │ ├── IssuesHookChanges.cs │ │ │ ├── IssuesHookRepository.cs │ │ │ ├── PullRequestEventPayloadWithChanges.cs │ │ │ ├── IssuesHookData.cs │ │ │ ├── PullRequestCommentPayloadWithChanges.cs │ │ │ ├── IssueCommentPayloadWithChanges.cs │ │ │ ├── GrafanaNotificationMatch.cs │ │ │ ├── DeploymentEntity.cs │ │ │ ├── GrafanaNotification.cs │ │ │ ├── AnnotationQueryBody.cs │ │ │ └── AnnotationEntry.cs │ │ ├── RcaOptions.cs │ │ ├── Options │ │ │ ├── AnnotationsOptions.cs │ │ │ ├── AzureDevOpsOptions.cs │ │ │ ├── NotificationEpicOptions.cs │ │ │ ├── AzureTableTokenStoreOptions.cs │ │ │ ├── GrafanaOptions.cs │ │ │ └── GitHubConnectionOptions.cs │ │ ├── MilestoneManagementOptions.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── RevocationStatus.cs │ │ ├── ITokenRevocationProvider.cs │ │ ├── ITimelineIssueTriage.cs │ │ ├── KustoIngestExtension.cs │ │ ├── ITokenStore.cs │ │ ├── ImmutableArrayExtension.cs │ │ ├── GitHubTokenData.cs │ │ ├── ArrayExtension.cs │ │ ├── ArcadeValidationData.cs │ │ └── StoredTokenData.cs │ ├── DotNet.Status.Web.Tests │ │ ├── DotNetStatusEmptyTestStartup.cs │ │ └── TestCasesData │ │ │ ├── triage-items-with-invalid.expected.json │ │ │ ├── triage-items-with-diff-cat.expected.json │ │ │ ├── triage-items-with-multi-builds.expected.json │ │ │ └── triage-items-with-multi-builds-mangled.body.txt │ └── README.md ├── SecretManager │ ├── Microsoft.DncEng.SecretManager │ │ ├── appsettings.json │ │ ├── CharExtension.cs │ │ ├── HumanInterventionRequiredException.cs │ │ ├── SecretReference.cs │ │ ├── SecretTypeRegistry.cs │ │ ├── NameAttribute.cs │ │ ├── StorageLocationTypeRegistry.cs │ │ ├── ServiceConnections │ │ │ ├── ServiceEndpointUpdateData.cs │ │ │ ├── ServiceEndpointClientException.cs │ │ │ ├── RestModels │ │ │ │ └── GetServiceEndpointsResponse.cs │ │ │ └── ServiceEndpoint.cs │ │ ├── SecretData.cs │ │ ├── SecretProperties.cs │ │ ├── DisposableList.cs │ │ ├── SecretValue.cs │ │ ├── ITokenCredentialProvider.cs │ │ ├── Commands │ │ │ ├── InfoCommand.cs │ │ │ └── TestCommand.cs │ │ ├── SecretTypes │ │ │ ├── Base64Encoder.cs │ │ │ ├── AzureStorageKey.cs │ │ │ └── AzureStorageContainerSasToken.cs │ │ └── PasswordGenerator.cs │ ├── Microsoft.DncEng.SecretManager.Tests │ │ ├── Microsoft.DncEng.SecretManager.Tests.csproj │ │ ├── TemporaryFile.cs │ │ └── DependencyInjectionTests.cs │ └── Microsoft.DncEng.SecretManager.ScenarioTests │ │ └── Microsoft.DncEng.SecretManager.ScenarioTests.csproj ├── Telemetry │ ├── TelemetryApplication │ │ ├── packages.config │ │ ├── ApplicationInsights.config │ │ ├── ApplicationParameters │ │ │ ├── Int.xml │ │ │ ├── Prod.xml │ │ │ ├── Local.1Node.xml │ │ │ └── Local.5Node.xml │ │ ├── Directory.Build.props │ │ ├── Directory.Build.targets │ │ └── PublishProfiles │ │ │ ├── Local.1Node.xml │ │ │ └── Local.5Node.xml │ ├── AzureDevOpsTimeline │ │ ├── PackageRoot │ │ │ └── Config │ │ │ │ └── Settings.xml │ │ ├── AugmentedBuild.cs │ │ ├── KustoTimelineTelemetryOptions.cs │ │ ├── .config │ │ │ ├── settings.Development.json │ │ │ ├── settings.Staging.json │ │ │ ├── settings.Production.json │ │ │ └── settings.json │ │ ├── AugmentedTimelineRecord.cs │ │ ├── AugmentedTimelineIssue.cs │ │ ├── IBuildLogScraper.cs │ │ ├── AzureDevOpsTimelineOptions.cs │ │ └── ITimelineTelemetryRepository.cs │ ├── AzureDevOpsClient.Tests │ │ └── AzureDevOpsClient.Tests.csproj │ ├── AzureDevOpsClient │ │ ├── AzureDevOpsClientOptions.cs │ │ └── AzureDevOpsClient.csproj │ └── Microsoft.DotNet.AzureDevOpsTimelineTests │ │ ├── Microsoft.DotNet.AzureDevOpsTimeline.Tests.csproj │ │ └── BuildAndTimeline.cs ├── PatGenerator │ ├── Microsoft.DncEng.PatGenerator │ │ └── Microsoft.DncEng.PatGenerator.csproj │ ├── Microsoft.DncEng.PatGenerator.Tests │ │ └── Microsoft.DncEng.PatGenerator.Tests.csproj │ └── Microsoft.DncEng.PatGeneratorTool │ │ └── Microsoft.DncEng.PatGeneratorTool.csproj ├── Microsoft.DotNet.Internal.Tools.SynchronizePackageProps │ └── Microsoft.DotNet.Internal.Tools.SynchronizePackageProps.csproj └── Microsoft.DncEng.Configuration.Bootstrap │ ├── Microsoft.DncEng.Configuration.Bootstrap.csproj │ └── Program.cs ├── eng ├── common │ ├── cross │ │ ├── riscv64 │ │ │ └── sources.list.sid │ │ ├── arm │ │ │ ├── sources.list.jessie │ │ │ ├── tizen │ │ │ │ └── tizen.patch │ │ │ ├── sources.list.focal │ │ │ ├── sources.list.jammy │ │ │ ├── sources.list.zesty │ │ │ ├── sources.list.bionic │ │ │ └── sources.list.xenial │ │ ├── armel │ │ │ ├── sources.list.jessie │ │ │ └── tizen │ │ │ │ └── tizen.patch │ │ ├── armv6 │ │ │ └── sources.list.buster │ │ ├── x86 │ │ │ ├── tizen │ │ │ │ └── tizen.patch │ │ │ ├── sources.list.focal │ │ │ ├── sources.list.jammy │ │ │ ├── sources.list.bionic │ │ │ └── sources.list.xenial │ │ ├── arm64 │ │ │ ├── sources.list.buster │ │ │ ├── tizen │ │ │ │ └── tizen.patch │ │ │ ├── sources.list.stretch │ │ │ ├── sources.list.focal │ │ │ ├── sources.list.jammy │ │ │ ├── sources.list.zesty │ │ │ ├── sources.list.bionic │ │ │ └── sources.list.xenial │ │ ├── x64 │ │ │ ├── tizen │ │ │ │ └── tizen.patch │ │ │ ├── sources.list.bionic │ │ │ └── sources.list.xenial │ │ ├── s390x │ │ │ └── sources.list.bionic │ │ └── ppc64le │ │ │ └── sources.list.bionic │ ├── BuildConfiguration │ │ └── build-configuration.json │ ├── dotnet-install.cmd │ ├── CIBuild.cmd │ ├── sdl │ │ ├── packages.config │ │ └── NuGet.config │ ├── init-tools-native.cmd │ ├── templates │ │ ├── steps │ │ │ ├── run-on-unix.yml │ │ │ ├── run-on-windows.yml │ │ │ ├── add-build-to-channel.yml │ │ │ ├── build-reason.yml │ │ │ ├── component-governance.yml │ │ │ ├── publish-logs.yml │ │ │ ├── enable-internal-runtimes.yml │ │ │ ├── run-script-ifequalelse.yml │ │ │ └── retain-build.yml │ │ ├── variables │ │ │ └── sdl-variables.yml │ │ └── post-build │ │ │ ├── trigger-subscription.yml │ │ │ └── common-variables.yml │ ├── internal │ │ ├── Directory.Build.props │ │ └── NuGet.config │ ├── templates-official │ │ ├── variables │ │ │ └── sdl-variables.yml │ │ ├── steps │ │ │ ├── add-build-to-channel.yml │ │ │ ├── build-reason.yml │ │ │ ├── component-governance.yml │ │ │ ├── publish-logs.yml │ │ │ └── enable-internal-runtimes.yml │ │ └── post-build │ │ │ ├── trigger-subscription.yml │ │ │ └── common-variables.yml │ ├── PSScriptAnalyzerSettings.psd1 │ ├── cibuild.sh │ ├── post-build │ │ └── nuget-validation.ps1 │ ├── enable-cross-org-publishing.ps1 │ ├── msbuild.ps1 │ ├── helixpublish.proj │ ├── dotnet-install.ps1 │ └── generate-sbom-prep.ps1 ├── Publishing.props ├── PoliCheckExclusions.xml ├── import-grafana.ps1 ├── helpers.psm1 ├── create-tag.ps1 ├── generate-sbom.yml └── test.yaml ├── .packages ├── Directory.Build.props ├── Directory.Build.targets └── Directory.Packages.props ├── README.md ├── artifacts ├── Directory.Build.props ├── Directory.Build.targets └── Directory.Packages.props ├── Documentation ├── OnePagers │ └── EpicDropDown.png ├── ProjectDocs │ ├── assets │ │ ├── Telemetry.png │ │ ├── GrafanaAlert.png │ │ ├── MultipleSubs.png │ │ ├── toolversions.png │ │ ├── MachinesOffline.png │ │ ├── QueueCoreSetup.png │ │ ├── QueueSecurityBuild.png │ │ └── RedirectJobsWorkflow.png │ ├── Validation │ │ └── Images │ │ │ ├── Stages.PNG │ │ │ ├── testproject.png │ │ │ ├── newxunitproject.png │ │ │ └── scenariotestprojects.png │ ├── Auto-Retry Failures │ │ └── Images │ │ │ ├── Logs.JPG │ │ │ ├── WorkItemAggregateSummary_Count.JPG │ │ │ └── WorkItemAggregateSummary_Icon.JPG │ ├── OS Onboarding │ │ └── Images │ │ │ └── DevWorkFlow.JPG │ ├── Dependency Flow │ │ └── release-branch-history.png │ ├── HelixTestLogSearch │ │ └── Resources │ │ │ └── project-diagram.png │ ├── Toolset │ │ └── Overview.md │ └── ibcmerge.md ├── Policy │ └── TeamProcessPolicy.md └── TeamProcess │ └── Rollout-Scorecards │ ├── Scorecard_2023-10-11.md │ ├── Scorecard_2024-03-22.md │ ├── Scorecard_2024-06-05.md │ ├── Scorecard_2024-07-24.md │ ├── Scorecard_2023-03-22.md │ ├── Scorecard_2023-07-19.md │ ├── Scorecard_2024-05-08.md │ ├── Scorecard_2022-12-01.md │ ├── Scorecard_2023-01-11.md │ ├── Scorecard_2024-02-09.md │ ├── Scorecard_2024-03-20.md │ ├── Scorecard_2024-05-13.md │ ├── Scorecard_2024-07-18.md │ ├── Scorecard_2024-08-21.md │ ├── Scorecard_2024-08-28.md │ ├── Scorecard_2023-04-27.md │ ├── Scorecard_2023-08-16.md │ ├── Scorecard_2023-10-12.md │ ├── Scorecard_2023-10-20.md │ ├── Scorecard_2023-11-16.md │ ├── Scorecard_2024-09-04.md │ ├── Scorecard_2024-09-18.md │ ├── Scorecard_2024-10-02.md │ ├── Scorecard_2024-10-16.md │ ├── Scorecard_2024-11-20.md │ ├── Scorecard_2025-01-10.md │ ├── Scorecard_2023-09-27.md │ ├── Scorecard_2024-07-31.md │ ├── Scorecard_2023-05-25.md │ ├── Scorecard_2023-06-06.md │ ├── Scorecard_2024-03-13.md │ └── Scorecard_2025-01-14.md ├── Directory.Build.targets ├── .azuredevops └── dependabot.yml ├── es-metadata.yml ├── .config ├── dotnet-tools.json └── tsaoptions.json ├── CODE-OF-CONDUCT.md ├── global.json ├── .vault-config ├── telemetryprod.yaml ├── telemetryint.yaml ├── telemetrylocal.yaml ├── shared │ └── telemetry-secrets.yaml ├── helixkv.yaml ├── dotneteng-status-local.yaml ├── dotneteng-status-staging.yaml ├── dotnet-grafana-production.yaml ├── dotnet-grafana-staging.yaml └── dotneteng-status-prod.yaml ├── CredScanSuppressions.json ├── THIRD-PARTY-NOTICES.TXT ├── NuGet.config ├── bootstrap.ps1 ├── NuGet.Internal.config ├── .github └── ISSUE_TEMPLATE │ └── default-dnceng-issue-template.md ├── azure-pipelines-daily.yml └── LICENSE.txt /src/Monitoring/grafana-init/grafana-version.txt: -------------------------------------------------------------------------------- 1 | 8.3.6 2 | -------------------------------------------------------------------------------- /src/Monitoring/grafana-init/.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /src/Monitoring/grafana-init/grafana.env: -------------------------------------------------------------------------------- 1 | CONF_FILE=/etc/grafana/local.ini 2 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/wwwroot/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / -------------------------------------------------------------------------------- /eng/common/cross/riscv64/sources.list.sid: -------------------------------------------------------------------------------- 1 | deb http://deb.debian.org/debian-ports sid main 2 | -------------------------------------------------------------------------------- /.packages/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository has utilities and services used by the .NET engineering services team. 2 | -------------------------------------------------------------------------------- /artifacts/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } -------------------------------------------------------------------------------- /.packages/Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.packages/Directory.Packages.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /artifacts/Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /artifacts/Directory.Packages.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 2 | -------------------------------------------------------------------------------- /eng/common/BuildConfiguration/build-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "RetryCountLimit": 1, 3 | "RetryByAnyError": false 4 | } 5 | -------------------------------------------------------------------------------- /Documentation/OnePagers/EpicDropDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/OnePagers/EpicDropDown.png -------------------------------------------------------------------------------- /eng/common/dotnet-install.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet-install.ps1""" %*" -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/Telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/Telemetry.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/GrafanaAlert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/GrafanaAlert.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/MultipleSubs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/MultipleSubs.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/toolversions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/toolversions.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/MachinesOffline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/MachinesOffline.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/QueueCoreSetup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/QueueCoreSetup.png -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/TeamsMessages/IAction.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.TeamsMessages; 2 | 3 | public interface IAction { }; 4 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Validation/Images/Stages.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Validation/Images/Stages.PNG -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/QueueSecurityBuild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/QueueSecurityBuild.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/assets/RedirectJobsWorkflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/assets/RedirectJobsWorkflow.png -------------------------------------------------------------------------------- /Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Validation/Images/testproject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Validation/Images/testproject.png -------------------------------------------------------------------------------- /eng/common/CIBuild.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" -------------------------------------------------------------------------------- /eng/common/sdl/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Auto-Retry Failures/Images/Logs.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Auto-Retry Failures/Images/Logs.JPG -------------------------------------------------------------------------------- /Documentation/ProjectDocs/OS Onboarding/Images/DevWorkFlow.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/OS Onboarding/Images/DevWorkFlow.JPG -------------------------------------------------------------------------------- /eng/common/init-tools-native.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | powershell -NoProfile -NoLogo -ExecutionPolicy ByPass -command "& """%~dp0init-tools-native.ps1""" %*" 3 | exit /b %ErrorLevel% -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Validation/Images/newxunitproject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Validation/Images/newxunitproject.png -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ApplicationInsightsConnectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000" 3 | } -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web.Tests/DotNetStatusEmptyTestStartup.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Tests; 2 | 3 | public class DotNetStatusEmptyTestStartup 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Dependency Flow/release-branch-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Dependency Flow/release-branch-history.png -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Validation/Images/scenariotestprojects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Validation/Images/scenariotestprojects.png -------------------------------------------------------------------------------- /eng/Publishing.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 3 5 | 6 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/HelixTestLogSearch/Resources/project-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/HelixTestLogSearch/Resources/project-diagram.png -------------------------------------------------------------------------------- /eng/common/templates/steps/run-on-unix.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | agentOs: '' 3 | steps: [] 4 | 5 | steps: 6 | - ${{ if ne(parameters.agentOs, 'Windows_NT') }}: 7 | - ${{ parameters.steps }} 8 | -------------------------------------------------------------------------------- /eng/common/templates/steps/run-on-windows.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | agentOs: '' 3 | steps: [] 4 | 5 | steps: 6 | - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: 7 | - ${{ parameters.steps }} 8 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssuesHookChange.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssuesHookChange 4 | { 5 | public string From { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssuesHookLabel.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssuesHookLabel 4 | { 5 | public string Name { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssuesHookUser.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssuesHookUser 4 | { 5 | public string Login { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /eng/common/cross/arm/sources.list.jessie: -------------------------------------------------------------------------------- 1 | # Debian (sid) # UNSTABLE 2 | deb http://ftp.debian.org/debian/ sid main contrib non-free 3 | deb-src http://ftp.debian.org/debian/ sid main contrib non-free 4 | -------------------------------------------------------------------------------- /eng/common/cross/armel/sources.list.jessie: -------------------------------------------------------------------------------- 1 | # Debian (jessie) # Stable 2 | deb http://ftp.debian.org/debian/ jessie main contrib non-free 3 | deb-src http://ftp.debian.org/debian/ jessie main contrib non-free 4 | -------------------------------------------------------------------------------- /eng/common/cross/armv6/sources.list.buster: -------------------------------------------------------------------------------- 1 | deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi 2 | deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi 3 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Auto-Retry Failures/Images/WorkItemAggregateSummary_Count.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Auto-Retry Failures/Images/WorkItemAggregateSummary_Count.JPG -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Auto-Retry Failures/Images/WorkItemAggregateSummary_Icon.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/dnceng/HEAD/Documentation/ProjectDocs/Auto-Retry Failures/Images/WorkItemAggregateSummary_Icon.JPG -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/RcaOptions.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web; 2 | 3 | public class RcaOptions 4 | { 5 | public string Organization { get; set; } 6 | public string Project { get; set; } 7 | } 8 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.azuredevops/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | # Disabling dependabot on Azure DevOps as this is a mirrored repo. Updates should go through github. 4 | enable-campaigned-updates: false 5 | enable-security-updates: false 6 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Options/AnnotationsOptions.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Options; 2 | 3 | public class AnnotationsOptions 4 | { 5 | public string DeploymentsTableConnectionString { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /es-metadata.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 0.0.1 2 | isProduction: true 3 | accountableOwners: 4 | service: 8835b1f3-0d22-4e28-bae0-65da04655ed4 5 | routing: 6 | defaultAreaPath: 7 | org: dnceng 8 | path: internal\Dotnet-Core-Engineering -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssueOrPullRequestCommentChangesBody.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssueOrPullRequestCommentChangesBody 4 | { 5 | public string From { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssueOrPullRequestCommentChanges.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssueOrPullRequestCommentChanges 4 | { 5 | public IssueOrPullRequestCommentChangesBody Body { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssuesHookChanges.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssuesHookChanges 4 | { 5 | public IssuesHookChange Title { get; set; } 6 | public IssuesHookChange Body { get; set; } 7 | } 8 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web.Tests/TestCasesData/triage-items-with-invalid.expected.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "BuildId": 674578, 4 | "RecordId": "4ec48297-f0d4-5d6c-7d7c-174fafbbae1c", 5 | "Index": 1, 6 | "UpdatedCategory": "Test" 7 | } 8 | ] 9 | -------------------------------------------------------------------------------- /src/Monitoring/ComponentGovernance/.gitignore: -------------------------------------------------------------------------------- 1 | # cgmanifest is generated by `generate-cgmanifest.ps1` script during build. 2 | # This gitignore file prevents accidental addition of this file 3 | # for example when testing the script on local machine. 4 | cgmanifest.json 5 | -------------------------------------------------------------------------------- /.config/dotnet-tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "isRoot": true, 4 | "tools": { 5 | "microsoft.dnceng.secretmanager": { 6 | "version": "1.1.0-beta.24209.2", 7 | "commands": [ 8 | "secret-manager" 9 | ] 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /eng/common/internal/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssuesHookRepository.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssuesHookRepository 4 | { 5 | public string Name { get; set; } 6 | public IssuesHookUser Owner { get; set; } 7 | public long Id { get; set; } 8 | } 9 | -------------------------------------------------------------------------------- /CODE-OF-CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | This project has adopted the code of conduct defined by the Contributor Covenant 4 | to clarify expected behavior in our community. 5 | 6 | For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). -------------------------------------------------------------------------------- /src/PatGenerator/Microsoft.DncEng.PatGenerator/Microsoft.DncEng.PatGenerator.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/MilestoneManagementOptions.cs: -------------------------------------------------------------------------------- 1 | using NUnit.Framework; 2 | using System.Collections.Generic; 3 | 4 | namespace DotNet.Status.Web 5 | { 6 | public class MilestoneManagementOptions 7 | { 8 | public List ReposEnabledFor { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /eng/common/internal/NuGet.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/TeamsMessages/Target.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace DotNet.Status.Web.TeamsMessages; 4 | 5 | public class Target 6 | { 7 | [JsonProperty("os")] 8 | public string OperatingSystem { get; set; } = "default"; 9 | 10 | public string Uri { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/CharExtension.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.DncEng.SecretManager; 2 | 3 | internal static class CharExtension 4 | { 5 | public static bool IsHexChar(this char c) 6 | { 7 | return char.IsDigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/ApplicationInsights.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/HumanInterventionRequiredException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.DncEng.SecretManager; 4 | 5 | public class HumanInterventionRequiredException : Exception 6 | { 7 | public HumanInterventionRequiredException(string message) 8 | :base(message) 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /eng/common/templates/variables/sdl-variables.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | # The Guardian version specified in 'eng/common/sdl/packages.config'. This value must be kept in 3 | # sync with the packages.config file. 4 | - name: DefaultGuardianVersion 5 | value: 0.109.0 6 | - name: GuardianPackagesConfigFile 7 | value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config -------------------------------------------------------------------------------- /eng/common/templates-official/variables/sdl-variables.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | # The Guardian version specified in 'eng/common/sdl/packages.config'. This value must be kept in 3 | # sync with the packages.config file. 4 | - name: DefaultGuardianVersion 5 | value: 0.109.0 6 | - name: GuardianPackagesConfigFile 7 | value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "8.0.122", 4 | "rollForward": "minor" 5 | }, 6 | "tools": { 7 | "dotnet": "8.0.122", 8 | "runtimes": { 9 | "dotnet": [ 10 | "3.1.32", 11 | "6.0.14" 12 | ] 13 | } 14 | }, 15 | "msbuild-sdks": { 16 | "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.25574.4" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Monitoring/Sdk/Import.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [Parameter(Mandatory=$True)] 3 | [string] $GrafanaHost, 4 | 5 | [Parameter(Mandatory=$True)] 6 | [string] $AccessToken, 7 | 8 | [Parameter(Mandatory=$True)] 9 | [string] $Dashboard 10 | ) 11 | 12 | dotnet build -t:ImportGrafana "-p:GrafanaAccessToken=$AccessToken" "-p:GrafanaHost=$GrafanaHost" "-p:DashboardId=$Dashboard" -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/Status.cshtml.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Mvc.RazorPages; 3 | 4 | namespace DotNet.Status.Web.Pages; 5 | 6 | [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] 7 | [IgnoreAntiforgeryToken(Order = 1001)] 8 | public class StatusModel : PageModel 9 | { 10 | } 11 | -------------------------------------------------------------------------------- /eng/PoliCheckExclusions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWAGGER 5 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "DotNet.Status.Web": { 4 | "commandName": "Project", 5 | "launchBrowser": true, 6 | "environmentVariables": { 7 | "ASPNETCORE_ENVIRONMENT": "Development" 8 | }, 9 | "applicationUrl": "https://localhost:61926;http://localhost:61927" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Options/AzureDevOpsOptions.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Options; 2 | 3 | public class AzureDevOpsOptions 4 | { 5 | public string BaseUrl { get; set; } 6 | public string Organization { get; set; } 7 | public string Project { get; set; } 8 | public int MaxParallelRequests { get; set; } 9 | public string AccessToken { get; set; } 10 | } 11 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretReference.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.DncEng.SecretManager; 2 | 3 | public class SecretReference 4 | { 5 | public SecretReference() 6 | { 7 | } 8 | 9 | public SecretReference(string name) 10 | { 11 | Name = name; 12 | } 13 | 14 | public string Location { get; set; } 15 | public string Name { get; set; } 16 | } 17 | -------------------------------------------------------------------------------- /.config/tsaoptions.json: -------------------------------------------------------------------------------- 1 | { 2 | "instanceUrl": "https://devdiv.visualstudio.com/", 3 | "template": "TFSDEVDIV", 4 | "projectName": "DEVDIV", 5 | "areaPath": "DevDiv\\NET Fundamentals\\Infrastructure\\Arcade\\SDL", 6 | "iterationPath": "DevDiv", 7 | "notificationAliases": [ "dnceng@microsoft.com" ], 8 | "repositoryName":"dotnet-dnceng", 9 | "codebaseName": "dotnet-dnceng" 10 | } -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/RevocationStatus.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | namespace DotNet.Status.Web; 6 | 7 | public enum RevocationStatus 8 | { 9 | Unknown = 0, 10 | Active, 11 | Revoked, 12 | } 13 | -------------------------------------------------------------------------------- /.vault-config/telemetryprod.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: 68672ab8-de0c-40f1-8d1b-ffb20bd62c0f 5 | name: TelemetryServiceProd 6 | 7 | references: 8 | helixkv: 9 | type: azure-key-vault 10 | parameters: 11 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 12 | name: helixkv 13 | 14 | importSecretsFrom: shared/telemetry-secrets.yaml 15 | -------------------------------------------------------------------------------- /.vault-config/telemetryint.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: cab65fc3-d077-467d-931f-3932eabf36d3 5 | name: TelemetryServiceStaging 6 | 7 | references: 8 | helixkv: 9 | type: azure-key-vault 10 | parameters: 11 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 12 | name: helixkv 13 | 14 | importSecretsFrom: shared/telemetry-secrets.yaml 15 | -------------------------------------------------------------------------------- /.vault-config/telemetrylocal.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: cab65fc3-d077-467d-931f-3932eabf36d3 5 | name: TelemetryServiceLocal 6 | 7 | references: 8 | helixkv: 9 | type: azure-key-vault 10 | parameters: 11 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 12 | name: helixkv 13 | 14 | importSecretsFrom: shared/telemetry-secrets.yaml 15 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/PullRequestEventPayloadWithChanges.cs: -------------------------------------------------------------------------------- 1 | using Octokit; 2 | 3 | namespace DotNet.Status.Web.Models; 4 | 5 | public class PullRequestEventPayloadWithChanges 6 | { 7 | public IssueOrPullRequestCommentChanges Changes { get; set; } 8 | public string Action { get; set; } 9 | public Repository Repository { get; set; } 10 | public PullRequest PullRequest { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/TeamsMessages/Section.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DotNet.Status.Web.TeamsMessages; 4 | 5 | public class Section 6 | { 7 | public Uri ActivityImage { get; set; } 8 | 9 | public string ActivityTitle { get; set; } = string.Empty; 10 | 11 | public string ActivitySubtitle { get; set; } = string.Empty; 12 | 13 | public string ActivityText { get; set; } = string.Empty; 14 | } 15 | -------------------------------------------------------------------------------- /CredScanSuppressions.json: -------------------------------------------------------------------------------- 1 | { 2 | "tool": "Credential Scanner", 3 | "suppressions": [ 4 | { 5 | "placeholder": " hasWebHookSecret: boolean", 6 | "_justification": "The word secret is not a secret" 7 | }, 8 | { 9 | "hash": "0wmzz0zI9MmVLebdqWxSIJ9uxLJ13oIQKoWkEWrmViw=", 10 | "_justification": "SecretReference is the name of a Type. It is not a secret." 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretTypeRegistry.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | public class SecretTypeRegistry : NamedObjectRegistry 7 | { 8 | protected SecretTypeRegistry() : base() 9 | { 10 | } 11 | 12 | public SecretTypeRegistry(IEnumerable objects) : base(objects) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /THIRD-PARTY-NOTICES.TXT: -------------------------------------------------------------------------------- 1 | .NET Core uses third-party libraries or other resources that may be 2 | distributed under licenses different than the .NET Core software. 3 | 4 | In the event that we accidentally failed to list a required notice, please 5 | bring it to our attention. Post an issue or email us: 6 | 7 | dotnet@microsoft.com 8 | 9 | The attached notices are provided for information only. 10 | 11 | No notices are provided at this time. -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Staging/teamsHook.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Teams Alert", 3 | "type": "teams", 4 | "isDefault": false, 5 | "sendReminder": false, 6 | "disableResolveMessage": false, 7 | "frequency": "", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "uploadImage": false, 12 | "url": "[vault(fr-bot-notifications-teams-notification-url)]" 13 | } 14 | } -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Production/teamsHook.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Teams Alert", 3 | "type": "teams", 4 | "isDefault": false, 5 | "sendReminder": false, 6 | "disableResolveMessage": false, 7 | "frequency": "", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "uploadImage": false, 12 | "url": "[vault(fr-bot-notifications-teams-notification-url)]" 13 | } 14 | } -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssuesHookData.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class IssuesHookData 4 | { 5 | public string Action { get; set; } 6 | public Octokit.Issue Issue { get; set; } 7 | public IssuesHookUser Sender { get; set; } 8 | public IssuesHookRepository Repository { get; set; } 9 | public IssuesHookLabel Label { get; set; } 10 | public IssuesHookChanges Changes { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Options/NotificationEpicOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | namespace DotNet.Status.Web; 6 | 7 | public class NotificationEpicOptions 8 | { 9 | public string Repository { get; set; } 10 | public int IssueNumber { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/TeamsMessages/OpenUri.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Newtonsoft.Json; 4 | 5 | namespace DotNet.Status.Web.TeamsMessages; 6 | 7 | public class OpenUri : IAction 8 | { 9 | [JsonProperty("@type")] 10 | public string Type { get; set; } = "OpenUri"; 11 | 12 | public string Name { get; set; } = "Open comment"; 13 | 14 | public IList Targets { get; set; } = Array.Empty(); 15 | } 16 | -------------------------------------------------------------------------------- /src/PatGenerator/Microsoft.DncEng.PatGenerator.Tests/Microsoft.DncEng.PatGenerator.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/ApplicationParameters/Int.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/NameAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using JetBrains.Annotations; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | [AttributeUsage(AttributeTargets.Class)] 7 | [MeansImplicitUse(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)] 8 | public class NameAttribute : Attribute 9 | { 10 | public string Name { get; } 11 | 12 | public NameAttribute(string name) 13 | { 14 | Name = name; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/ApplicationParameters/Prod.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/PullRequestCommentPayloadWithChanges.cs: -------------------------------------------------------------------------------- 1 | using Octokit; 2 | 3 | namespace DotNet.Status.Web.Models; 4 | 5 | public class PullRequestCommentPayloadWithChanges 6 | { 7 | public IssueOrPullRequestCommentChanges Changes { get; set; } 8 | public string Action { get; set; } 9 | public PullRequest PullRequest { get; set; } 10 | public Repository Repository { get; set; } 11 | public PullRequestReviewComment Comment { get; set; } 12 | } -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Options/AzureTableTokenStoreOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | namespace DotNet.Status.Web.Options; 6 | 7 | public class AzureTableTokenStoreOptions 8 | { 9 | public string TableUri { get; set; } 10 | public string TableName { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/StorageLocationTypeRegistry.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | public class StorageLocationTypeRegistry : NamedObjectRegistry 7 | { 8 | public StorageLocationTypeRegistry() : base() 9 | { 10 | } 11 | 12 | public StorageLocationTypeRegistry(IEnumerable objects) : base(objects) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/ApplicationParameters/Local.1Node.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/ApplicationParameters/Local.5Node.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/IssueCommentPayloadWithChanges.cs: -------------------------------------------------------------------------------- 1 | using Octokit; 2 | 3 | namespace DotNet.Status.Web.Models; 4 | 5 | public class IssueCommentPayloadWithChanges 6 | { 7 | public IssueOrPullRequestCommentChanges Changes { get; set; } 8 | public string Action { get; set; } 9 | public User User{ get; set; } 10 | public Issue Issue { get; set; } 11 | public Repository Repository { get; set; } 12 | public IssueComment Comment { get; set; } 13 | } -------------------------------------------------------------------------------- /src/Monitoring/Microsoft.DotNet.Monitoring.Sdk.Tests/Microsoft.DotNet.Monitoring.Sdk.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | default 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/PackageRoot/Config/Settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/AugmentedBuild.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Microsoft.DotNet.Internal.AzureDevOps; 6 | 7 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 8 | 9 | public class AugmentedBuild 10 | { 11 | public Build Build { get; init; } 12 | public string TargetBranch { get; init; } 13 | } 14 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/Toolset/Overview.md: -------------------------------------------------------------------------------- 1 | Moved to https://github.com/dotnet/arcade/blob/main/README.md 2 | 3 | 4 | 5 | Was this helpful? [![Yes](https://helix.dot.net/f/ip/5?p=Documentation%5CProjectDocs%5CToolset%5COverview.md)](https://helix.dot.net/f/p/5?p=Documentation%5CProjectDocs%5CToolset%5COverview.md) [![No](https://helix.dot.net/f/in)](https://helix.dot.net/f/n/5?p=Documentation%5CProjectDocs%5CToolset%5COverview.md) 6 | 7 | -------------------------------------------------------------------------------- /src/Microsoft.DotNet.Internal.Tools.SynchronizePackageProps/Microsoft.DotNet.Internal.Tools.SynchronizePackageProps.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | true 6 | true 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /eng/common/templates/steps/add-build-to-channel.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | ChannelId: 0 3 | 4 | steps: 5 | - task: PowerShell@2 6 | displayName: Add Build to Channel 7 | inputs: 8 | filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/add-build-to-channel.ps1 9 | arguments: -BuildId $(BARBuildId) 10 | -ChannelId ${{ parameters.ChannelId }} 11 | -MaestroApiAccessToken $(MaestroApiAccessToken) 12 | -MaestroApiEndPoint $(MaestroApiEndPoint) 13 | -MaestroApiVersion $(MaestroApiVersion) 14 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/ServiceConnections/ServiceEndpointUpdateData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.DncEng.SecretManager.ServiceConnections; 8 | 9 | #nullable enable 10 | 11 | public class ServiceEndpointUpdateData 12 | { 13 | public string? Name { get; set; } 14 | public string? Description { get; set; } 15 | public string? AccessToken { get; set; } 16 | } 17 | -------------------------------------------------------------------------------- /eng/common/cross/x86/tizen/tizen.patch: -------------------------------------------------------------------------------- 1 | diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so 2 | --- a/usr/lib/libc.so 2016-12-30 23:00:08.284951863 +0900 3 | +++ b/usr/lib/libc.so 2016-12-30 23:00:32.140951815 +0900 4 | @@ -2,4 +2,4 @@ 5 | Use the shared library, but some functions are only in 6 | the static library, so try that secondarily. */ 7 | OUTPUT_FORMAT(elf32-i386) 8 | -GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.2 ) ) 9 | +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.2 ) ) 10 | -------------------------------------------------------------------------------- /eng/common/templates-official/steps/add-build-to-channel.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | ChannelId: 0 3 | 4 | steps: 5 | - task: PowerShell@2 6 | displayName: Add Build to Channel 7 | inputs: 8 | filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/add-build-to-channel.ps1 9 | arguments: -BuildId $(BARBuildId) 10 | -ChannelId ${{ parameters.ChannelId }} 11 | -MaestroApiAccessToken $(MaestroApiAccessToken) 12 | -MaestroApiEndPoint $(MaestroApiEndPoint) 13 | -MaestroApiVersion $(MaestroApiVersion) 14 | -------------------------------------------------------------------------------- /eng/common/cross/armel/tizen/tizen.patch: -------------------------------------------------------------------------------- 1 | diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so 2 | --- a/usr/lib/libc.so 2016-12-30 23:00:08.284951863 +0900 3 | +++ b/usr/lib/libc.so 2016-12-30 23:00:32.140951815 +0900 4 | @@ -2,4 +2,4 @@ 5 | Use the shared library, but some functions are only in 6 | the static library, so try that secondarily. */ 7 | OUTPUT_FORMAT(elf32-littlearm) 8 | -GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.3 ) ) 9 | +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) ) 10 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/ITokenRevocationProvider.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Threading.Tasks; 6 | 7 | namespace DotNet.Status.Web; 8 | 9 | public interface ITokenRevocationProvider 10 | { 11 | Task IsTokenRevokedAsync(long userId, long tokenId); 12 | Task RevokeTokenAsync(long userId, long tokenId); 13 | } 14 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.DncEng.SecretManager; 4 | 5 | public class SecretData 6 | { 7 | public SecretData(string value, DateTimeOffset expiresOn, DateTimeOffset nextRotationOn) 8 | { 9 | Value = value; 10 | ExpiresOn = expiresOn; 11 | NextRotationOn = nextRotationOn; 12 | } 13 | 14 | public DateTimeOffset NextRotationOn { get; } 15 | public DateTimeOffset ExpiresOn { get; } 16 | public string Value { get; } 17 | } 18 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsClient.Tests/AzureDevOpsClient.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | enable 5 | false 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /eng/common/PSScriptAnalyzerSettings.psd1: -------------------------------------------------------------------------------- 1 | @{ 2 | IncludeRules=@('PSAvoidUsingCmdletAliases', 3 | 'PSAvoidUsingWMICmdlet', 4 | 'PSAvoidUsingPositionalParameters', 5 | 'PSAvoidUsingInvokeExpression', 6 | 'PSUseDeclaredVarsMoreThanAssignments', 7 | 'PSUseCmdletCorrectly', 8 | 'PSStandardDSCFunctionsInResource', 9 | 'PSUseIdenticalMandatoryParametersForDSC', 10 | 'PSUseIdenticalParametersForDSC') 11 | } -------------------------------------------------------------------------------- /eng/common/templates/post-build/trigger-subscription.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | ChannelId: 0 3 | 4 | steps: 5 | - task: PowerShell@2 6 | displayName: Triggering subscriptions 7 | inputs: 8 | filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/trigger-subscriptions.ps1 9 | arguments: -SourceRepo $(Build.Repository.Uri) 10 | -ChannelId ${{ parameters.ChannelId }} 11 | -MaestroApiAccessToken $(MaestroAccessToken) 12 | -MaestroApiEndPoint $(MaestroApiEndPoint) 13 | -MaestroApiVersion $(MaestroApiVersion) 14 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/ITimelineIssueTriage.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using DotNet.Status.Web.Controllers; 6 | using System.Threading.Tasks; 7 | using DotNet.Status.Web.Models; 8 | 9 | namespace DotNet.Status.Web; 10 | 11 | public interface ITimelineIssueTriage 12 | { 13 | Task ProcessIssueEvent(IssuesHookData issuePayload); 14 | } 15 | -------------------------------------------------------------------------------- /eng/common/cross/arm/tizen/tizen.patch: -------------------------------------------------------------------------------- 1 | diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so 2 | --- a/usr/lib/libc.so 2016-12-30 23:00:08.284951863 +0900 3 | +++ b/usr/lib/libc.so 2016-12-30 23:00:32.140951815 +0900 4 | @@ -2,4 +2,4 @@ 5 | Use the shared library, but some functions are only in 6 | the static library, so try that secondarily. */ 7 | OUTPUT_FORMAT(elf32-littlearm) 8 | -GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-armhf.so.3 ) ) 9 | +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-armhf.so.3 ) ) 10 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Options/GrafanaOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | namespace DotNet.Status.Web.Options; 6 | 7 | public class GrafanaOptions 8 | { 9 | public string BaseUrl { get; set; } 10 | public string ApiToken { get; set; } 11 | public string TableUri { get; set; } 12 | public string TableName { get; set; } 13 | } 14 | -------------------------------------------------------------------------------- /eng/common/templates-official/post-build/trigger-subscription.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | ChannelId: 0 3 | 4 | steps: 5 | - task: PowerShell@2 6 | displayName: Triggering subscriptions 7 | inputs: 8 | filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/trigger-subscriptions.ps1 9 | arguments: -SourceRepo $(Build.Repository.Uri) 10 | -ChannelId ${{ parameters.ChannelId }} 11 | -MaestroApiAccessToken $(MaestroAccessToken) 12 | -MaestroApiEndPoint $(MaestroApiEndPoint) 13 | -MaestroApiVersion $(MaestroApiVersion) 14 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/KustoTimelineTelemetryOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 6 | 7 | public class KustoTimelineTelemetryOptions 8 | { 9 | public string IngestConnectionString { get; set; } 10 | public string QueryConnectionString { get; set; } 11 | public string Database { get; set; } 12 | } 13 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.buster: -------------------------------------------------------------------------------- 1 | deb http://deb.debian.org/debian buster main 2 | deb-src http://deb.debian.org/debian buster main 3 | 4 | deb http://deb.debian.org/debian-security/ buster/updates main 5 | deb-src http://deb.debian.org/debian-security/ buster/updates main 6 | 7 | deb http://deb.debian.org/debian buster-updates main 8 | deb-src http://deb.debian.org/debian buster-updates main 9 | 10 | deb http://deb.debian.org/debian buster-backports main contrib non-free 11 | deb-src http://deb.debian.org/debian buster-backports main contrib non-free 12 | -------------------------------------------------------------------------------- /NuGet.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /eng/common/cross/x64/tizen/tizen.patch: -------------------------------------------------------------------------------- 1 | diff -u -r a/usr/lib64/libc.so b/usr/lib64/libc.so 2 | --- a/usr/lib64/libc.so 2016-12-30 23:00:08.284951863 +0900 3 | +++ b/usr/lib64/libc.so 2016-12-30 23:00:32.140951815 +0900 4 | @@ -2,4 +2,4 @@ 5 | Use the shared library, but some functions are only in 6 | the static library, so try that secondarily. */ 7 | OUTPUT_FORMAT(elf64-x86-64) 8 | -GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) ) 9 | +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-x86-64.so.2 ) ) 10 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Production/statusHook.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": ".NET Status Alert", 3 | "type": "webhook", 4 | "isDefault": false, 5 | "sendReminder": false, 6 | "disableResolveMessage": false, 7 | "frequency": "", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "password": "[vault(dotnet-build-bot-dotnet-eng-status-token)]", 12 | "uploadImage": false, 13 | "url": "https://dotneteng-status.azurewebsites.net/api/alert", 14 | "username": "ignored" 15 | } 16 | } -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/.config/settings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "KeyVaultUri": "https://telemetryservicelocal.vault.azure.net/", 3 | "Secrets": { 4 | "ManagedIdentityId": "e9d81917-4c98-44cc-8a6e-601311ac3c07" 5 | }, 6 | "InitialDelay": "0:00:00", 7 | "Interval": "0:30:00", 8 | "BuildBatchSize": 1000, 9 | "KustoTimelineTelemetry": { 10 | "KustoClusterUri": "https://engdata.westus2.kusto.windows.net", 11 | "KustoIngestionUri": "https://ingest-engdata.westus2.kusto.windows.net", 12 | "UseAzCliAuthentication": true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/tizen/tizen.patch: -------------------------------------------------------------------------------- 1 | diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so 2 | --- a/usr/lib64/libc.so 2016-12-30 23:00:08.284951863 +0900 3 | +++ b/usr/lib64/libc.so 2016-12-30 23:00:32.140951815 +0900 4 | @@ -2,4 +2,4 @@ 5 | Use the shared library, but some functions are only in 6 | the static library, so try that secondarily. */ 7 | OUTPUT_FORMAT(elf64-littleaarch64) 8 | -GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) ) 9 | +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) ) 10 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Staging/statusHook.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": ".NET Status Alert", 3 | "type": "webhook", 4 | "isDefault": false, 5 | "sendReminder": false, 6 | "disableResolveMessage": false, 7 | "frequency": "", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "password": "[vault(dotnet-build-bot-dotnet-eng-status-token)]", 12 | "uploadImage": false, 13 | "url": "https://dotneteng-status-staging.azurewebsites.net/api/alert", 14 | "username": "ignored" 15 | } 16 | } -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager.Tests/Microsoft.DncEng.SecretManager.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsClient/AzureDevOpsClientOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | using System.Collections.Generic; 5 | namespace Microsoft.DotNet.Internal.AzureDevOps; 6 | 7 | public class AzureDevOpsClientOptions 8 | { 9 | public string Organization { get; set; } 10 | public int MaxParallelRequests { get; set; } = 4; 11 | public string AccessToken { get; set; } 12 | } 13 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/.config/settings.Staging.json: -------------------------------------------------------------------------------- 1 | { 2 | "KeyVaultUri": "https://telemetryservicestaging.vault.azure.net/", 3 | "Secrets": { 4 | "ManagedIdentityId": "e9d81917-4c98-44cc-8a6e-601311ac3c07" 5 | }, 6 | "KustoTimelineTelemetry": { 7 | "KustoClusterUri": "https://engdata.westus2.kusto.windows.net", 8 | "KustoIngestionUri": "https://ingest-engdata.westus2.kusto.windows.net", 9 | "ManagedIdentityId": "e9d81917-4c98-44cc-8a6e-601311ac3c07", 10 | "UseAzCliAuthentication": false 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.stretch: -------------------------------------------------------------------------------- 1 | deb http://deb.debian.org/debian stretch main 2 | deb-src http://deb.debian.org/debian stretch main 3 | 4 | deb http://deb.debian.org/debian-security/ stretch/updates main 5 | deb-src http://deb.debian.org/debian-security/ stretch/updates main 6 | 7 | deb http://deb.debian.org/debian stretch-updates main 8 | deb-src http://deb.debian.org/debian stretch-updates main 9 | 10 | deb http://deb.debian.org/debian stretch-backports main contrib non-free 11 | deb-src http://deb.debian.org/debian stretch-backports main contrib non-free 12 | 13 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/.config/settings.Production.json: -------------------------------------------------------------------------------- 1 | { 2 | "KeyVaultUri": "https://telemetryserviceprod.vault.azure.net/", 3 | "Secrets": { 4 | "ManagedIdentityId": "d2580e46-e758-4778-a864-18f909438b45" 5 | }, 6 | "KustoTimelineTelemetry": { 7 | "KustoClusterUri": "https://engsrvprod.westus.kusto.windows.net", 8 | "KustoIngestionUri": "https://ingest-engsrvprod.westus.kusto.windows.net", 9 | "ManagedIdentityId": "d2580e46-e758-4778-a864-18f909438b45", 10 | "UseAzCliAuthentication": false 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/GrafanaNotificationMatch.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Collections.Immutable; 6 | 7 | namespace DotNet.Status.Web.Models; 8 | 9 | public class GrafanaNotificationMatch 10 | { 11 | public string Metric { get; set; } 12 | public ImmutableDictionary Tags { get; set; } 13 | public double Value { get; set; } 14 | } 15 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Production/statusHook.imageless.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": ".NET Status Alert (no image)", 3 | "type": "webhook", 4 | "isDefault": false, 5 | "sendReminder": false, 6 | "disableResolveMessage": false, 7 | "frequency": "", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "password": "[vault(dotnet-build-bot-dotnet-eng-status-token)]", 12 | "uploadImage": false, 13 | "url": "https://dotneteng-status.azurewebsites.net/api/alert", 14 | "username": "ignored" 15 | } 16 | } -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Staging/statusHook.imageless.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": ".NET Status Alert (no image)", 3 | "type": "webhook", 4 | "isDefault": false, 5 | "sendReminder": false, 6 | "disableResolveMessage": false, 7 | "frequency": "", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "password": "[vault(dotnet-build-bot-dotnet-eng-status-token)]", 12 | "uploadImage": false, 13 | "url": "https://dotneteng-status-staging.azurewebsites.net/api/alert", 14 | "username": "ignored" 15 | } 16 | } -------------------------------------------------------------------------------- /src/Monitoring/Sdk/PolyFill.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Collections.Generic; 6 | 7 | namespace Microsoft.DotNet.Monitoring.Sdk; 8 | 9 | internal static class PolyFill 10 | { 11 | public static void Deconstruct(this KeyValuePair pair, out TKey key, out TValue value) 12 | { 13 | key = pair.Key; 14 | value = pair.Value; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web.Tests/TestCasesData/triage-items-with-diff-cat.expected.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "BuildId": 666778, 4 | "RecordId": "6c5bbe10-d41c-5008-b9b3-09c7d6d8c0b3", 5 | "Index": 0, 6 | "UpdatedCategory": "Pool provider" 7 | }, 8 | { 9 | "BuildId": 674578, 10 | "RecordId": "4ec48297-f0d4-5d6c-7d7c-174fafbbae1c", 11 | "Index": 1, 12 | "UpdatedCategory": "Test" 13 | }, 14 | { 15 | "BuildId": 688348, 16 | "RecordId": "3b5945b0-87a7-52cf-843a-406c21a8e27e", 17 | "Index": 2, 18 | "UpdatedCategory": "Helix" 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/KustoIngestExtension.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.DependencyInjection; 2 | using Microsoft.DotNet.Kusto; 3 | using Microsoft.Extensions.Configuration; 4 | 5 | namespace DotNet.Status.Web; 6 | 7 | public static class KustoIngestExtension 8 | { 9 | public static IServiceCollection AddKustoIngest(this IServiceCollection services, IConfiguration config) 10 | { 11 | services.Configure(config); 12 | services.AddSingleton(); 13 | return services; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.vault-config/shared/telemetry-secrets.yaml: -------------------------------------------------------------------------------- 1 | dn-bot-dnceng-build-r: 2 | type: azure-devops-access-token 3 | parameters: 4 | domainAccountName: dn-bot 5 | domainAccountSecret: 6 | location: helixkv 7 | name: dn-bot-account-redmond 8 | organizations: dnceng 9 | scopes: build 10 | 11 | dn-bot-dnceng-public-build-r: 12 | type: azure-devops-access-token 13 | parameters: 14 | domainAccountName: dn-bot 15 | domainAccountSecret: 16 | location: helixkv 17 | name: dn-bot-account-redmond 18 | organizations: dnceng-public 19 | scopes: build -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretProperties.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Immutable; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | public class SecretProperties 7 | { 8 | public SecretProperties(string name, DateTimeOffset expiresOn, IImmutableDictionary tags) 9 | { 10 | Name = name; 11 | ExpiresOn = expiresOn; 12 | Tags = tags; 13 | } 14 | 15 | public DateTimeOffset ExpiresOn { get; } 16 | public IImmutableDictionary Tags { get; } 17 | public string Name { get; } 18 | } 19 | -------------------------------------------------------------------------------- /eng/common/cibuild.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source="${BASH_SOURCE[0]}" 4 | 5 | # resolve $SOURCE until the file is no longer a symlink 6 | while [[ -h $source ]]; do 7 | scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" 8 | source="$(readlink "$source")" 9 | 10 | # if $source was a relative symlink, we need to resolve it relative to the path where 11 | # the symlink file was located 12 | [[ $source != /* ]] && source="$scriptroot/$source" 13 | done 14 | scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" 15 | 16 | . "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ -------------------------------------------------------------------------------- /eng/common/templates/steps/build-reason.yml: -------------------------------------------------------------------------------- 1 | # build-reason.yml 2 | # Description: runs steps if build.reason condition is valid. conditions is a string of valid build reasons 3 | # to include steps (',' separated). 4 | parameters: 5 | conditions: '' 6 | steps: [] 7 | 8 | steps: 9 | - ${{ if and( not(startsWith(parameters.conditions, 'not')), contains(parameters.conditions, variables['build.reason'])) }}: 10 | - ${{ parameters.steps }} 11 | - ${{ if and( startsWith(parameters.conditions, 'not'), not(contains(parameters.conditions, variables['build.reason']))) }}: 12 | - ${{ parameters.steps }} 13 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/DisposableList.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | public class DisposableList : IDisposable 7 | { 8 | private readonly List _disposables = new List(); 9 | 10 | public void Add(IDisposable disposable) 11 | { 12 | _disposables.Add(disposable); 13 | } 14 | 15 | public void Dispose() 16 | { 17 | foreach (var disposable in _disposables) 18 | { 19 | disposable?.Dispose(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web.Tests/TestCasesData/triage-items-with-multi-builds.expected.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "BuildId": 666778, 4 | "RecordId": "6c5bbe10-d41c-5008-b9b3-09c7d6d8c0b3", 5 | "Index": 0, 6 | "UpdatedCategory": "Pool provider" 7 | }, 8 | { 9 | "BuildId": 674578, 10 | "RecordId": "4ec48297-f0d4-5d6c-7d7c-174fafbbae1c", 11 | "Index": 0, 12 | "UpdatedCategory": "Pool provider" 13 | }, 14 | { 15 | "BuildId": 688348, 16 | "RecordId": "3b5945b0-87a7-52cf-843a-406c21a8e27e", 17 | "Index": 0, 18 | "UpdatedCategory": "Pool provider" 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Production/statusHook.imageless.12h_reminder.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": ".NET Status Alert (no image, 12h reminder)", 3 | "type": "webhook", 4 | "isDefault": false, 5 | "sendReminder": true, 6 | "disableResolveMessage": false, 7 | "frequency": "12h", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "password": "[vault(dotnet-build-bot-dotnet-eng-status-token)]", 12 | "uploadImage": false, 13 | "url": "https://dotneteng-status.azurewebsites.net/api/alert", 14 | "username": "ignored" 15 | } 16 | } -------------------------------------------------------------------------------- /eng/common/templates-official/steps/build-reason.yml: -------------------------------------------------------------------------------- 1 | # build-reason.yml 2 | # Description: runs steps if build.reason condition is valid. conditions is a string of valid build reasons 3 | # to include steps (',' separated). 4 | parameters: 5 | conditions: '' 6 | steps: [] 7 | 8 | steps: 9 | - ${{ if and( not(startsWith(parameters.conditions, 'not')), contains(parameters.conditions, variables['build.reason'])) }}: 10 | - ${{ parameters.steps }} 11 | - ${{ if and( startsWith(parameters.conditions, 'not'), not(contains(parameters.conditions, variables['build.reason']))) }}: 12 | - ${{ parameters.steps }} 13 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/notifications/Staging/statusHook.imageless.12h_reminder.notification.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": ".NET Status Alert (no image, 12h reminder)", 3 | "type": "webhook", 4 | "isDefault": false, 5 | "sendReminder": true, 6 | "disableResolveMessage": false, 7 | "frequency": "12h", 8 | "settings": { 9 | "autoResolve": true, 10 | "httpMethod": "POST", 11 | "password": "[vault(dotnet-build-bot-dotnet-eng-status-token)]", 12 | "uploadImage": false, 13 | "url": "https://dotneteng-status-staging.azurewebsites.net/api/alert", 14 | "username": "ignored" 15 | } 16 | } -------------------------------------------------------------------------------- /eng/common/post-build/nuget-validation.ps1: -------------------------------------------------------------------------------- 1 | # This script validates NuGet package metadata information using this 2 | # tool: https://github.com/NuGet/NuGetGallery/tree/jver-verify/src/VerifyMicrosoftPackage 3 | 4 | param( 5 | [Parameter(Mandatory=$true)][string] $PackagesPath # Path to where the packages to be validated are 6 | ) 7 | 8 | try { 9 | . $PSScriptRoot\post-build-utils.ps1 10 | 11 | & $PSScriptRoot\nuget-verification.ps1 ${PackagesPath}\*.nupkg 12 | } 13 | catch { 14 | Write-Host $_.ScriptStackTrace 15 | Write-PipelineTelemetryError -Category 'NuGetValidation' -Message $_ 16 | ExitWithExitCode 1 17 | } 18 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/ServiceConnections/ServiceEndpointClientException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.DncEng.SecretManager.ServiceConnections; 4 | 5 | #nullable enable 6 | 7 | public class ServiceEndpointClientException : Exception 8 | { 9 | public ServiceEndpointClientException() 10 | { 11 | 12 | } 13 | 14 | public ServiceEndpointClientException(string? message) : base(message) 15 | { 16 | 17 | } 18 | 19 | public ServiceEndpointClientException(string? message, Exception? innerException) : base(message, innerException) 20 | { 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /eng/common/templates/steps/component-governance.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | disableComponentGovernance: false 3 | componentGovernanceIgnoreDirectories: '' 4 | 5 | steps: 6 | - ${{ if eq(parameters.disableComponentGovernance, 'true') }}: 7 | - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" 8 | displayName: Set skipComponentGovernanceDetection variable 9 | - ${{ if ne(parameters.disableComponentGovernance, 'true') }}: 10 | - task: ComponentGovernanceComponentDetection@0 11 | continueOnError: true 12 | inputs: 13 | ignoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} -------------------------------------------------------------------------------- /eng/common/templates-official/steps/component-governance.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | disableComponentGovernance: false 3 | componentGovernanceIgnoreDirectories: '' 4 | 5 | steps: 6 | - ${{ if eq(parameters.disableComponentGovernance, 'true') }}: 7 | - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" 8 | displayName: Set skipComponentGovernanceDetection variable 9 | - ${{ if ne(parameters.disableComponentGovernance, 'true') }}: 10 | - task: ComponentGovernanceComponentDetection@0 11 | continueOnError: true 12 | inputs: 13 | ignoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} -------------------------------------------------------------------------------- /src/Monitoring/grafana-init/grafana-override.conf: -------------------------------------------------------------------------------- 1 | [Service] 2 | EnvironmentFile=/etc/grafana/grafana.env 3 | ExecStart= 4 | ExecStart=/usr/local/bin/vault-env.py ${GRAFANA_BIN} \ 5 | --config=${CONF_FILE} \ 6 | --pidfile=${PID_FILE_DIR}/grafana-server.pid \ 7 | --packaging=deb \ 8 | cfg:default.paths.logs=${LOG_DIR} \ 9 | cfg:default.paths.data=${DATA_DIR} \ 10 | cfg:default.paths.plugins=${PLUGINS_DIR} \ 11 | cfg:default.paths.provisioning=${PROVISIONING_CFG_DIR} 12 | -------------------------------------------------------------------------------- /src/Microsoft.DncEng.Configuration.Bootstrap/Microsoft.DncEng.Configuration.Bootstrap.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | app.manifest 6 | true 7 | true 8 | false 9 | bootstrap-dnceng-configuration 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /eng/common/enable-cross-org-publishing.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [string] $token 3 | ) 4 | 5 | 6 | . $PSScriptRoot\pipeline-logging-functions.ps1 7 | 8 | # Write-PipelineSetVariable will no-op if a variable named $ci is not defined 9 | # Since this script is only ever called in AzDO builds, just universally set it 10 | $ci = $true 11 | 12 | Write-PipelineSetVariable -Name 'VSS_NUGET_ACCESSTOKEN' -Value $token -IsMultiJobVariable $false 13 | Write-PipelineSetVariable -Name 'VSS_NUGET_URI_PREFIXES' -Value 'https://dnceng.pkgs.visualstudio.com/;https://pkgs.dev.azure.com/dnceng/;https://devdiv.pkgs.visualstudio.com/;https://pkgs.dev.azure.com/devdiv/' -IsMultiJobVariable $false 14 | -------------------------------------------------------------------------------- /eng/common/sdl/NuGet.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/AugmentedTimelineRecord.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Microsoft.DotNet.Internal.AzureDevOps; 6 | 7 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 8 | 9 | public class AugmentedTimelineRecord 10 | { 11 | public int BuildId { get; init; } 12 | public string TimelineId { get; init; } 13 | public TimelineRecord Raw { get; init; } 14 | public string AugmentedOrder { get; set; } 15 | public string ImageName { get; set; } 16 | } 17 | -------------------------------------------------------------------------------- /.vault-config/helixkv.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 5 | name: helixkv 6 | 7 | secrets: 8 | dn-bot-account-redmond: 9 | type: domain-account 10 | parameters: 11 | accountName: dn-bot 12 | description: The dn-bot account 13 | 14 | dnb2-bot-account-redmond: 15 | type: domain-account 16 | parameters: 17 | accountName: dnb2-bot 18 | description: The dnb2-bot account 19 | 20 | dn-dependabot-account-redmond: 21 | type: domain-account 22 | parameters: 23 | accountName: dn-dependabot 24 | description: The dn-dependabot account 25 | -------------------------------------------------------------------------------- /bootstrap.ps1: -------------------------------------------------------------------------------- 1 | if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { 2 | Write-Warning "Script must be run in Admin Mode!" 3 | exit 1 4 | } 5 | 6 | $ErrorActionPreference = "Stop" 7 | Set-StrictMode -Version 2.0 8 | 9 | New-LocalGroup -Name "DncEngConfigurationUsers" -ErrorAction Continue 10 | Add-LocalGroupMember -Group "DncEngConfigurationUsers" -Member $(whoami) -ErrorAction Continue 11 | 12 | dotnet run --project .\src\Microsoft.DncEng.Configuration.Bootstrap\Microsoft.DncEng.Configuration.Bootstrap.csproj -- -r "https://vault.azure.net" -r "https://management.azure.com" -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/ServiceConnections/RestModels/GetServiceEndpointsResponse.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Text.Json.Serialization; 3 | 4 | namespace Microsoft.DncEng.SecretManager.ServiceConnections.RestModels; 5 | 6 | internal class GetServiceEndpointsResponse 7 | { 8 | 9 | [JsonPropertyName("count")] 10 | public int Count { get; set; } 11 | 12 | [JsonPropertyName("value")] 13 | public IReadOnlyList Value { get; set; } 14 | 15 | public GetServiceEndpointsResponse(int count, IReadOnlyList value) 16 | { 17 | Count = count; 18 | Value = value; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsClient/AzureDevOpsClient.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Microsoft.DotNet.Internal.AzureDevOps 5 | Microsoft.DotNet.Internal.AzureDevOps 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /eng/common/cross/x86/sources.list.focal: -------------------------------------------------------------------------------- 1 | deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe 2 | deb-src http://archive.ubuntu.com/ubuntu/ focal main restricted universe 3 | 4 | deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe 5 | deb-src http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe 6 | 7 | deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted 8 | deb-src http://archive.ubuntu.com/ubuntu/ focal-backports main restricted 9 | 10 | deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse 11 | deb-src http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/x86/sources.list.jammy: -------------------------------------------------------------------------------- 1 | deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe 2 | deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted universe 3 | 4 | deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe 5 | deb-src http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe 6 | 7 | deb http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted 8 | deb-src http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted 9 | 10 | deb http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse 11 | deb-src http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/x64/sources.list.bionic: -------------------------------------------------------------------------------- 1 | deb http://archive.ubuntu.com/ubuntu/ bionic main restricted universe 2 | deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted universe 3 | 4 | deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe 5 | deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe 6 | 7 | deb http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted 8 | deb-src http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted 9 | 10 | deb http://archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse 11 | deb-src http://archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/x64/sources.list.xenial: -------------------------------------------------------------------------------- 1 | deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe 2 | deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted universe 3 | 4 | deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe 5 | deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe 6 | 7 | deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted 8 | deb-src http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted 9 | 10 | deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse 11 | deb-src http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/x86/sources.list.bionic: -------------------------------------------------------------------------------- 1 | deb http://archive.ubuntu.com/ubuntu/ bionic main restricted universe 2 | deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted universe 3 | 4 | deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe 5 | deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe 6 | 7 | deb http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted 8 | deb-src http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted 9 | 10 | deb http://archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse 11 | deb-src http://archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/x86/sources.list.xenial: -------------------------------------------------------------------------------- 1 | deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe 2 | deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted universe 3 | 4 | deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe 5 | deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe 6 | 7 | deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted 8 | deb-src http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted 9 | 10 | deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse 11 | deb-src http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/msbuild.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding(PositionalBinding=$false)] 2 | Param( 3 | [string] $verbosity = 'minimal', 4 | [bool] $warnAsError = $true, 5 | [bool] $nodeReuse = $true, 6 | [switch] $ci, 7 | [switch] $prepareMachine, 8 | [switch] $excludePrereleaseVS, 9 | [string] $msbuildEngine = $null, 10 | [Parameter(ValueFromRemainingArguments=$true)][String[]]$extraArgs 11 | ) 12 | 13 | . $PSScriptRoot\tools.ps1 14 | 15 | try { 16 | if ($ci) { 17 | $nodeReuse = $false 18 | } 19 | 20 | MSBuild @extraArgs 21 | } 22 | catch { 23 | Write-Host $_.ScriptStackTrace 24 | Write-PipelineTelemetryError -Category 'Build' -Message $_ 25 | ExitWithExitCode 1 26 | } 27 | 28 | ExitWithExitCode 0 -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/PublishProfiles/Local.1Node.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Telemetry/TelemetryApplication/PublishProfiles/Local.5Node.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/README.md: -------------------------------------------------------------------------------- 1 | # DotNet.Status.Web 2 | 3 | ## Overview 4 | 5 | The `DotNet.Status.Web` service is a web application used by the .NET Engineering Services team to monitor and manage the status of engineering workflows. It provides APIs and webhooks for tracking deployments, build notifications, and other engineering processes. The service integrates with tools like Azure DevOps, GitHub, and Grafana to provide real-time status updates and annotations. 6 | 7 | Key features include: 8 | - Deployment tracking with start and end annotations in Grafana. 9 | - Integration with Azure DevOps for build and timeline notifications. 10 | - GitHub webhook support for milestone management and issue tracking. 11 | -------------------------------------------------------------------------------- /.vault-config/dotneteng-status-local.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: cab65fc3-d077-467d-931f-3932eabf36d3 5 | name: dotneteng-status-local 6 | 7 | references: 8 | helixkv: 9 | type: azure-key-vault 10 | parameters: 11 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 12 | name: helixkv 13 | 14 | secrets: 15 | github: 16 | type: github-app-secret 17 | parameters: 18 | hasPrivateKey: true 19 | hasWebhookSecret: true 20 | hasOAuthSecret: true 21 | 22 | grafana-api-token: 23 | type: grafana-api-key 24 | parameters: 25 | environment: dotnet-eng-grafana-staging.westus2.cloudapp.azure.com 26 | 27 | -------------------------------------------------------------------------------- /NuGet.Internal.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /eng/import-grafana.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [switch]$Production, 3 | [switch]$Staging, 4 | 5 | [Parameter(ValueFromRemainingArguments)] 6 | [string[]]$Dashboards 7 | ) 8 | 9 | function Do-Import([string]$vault, [string]$hostSuffix, [string]$dash){ 10 | $key = (Get-AzureKeyVaultSecret -VaultName $vault -Name grafana-admin-api-key).SecretValueText 11 | dotnet build -t:ImportGrafana "-p:GrafanaAccessToken=$key" "-p:GrafanaHost=https://dotnet-eng-grafana$hostSuffix.westus2.cloudapp.azure.com" -v:normal "-p:DashboardId=$dash" 12 | } 13 | 14 | if ($Production) { 15 | $Dashboards |% { Do-Import dotnet-grafana "" $_ } 16 | } 17 | 18 | if ($Staging) { 19 | $Dashboards |% { Do-Import dotnet-grafana-staging "-staging" $_ } 20 | } -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretValue.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Immutable; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | public class SecretValue 7 | { 8 | public SecretValue(string value, IImmutableDictionary tags, DateTimeOffset nextRotationOn, DateTimeOffset expiresOn) 9 | { 10 | Value = value; 11 | Tags = tags; 12 | NextRotationOn = nextRotationOn; 13 | ExpiresOn = expiresOn; 14 | } 15 | 16 | public string Value { get; } 17 | public IImmutableDictionary Tags { get; } 18 | public DateTimeOffset NextRotationOn { get; } 19 | public DateTimeOffset ExpiresOn { get; } 20 | } 21 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/DeploymentEntity.cs: -------------------------------------------------------------------------------- 1 | using Azure; 2 | using Azure.Data.Tables; 3 | using System; 4 | using System.Runtime.Serialization; 5 | 6 | namespace DotNet.Status.Web.Models; 7 | 8 | public class DeploymentEntity : ITableEntity 9 | { 10 | public string PartitionKey { get; set; } 11 | public string RowKey { get; set; } 12 | public DateTimeOffset? Timestamp { get; set; } 13 | public ETag ETag { get; set; } 14 | 15 | [IgnoreDataMember] 16 | public string Service => PartitionKey; 17 | [IgnoreDataMember] 18 | public string BuildNumber => RowKey; 19 | public DateTimeOffset? Started { get; set; } 20 | public DateTimeOffset? Ended { get; set; } 21 | } 22 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager.Tests/TemporaryFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | 5 | namespace Microsoft.DncEng.SecretManager.Tests; 6 | 7 | public class TemporaryFile : IDisposable 8 | { 9 | public string FilePath { get; } 10 | 11 | public TemporaryFile() 12 | { 13 | FilePath = Path.GetTempFileName(); 14 | } 15 | 16 | public async Task WriteAllTextAsync(string text) 17 | { 18 | await File.WriteAllTextAsync(FilePath, text); 19 | } 20 | 21 | public void Dispose() 22 | { 23 | if (!string.IsNullOrEmpty(FilePath)) 24 | { 25 | File.Delete(FilePath); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /eng/common/cross/arm/sources.list.focal: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm/sources.list.jammy: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm/sources.list.zesty: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.focal: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.jammy: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.zesty: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ zesty-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ zesty-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm/sources.list.bionic: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm/sources.list.xenial: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.bionic: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/arm64/sources.list.xenial: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/s390x/sources.list.bionic: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /eng/common/cross/ppc64le/sources.list.bionic: -------------------------------------------------------------------------------- 1 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 2 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe 3 | 4 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 5 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe 6 | 7 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 8 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted 9 | 10 | deb http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 11 | deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse 12 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/Error.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model DotNet.Status.Web.Pages.ErrorModel 3 | @{ 4 | ViewData["Title"] = "Error"; 5 | } 6 | 7 |

Error.

8 |

An error occurred while processing your request.

9 | 10 | @if (Model.ShowRequestId) 11 | { 12 |

13 | Request ID: @Model.RequestId 14 |

15 | } 16 | 17 | @if (Model.ShowReferrer) 18 | { 19 |

Referrer

20 |

21 | @Model.Referrer 22 |

23 | } 24 | 25 | @if (@Model.ShowExceptionMessage) 26 | { 27 |

Exception Message

28 |

29 | @Model.ExceptionMessage 30 |

31 | } 32 | -------------------------------------------------------------------------------- /.vault-config/dotneteng-status-staging.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: cab65fc3-d077-467d-931f-3932eabf36d3 5 | name: dotneteng-status-staging 6 | 7 | references: 8 | helixkv: 9 | type: azure-key-vault 10 | parameters: 11 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 12 | name: helixkv 13 | 14 | keys: 15 | dotnet-status-data-protection: 16 | type: RSA 17 | size: 2048 18 | 19 | importSecretsFrom: shared/dotneteng-status-secrets.yaml 20 | 21 | secrets: 22 | # Grafana API key with admin privileges 23 | grafana-api-token: 24 | type: grafana-api-key 25 | parameters: 26 | environment: dotnet-eng-grafana-staging.westus2.cloudapp.azure.com 27 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/datasource/Staging/Azure Data Explorer.datasource.json: -------------------------------------------------------------------------------- 1 | { 2 | "uid": "OlcfOPi7z", 3 | "type": "grafana-azure-data-explorer-datasource", 4 | "typeLogoUrl": "", 5 | "access": "proxy", 6 | "password": "", 7 | "user": "", 8 | "database": "", 9 | "basicAuth": false, 10 | "basicAuthUser": "", 11 | "basicAuthPassword": "", 12 | "withCredentials": false, 13 | "isDefault": false, 14 | "jsonData": { 15 | "azureCredentials": { 16 | "authType": "msi" 17 | }, 18 | "clusterUrl": "https://engdata.kusto.windows.net", 19 | "dataConsistency": "strongconsistency", 20 | "defaultDatabase": "engineeringdata", 21 | "defaultEditorMode": "visual" 22 | }, 23 | "readOnly": false 24 | } -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/datasource/Production/Azure Data Explorer.datasource.json: -------------------------------------------------------------------------------- 1 | { 2 | "uid": "OlcfOPi7z", 3 | "type": "grafana-azure-data-explorer-datasource", 4 | "typeLogoUrl": "", 5 | "access": "proxy", 6 | "password": "", 7 | "user": "", 8 | "database": "", 9 | "basicAuth": false, 10 | "basicAuthUser": "", 11 | "basicAuthPassword": "", 12 | "withCredentials": false, 13 | "isDefault": false, 14 | "jsonData": { 15 | "azureCredentials": { 16 | "authType": "msi" 17 | }, 18 | "clusterUrl": "https://engsrvprod.kusto.windows.net", 19 | "dataConsistency": "strongconsistency", 20 | "defaultDatabase": "engineeringdata", 21 | "defaultEditorMode": "visual" 22 | }, 23 | "readOnly": false 24 | } -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/AugmentedTimelineIssue.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Microsoft.DotNet.Internal.AzureDevOps; 6 | 7 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 8 | 9 | public class AugmentedTimelineIssue 10 | { 11 | public int BuildId { get; init; } 12 | public string TimelineId { get; init; } 13 | public string RecordId { get; init; } 14 | public int Index { get; init; } 15 | public TimelineIssue Raw { get; init; } 16 | public string AugmentedIndex { get; set; } 17 | public string Bucket { get; set; } 18 | } 19 | -------------------------------------------------------------------------------- /eng/common/templates/post-build/common-variables.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | - group: Publish-Build-Assets 3 | 4 | # Whether the build is internal or not 5 | - name: IsInternalBuild 6 | value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} 7 | 8 | # Default Maestro++ API Endpoint and API Version 9 | - name: MaestroApiEndPoint 10 | value: "https://maestro.dot.net" 11 | - name: MaestroApiAccessToken 12 | value: $(MaestroAccessToken) 13 | - name: MaestroApiVersion 14 | value: "2020-02-20" 15 | 16 | - name: SourceLinkCLIVersion 17 | value: 3.0.0 18 | - name: SymbolToolVersion 19 | value: 1.0.1 20 | 21 | - name: runCodesignValidationInjection 22 | value: false 23 | -------------------------------------------------------------------------------- /.vault-config/dotnet-grafana-production.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 5 | name: dotnet-grafana 6 | 7 | importSecretsFrom: shared/dotnet-grafana-secrets.yaml 8 | 9 | secrets: 10 | # Used by machine setup scripts during deployment and for the alert system for image storage 11 | dotnetgrafana-storage-account-key: 12 | type: azure-storage-key 13 | parameters: 14 | account: dotnetgrafana 15 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 16 | 17 | # Grafana API token with Admin privileges 18 | grafana-admin-api-key: 19 | type: grafana-api-key 20 | parameters: 21 | environment: dotnet-eng-grafana.westus2.cloudapp.azure.com 22 | -------------------------------------------------------------------------------- /eng/common/templates-official/post-build/common-variables.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | - group: Publish-Build-Assets 3 | 4 | # Whether the build is internal or not 5 | - name: IsInternalBuild 6 | value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} 7 | 8 | # Default Maestro++ API Endpoint and API Version 9 | - name: MaestroApiEndPoint 10 | value: "https://maestro.dot.net" 11 | - name: MaestroApiAccessToken 12 | value: $(MaestroAccessToken) 13 | - name: MaestroApiVersion 14 | value: "2020-02-20" 15 | 16 | - name: SourceLinkCLIVersion 17 | value: 3.0.0 18 | - name: SymbolToolVersion 19 | value: 1.0.1 20 | 21 | - name: runCodesignValidationInjection 22 | value: false 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/default-dnceng-issue-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Default Dnceng Issue Template 3 | about: Used by Dnceng as the default issue template 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ### Release Note Category 17 | - [ ] Feature changes/additions 18 | - [ ] Bug fixes 19 | - [ ] Internal Infrastructure Improvements 20 | ### Release Note Description -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/IBuildLogScraper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | using Microsoft.DotNet.Internal.AzureDevOps; 8 | 9 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 10 | 11 | public interface IBuildLogScraper 12 | { 13 | Task ExtractMicrosoftHostedPoolImageNameAsync(AzureDevOpsProject project, string logUri, CancellationToken cancellationToken); 14 | Task ExtractOneESHostedPoolImageNameAsync(AzureDevOpsProject project, string logUri, CancellationToken cancellationToken); 15 | Task ExtractDockerImageNameAsync(AzureDevOpsProject project, string logUri, CancellationToken cancellationToken); 16 | } 17 | -------------------------------------------------------------------------------- /.vault-config/dotnet-grafana-staging.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 5 | name: dotnet-grafana-staging 6 | 7 | importSecretsFrom: shared/dotnet-grafana-secrets.yaml 8 | 9 | secrets: 10 | 11 | # Used by machine setup scripts during deployment and for the alert system for image storage 12 | dotnetgrafana-storage-account-key: 13 | type: azure-storage-key 14 | parameters: 15 | account: dotnetgrafanastaging 16 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 17 | 18 | # Grafana API token with Admin privileges 19 | grafana-admin-api-key: 20 | type: grafana-api-key 21 | parameters: 22 | environment: dotnet-eng-grafana-staging.westus2.cloudapp.azure.com 23 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/ITokenStore.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Threading; 8 | using System.Threading.Tasks; 9 | 10 | namespace DotNet.Status.Web; 11 | 12 | public interface ITokenStore 13 | { 14 | Task IssueTokenAsync(long userId, DateTimeOffset expiration, string description); 15 | Task GetTokenAsync(long userId, long tokenId); 16 | Task> GetTokensForUserAsync( 17 | long userId, 18 | CancellationToken cancellationToken); 19 | } 20 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/_Layout.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | @ViewData["Title"] 9 | 10 | 11 | 12 |
13 | @RenderBody() 14 |
15 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/datasource/Production/Deployment Annotations.datasource.json: -------------------------------------------------------------------------------- 1 | { 2 | "uid": "VrkJ-7W7z", 3 | "type": "grafana-simple-json-datasource", 4 | "typeLogoUrl": "", 5 | "access": "proxy", 6 | "url": "https://dotneteng-status.azurewebsites.net/api/annotations", 7 | "password": "", 8 | "user": "", 9 | "database": "", 10 | "basicAuth": false, 11 | "basicAuthUser": "abcd", 12 | "basicAuthPassword": "", 13 | "withCredentials": false, 14 | "isDefault": false, 15 | "jsonData": { 16 | "httpHeaderName1": "Authorization", 17 | "tlsAuth": false, 18 | "tlsSkipVerify": false 19 | }, 20 | "readOnly": false, 21 | "secureJsonData": { 22 | "basicAuthPassword": "", 23 | "httpHeaderValue1": "[vault(dotneteng-status-auth-header)]" 24 | } 25 | } -------------------------------------------------------------------------------- /src/Telemetry/Microsoft.DotNet.AzureDevOpsTimelineTests/Microsoft.DotNet.AzureDevOpsTimeline.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/ImmutableArrayExtension.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Collections.Generic; 6 | using System.Collections.Immutable; 7 | using System.Linq; 8 | 9 | namespace DotNet.Status.Web; 10 | 11 | internal static class ImmutableArrayExtension 12 | { 13 | internal static IEnumerable OrEmpty(this IEnumerable array) 14 | { 15 | return array ?? Enumerable.Empty(); 16 | } 17 | 18 | internal static IEnumerable OrEmpty(this ImmutableArray array) 19 | { 20 | return array.IsDefault ? Enumerable.Empty() : array; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/GitHubTokenData.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | 7 | namespace DotNet.Status.Web; 8 | 9 | internal struct GitHubTokenData 10 | { 11 | public GitHubTokenData(long userId, long tokenId, DateTimeOffset expiration, string accessToken) 12 | { 13 | UserId = userId; 14 | TokenId = tokenId; 15 | Expiration = expiration; 16 | AccessToken = accessToken; 17 | } 18 | 19 | public long UserId { get; } 20 | public long TokenId { get; } 21 | public DateTimeOffset Expiration { get; } 22 | public string AccessToken { get; } 23 | } 24 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/datasource/Staging/Deployment Annotations.datasource.json: -------------------------------------------------------------------------------- 1 | { 2 | "uid": "VrkJ-7W7z", 3 | "type": "grafana-simple-json-datasource", 4 | "typeLogoUrl": "", 5 | "access": "proxy", 6 | "url": "https://dotneteng-status-staging.azurewebsites.net/api/annotations", 7 | "password": "", 8 | "user": "", 9 | "database": "", 10 | "basicAuth": false, 11 | "basicAuthUser": "abcd", 12 | "basicAuthPassword": "", 13 | "withCredentials": false, 14 | "isDefault": false, 15 | "jsonData": { 16 | "httpHeaderName1": "Authorization", 17 | "tlsAuth": false, 18 | "tlsSkipVerify": false 19 | }, 20 | "readOnly": false, 21 | "secureJsonData": { 22 | "basicAuthPassword": "", 23 | "httpHeaderValue1": "[vault(dotneteng-status-auth-header)]" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/ITokenCredentialProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Azure.Core; 3 | 4 | namespace Microsoft.DncEng.SecretManager; 5 | 6 | public interface ITokenCredentialProvider 7 | { 8 | /// 9 | /// The application ID for the credential provider. 10 | /// 11 | public string ApplicationId { get; } 12 | 13 | /// 14 | /// The tenant ID that provided the token from the credential provider. 15 | /// 16 | public string TenantId { get; } 17 | 18 | public Task GetCredentialAsync(); 19 | 20 | /// 21 | /// Sets the Application Id and TenantId properties based on the current credential. 22 | /// 23 | public void SetCredentialIdentityValues(); 24 | } 25 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager.ScenarioTests/Microsoft.DncEng.SecretManager.ScenarioTests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | false 6 | a523e3e9-b284-4c40-962d-e06de454891e 7 | true 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/AzureDevOpsTimelineOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Collections.Generic; 6 | 7 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 8 | 9 | public class AzureDevOpsProject 10 | { 11 | public string Organization { get; set; } 12 | public string Project { get; set; } 13 | } 14 | public class AzureDevOpsTimelineOptions 15 | { 16 | public List Projects { get; set; } 17 | public string InitialDelay { get; set; } 18 | public string Interval { get; set; } 19 | public string BuildBatchSize { get; set; } 20 | public string LogScrapingTimeout { get; set; } 21 | } 22 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/ArrayExtension.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | 7 | namespace DotNet.Status.Web; 8 | 9 | internal static class ArrayExtension 10 | { 11 | internal static void Deconstruct(this T[] array, out T item1, out T item2) 12 | { 13 | if (array == null) 14 | { 15 | throw new ArgumentNullException(nameof(array)); 16 | } 17 | 18 | if (array.Length != 2) 19 | { 20 | throw new ArgumentException("Array is not correct length", nameof(array)); 21 | } 22 | 23 | item1 = array[0]; 24 | item2 = array[1]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Telemetry/Microsoft.DotNet.AzureDevOpsTimelineTests/BuildAndTimeline.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Microsoft.DotNet.Internal.AzureDevOps; 6 | using System.Collections.Generic; 7 | 8 | namespace Microsoft.DotNet.AzureDevOpsTimeline.Tests; 9 | 10 | public class BuildAndTimeline 11 | { 12 | public Build Build { get; } 13 | public IList Timelines { get; } = new List(); 14 | 15 | public BuildAndTimeline(Build build) 16 | { 17 | Build = build; 18 | } 19 | 20 | public BuildAndTimeline(Build build, IList timelines) 21 | { 22 | Build = build; 23 | Timelines = timelines; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/ArcadeValidationData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace DotNet.Status.Web; 5 | 6 | public class ArcadeValidationData 7 | { 8 | [Required] 9 | public DateTimeOffset BuildDateTime { get; set; } 10 | [Required] 11 | public string ArcadeVersion { get; set; } 12 | [Required] 13 | public int BARBuildID { get; set; } 14 | [Required] 15 | public string ArcadeBuildLink { get; set; } 16 | [Required] 17 | public string ArcadeValidationBuildLink { get; set; } 18 | [Required] 19 | public string ProductRepoName { get; set; } 20 | [Required] 21 | public string ProductRepoBuildLink { get; set; } 22 | [Required] 23 | public string ProductRepoBuildResult { get; set; } 24 | [Required] 25 | public string ArcadeDiffLink { get; set; } 26 | } 27 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/GrafanaNotification.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Collections.Immutable; 6 | 7 | namespace DotNet.Status.Web.Models; 8 | 9 | public class GrafanaNotification 10 | { 11 | public string Title { get; set; } 12 | public ulong RuleId { get; set; } 13 | public string RuleName { get; set; } 14 | public string RuleUrl { get; set; } 15 | public string State { get; set; } 16 | public string ImageUrl { get; set; } 17 | public string Message { get; set; } 18 | public IImmutableList EvalMatches { get; set; } 19 | public ImmutableDictionary Tags { get; set; } 20 | } 21 | -------------------------------------------------------------------------------- /eng/common/templates/steps/publish-logs.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | StageLabel: '' 3 | JobLabel: '' 4 | 5 | steps: 6 | - task: Powershell@2 7 | displayName: Prepare Binlogs to Upload 8 | inputs: 9 | targetType: inline 10 | script: | 11 | New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ 12 | Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ 13 | continueOnError: true 14 | condition: always() 15 | 16 | - task: PublishBuildArtifacts@1 17 | displayName: Publish Logs 18 | inputs: 19 | PathtoPublish: '$(System.DefaultWorkingDirectory)/PostBuildLogs' 20 | PublishLocation: Container 21 | ArtifactName: PostBuildLogs 22 | continueOnError: true 23 | condition: always() 24 | -------------------------------------------------------------------------------- /eng/common/helixpublish.proj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | msbuild 5 | 6 | 7 | 8 | 9 | %(Identity) 10 | 11 | 12 | 13 | 14 | 15 | $(WorkItemDirectory) 16 | $(WorkItemCommand) 17 | $(WorkItemTimeout) 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /eng/common/templates-official/steps/publish-logs.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | StageLabel: '' 3 | JobLabel: '' 4 | 5 | steps: 6 | - task: Powershell@2 7 | displayName: Prepare Binlogs to Upload 8 | inputs: 9 | targetType: inline 10 | script: | 11 | New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ 12 | Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ 13 | continueOnError: true 14 | condition: always() 15 | 16 | - task: 1ES.PublishBuildArtifacts@1 17 | displayName: Publish Logs 18 | inputs: 19 | PathtoPublish: '$(System.DefaultWorkingDirectory)/PostBuildLogs' 20 | PublishLocation: Container 21 | ArtifactName: PostBuildLogs 22 | continueOnError: true 23 | condition: always() 24 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Options/GitHubConnectionOptions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | namespace DotNet.Status.Web.Options; 6 | 7 | public class GitHubConnectionOptions 8 | { 9 | public string Organization { get; set; } 10 | public string Repository { get; set; } 11 | public string[] NotificationTargets { get; set; } 12 | public string[] AlertLabels { get; set; } 13 | public string[] EnvironmentLabels { get; set; } 14 | public string TitlePrefix { get; set; } 15 | public string SupplementalBodyText { get; set; } 16 | public string[] RcaRequestedLabels { get; set; } 17 | public string[] RcaCopyLabelPrefixes { get; set; } 18 | public string RcaLabel { get; set; } 19 | } 20 | -------------------------------------------------------------------------------- /eng/common/dotnet-install.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding(PositionalBinding=$false)] 2 | Param( 3 | [string] $verbosity = 'minimal', 4 | [string] $architecture = '', 5 | [string] $version = 'Latest', 6 | [string] $runtime = 'dotnet', 7 | [string] $RuntimeSourceFeed = '', 8 | [string] $RuntimeSourceFeedKey = '' 9 | ) 10 | 11 | . $PSScriptRoot\tools.ps1 12 | 13 | $dotnetRoot = Join-Path $RepoRoot '.dotnet' 14 | 15 | $installdir = $dotnetRoot 16 | try { 17 | if ($architecture -and $architecture.Trim() -eq 'x86') { 18 | $installdir = Join-Path $installdir 'x86' 19 | } 20 | InstallDotNet $installdir $version $architecture $runtime $true -RuntimeSourceFeed $RuntimeSourceFeed -RuntimeSourceFeedKey $RuntimeSourceFeedKey 21 | } 22 | catch { 23 | Write-Host $_.ScriptStackTrace 24 | Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ 25 | ExitWithExitCode 1 26 | } 27 | 28 | ExitWithExitCode 0 29 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/Commands/InfoCommand.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Reflection; 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using Microsoft.DncEng.CommandLineLib; 6 | 7 | namespace Microsoft.DncEng.SecretManager; 8 | 9 | [Command("info")] 10 | class InfoCommand : Command 11 | { 12 | private readonly IConsole _console; 13 | 14 | public InfoCommand(IConsole console) 15 | { 16 | _console = console; 17 | } 18 | 19 | public override Task RunAsync(CancellationToken cancellationToken) 20 | { 21 | var exeName = Process.GetCurrentProcess().ProcessName; 22 | var version = Assembly.GetEntryAssembly() 23 | ?.GetCustomAttribute() 24 | ?.InformationalVersion ?? "-.-.-.-"; 25 | _console.WriteImportant($"{exeName} version {version}"); 26 | return Task.CompletedTask; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Monitoring/Sdk/Microsoft.DotNet.Monitoring.Sdk.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MSBuildSdk 5 | latest 6 | true 7 | $(NoWarn);NU5110,NU5111 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/Monitoring/Sdk/HttpResponseExtensions.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Net.Http; 6 | using System.Threading.Tasks; 7 | 8 | namespace Microsoft.DotNet.Monitoring.Sdk; 9 | 10 | internal static class HttpResponseExtensions 11 | { 12 | public static async Task EnsureSuccessWithContentAsync(this HttpResponseMessage message) 13 | { 14 | if (message.IsSuccessStatusCode) 15 | return; 16 | 17 | string content = await message.Content.ReadAsStringAsync(); 18 | if (content.Length > 1000) 19 | content = content.Substring(0, 1000) + "..."; 20 | 21 | throw new HttpRequestException($"Response status code does not indicate success: {(int) message.StatusCode} ({message.ReasonPhrase}): Body: {content}"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/AnnotationQueryBody.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DotNet.Status.Web.Models; 4 | 5 | /// 6 | /// Query body used by the Grafana SimpleJsonDataSource when requesting annotations 7 | /// 8 | public class AnnotationQueryBody 9 | { 10 | public Range Range { get; set; } 11 | public RangeRaw RangeRaw { get; set; } 12 | public Annotation Annotation { get; set; } 13 | } 14 | 15 | public class Range 16 | { 17 | public DateTimeOffset From { get; set; } 18 | public DateTimeOffset To { get; set; } 19 | } 20 | 21 | public class RangeRaw 22 | { 23 | public string From { get; set; } 24 | public string To { get; set; } 25 | } 26 | 27 | public class Annotation 28 | { 29 | public string Name { get; set; } 30 | public string Datasource { get; set; } 31 | public string IconColor { get; set; } 32 | public bool Enable { get; set; } 33 | public string Query { get; set; } 34 | } 35 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/.config/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "KeyVaultUri": "", 3 | 4 | "KustoTimelineTelemetry": { 5 | "Database": "engineeringdata" 6 | }, 7 | 8 | "AzureDevOpsTimeline": { 9 | "Projects": [ 10 | { 11 | "Organization": "dnceng", 12 | "Project": "internal" 13 | }, 14 | { 15 | "Organization": "dnceng-public", 16 | "Project": "public" 17 | } 18 | ], 19 | "InitialDelay": "0:10:00", 20 | "Interval": "0:50:00", 21 | "BuildBatchSize": 1000, 22 | "LogScrapingTimeout": "0:10:00" 23 | }, 24 | 25 | "AzureDevOpsSettings": { 26 | "dnceng": { 27 | "Organization": "dnceng", 28 | "AccessToken": "[vault(dn-bot-dnceng-build-r)]", 29 | "MaxParallelRequests": 4 30 | }, 31 | "dnceng-public": { 32 | "Organization": "dnceng-public", 33 | "AccessToken": "[vault(dn-bot-dnceng-public-build-r]", 34 | "MaxParallelRequests": 4 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /eng/helpers.psm1: -------------------------------------------------------------------------------- 1 | ############################## 2 | #.SYNOPSIS 3 | # Wrapper for git.exe that handles errors and warnings the powershell way 4 | # 5 | ############################## 6 | function git 7 | { 8 | [cmdletbinding()] 9 | param( 10 | [Parameter(ValueFromRemainingArguments=$true)] $params 11 | ) 12 | $ErrorActionPreference = "Continue" 13 | $allOutput = & git.exe $params 2>&1 14 | 15 | $allOutput | ForEach-Object { 16 | if ($_ -is [System.Management.Automation.ErrorRecord]) 17 | { 18 | $message = $_.Exception.Message 19 | if ($message -match '^warning: ') 20 | { 21 | Write-Warning $message 22 | } 23 | else 24 | { 25 | Write-Error $message 26 | } 27 | } 28 | else 29 | { 30 | Write-Output $_ 31 | } 32 | } 33 | } 34 | 35 | Export-ModuleMember -Function @( 36 | 'git' 37 | ) 38 | -------------------------------------------------------------------------------- /.vault-config/dotneteng-status-prod.yaml: -------------------------------------------------------------------------------- 1 | storageLocation: 2 | type: azure-key-vault 3 | parameters: 4 | subscription: 68672ab8-de0c-40f1-8d1b-ffb20bd62c0f 5 | name: dotneteng-status-prod 6 | 7 | references: 8 | helixkv: 9 | type: azure-key-vault 10 | parameters: 11 | subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 12 | name: helixkv 13 | 14 | keys: 15 | dotnet-status-data-protection: 16 | type: RSA 17 | size: 2048 18 | 19 | importSecretsFrom: shared/dotneteng-status-secrets.yaml 20 | 21 | secrets: 22 | # Grafana API key with admin privileges 23 | grafana-api-token: 24 | type: grafana-api-key 25 | parameters: 26 | environment: dotnet-eng-grafana.westus2.cloudapp.azure.com 27 | 28 | build-monitor-hook-dotnet-eng-status-token: 29 | type: text 30 | parameters: 31 | description: Generate API token from https://dotneteng-status.azurewebsites.net/ and save it to the service hook with ID 439d5934-8e89-4407-8e31-5b04d58b7854 -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/Index.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @using System.Security.Claims 3 | @using System.Reflection 4 | @{ 5 | ViewData["Title"] = "Home page"; 6 | var appVersion = Assembly.GetEntryAssembly() 7 | ?.GetCustomAttribute() 8 | ?.InformationalVersion?.ToString() ?? "Unknown"; 9 | } 10 | 11 | .NET Engineering Status Reporting endpoint
12 | Deployed via app version: @appVersion
13 | 14 | To get/set tokens, go to Tokens 15 | 16 | 17 |
18 | @if (User.Identity.IsAuthenticated) 19 | { 20 |
Roles for @User.Identity.Name
21 |
    22 | @foreach (Claim role in User.FindAll(ClaimTypes.Role)) 23 | { 24 |
  • @role.Value
  • 25 | } 26 |
27 | } 28 | else 29 | { 30 | Sign in 31 | } 32 |
33 | -------------------------------------------------------------------------------- /eng/create-tag.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | $AccessToken 3 | ) 4 | 5 | $Commit = $env:Build.SourceVersion 6 | $Version = $env:VersionPrefix 7 | 8 | $uri ="$($env:System_TeamFoundationCollectionUri)/$($env:System_TeamProject)/_apis/git/repositories/$($env:Build_Repository_Name)/annotatedTags?api-version=5.0" 9 | $tag = "v$Version" 10 | 11 | if ($Commit -and $Version) { 12 | Write-Output "Tagging $Commit with $tag" 13 | $headers = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]' 14 | $base64authinfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":${AccessToken}")) 15 | $headers = @{"Authorization"="Basic $base64authinfo"} 16 | 17 | $body = @{ 18 | message = "Version $Version"; 19 | name = "$tag"; 20 | taggedObject = @{ 21 | objectId = "$Commit"; 22 | } 23 | } | ConvertTo-Json 24 | Invoke-WebRequest -Method Post $uri -Headers $headers -Body $body -ContentType 'application/json' 25 | } else { 26 | exit -1 27 | } 28 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretTypes/Base64Encoder.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | 4 | namespace Microsoft.DncEng.SecretManager.SecretTypes; 5 | 6 | [Name("base64-encoder")] 7 | public class Base64Encoder : SecretType 8 | { 9 | public class Parameters 10 | { 11 | public SecretReference Secret { get; set; } 12 | } 13 | 14 | public Base64Encoder() 15 | { 16 | } 17 | 18 | protected override async Task RotateValue(Parameters parameters, RotationContext context, CancellationToken cancellationToken) 19 | { 20 | SecretValue secret = await context.GetSecret(parameters.Secret); 21 | 22 | byte[] plainTextBytes = System.Text.Encoding.UTF8.GetBytes(secret.Value); 23 | string secretEncodedBase64 = System.Convert.ToBase64String(plainTextBytes); 24 | 25 | return new SecretData(secretEncodedBase64, secret.ExpiresOn, secret.NextRotationOn); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Documentation/Policy/TeamProcessPolicy.md: -------------------------------------------------------------------------------- 1 | # Team Process Policy 2 | 3 | - For all work done, a GitHub issue must exist, this includes, but not limited to: 4 | - Every pull request should reference back to a GitHub issue (if the PR is in AzDO, include a link to the GitHub issue in the PR details). 5 | - Every rollout must have a GitHub issue to document the change to production. 6 | - Every hotfix and deployment rollback must have a GitHub issue to document the change to production. 7 | - All dependency additions/changes, such as version upgrades must be approved through team management (e.g. Application Insights) 8 | 9 | 10 | Was this helpful? [![Yes](https://helix.dot.net/f/ip/5?p=Documentation%5CPolicy%5CTeamProcessPolicy.md)](https://helix.dot.net/f/p/5?p=Documentation%5CPolicy%5CTeamProcessPolicy.md) [![No](https://helix.dot.net/f/in)](https://helix.dot.net/f/n/5?p=Documentation%5CPolicy%5CTeamProcessPolicy.md) 11 | 12 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/datasource/Production/Azure Monitor.datasource.json: -------------------------------------------------------------------------------- 1 | { 2 | "uid": "F2XodEi7z", 3 | "type": "grafana-azure-monitor-datasource", 4 | "typeLogoUrl": "", 5 | "access": "proxy", 6 | "url": "/api/datasources/proxy/1", 7 | "password": "", 8 | "user": "", 9 | "database": "", 10 | "basicAuth": false, 11 | "basicAuthUser": "", 12 | "basicAuthPassword": "", 13 | "withCredentials": false, 14 | "isDefault": false, 15 | "jsonData": { 16 | "azureAuthType": "msi", 17 | "clientId": "a2541735-8225-40af-9c8a-2ae233203739", 18 | "cloudName": "azuremonitor", 19 | "logAnalyticsClientId": "a2541735-8225-40af-9c8a-2ae233203739", 20 | "logAnalyticsTenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", 21 | "subscriptionId": "68672ab8-de0c-40f1-8d1b-ffb20bd62c0f", 22 | "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47" 23 | }, 24 | "readOnly": false, 25 | "secureJsonData": { 26 | "clientSecret": "", 27 | "logAnalyticsClientSecret": "" 28 | } 29 | } -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/datasource/Staging/Azure Monitor.datasource.json: -------------------------------------------------------------------------------- 1 | { 2 | "uid": "F2XodEi7z", 3 | "type": "grafana-azure-monitor-datasource", 4 | "typeLogoUrl": "", 5 | "access": "proxy", 6 | "url": "/api/datasources/proxy/1", 7 | "password": "", 8 | "user": "", 9 | "database": "", 10 | "basicAuth": false, 11 | "basicAuthUser": "", 12 | "basicAuthPassword": "", 13 | "withCredentials": false, 14 | "isDefault": false, 15 | "jsonData": { 16 | "azureAuthType": "msi", 17 | "clientId": "a2541735-8225-40af-9c8a-2ae233203739", 18 | "cloudName": "azuremonitor", 19 | "logAnalyticsClientId": "a2541735-8225-40af-9c8a-2ae233203739", 20 | "logAnalyticsTenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", 21 | "subscriptionId": "cab65fc3-d077-467d-931f-3932eabf36d3", 22 | "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47" 23 | }, 24 | "readOnly": false, 25 | "secureJsonData": { 26 | "clientSecret": "", 27 | "logAnalyticsClientSecret": "" 28 | } 29 | } -------------------------------------------------------------------------------- /src/Microsoft.DncEng.Configuration.Bootstrap/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading; 4 | using Azure.Core; 5 | using Microsoft.DncEng.Configuration.Extensions; 6 | using Mono.Options; 7 | 8 | namespace Microsoft.DncEng.Configuration.Bootstrap; 9 | 10 | class Program 11 | { 12 | static void Main(string[] args) 13 | { 14 | var resources = new List(); 15 | var options = new OptionSet 16 | { 17 | {"r|resource=", "AAD resource identifiers to authenticate to", (string r) => resources.Add(r)}, 18 | }; 19 | options.Parse(args); 20 | Console.WriteLine("Bootstrapping configuration."); 21 | 22 | LocalDevTokenCredential.IsBoostrapping = true; 23 | var cred = new LocalDevTokenCredential(); 24 | foreach (var resource in resources) 25 | { 26 | cred.GetToken(new TokenRequestContext(new[] {resource + "/.default"}), CancellationToken.None); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/Monitoring/grafana-init/vault-env.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Replace all environment values of the form [vault(secret-name)] with 4 | # the value of secret-name as found in the supplied Azure Keyvault. 5 | 6 | import os 7 | import re 8 | import sys 9 | import subprocess 10 | 11 | from azure.keyvault.secrets import SecretClient 12 | from azure.identity import DefaultAzureCredential 13 | 14 | credentials = DefaultAzureCredential() 15 | 16 | def get_secret(vault: str, name: str) -> str: 17 | kv = SecretClient('https://{}.vault.azure.net'.format(vault), credentials) 18 | bundle = kv.get_secret(name) 19 | return bundle.value 20 | 21 | 22 | new_env = os.environ.copy() 23 | vault_re = re.compile(r'^\[vault\((.*)/(.*)\)\]$') 24 | for key, value in new_env.items(): 25 | match = vault_re.match(value) 26 | if match: 27 | print('Replacing environment key {}'.format(key)) 28 | new_env[key] = get_secret(match.group(1).strip(), match.group(2).strip()) 29 | 30 | subprocess.call(args=sys.argv[1:], env=new_env) 31 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/StoredTokenData.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | 7 | namespace DotNet.Status.Web; 8 | 9 | public class StoredTokenData 10 | { 11 | public StoredTokenData(long userId, long tokenId, DateTimeOffset issued, DateTimeOffset expiration, string description, RevocationStatus revocationStatus) 12 | { 13 | UserId = userId; 14 | TokenId = tokenId; 15 | Issued = issued; 16 | Expiration = expiration; 17 | Description = description; 18 | RevocationStatus = revocationStatus; 19 | } 20 | 21 | public long UserId { get; } 22 | public long TokenId { get; } 23 | public DateTimeOffset Issued { get; } 24 | public DateTimeOffset Expiration { get; } 25 | public string Description { get; } 26 | public RevocationStatus RevocationStatus { get; } 27 | } 28 | -------------------------------------------------------------------------------- /src/Telemetry/AzureDevOpsTimeline/ITimelineTelemetryRepository.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Microsoft.DotNet.Internal.AzureDevOps; 6 | using System; 7 | using System.Collections.Generic; 8 | using System.Threading.Tasks; 9 | 10 | namespace Microsoft.DotNet.AzureDevOpsTimeline; 11 | 12 | public interface ITimelineTelemetryRepository : IDisposable 13 | { 14 | public Task GetLatestTimelineBuild(AzureDevOpsProject project); 15 | public Task WriteTimelineBuilds(IEnumerable augmentedBuilds, string organization); 16 | public Task WriteTimelineValidationMessages(IEnumerable<(int buildId, BuildRequestValidationResult validationResult)> validationResults); 17 | public Task WriteTimelineRecords(IEnumerable records); 18 | public Task WriteTimelineIssues(IEnumerable issues); 19 | } 20 | -------------------------------------------------------------------------------- /eng/common/templates/steps/enable-internal-runtimes.yml: -------------------------------------------------------------------------------- 1 | # Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64' 2 | # variable with the base64-encoded SAS token, by default 3 | 4 | parameters: 5 | - name: federatedServiceConnection 6 | type: string 7 | default: 'dotnetbuilds-internal-read' 8 | - name: outputVariableName 9 | type: string 10 | default: 'dotnetbuilds-internal-container-read-token-base64' 11 | - name: expiryInHours 12 | type: number 13 | default: 1 14 | - name: base64Encode 15 | type: boolean 16 | default: true 17 | 18 | steps: 19 | - ${{ if ne(variables['System.TeamProject'], 'public') }}: 20 | - template: /eng/common/templates/steps/get-delegation-sas.yml 21 | parameters: 22 | federatedServiceConnection: ${{ parameters.federatedServiceConnection }} 23 | outputVariableName: ${{ parameters.outputVariableName }} 24 | expiryInHours: ${{ parameters.expiryInHours }} 25 | base64Encode: ${{ parameters.base64Encode }} 26 | storageAccount: dotnetbuilds 27 | container: internal 28 | permissions: rl 29 | -------------------------------------------------------------------------------- /eng/common/templates/steps/run-script-ifequalelse.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | # if parameter1 equals parameter 2, run 'ifScript' command, else run 'elsescript' command 3 | parameter1: '' 4 | parameter2: '' 5 | ifScript: '' 6 | elseScript: '' 7 | 8 | # name of script step 9 | name: Script 10 | 11 | # display name of script step 12 | displayName: If-Equal-Else Script 13 | 14 | # environment 15 | env: {} 16 | 17 | # conditional expression for step execution 18 | condition: '' 19 | 20 | steps: 21 | - ${{ if and(ne(parameters.ifScript, ''), eq(parameters.parameter1, parameters.parameter2)) }}: 22 | - script: ${{ parameters.ifScript }} 23 | name: ${{ parameters.name }} 24 | displayName: ${{ parameters.displayName }} 25 | env: ${{ parameters.env }} 26 | condition: ${{ parameters.condition }} 27 | 28 | - ${{ if and(ne(parameters.elseScript, ''), ne(parameters.parameter1, parameters.parameter2)) }}: 29 | - script: ${{ parameters.elseScript }} 30 | name: ${{ parameters.name }} 31 | displayName: ${{ parameters.displayName }} 32 | env: ${{ parameters.env }} 33 | condition: ${{ parameters.condition }} -------------------------------------------------------------------------------- /eng/generate-sbom.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | PackageName: ".NET" 3 | BuildDropPath: $(Build.SourcesDirectory)/artifacts 4 | PackageVersion: $(Build.BuildNumber) 5 | ArtifactName: $(System.StageName)_$(Agent.JobName)_SBOM 6 | ManifestDirPath: $(Build.ArtifactStagingDirectory)\sbom 7 | 8 | steps: 9 | - powershell: | 10 | if (!(Test-Path -path ${{parameters.manifestDirPath}})) 11 | { 12 | New-Item -ItemType Directory -path ${{parameters.manifestDirPath}} 13 | } 14 | displayName: Create SBOM output folder 15 | 16 | - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 17 | displayName: 'Generate SBOM manifest' 18 | inputs: 19 | PackageName: ${{parameters.packageName}} 20 | BuildDropPath: ${{parameters.buildDropPath}} 21 | PackageVersion: ${{parameters.packageVersion}} 22 | ManifestDirPath: ${{parameters.manifestDirPath}} 23 | 24 | - task: PublishBuildArtifacts@1 25 | inputs: 26 | PathtoPublish: ${{parameters.manifestDirPath}} 27 | ArtifactName: ${{parameters.artifactName}} 28 | ArtifactType: container 29 | displayName: Publish generated SBOM -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/Commands/TestCommand.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Azure.Core; 5 | using Microsoft.DncEng.CommandLineLib; 6 | 7 | namespace Microsoft.DncEng.SecretManager.Commands; 8 | 9 | [Command("test")] 10 | class TestCommand : Command 11 | { 12 | private readonly IConsole _console; 13 | private readonly ITokenCredentialProvider _tokenProvider; 14 | 15 | public TestCommand(IConsole console, ITokenCredentialProvider tokenProvider) 16 | { 17 | _console = console; 18 | _tokenProvider = tokenProvider; 19 | } 20 | 21 | public override async Task RunAsync(CancellationToken cancellationToken) 22 | { 23 | var creds = await _tokenProvider.GetCredentialAsync(); 24 | 25 | var token = await creds.GetTokenAsync(new TokenRequestContext(new[] 26 | { 27 | "https://servicebus.azure.net/.default", 28 | }), cancellationToken); 29 | 30 | Debug.WriteLine(token.ExpiresOn); 31 | _console.WriteImportant("Successfully authenticated"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /eng/common/templates-official/steps/enable-internal-runtimes.yml: -------------------------------------------------------------------------------- 1 | # Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64' 2 | # variable with the base64-encoded SAS token, by default 3 | 4 | parameters: 5 | - name: federatedServiceConnection 6 | type: string 7 | default: 'dotnetbuilds-internal-read' 8 | - name: outputVariableName 9 | type: string 10 | default: 'dotnetbuilds-internal-container-read-token-base64' 11 | - name: expiryInHours 12 | type: number 13 | default: 1 14 | - name: base64Encode 15 | type: boolean 16 | default: true 17 | 18 | steps: 19 | - ${{ if ne(variables['System.TeamProject'], 'public') }}: 20 | - template: /eng/common/templates-official/steps/get-delegation-sas.yml 21 | parameters: 22 | federatedServiceConnection: ${{ parameters.federatedServiceConnection }} 23 | outputVariableName: ${{ parameters.outputVariableName }} 24 | expiryInHours: ${{ parameters.expiryInHours }} 25 | base64Encode: ${{ parameters.base64Encode }} 26 | storageAccount: dotnetbuilds 27 | container: internal 28 | permissions: rl 29 | -------------------------------------------------------------------------------- /eng/test.yaml: -------------------------------------------------------------------------------- 1 | steps: 2 | 3 | - task: DotNetCoreCLI@2 4 | displayName: Test C# (dotnet test) 5 | inputs: 6 | command: custom 7 | projects: | 8 | $(Build.SourcesDirectory)\dnceng.sln 9 | custom: test 10 | arguments: > 11 | --configuration $(_BuildConfig) 12 | --filter "TestCategory!=PostDeployment&TestCategory!=Nightly&TestCategory!=PreDeployment" 13 | --no-build 14 | --logger "trx;LogFilePrefix=TestResults-" 15 | -v normal 16 | -- 17 | "RunConfiguration.ResultsDirectory=$(Build.ArtifactStagingDirectory)\TestResults" 18 | RunConfiguration.MapCpuCount=4 19 | NUnit.ConsoleOut=0 20 | env: 21 | NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages 22 | condition: succeededOrFailed() 23 | 24 | - task: PublishTestResults@2 25 | displayName: Publish Core Test Results 26 | condition: succeededOrFailed() 27 | inputs: 28 | testRunner: VSTest 29 | testResultsFiles: '**/TestResults-*' 30 | searchFolder: $(Build.ArtifactStagingDirectory)\TestResults 31 | testRunTitle: Basic Tests 32 | mergeTestResults: true 33 | configuration: $(_BuildConfig) 34 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/TeamsMessages/MessageCard.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Newtonsoft.Json; 6 | 7 | namespace DotNet.Status.Web.TeamsMessages; 8 | // "Classic" MessageCard Schema reference: 9 | // https://docs.microsoft.com/en-us/outlook/actionable-messages/message-card-reference 10 | // 11 | // There are more possible properties than those used here. 12 | // 13 | // Note that the JSON representation expects camelCase naming convention. 14 | 15 | public class MessageCard 16 | { 17 | [JsonProperty("@context")] 18 | public string Context { get; set; } = "https://schema.org/extensions"; 19 | 20 | [JsonProperty("@type")] 21 | public string Type { get; set; } = "MessageCard"; 22 | 23 | public string ThemeColor { get; set; } = string.Empty; 24 | 25 | public string Text { get; set; } = string.Empty; 26 | 27 | [JsonProperty("potentialAction")] 28 | public IList Actions { get; set; } = Array.Empty(); 29 | 30 | public IList
Sections { get; set; } = Array.Empty
(); 31 | } 32 | -------------------------------------------------------------------------------- /src/Monitoring/Monitoring.ArcadeServices/Monitoring.ArcadeServices.proj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | $(MSBuildThisFileDirectory)../../../artifacts/bin/Microsoft.DotNet.Monitoring.Sdk/$(Configuration)/net8.0/publish/Microsoft.DotNet.Monitoring.Sdk.dll 7 | {95A4D032-4512-4F9F-ADAB-C8D072532449} 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/PatGenerator/Microsoft.DncEng.PatGeneratorTool/Microsoft.DncEng.PatGeneratorTool.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | false 6 | true 7 | true 8 | Command line tool for generating Azure DevOps PATs. 9 | pat-generator 10 | pat-generator 11 | Microsoft.DncEng.PatGeneratorTool 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /azure-pipelines-daily.yml: -------------------------------------------------------------------------------- 1 | trigger: none 2 | 3 | schedules: 4 | - cron: 0 12 * * * 5 | displayName: Nightly build 6 | branches: 7 | include: 8 | - main 9 | always: true 10 | 11 | name: $(Date:yyyMMdd)$(Rev:rr) 12 | 13 | stages: 14 | - stage: SynchronizeSecrets 15 | jobs: 16 | - job: Synchronize 17 | pool: 18 | name: NetCore1ESPool-Internal-NoMSI 19 | demands: ImageOverride -equals 1es-windows-2022 20 | steps: 21 | - task: UseDotNet@2 22 | displayName: Install .NET from global.json 23 | inputs: 24 | useGlobalJson: true 25 | 26 | - task: UseDotNet@2 27 | displayName: Install .NET 6 28 | inputs: 29 | version: 6.x 30 | 31 | - task: AzureCLI@2 32 | displayName: Synchronize Secrets 33 | inputs: 34 | azureSubscription: DotNet Eng Services Secret Manager 35 | scriptType: ps 36 | scriptLocation: inlineScript 37 | inlineScript: | 38 | Get-ChildItem .vault-config/*.yaml |% { dotnet run --project src/SecretManager/Microsoft.DncEng.SecretManager -- synchronize --skip-untracked $_} 39 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Models/AnnotationEntry.cs: -------------------------------------------------------------------------------- 1 | namespace DotNet.Status.Web.Models; 2 | 3 | public class AnnotationEntry 4 | { 5 | /// 6 | /// The original annotation sent from Grafana. 7 | /// 8 | public Annotation Annotation { get; set; } 9 | /// 10 | /// Time since UNIX Epoch in milliseconds. (required) 11 | /// 12 | public long Time { get; set; } 13 | public long? TimeEnd { get; set; } 14 | public bool? IsRange { get; set; } = false; 15 | /// 16 | /// The title for the annotation tooltip. (required) 17 | /// 18 | public string Title { get; set; } 19 | /// 20 | /// Tags for the annotation. (optional) 21 | /// 22 | public string[] Tags { get; set; } 23 | /// 24 | /// Text for the annotation. (optional) 25 | /// 26 | public string Text { get; set; } 27 | 28 | public AnnotationEntry(Annotation annotation, long time, string title) 29 | { 30 | Annotation = annotation; 31 | Time = time; 32 | Title = title; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-10-11.md: -------------------------------------------------------------------------------- 1 | # 11 October 2023 Rollout Summaries 2 | 3 | ## dnceng 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:16:31 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dnceng 19 | 20 | | Metric | [20231011.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2288617) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:16:31 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-03-22.md: -------------------------------------------------------------------------------- 1 | # 22 March 2024 Rollout Summaries 2 | 3 | ## dnceng 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:38:18 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dnceng 19 | 20 | | Metric | [20240319.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2408932) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:38:18 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-06-05.md: -------------------------------------------------------------------------------- 1 | # 05 June 2024 Rollout Summaries 2 | 3 | ## dnceng 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:20:36 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dnceng 19 | 20 | | Metric | [20240604.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2466911) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:20:36 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-07-24.md: -------------------------------------------------------------------------------- 1 | # 24 July 2024 Rollout Summaries 2 | 3 | ## dnceng 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:31:42 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dnceng 19 | 20 | | Metric | [20240724.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2501706) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:31:42 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/ProjectDocs/ibcmerge.md: -------------------------------------------------------------------------------- 1 | # IBCMerge during the CoreFX build 2 | 3 | This is an implementation plan to enable IBC training data merging during the CoreFX official build. 4 | 5 | The CoreFX official build fetches IBCMerge.exe using the internal tooling flow. See [fetch-internal-tooling.md](fetch-internal-tooling.md). 6 | 7 | Packages containing IBC data are restored using a project with an auto-updated dependency. Tentatively in https://github.com/dotnet/corefx/tree/master/external. 8 | 9 | If IBC merging is enabled by an msbuild property, the build uses `ibcmerge.exe` to merge IBC data into assemblies where applicable. A BuildTools target performs the merging between the `build` and `sign` sections of the build. The result is that signed official binaries contain merged IBC info. 10 | 11 | 12 | 13 | Was this helpful? [![Yes](https://helix.dot.net/f/ip/5?p=Documentation%5CProjectDocs%5Cibcmerge.md)](https://helix.dot.net/f/p/5?p=Documentation%5CProjectDocs%5Cibcmerge.md) [![No](https://helix.dot.net/f/in)](https://helix.dot.net/f/n/5?p=Documentation%5CProjectDocs%5Cibcmerge.md) 14 | 15 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) .NET Foundation 4 | 5 | All rights reserved. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-03-22.md: -------------------------------------------------------------------------------- 1 | # 22 March 2023 Rollout Summaries 2 | 3 | ## arcade-services 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 02:12:55 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## arcade-services 19 | 20 | | Metric | [20230322.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2141509) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 02:12:55 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-07-19.md: -------------------------------------------------------------------------------- 1 | # 19 July 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 05:46:36 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2023071901](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2225262) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 05:46:36 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-05-08.md: -------------------------------------------------------------------------------- 1 | # 08 May 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:45:25 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2024050701](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2447274) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:45:25 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2022-12-01.md: -------------------------------------------------------------------------------- 1 | # 01 December 2022 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 02:01:07 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2022120101](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2058132) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 02:01:07 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-01-11.md: -------------------------------------------------------------------------------- 1 | # 11 January 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 02:09:26 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2023011101](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2085677) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 02:09:26 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-02-09.md: -------------------------------------------------------------------------------- 1 | # 09 February 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:45:26 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2024020804](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2373982) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:45:26 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-03-20.md: -------------------------------------------------------------------------------- 1 | # 20 March 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:59:57 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | TRUE | FALSE | 50 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2024031901](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2408929) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:59:57 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-05-13.md: -------------------------------------------------------------------------------- 1 | # 13 May 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 03:15:52 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20240513.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2450141) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 03:15:52 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-07-18.md: -------------------------------------------------------------------------------- 1 | # 18 July 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 08:07:15 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20240718.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2497915) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 08:07:15 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-08-21.md: -------------------------------------------------------------------------------- 1 | # 21 August 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 09:05:27 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2024082001](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2519843) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 09:05:27 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-08-28.md: -------------------------------------------------------------------------------- 1 | # 28 August 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:41:10 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20240827.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2525609) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:41:10 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-04-27.md: -------------------------------------------------------------------------------- 1 | # 27 April 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 10:37:47 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20230427.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2168756) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 10:37:47 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-08-16.md: -------------------------------------------------------------------------------- 1 | # 16 August 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 08:37:29 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20230815.05](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2244584) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 08:37:29 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-10-12.md: -------------------------------------------------------------------------------- 1 | # 12 October 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 05:44:44 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20231012.02](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2289673) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 05:44:44 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-10-20.md: -------------------------------------------------------------------------------- 1 | # 20 October 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 01:38:40 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20231020.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2297058) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 01:38:40 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-11-16.md: -------------------------------------------------------------------------------- 1 | # 16 November 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 03:17:14 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20231115.07](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2316931) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 03:17:14 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-09-04.md: -------------------------------------------------------------------------------- 1 | # 04 September 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 16:14:09 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2024090303](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2530502) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 16:14:09 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-09-18.md: -------------------------------------------------------------------------------- 1 | # 18 September 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 05:39:42 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20240918.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2541312) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 05:39:42 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-10-02.md: -------------------------------------------------------------------------------- 1 | # 02 October 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 09:11:07 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20241002.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2551068) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 09:11:07 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-10-16.md: -------------------------------------------------------------------------------- 1 | # 16 October 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 03:53:43 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20241015.02](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2561570) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 03:53:43 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-11-20.md: -------------------------------------------------------------------------------- 1 | # 20 November 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 17:05:44 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20241120.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2585939) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 17:05:44 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2025-01-10.md: -------------------------------------------------------------------------------- 1 | # 10 January 2025 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 04:25:19 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20250109.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2616924) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 04:25:19 | 23 | | Critical/blocking issues created | 0 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager.Tests/DependencyInjectionTests.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Reflection; 3 | using AwesomeAssertions; 4 | using Microsoft.DncEng.CommandLineLib; 5 | using Microsoft.DotNet.Internal.DependencyInjection.Testing; 6 | using Microsoft.Extensions.Configuration; 7 | using Microsoft.Extensions.DependencyInjection; 8 | using NUnit.Framework; 9 | 10 | namespace Microsoft.DncEng.SecretManager.Tests; 11 | 12 | public class DependencyInjectionTests 13 | { 14 | [Test] 15 | public void AreDependenciesCoherent() 16 | { 17 | bool dependenciesCoherent = DependencyInjectionValidation.IsDependencyResolutionCoherent( 18 | collection => 19 | { 20 | var program = new Program(); 21 | program.ConfigureServiceCollection(collection); 22 | collection.AddSingleton(new ConfigurationBuilder().Build()); 23 | }, 24 | out string errorMessage, 25 | typeof(Program).Assembly.GetTypes().Where(t => t.GetCustomAttribute() != null).ToList() 26 | ); 27 | 28 | dependenciesCoherent.Should().BeTrue(errorMessage); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web.Tests/TestCasesData/triage-items-with-multi-builds-mangled.body.txt: -------------------------------------------------------------------------------- 1 | Error message 2 | ``` 3 | Artifact libraries_test_assets_Linux_x64_Release not found for build 798130. Please ensure you have published artifacts in any previous phases of the current build. 4 | ``` 5 | Builds affected 6 | 7 | --- 8 | 9 | - [ ] Is this an infrastructure related issue? 10 | - [ ] If it is an infrastructure related issue, is there something we can modify/update in our infrastructure to harden against issues of this type? 11 | - [ ] Does this error fit into one of the existing infrastructure related categories or do we need to create a new one? 12 | 13 | --- 14 | 15 |
*Please do not modify this auto-generated section* 16 | 17 | [BuildId=666778,RecordId=6c5bbe10-d41c-5008-b9b3-09c7d6d8c0b3,Index=0] 18 | [Category=Pool provider] 19 | 20 | [BuildId=674578,RecordId=4ec48297-f0d4-5d6c-7d7c-174fafbbae1c,Index=0] 21 | [Category=Pool provider] 22 | 23 | [BuildId=688348,RecordId=3b5945b0-87a7-52cf-843a-406c21a8e27e,Index=0] 24 | [Category=Pool provider] 25 | 26 | See [documentation](https://github.com/dotnet/arcade-services/blob/master/docs/BuildFailuresIssueTriage.md) for more information 27 | -------------------------------------------------------------------------------- /src/DotNet.Status.Web/DotNet.Status.Web/Pages/Routes.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model HelixAPI.Pages.RoutesModel 3 | @{ 4 | ViewData["Title"] = "Routes"; 5 | } 6 | 7 |

@ViewData["Title"]

8 |

Route Debug Info

9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | @foreach (var route in Model.Routes) 21 | { 22 | @if (!String.IsNullOrEmpty(route.Template)) 23 | { 24 | 25 | 26 | @if (string.IsNullOrEmpty(route.Page)) 27 | { 28 | 29 | } 30 | else 31 | { 32 | 33 | } 34 | 35 | 36 | 37 | } 38 | } 39 | 40 |
Route TemplateTargetConstraints/VerbsName
@route.TemplateController @route.Controller, Action @route.ActionPage @route.Page@route.Constraint@route.Name
41 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-09-27.md: -------------------------------------------------------------------------------- 1 | # 27 September 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 02:31:36 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 1 | 0 | 1 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **1** | 14 | 15 | Relevant GitHub issues: [#907](https://github.com/dotnet/dnceng/issues/907) 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2023092702](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2277847) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 02:31:36 | 23 | | Critical/blocking issues created | 1 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-07-31.md: -------------------------------------------------------------------------------- 1 | # 31 July 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-service 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 2.00:01:02 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 1 | 0 | 1 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **51** | 14 | 15 | Relevant GitHub issues: [#3686](https://github.com/dotnet/dnceng/issues/3686) 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-service 19 | 20 | | Metric | [2024072901](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2504780) | 21 | |:-----:|:-----:| 22 | | Time to Rollout | 2.00:01:02 | 23 | | Critical/blocking issues created | 1 | 24 | | Hotfixes | 0 | 25 | | Rollbacks | 0 | 26 | | Service downtime | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /eng/common/generate-sbom-prep.ps1: -------------------------------------------------------------------------------- 1 | Param( 2 | [Parameter(Mandatory=$true)][string] $ManifestDirPath # Manifest directory where sbom will be placed 3 | ) 4 | 5 | . $PSScriptRoot\pipeline-logging-functions.ps1 6 | 7 | # Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly 8 | # with their own overwriting ours. So we create it as a sub directory of the requested manifest path. 9 | $ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" 10 | $SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_' 11 | $SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName 12 | 13 | Write-Host "Artifact name before : $ArtifactName" 14 | Write-Host "Artifact name after : $SafeArtifactName" 15 | 16 | Write-Host "Creating dir $ManifestDirPath" 17 | 18 | # create directory for sbom manifest to be placed 19 | if (!(Test-Path -path $SbomGenerationDir)) 20 | { 21 | New-Item -ItemType Directory -path $SbomGenerationDir 22 | Write-Host "Successfully created directory $SbomGenerationDir" 23 | } 24 | else{ 25 | Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." 26 | } 27 | 28 | Write-Host "Updating artifact name" 29 | Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName" 30 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-05-25.md: -------------------------------------------------------------------------------- 1 | # 25 May 2023 Rollout Summaries 2 | 3 | ## dnceng 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 03:33:49 | 06:00:00 | 0 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **0** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dnceng 19 | 20 | | Metric | [20230525.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2187971) | [20230608.1](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2196593) | 21 | |:-----:|:-----:|:-----:| 22 | | Time to Rollout | 02:25:23 | 01:08:26 | 23 | | Critical/blocking issues created | 0 | 0 | 24 | | Hotfixes | 0 | 0 | 25 | | Rollbacks | 0 | 0 | 26 | | Service downtime | 00:00:00 | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/PasswordGenerator.cs: -------------------------------------------------------------------------------- 1 | using System.Security.Cryptography; 2 | using System.Text; 3 | 4 | public static class PasswordGenerator 5 | { 6 | public static string GenerateRandomPassword(int length, bool useSpecialCharacters) 7 | { 8 | using var rng = RandomNumberGenerator.Create(); 9 | var bytes = new byte[length]; 10 | rng.GetNonZeroBytes(bytes); 11 | var result = new StringBuilder(length); 12 | foreach (byte b in bytes) 13 | { 14 | char c; 15 | if (useSpecialCharacters) 16 | { 17 | int value = b % 94; 18 | c = (char)('!' + value); 19 | } 20 | else 21 | { 22 | int value = b % 62; 23 | if (value < 26) 24 | { 25 | c = (char)('A' + value); 26 | } 27 | else if (value < 52) 28 | { 29 | c = (char)('a' + value - 26); 30 | } 31 | else 32 | { 33 | c = (char)('0' + value - 52); 34 | } 35 | } 36 | 37 | result.Append(c); 38 | } 39 | 40 | return result.ToString(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretTypes/AzureStorageKey.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Microsoft.DncEng.CommandLineLib; 5 | 6 | namespace Microsoft.DncEng.SecretManager.SecretTypes; 7 | 8 | [Name("azure-storage-key")] 9 | public class AzureStorageKey : SecretType 10 | { 11 | public class Parameters 12 | { 13 | public Guid Subscription { get; set; } 14 | public string Account { get; set; } 15 | } 16 | 17 | private readonly ITokenCredentialProvider _tokenCredentialProvider; 18 | private readonly ISystemClock _clock; 19 | 20 | public AzureStorageKey(ITokenCredentialProvider tokenCredentialProvider, ISystemClock clock) 21 | { 22 | _tokenCredentialProvider = tokenCredentialProvider; 23 | _clock = clock; 24 | } 25 | 26 | protected override async Task RotateValue(Parameters parameters, RotationContext context, CancellationToken cancellationToken) 27 | { 28 | string key = await StorageUtils.RotateStorageAccountKey(parameters.Subscription.ToString(), parameters.Account, context, _tokenCredentialProvider, cancellationToken); 29 | return new SecretData(key, DateTimeOffset.MaxValue, _clock.UtcNow.AddMonths(6)); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/SecretTypes/AzureStorageContainerSasToken.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Microsoft.DncEng.CommandLineLib; 5 | 6 | namespace Microsoft.DncEng.SecretManager.SecretTypes; 7 | 8 | [Name("azure-storage-container-sas-token")] 9 | public class AzureStorageContainerSasToken : SecretType 10 | { 11 | private readonly ISystemClock _clock; 12 | 13 | public AzureStorageContainerSasToken(ISystemClock clock) 14 | { 15 | _clock = clock; 16 | } 17 | 18 | protected override async Task RotateValue(AzureStorageContainerSasUri.Parameters parameters, RotationContext context, CancellationToken cancellationToken) 19 | { 20 | DateTimeOffset expiresOn = _clock.UtcNow.AddMonths(1); 21 | DateTimeOffset nextRotationOn = _clock.UtcNow.AddDays(15); 22 | 23 | string connectionString = await context.GetSecretValue(parameters.ConnectionString); 24 | (string containerUri, string sas) containerUriAndSas = StorageUtils.GenerateBlobContainerSas(connectionString, parameters.Container, parameters.Permissions, expiresOn); 25 | 26 | return new SecretData(containerUriAndSas.sas, expiresOn, nextRotationOn); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2023-06-06.md: -------------------------------------------------------------------------------- 1 | # 06 June 2023 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 06:39:44 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 1 | 0 | 5 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **55** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20230606.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2194897) | [20230606.02](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2194996) | 21 | |:-----:|:-----:|:-----:| 22 | | Time to Rollout | 01:21:11 | 05:18:33 | 23 | | Critical/blocking issues created | 0 | 0 | 24 | | Hotfixes | 0 | 1 | 25 | | Rollbacks | 0 | 0 | 26 | | Service downtime | 00:00:00 | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /src/SecretManager/Microsoft.DncEng.SecretManager/ServiceConnections/ServiceEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.DncEng.SecretManager.ServiceConnections.RestModels; 2 | using System; 3 | 4 | namespace Microsoft.DncEng.SecretManager.ServiceConnections; 5 | 6 | // Model of a Service Endpoint for application use 7 | public class ServiceEndpoint 8 | { 9 | public Guid Id { get; init; } 10 | public string Name { get; init; } 11 | public string Description { get; init; } 12 | public string Type { get; init; } 13 | 14 | public ServiceEndpoint(Guid id, string name, string description, string type) 15 | { 16 | Id = id; 17 | Name = name; 18 | Description = description; 19 | Type = type; 20 | } 21 | 22 | internal static ServiceEndpoint Create(AdoServiceEndpoint adoServiceEndpoint) 23 | { 24 | // The JSON schema allows more flexibility than used for the application model. We assume that there is only one element in the serviceEndpointProjectReferences array. We assume that the "name" and "description" elements in that array are what drive the info shown in the AzDO UI. 25 | 26 | return new ServiceEndpoint( 27 | adoServiceEndpoint.Id, 28 | adoServiceEndpoint.Name, 29 | adoServiceEndpoint.Description, 30 | adoServiceEndpoint.Type); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2024-03-13.md: -------------------------------------------------------------------------------- 1 | # 13 March 2024 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 7.11:19:41 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 0 | 0 | 0 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **50** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20240312.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2402200) | [20240319.02](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2408928) | 21 | |:-----:|:-----:|:-----:| 22 | | Time to Rollout | 7.00:36:36 | 10:43:05 | 23 | | Critical/blocking issues created | 0 | 0 | 24 | | Hotfixes | 0 | 0 | 25 | | Rollbacks | 0 | 0 | 26 | | Service downtime | 00:00:00 | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/TeamProcess/Rollout-Scorecards/Scorecard_2025-01-14.md: -------------------------------------------------------------------------------- 1 | # 14 January 2025 Rollout Summaries 2 | 3 | ## dotnet-helix-machines 4 | 5 | | Metric | Value | Target | Score | 6 | |:--------------------------------:|:--------:|:--------:|:---------:| 7 | | Time to Rollout | 1.17:03:35 | 06:00:00 | 50 | 8 | | Critical/blocking issues created | 0 | 0 | 0 | 9 | | Hotfixes | 1 | 0 | 5 | 10 | | Rollbacks | 0 | 0 | 0 | 11 | | Service downtime | 00:00:00 | 00:00:00 | 0 | 12 | | Failed to rollout | FALSE | FALSE | 0 | 13 | | Total | | | **55** | 14 | 15 | 16 | # Itemized Scorecard 17 | 18 | ## dotnet-helix-machines 19 | 20 | | Metric | [20250113.01](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2619528) | [20250115.02](https://dev.azure.com/dnceng/7ea9116e-9fac-403d-b258-b31fcf1bb293/_build/results?buildId=2621436) | 21 | |:-----:|:-----:|:-----:| 22 | | Time to Rollout | 1.12:10:26 | 04:53:09 | 23 | | Critical/blocking issues created | 0 | 0 | 24 | | Hotfixes | 0 | 1 | 25 | | Rollbacks | 0 | 0 | 26 | | Service downtime | 00:00:00 | 00:00:00 | 27 | 28 | -------------------------------------------------------------------------------- /eng/common/templates/steps/retain-build.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | # Optional azure devops PAT with build execute permissions for the build's organization, 3 | # only needed if the build that should be retained ran on a different organization than 4 | # the pipeline where this template is executing from 5 | Token: '' 6 | # Optional BuildId to retain, defaults to the current running build 7 | BuildId: '' 8 | # Azure devops Organization URI for the build in the https://dev.azure.com/ format. 9 | # Defaults to the organization the current pipeline is running on 10 | AzdoOrgUri: '$(System.CollectionUri)' 11 | # Azure devops project for the build. Defaults to the project the current pipeline is running on 12 | AzdoProject: '$(System.TeamProject)' 13 | 14 | steps: 15 | - task: powershell@2 16 | inputs: 17 | targetType: 'filePath' 18 | filePath: eng/common/retain-build.ps1 19 | pwsh: true 20 | arguments: > 21 | -AzdoOrgUri: ${{parameters.AzdoOrgUri}} 22 | -AzdoProject ${{parameters.AzdoProject}} 23 | -Token ${{coalesce(parameters.Token, '$env:SYSTEM_ACCESSTOKEN') }} 24 | -BuildId ${{coalesce(parameters.BuildId, '$env:BUILD_ID')}} 25 | displayName: Enable permanent build retention 26 | env: 27 | SYSTEM_ACCESSTOKEN: $(System.AccessToken) 28 | BUILD_ID: $(Build.BuildId) --------------------------------------------------------------------------------