$ErrorActionPreference = "Stop" $runnerRepo = Read-Host -Prompt "actions/runner repository root" if (!(Test-Path -LiteralPath "$runnerRepo/src")) { Write-Error "$runnerRepo should contains a /src folder" return 1 } $gitHubSdkFolder = Join-Path -Path "$runnerRepo/src" -ChildPath "Sdk" $vsoRepo = $PWD while ($true) { if (Test-Path -LiteralPath "$vsoRepo/init.cmd") { break; } else { $vsoRepo = (Get-Item $vsoRepo).Parent.FullName } } $targetFolders = @( # "Common" # "WebApi" # "AadAuthentication" # "DTContracts" # "DTGenerated" # "DTLogging" # "DTExpressions" # "DTExpressions2" # "DTObjectTemplating" # "DTPipelines" # "DTWebApi" # "Resources" # "BuildWebApi" # "CoreWebApi" # "ArtifactWebApi" # "ArtifactContentTelemetry" # "ArtifactContent" # "BlobStoreWebApi" # "BlobStoreCommonTelemetry" # "BlobStoreCommon" ) $sourceFolders = @{ # "Vssf\Client\Common" = "Common"; # "Vssf\Client\WebApi" = "WebApi"; # "DistributedTask\Shared\Common\Contracts" = "DTContracts"; # "DistributedTask\Client\WebApi\Generated" = "DTGenerated"; # "DistributedTask\Client\WebApi\Logging" = "DTLogging"; # "DistributedTask\Client\WebApi\Expressions" = "DTExpressions"; # "Actions\Runtime\Client\WebApi\Expressions2" = "DTExpressions2"; # "Actions\Runtime\Client\WebApi\ObjectTemplating" = "DTObjectTemplating"; # "Actions\Runtime\Client\WebApi\Pipelines" = "DTPipelines"; # "DistributedTask\Client\WebApi\WebApi" = "DTWebApi"; # "..\obj\Debug.AnyCPU\Vssf.Client\MS.VS.Services.Common\EmbeddedVersionInfo.cs" = "Common\EmbeddedVersionInfo.cs"; # "Vssf\InteractiveClient\Client\Authentication\VssAadToken.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\Authentication\VssAadTokenProvider.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\Authentication\VssAadCredential.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\VssAadSettings.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\Authentication\VssFederatedCredential.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\Authentication\VssFederatedToken.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\Authentication\VssFederatedTokenProvider.cs" = "AadAuthentication"; # "Vssf\InteractiveClient\Client\Authentication\Utility\CookieUtility.cs" = "AadAuthentication"; # "Actions\Runtime\Client\WebApi\Pipelines\ObjectTemplating\workflow-v1.0.json" = "DTPipelines"; # "Tfs\Client\Build2\Api" = "BuildWebApi"; # "Tfs\Client\Core" = "CoreWebApi"; # "ArtifactServices\Client\WebApi" = "ArtifactWebApi"; # "ArtifactServices\Shared\Content.Common.Telemetry" = "ArtifactContentTelemetry"; # "ArtifactServices\Shared\Content.Common" = "ArtifactContent"; # "BlobStore\Client\WebApi" = "BlobStoreWebApi"; # "ArtifactServices\Shared\BlobStore.Common.Telemetry" = "BlobStoreCommonTelemetry"; # "ArtifactServices\Shared\BlobStore.Common" = "BlobStoreCommon"; } $extraFiles = @( # "BlobStoreCommon\BlobStore.Common\AzureStorageOperationTraceAdapter.cs" # "BlobStoreCommon\BlobStore.Common\BlobIdentifierHelperExtensions.cs" # "BlobStoreCommon\BlobStore.Common\BlobIdentifierHexConverter.cs" # "BlobStoreCommon\BlobStore.Common\EdgeCacheUrlBuilder.cs" # "BlobStoreCommon\BlobStore.Common\Exceptions.cs" # "BlobStoreCommon\BlobStore.Common\IDownloader.cs" # "BlobStoreCommon\BlobStore.Common\InternalsVisibleTo.cs" # "BlobStoreCommon\BlobStore.Common\IUrlSigner.cs" # "BlobStoreCommon\BlobStore.Common\ManagedParallelBlobDownloader.cs" # "BlobStoreCommon\BlobStore.Common\NullableExtensions.cs" # "BlobStoreCommon\BlobStore.Common\ObjectExtensions.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\InstrumentationManifest.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\InstrumentationManifestException.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\IPerformanceDataFacade.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\ManifestCounters.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\NoopPerfCounter.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\NoopPerformanceDataFacade.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\PerfCounter.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\PerfCounterSet.cs" # "BlobStoreCommon\BlobStore.Common\PerfCounters\PerformanceDataFacade.cs" # "BlobStoreCommon\BlobStore.Common\ReceiptSecretConstants.cs" # "BlobStoreCommon\BlobStore.Common\SecurityDefinitions.cs" # "BlobStoreCommon\BlobStore.Common\VsoHashAlgorithm.cs" # "BlobStoreCommonTelemetry\BlobStore.Common.Telemetry\InternalsVisibleTo.cs" # "ArtifactContentTelemetry\Content.Common.Telemetry\InternalsVisibleTo.cs" # "ArtifactContentTelemetry\Content.Common.Telemetry\Telemetry\NoopClientTelemetry.cs" # "ArtifactContentTelemetry\Content.Common.Telemetry\Telemetry\TelemetryPlatformSpecificNetFramework.cs" # "ArtifactContentTelemetry\Content.Common.Telemetry\Telemetry\TelemetryEnvironmentHelper.cs" # "ArtifactContent\Content.Common\AsyncEnumerator\AsyncEnumeratorExceptionWrapper.cs" # "ArtifactContent\Content.Common\AsyncEnumerator\IEnumeratorExceptionMapper.cs" # "ArtifactContent\Content.Common\AsyncEnumerator\AsyncEnumeratorWithCursor.cs" # "ArtifactContent\Content.Common\Authentication\AadAcquireTokenException.cs" # "ArtifactContent\Content.Common\Authentication\AadErrorHandlingPolicy.cs" # "ArtifactContent\Content.Common\Authentication\CredentialProvider\CredentialProviderException.cs" # "ArtifactContent\Content.Common\Authentication\CredentialProvider\CredentialProviderLoader.cs" # "ArtifactContent\Content.Common\Authentication\CredentialProvider\CredentialProviderManager.cs" # "ArtifactContent\Content.Common\Authentication\CredentialProvider\CredentialResponse.cs" # "ArtifactContent\Content.Common\Authentication\CredentialProvider\ICredentialProvider.cs" # "ArtifactContent\Content.Common\Authentication\CredentialProvider\PluginCredentialProvider.cs" # "ArtifactContent\Content.Common\Authentication\LocalTokenCacheArgs.cs" # "ArtifactContent\Content.Common\Authentication\TestableAuthenticationContext.cs" # "ArtifactContent\Content.Common\Authentication\VsoAadConstants.cs" # "ArtifactContent\Content.Common\Authentication\VsoCredentialHelper.cs" # "ArtifactContent\Content.Common\AutoKillProcessHandle.cs" # "ArtifactContent\Content.Common\ConcurrencyConsolidator.cs" # "ArtifactContent\Content.Common\EnumUtilities.cs" # "ArtifactContent\Content.Common\EquatableTuple.cs" # "ArtifactContent\Content.Common\FileVersionHelpers.cs" # "ArtifactContent\Content.Common\Histogram.cs" # "ArtifactContent\Content.Common\InternalsVisibleTo.cs" # "ArtifactContent\Content.Common\InUseDetection.cs" # "ArtifactContent\Content.Common\IteratorPartition.cs" # "ArtifactContent\Content.Common\Json\ByteArrayAsBase64JsonConvertor.cs" # "ArtifactContent\Content.Common\Json\ByteArrayAsHexJsonConvertor.cs" # "ArtifactContent\Content.Common\Json\JsonEnumerator.cs" # "ArtifactContent\Content.Common\Json\JsonNormalizer.cs" # "ArtifactContent\Content.Common\Json\JsonProperty.cs" # "ArtifactContent\Content.Common\Json\JsonStream.cs" # "ArtifactContent\Content.Common\Json\JsonWrite.cs" # "ArtifactContent\Content.Common\Json\JsonWriterStream.cs" # "ArtifactContent\Content.Common\Json\JsonWrites.cs" # "ArtifactContent\Content.Common\Json\ULongJsonConverter.cs" # "ArtifactContent\Content.Common\Kvp.cs" # "ArtifactContent\Content.Common\Operations\SecureStringConverter.cs" # "ArtifactContent\Content.Common\PagedEnumerator.cs" # "ArtifactContent\Content.Common\PerformanceInfo.cs" # "ArtifactContent\Content.Common\ReaderWriterLockSlimExtensions.cs" # "ArtifactContent\Content.Common\ReadOnlySet.cs" # "ArtifactContent\Content.Common\RetrievalOptions.cs" # "ArtifactContent\Content.Common\ServiceInstanceTypes.cs" # "ArtifactContent\Content.Common\ServicePointHelper.cs" # "ArtifactContent\Content.Common\ShardableLocator.cs" # "ArtifactContent\Content.Common\StringExtensions.cs" # "ArtifactContent\Content.Common\ThreadLocalRandom.cs" # "ArtifactContent\Content.Common\ThreadPoolHelper.cs" # "ArtifactContent\Content.Common\Tracing\AppTraceListener.cs" # "ArtifactContent\Content.Common\Tracing\ArtifactServicesTraceSource.cs" # "ArtifactContent\Content.Common\Tracing\ConsoleMessageUtil.cs" # "ArtifactContent\Content.Common\Tracing\ConsoleTraceListener.cs" # "ArtifactContent\Content.Common\Tracing\FileTraceListener.cs" # "ArtifactContent\Content.Common\Tracing\InMemoryLog.cs" # "ArtifactContent\Content.Common\Tracing\InMemoryTraceListener.cs" # "Common\Common\CommandLine\Argument.cs" # "Common\Common\CommandLine\AttributeBasedOperationModeHandlerFactory.cs" # "Common\Common\CommandLine\AttributeBasedOptionParserAdapter.cs" # "Common\Common\CommandLine\BasicParser.cs" # "Common\Common\CommandLine\CommandLineLexer.cs" # "Common\Common\CommandLine\Enumerations.cs" # "Common\Common\CommandLine\Exceptions.cs" # "Common\Common\CommandLine\Extensions.cs" # "Common\Common\CommandLine\IEnumerable.cs" # "Common\Common\CommandLine\OperationHandler.cs" # "Common\Common\CommandLine\OperationHandlerFactory.cs" # "Common\Common\CommandLine\OperationModeAttribute.cs" # "Common\Common\CommandLine\Option.cs" # "Common\Common\CommandLine\OptionAttribute.cs" # "Common\Common\CommandLine\OptionParser.cs" # "Common\Common\CommandLine\OptionReader.cs" # "Common\Common\CommandLine\ResponseFileOptionReader.cs" # "Common\Common\CommandLine\Validation\DefaultValidation.cs" # "Common\Common\CommandLine\Validation\IOptionValidation.cs" # "Common\Common\CommandLine\Validation\OptionExistsFilter.cs" # "Common\Common\CommandLine\Validation\OptionMustExist.cs" # "Common\Common\CommandLine\Validation\OptionRequiresSpecificValue.cs" # "Common\Common\CommandLine\Validation\OptionsAreMutuallyExclusive.cs" # "Common\Common\CommandLine\Validation\OptionsAreMutuallyInclusive.cs" # "Common\Common\CommandLine\Validation\OptionValidation.cs" # "Common\Common\CommandLine\Validation\OptionValidationFilter.cs" # "Common\Common\CommandLine\Validation\OptionValueFilter.cs" # "Common\Common\CommandLine\ValueConverters\CsvCollectionConverter.cs" # "Common\Common\CommandLine\ValueConverters\EnumConverter.cs" # "Common\Common\CommandLine\ValueConverters\IValueConvertible.cs" # "Common\Common\CommandLine\ValueConverters\UriConverter.cs" # "Common\Common\CommandLine\ValueConverters\ValueConverter.cs" # "Common\Common\ExternalProviders\IExternalProviderHttpRequester.cs" # "Common\Common\Performance\PerformanceNativeMethods.cs" # "Common\Common\TokenStorage\RegistryToken.cs" # "Common\Common\TokenStorage\RegistryTokenStorage.cs" # "Common\Common\TokenStorage\RegistryTokenStorageHelper.cs" # "Common\Common\TokenStorage\VssTokenStorageFactory.cs" # "Common\Common\Utility\CredentialsCacheManager.cs" # "Common\Common\Utility\EncryptionUtility.cs" # "Common\Common\Utility\EnumerableUtility.cs" # "Common\Common\Utility\EnvironmentWrapper.cs" # "Common\Common\Utility\ExceptionExtentions.cs" # "Common\Common\Utility\NativeMethods.cs" # "Common\Common\Utility\OSDetails.cs" # "Common\Common\Utility\DateTimeUtility.cs" # "Common\Common\Utility\PasswordUtility.cs" # "Common\Common\Utility\RegistryHelper.cs" # "Common\Common\Utility\SerializationHelper.cs" # "Common\Common\Utility\Csv\CsvException.cs" # "Common\Common\Utility\Csv\CsvConfiguration.cs" # "Common\Common\Utility\Csv\CsvWriter.cs" # "Common\Common\VssEnvironment.cs" # "WebApi\WebApi\AssemblyAttributes.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\ExpiringToken.cs" # "WebApi\WebApi\Contracts\ExternalEvent\Comparers\ExternalGitIssueComparer.cs" # "WebApi\WebApi\Contracts\ExternalEvent\ExternalGitExtensions.cs" # "WebApi\WebApi\Contracts\ExternalEvent\Comparers\ExternalGitPullRequestComparer.cs" # "WebApi\WebApi\Contracts\ExternalEvent\Comparers\ExternalGitCommitComparer.cs" # "WebApi\WebApi\Contracts\ExternalEvent\ExternalGitIssueEvent.cs" # "WebApi\WebApi\Contracts\ExternalEvent\Comparers\ExternalGitRepoComparer.cs" # "WebApi\WebApi\Contracts\ExternalEvent\ExternalGitCommitCommentEvent.cs" # "WebApi\WebApi\Contracts\PermissionLevel\Client\PagedPermissionLevelAssignment.cs" # "WebApi\WebApi\Contracts\PermissionLevel\Client\PermissionLevelAssignment.cs" # "WebApi\WebApi\Contracts\PermissionLevel\Enumerations.cs" # "WebApi\WebApi\Contracts\PermissionLevel\Client\PermissionLevelDefinition.cs" # "WebApi\WebApi\Contracts\Tokens\PATAddedEvent.cs" # "WebApi\WebApi\Contracts\Tokens\SshKeyAddedEvent.cs" # "WebApi\WebApi\Contracts\Tokens\ExpiringTokenEvent.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\PATAddedEvent.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\SshKeyAddedEvent.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\ExpiringTokenEvent.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\DelegatedAuthMigrationStatus.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\DelegatedAuthorizationMigrationBase.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedAuthorizationAccessKeyPublicDataMigration.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedAuthorizationAccessMigration.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedAuthorizationMigration.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedAuthorizationAccessKeyMigration.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedAuthorizationRegistrationMigration.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedAuthorizationRegistrationRedirectLocationMigration.cs" # "WebApi\WebApi\Contracts\DelegatedAuthorization\Migration\TokenDelegatedHostAuthorizationMigration.cs" # "WebApi\WebApi\Contracts\OAuthWhitelist\OAuthWhitelistEntry.cs" # "WebApi\WebApi\Contracts\TokenAdmin\PatRevokedEvent.cs" # "WebApi\WebApi\Contracts\TokenAdmin\TokenAdministrationRevocation.cs" # "WebApi\WebApi\Contracts\TokenAdmin\TokenAdminPagedSessionTokens.cs" # "WebApi\WebApi\Contracts\TokenAdmin\TokenAdminRevocation.cs" # "WebApi\WebApi\Contracts\TokenAdmin\TokenAdminRevocationRule.cs" # "WebApi\WebApi\Exceptions\AuditLogExceptions.cs" # "WebApi\WebApi\Exceptions\AadExceptions.cs" # "WebApi\WebApi\Exceptions\PermissionLevelExceptions.cs" # "WebApi\WebApi\HttpClients\CsmResourceProviderHttpClient.cs" # "WebApi\WebApi\HttpClients\Generated\CsmResourceProviderHttpClientBase.cs" # "WebApi\WebApi\HttpClients\Generated\OAuthWhitelistHttpClient.cs" # "WebApi\WebApi\HttpClients\Generated\TokenAdminHttpClient.cs" # "WebApi\WebApi\HttpClients\Generated\TokenAdministrationHttpClient.cs" # "WebApi\WebApi\HttpClients\Generated\TokenExpirationHttpClient.cs" # "WebApi\WebApi\HttpClients\Generated\TokenMigrationHttpClient.cs" # "WebApi\WebApi\HttpClients\Generated\PermissionLevelHttpClient.cs" # "WebApi\WebApi\HttpClients\CommerceHostHelperHttpClient.cs" # "WebApi\WebApi\Utilities\DelegatedAuthComparers.cs" # "WebApi\WebApi\Utilities\HttpHeadersExtensions.cs" # "WebApi\WebApi\VssClientCertificateManager.cs" # "WebApi\WebApi\VssClientEnvironment.cs" # "WebApi\WebApi\VssSoapMediaTypeFormatter.cs" ) $resourceFiles = @{ # "ExpressionResources" = "DistributedTask\Client\WebApi\Expressions\ExpressionResources.resx"; # "PipelineStrings" = "DistributedTask\Client\WebApi\Pipelines\PipelineStrings.resx"; # "CommonResources" = "Vssf\Client\Common\Resources.resx"; # "IdentityResources" = "Vssf\Client\WebApi\Resources\IdentityResources.resx"; # "JwtResources" = "Vssf\Client\WebApi\Resources\JwtResources.resx"; # "WebApiResources" = "Vssf\Client\WebApi\Resources\WebApiResources.resx"; # "DataImportResources" = "Vssf\Client\WebApi\Resources\DataImportResources.resx"; # "PatchResources" = "Vssf\Client\WebApi\Resources\PatchResources.resx"; # "AccountResources" = "Vssf\Client\WebApi\Resources\AccountResources.resx"; # "TemplateStrings" = "DistributedTask\Client\WebApi\ObjectTemplating\TemplateStrings.resx"; # "GraphResources" = "Vssf\Client\WebApi\Resources\GraphResources.resx"; # "FileContainerResources" = "Vssf\Client\WebApi\Resources\FileContainerResources.resx"; # "LocationResources" = "Vssf\Client\WebApi\Resources\LocationResources.resx"; # "CommerceResources" = "Vssf\Client\WebApi\Resources\CommerceResources.resx"; # "SecurityResources" = "Vssf\Client\WebApi\Resources\SecurityResources.resx"; # "WebPlatformResources" = "Vssf\Client\WebApi\Resources\WebPlatformResources.resx"; # "ZeusWebApiResources" = "Vssf\Client\WebApi\Resources\ZeusWebApiResources.resx"; # "NameResolutionResources" = "Vssf\Client\WebApi\Resources\NameResolutionResources.resx"; # "PartitioningResources" = "Vssf\Client\WebApi\Resources\PartitioningResources.resx"; # "WebApiResources" = "Tfs\Client\Core\Resources\WebApiResources.resx"; # "BlobStoreResources" = "BlobStore\Client\WebApi\Resources.resx" # "ContentResources" = "ArtifactServices\Shared\Content.Common\Resources.resx" # "BlobStoreCommonResources" = "ArtifactServices\Shared\BlobStore.Common\Resources.resx" } $resourceNamespace = @{ # "ExpressionResources" = "Microsoft.TeamFoundation.DistributedTask.Expressions"; # "PipelineStrings" = "Microsoft.TeamFoundation.DistributedTask.Pipelines"; # "CommonResources" = "Microsoft.VisualStudio.Services.Common.Internal"; # "IdentityResources" = "Microsoft.VisualStudio.Services.WebApi"; # "JwtResources" = "Microsoft.VisualStudio.Services.WebApi"; # "WebApiResources" = "Microsoft.VisualStudio.Services.WebApi"; # "DataImportResources" = "Microsoft.VisualStudio.Services.WebApi"; # "PatchResources" = "Microsoft.VisualStudio.Services.WebApi"; # "AccountResources" = "Microsoft.VisualStudio.Services.WebApi"; # "TemplateStrings" = "Microsoft.TeamFoundation.DistributedTask.ObjectTemplating"; # "GraphResources" = "Microsoft.VisualStudio.Services.WebApi"; # "FileContainerResources" = "Microsoft.VisualStudio.Services.WebApi"; # "LocationResources" = "Microsoft.VisualStudio.Services.WebApi"; # "CommerceResources" = "Microsoft.VisualStudio.Services.WebApi"; # "SecurityResources" = "Microsoft.VisualStudio.Services.WebApi"; # "WebPlatformResources" = "Microsoft.VisualStudio.Services.WebApi"; # "ZeusWebApiResources" = "Microsoft.VisualStudio.Services.WebApi"; # "NameResolutionResources" = "Microsoft.VisualStudio.Services.WebApi"; # "PartitioningResources" = "Microsoft.VisualStudio.Services.WebApi"; # "WebApiResources" = "Microsoft.TeamFoundation.Core.WebApi"; # "ContentResources" = "Microsoft.VisualStudio.Services.Content.Common"; # "BlobStoreCommonResources" = "Microsoft.VisualStudio.Services.BlobStore.Common"; # "BlobStoreResources" = "Microsoft.VisualStudio.Services.BlobStore.WebApi"; } foreach ($folder in $targetFolders) { Write-Host "Recreate $gitHubSdkFolder\$folder" if (Test-Path -LiteralPath "$gitHubSdkFolder\$folder") { Remove-Item -LiteralPath "$gitHubSdkFolder\$folder" -Force -Recurse } New-Item -Path $gitHubSdkFolder -Name $folder -ItemType "directory" -Force } foreach ($sourceFolder in $sourceFolders.Keys) { $copySource = Join-Path -Path $vsoRepo -ChildPath $sourceFolder $copyDest = Join-Path -Path $gitHubSdkFolder -ChildPath $sourceFolders[$sourceFolder] Write-Host "Copy $copySource to $copyDest" Copy-Item -Path $copySource -Destination $copyDest -Filter "*.cs" -Recurse -Force } Write-Host "Delete extra none NetStandard files" foreach ($extraFile in $extraFiles) { Remove-Item -LiteralPath "$gitHubSdkFolder\$extraFile" -Force } Write-Host "Generate C# file for resx files" foreach ($resourceFile in $resourceFiles.Keys) { Write-Host "Generate file for $resourceFile" $stringBuilder = New-Object System.Text.StringBuilder $file = $resourceFiles[$resourceFile] $xml = [xml](Get-Content -LiteralPath "$vsoRepo\$file") $null = $stringBuilder.AppendLine('using System.Globalization;') $null = $stringBuilder.AppendLine('') $namespace = $resourceNamespace[$resourceFile] $null = $stringBuilder.AppendLine("namespace $namespace") $null = $stringBuilder.AppendLine('{') $null = $stringBuilder.AppendLine(" public static class $resourceFile") $null = $stringBuilder.AppendLine(' {') foreach ($data in $xml.root.data) { $i = 0 $args = "" $inputs = "" while ($true) { if ($data.value.Contains("{$i}") -or $data.value.Contains("{$i" + ":")) { if ($i -eq 0) { $args = "object arg$i" $inputs = "arg$i" } else { $args = $args + ", " + "object arg$i" $inputs = $inputs + ", " + "arg$i" } $i++ } else { break } } $null = $stringBuilder.AppendLine("") $null = $stringBuilder.AppendLine(" public static string $($data.name)($($args))") $null = $stringBuilder.AppendLine(" {") $null = $stringBuilder.AppendLine(@" const string Format = @"$($data.value.Replace('"', '""'))"; "@) if ($i -eq 0) { $null = $stringBuilder.AppendLine(" return Format;") } else { $null = $stringBuilder.AppendLine(" return string.Format(CultureInfo.CurrentCulture, Format, $inputs);") } $null = $stringBuilder.AppendLine(" }") } $null = $stringBuilder.AppendLine(" }") $null = $stringBuilder.AppendLine("}") # Write Resources.g.cs. $genResourceFile = Join-Path -Path $gitHubSdkFolder -ChildPath "Resources\$resourceFile.g.cs" [System.IO.File]::WriteAllText($genResourceFile, ($stringBuilder.ToString()), ([System.Text.Encoding]::UTF8)) } # Print out all namespaces Write-Host "Rename namespaces:" $namespaces = New-Object 'System.Collections.Generic.HashSet[string]' $sourceFiles = Get-ChildItem -LiteralPath $gitHubSdkFolder -Filter "*.cs" -Recurse -Force -File foreach ($file in $sourceFiles) { foreach ($line in Get-Content $file.FullName) { if ($line.StartsWith("namespace ")) { $namespace = $line.Substring("namespace ".Length) if ($namespaces.Add($namespace)) { Write-Host $namespace } } } } # Rename all namespaces to GitHub $allSourceFiles = Get-ChildItem -LiteralPath $gitHubSdkFolder -Filter "*.cs" -Recurse -Force -File foreach ($file in $allSourceFiles) { $stringBuilder = New-Object System.Text.StringBuilder foreach ($line in Get-Content $file.FullName) { if ($line.Contains("Microsoft.VisualStudio")) { $line = $line.Replace("Microsoft.VisualStudio", "GitHub"); } elseif ($line.Contains("Microsoft.Azure.DevOps")) { $line = $line.Replace("Microsoft.Azure.DevOps", "GitHub"); } elseif ($line.Contains("Microsoft.TeamFoundation")) { $line = $line.Replace("Microsoft.TeamFoundation", "GitHub"); } $null = $stringBuilder.AppendLine($line) } [System.IO.File]::WriteAllText($file.FullName, ($stringBuilder.ToString()), ([System.Text.Encoding]::UTF8)) } Write-Host "Done"