build/Settings.cs (310 lines of code) (raw):

using System.Collections.Generic; using System.IO; using System.Runtime.CompilerServices; namespace Build { public static class Settings { static Settings() { Directory.CreateDirectory(OutputDir); } private static string config(string @default = null, [CallerMemberName] string key = null) { var value = System.Environment.GetEnvironmentVariable(key); return string.IsNullOrEmpty(value) ? @default : value; } public const string DotnetIsolatedItemTemplatesVersion = "4.0.5086"; public const string DotnetIsolatedProjectTemplatesVersion = "4.0.5086"; public const string DotnetItemTemplatesVersion = "4.0.5086"; public const string DotnetProjectTemplatesVersion = "4.0.5086"; public const string TemplateJsonVersion = "3.1.1648"; public static readonly string SBOMManifestToolPath = Path.GetFullPath("../ManifestTool/Microsoft.ManifestTool.dll"); public static readonly string SrcProjectPath = Path.GetFullPath("../src/Cli/func/"); public static readonly string ConstantsFile = Path.Combine(SrcProjectPath, "Common", "Constants.cs"); public static readonly string TestProjectPath = Path.GetFullPath("../test/Azure.Functions.Cli.Tests/"); public static readonly string ProjectFile = Path.Combine(SrcProjectPath, "Azure.Functions.Cli.csproj"); public static readonly string TestProjectFile = Path.Combine(TestProjectPath, "Azure.Functions.Cli.Tests.csproj"); public static readonly string DurableFolder = Path.Combine(TestProjectPath, "Resources", "DurableTestFolder"); public static readonly string NewTestProjectFile = Path.Combine("..", "test", "Cli", "Func.E2E.Tests", "Azure.Functions.Cli.E2E.Tests.csproj"); public static readonly string RuntimeSettings = Path.Combine("..", "test", "Cli", "Func.E2E.Tests", ".runsettings", "start_tests", "ci_pipeline", "dotnet_inproc.runsettings"); public static readonly string[] TargetRuntimes = new[] { "min.win-arm64", "min.win-x86", "min.win-x64", "linux-x64", "osx-x64", "osx-arm64", "win-x86", "win-x64", "win-arm64" }; public static readonly Dictionary<string, string> RuntimesToOS = new Dictionary<string, string> { { "win-x86", "WINDOWS" }, { "win-x64", "WINDOWS" }, { "win-arm64", "WINDOWS"}, { "linux-x64", "LINUX" }, { "osx-x64", "OSX" }, { "osx-arm64", "OSX" }, { "min.win-x86", "WINDOWS" }, { "min.win-x64", "WINDOWS" }, { "min.win-arm64", "WINDOWS"}, }; private static readonly string[] _winPowershellRuntimes = new[] { "win-x86", "win", "win10-x86", "win8-x86", "win81-x86", "win7-x86", "win-arm64", "win-x64", "win10-x64", "win8-x64", "win81-x64", "win7-x64" }; private static readonly string[] _winPowershellRuntimesNet8 = new[] { "win-x86", "win", "win-arm64", "win-x64" }; private static readonly string[] _linPowershellRuntimes = new[] { "linux", "linux-x64", "unix", "linux-musl-x64" }; private static readonly string[] _osxPowershellRuntimes = new[] { "osx", "osx-x64", "unix" }; private static readonly string[] _osxARMPowershellRuntimes = new[] { "osx", "osx-arm64", "unix" }; private static Dictionary<string, string[]> GetPowerShell72Runtimes() { var runtimes = new Dictionary<string, string[]> { { "win-x86", _winPowershellRuntimes }, { "win-x64", _winPowershellRuntimes }, { "win-arm64", _winPowershellRuntimes }, { "linux-x64", _linPowershellRuntimes }, { "osx-x64", _osxPowershellRuntimes }, { "osx-arm64", _osxARMPowershellRuntimes } }; return runtimes; } private static Dictionary<string, string[]> GetPowerShell74Runtimes() { var runtimes = new Dictionary<string, string[]> { { "win-x86", _winPowershellRuntimesNet8 }, { "win-x64", _winPowershellRuntimesNet8 }, { "win-arm64", _winPowershellRuntimesNet8 }, { "linux-x64", _linPowershellRuntimes }, { "osx-x64", _osxPowershellRuntimes }, { "osx-arm64", _osxARMPowershellRuntimes } }; return runtimes; } public static readonly Dictionary<string, Dictionary<string, string[]>> ToolsRuntimeToPowershellRuntimes = new Dictionary<string, Dictionary<string, string[]>> { { "7", new Dictionary<string, string[]> { { "win-x86", _winPowershellRuntimes }, { "win-x64", _winPowershellRuntimes }, { "win-arm64", _winPowershellRuntimes }, { "linux-x64", _linPowershellRuntimes }, { "osx-x64", _osxPowershellRuntimes }, // NOTE: PowerShell 7.0 does not support arm. First version supporting it is 7.2 // https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.2#supported-versions // That being said, we might as well include "osx" and "unix" since it'll hardly affect package size and should lead to more accurate error messages { "osx-arm64", new [] { "osx", "unix" } } } }, { "7.2", GetPowerShell72Runtimes() }, { "7.4", GetPowerShell74Runtimes() } }; public static readonly string[] LanguageWorkers = new[] { "java", "powershell", "node", "python" }; public static string MinifiedVersionPrefix = "min."; public const string DistLibVersion = "distlib-0.3.0"; public const string DistLibUrl = "https://github.com/vsajip/distlib/archive/0.3.0.zip"; public static readonly string OutputDir = Path.Combine(Path.GetFullPath(".."), "artifacts"); public static readonly string SBOMManifestTelemetryDir = Path.Combine(OutputDir, "SBOMManifestTelemetry"); public static string TargetFramework = "net6.0"; public static readonly string NupkgPublishDir = Path.GetFullPath($"../src/Azure.Functions.Cli/bin/Release/{TargetFramework}/publish"); public static readonly string PreSignTestDir = "PreSignTest"; public static readonly string SignTestDir = "SignTest"; public static readonly string DotnetIsolatedItemTemplates = $"https://www.nuget.org/api/v2/package/Microsoft.Azure.Functions.Worker.ItemTemplates/{DotnetIsolatedItemTemplatesVersion}"; public static readonly string DotnetIsolatedProjectTemplates = $"https://www.nuget.org/api/v2/package/Microsoft.Azure.Functions.Worker.ProjectTemplates/{DotnetIsolatedProjectTemplatesVersion}"; public static readonly string DotnetItemTemplates = $"https://www.nuget.org/api/v2/package/Microsoft.Azure.WebJobs.ItemTemplates/{DotnetItemTemplatesVersion}"; public static readonly string DotnetProjectTemplates = $"https://www.nuget.org/api/v2/package/Microsoft.Azure.WebJobs.ProjectTemplates/{DotnetProjectTemplatesVersion}"; public static readonly string TemplatesJsonZip = $"https://cdn.functions.azure.com/public/TemplatesApi/{TemplateJsonVersion}.zip"; public static readonly string TelemetryKeyToReplace = "00000000-0000-0000-0000-000000000000"; public static string BuildNumber => config("9999", "devops_buildNumber"); public static string IntegrationBuildNumber => config(null, "integrationBuildNumber") ?? string.Empty; public static string CommitId => config("N/A", "Build.SourceVersion"); public static string TelemetryInstrumentationKey => config(null, "TELEMETRY_INSTRUMENTATION_KEY"); public static bool IsPublicBuild => string.Equals(config(null, "IsPublicBuild"), true.ToString(), System.StringComparison.OrdinalIgnoreCase); public static string BuildArtifactsStorage => config(null); public class SignInfo { public static string AzureSigningConnectionString => config(null, "AzureBlobSigningConnectionString"); public static readonly string AzureToSignContainerName = "azure-functions-cli"; public static readonly string AzureSignedContainerName = "azure-functions-cli-signed"; public static readonly string AzureSigningJobName = "signing-jobs"; public static readonly string ToSignZipName = $"{BuildNumber}-authenticode.zip"; public static readonly string ToSignThirdPartyName = $"{BuildNumber}-third.zip"; public static readonly string ToSignDir = "ToSign"; public static readonly string SignedDir = "signed"; public static readonly string Authenticode = "SignAuthenticode"; public static readonly string ToAuthenticodeSign = "Authenticode"; public static readonly string ThirdParty = "Sign3rdParty"; public static readonly string ToThirdPartySign = "ThirdParty"; public static readonly string ToMacSign = "Mac"; public static readonly string[] RuntimesToSign = new string[] { "min.win-arm64", "min.win-x86", "min.win-x64", "osx-arm64", "osx-x64" }; public static readonly string[] FilterExtensionsSign = new[] { ".json", "json.sha256", ".spec", ".cfg", ".pdb", ".config", ".nupkg", ".py", ".md" }; public static readonly string SigcheckDownloadURL = "https://functionsbay.blob.core.windows.net/public/tools/sigcheck64.exe"; public static readonly string[] SkipSigcheckTest = new[] { "aspnetcorev2_inprocess.dll", "Microsoft.AspNetCore.Buffering.dll", "Microsoft.AspNetCore.Server.IIS.dll" }; public static readonly string[] macBinaries = new[] { "func", "gozip" }; public static readonly string[] authentiCodeBinaries = new[] { "DurableTask.AzureStorage.Internal.dll", "DurableTask.Core.Internal.dll", "func.dll", "func.exe", "gozip.exe", "func.pdb", "Microsoft.Azure.AppService.*", "Microsoft.Azure.WebJobs.*", "Microsoft.Azure.WebSites.DataProtection.dll", "Azure.Core.dll", "Azure.Identity.dll", "Azure.Storage.Blobs.dll", "Azure.Storage.Common.dll", "Microsoft.Extensions.Azure.dll", "Microsoft.Identity.Client.dll", "Microsoft.Identity.Client.Extensions.Msal.dll", Path.Combine("workers", "python") }; public static readonly string[] thirdPartyBinaries = new[] { "AccentedCommandLineParser.dll", "Autofac.dll", "Azure.Security.KeyVault.*", "BouncyCastle.Crypto.dll", "Colors.Net.dll", "DotNetZip.dll", "Dynamitey.dll", "Google.Protobuf.dll", "Grpc.AspNetCore.Server.ClientFactory.dll", "Grpc.AspNetCore.Server.dll", "Grpc.Core.dll", "Grpc.Core.Api.dll", "Grpc.Net.Client.dll", "Grpc.Net.ClientFactory.dll", "Grpc.Net.Common.dll", "grpc_csharp_ext.x64.dll", "grpc_csharp_ext.x86.dll", "HTTPlease.Core.dll", "HTTPlease.Diagnostics.dll", "HTTPlease.Formatters.dll", "HTTPlease.Formatters.Json.dll", "ImpromptuInterface.dll", "KubeClient.dll", "KubeClient.Extensions.KubeConfig.dll", "NCrontab.Signed.dll", "Newtonsoft.Json.Bson.dll", "Newtonsoft.Json.dll", "protobuf-net.dll", "Remotion.Linq.dll", "System.IO.Abstractions.dll", "dotnet-aspnet-codegenerator-design.dll", "DotNetTI.BreakingChangeAnalysis.dll", "Microsoft.Azure.KeyVault.*", "Microsoft.AI.*.dll", "Microsoft.Build.Framework.dll", "Microsoft.Build.dll", "Microsoft.CodeAnalysis.dll", "Microsoft.CodeAnalysis.CSharp.dll", "Microsoft.CodeAnalysis.CSharp.Scripting.dll", "Microsoft.CodeAnalysis.CSharp.Workspaces.dll", "Microsoft.CodeAnalysis.Razor.dll", "Microsoft.CodeAnalysis.Scripting.dll", "Microsoft.CodeAnalysis.VisualBasic.dll", "Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll", "Microsoft.CodeAnalysis.Workspaces.dll", "Microsoft.DotNet.PlatformAbstractions.dll", "Microsoft.Extensions.DependencyModel.dll", "Microsoft.Extensions.DiagnosticAdapter.dll", "Microsoft.Extensions.Logging.ApplicationInsights.dll", "Microsoft.Extensions.PlatformAbstractions.dll", "Microsoft.Azure.Services.AppAuthentication.dll", "Microsoft.IdentityModel.*", "Microsoft.ApplicationInsights.*", "Microsoft.Rest.ClientRuntime.*", "Microsoft.VisualStudio.Web.CodeGenera*", "Microsoft.WindowsAzure.Storage.dll", "Microsoft.AspNetCore.*", "NuGet.*.dll", "protobuf-net.Core.dll", "System.Composition.*", "System.Configuration.ConfigurationManager.dll", "System.Data.SqlClient.dll", "System.Diagnostics.PerformanceCounter.dll", "System.IdentityModel.Tokens.Jwt.dll", "System.Interactive.Async.dll", "System.Memory.Data.dll", "System.Net.Http.Formatting.dll", "System.Private.ServiceModel.dll", "System.Reactive.*.dll", "System.Security.Cryptography.ProtectedData.dll", "YamlDotNet.dll", "Marklio.Metadata.dll", "Microsoft.Azure.Cosmos.Table.dll", "Microsoft.Azure.DocumentDB.Core.dll", "Microsoft.Azure.Storage.Blob.dll", "Microsoft.Azure.Storage.Common.dll", "Microsoft.Azure.Storage.File.dll", "Microsoft.Azure.Storage.Queue.dll", "Microsoft.OData.Core.dll", "Microsoft.OData.Edm.dll", "Microsoft.Spatial.dll", "Mono.Posix.NETStandard.dll", "OpenTelemetry.Api.dll", "OpenTelemetry.Api.ProviderBuilderExtensions.dll", "OpenTelemetry.dll", "OpenTelemetry.Exporter.Console.dll", "OpenTelemetry.Exporter.OpenTelemetryProtocol.dll", "OpenTelemetry.Extensions.Hosting.dll", "OpenTelemetry.Instrumentation.AspNetCore.dll", "OpenTelemetry.Instrumentation.Http.dll", "OpenTelemetry.PersistentStorage.Abstractions.dll", "OpenTelemetry.PersistentStorage.FileSystem.dll", Path.Combine("tools", "python", "packapp", "distlib") }; } } }