Skip to content

Commit f7fcfc1

Browse files
authored
Print warning if preview version (#4398)
1 parent ecc6f45 commit f7fcfc1

File tree

7 files changed

+58
-14
lines changed

7 files changed

+58
-14
lines changed

.vscode/launch.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
"version": "0.2.0",
33
"configurations": [
44
{
5-
"name": ".NET Core Launch (console)",
5+
"name": "Run func cli (console)",
66
"type": "coreclr",
77
"request": "launch",
88
"preLaunchTask": "build",
9-
// If you have changed target frameworks, make sure to update the program path.
10-
"program": "${workspaceFolder}/out/bin/Azure.Functions.Cli/debug_net8.0/func.dll",
9+
"program": "${workspaceFolder}/out/bin/Azure.Functions.Cli/debug/func.dll",
1110
"env": {
1211
"CLI_DEBUG": "1"
1312
},
13+
// use `--script-root` to set func app directory e.g.
14+
// "args": "${input:funcArgs} --script-root ${workspaceFolder}/_testapp",
1415
"args": "${input:funcArgs}",
1516
"cwd": "${workspaceFolder}/src/Cli/func",
1617
"console": "internalConsole",

src/Cli/func/Actions/HelpAction.cs

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ private void DisplayGeneralHelp()
177177
.Where(c => c != Context.None)
178178
.Distinct()
179179
.OrderBy(c => c.ToLowerCaseString());
180+
Utilities.WarnIfPreviewVersion();
180181
Utilities.PrintVersion();
181182
ColoredConsole
182183
.WriteLine("Usage: func [context] [context] <action> [-/--options]")

src/Cli/func/Actions/HostActions/StartHostAction.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -400,13 +400,15 @@ public override async Task RunAsync()
400400
{
401401
await PreRunConditions();
402402
var isVerbose = VerboseLogging.HasValue && VerboseLogging.Value;
403-
403+
404404
// Return if running is delegated to another version of Core Tools
405405
if (await TryHandleInProcDotNetLaunchAsync())
406406
{
407407
return;
408408
}
409409

410+
Utilities.WarnIfPreviewVersion();
411+
410412
if (isVerbose || EnvironmentHelper.GetEnvironmentVariableAsBool(Constants.DisplayLogo))
411413
{
412414
Utilities.PrintLogo();

src/Cli/func/Actions/LocalActions/InitAction.cs

+2
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ public override ICommandLineParserResult ParseArgs(string[] args)
161161

162162
public override async Task RunAsync()
163163
{
164+
Utilities.WarnIfPreviewVersion();
165+
164166
if (SourceControl != SourceControl.Git)
165167
{
166168
throw new Exception("Only Git is supported right now for vsc");

src/Cli/func/Azure.Functions.Cli.csproj

+8-4
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,18 @@
2020
</PropertyGroup>
2121

2222
<PropertyGroup>
23-
<BuildNumber Condition=" '$(BuildNumber)' == '' ">1</BuildNumber>
23+
<!-- Base version components -->
2424
<MajorMinorProductVersion>4.0</MajorMinorProductVersion>
25-
<Version>$(MajorMinorProductVersion).$(BuildNumber)</Version>
25+
<BuildNumber Condition=" '$(BuildNumber)' == '' ">1</BuildNumber>
26+
<CommitHash Condition="$(CommitHash) == ''">N/A</CommitHash>
27+
28+
<!-- Final version properties -->
29+
<Version>$(MajorMinorProductVersion).$(BuildNumber)-preview1</Version>
2630
<AssemblyVersion>$(MajorMinorProductVersion).$(BuildNumber)</AssemblyVersion>
2731
<FileVersion>$(MajorMinorProductVersion).$(BuildNumber)</FileVersion>
28-
<CommitHash Condition="$(CommitHash) == ''">N/A</CommitHash>
32+
33+
<InformationalVersion>$(Version) Commit hash: $(CommitHash) $(IntegrationBuildNumberInfo)</InformationalVersion>
2934
<IntegrationBuildNumberInfo Condition="$(IntegrationBuildNumber) != ''">Integration build number: $(IntegrationBuildNumber)</IntegrationBuildNumberInfo>
30-
<InformationalVersion>$(FileVersion) Commit hash: $(CommitHash) $(IntegrationBuildNumberInfo)</InformationalVersion>
3135
</PropertyGroup>
3236

3337
<ItemGroup>

src/Cli/func/Common/Constants.cs

+18-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.Collections.ObjectModel;
33
using System.Reflection;
4+
using System.Text.RegularExpressions;
45
using Azure.Functions.Cli.Helpers;
56

67
namespace Azure.Functions.Cli.Common
@@ -94,17 +95,28 @@ internal static class Constants
9495
public const string Dotnet = "dotnet";
9596
public const string InProcDotNet8EnabledSetting = "FUNCTIONS_INPROC_NET8_ENABLED";
9697
public const string AzureDevSessionsRemoteHostName = "AzureDevSessionsRemoteHostName";
97-
public const string AzureDevSessionsPortSuffixPlaceholder = "<port>";
98+
public const string AzureDevSessionsPortSuffixPlaceholder = "<port>"; // forwardedHttpUrl sample format: https://n12abc3t-<port>.asse.devtunnels.ms/
9899
public const string GitHubReleaseApiUrl = "https://api.github.com/repos/Azure/azure-functions-core-tools/releases/latest";
100+
public const string PreviewVersionSuffixLabel = "preview";
99101

100-
// Sample format https://n12abc3t-<port>.asse.devtunnels.ms/
101-
102+
private static readonly string _cliVersion = GetSemanticVersion();
103+
public static string CliVersion => _cliVersion;
104+
public static string CliDetailedVersion = typeof(Constants).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ?? string.Empty;
105+
public static string CliUserAgent = $"functions-core-tools/{CliVersion}";
102106

103-
public static string CliVersion => typeof(Constants).GetTypeInfo().Assembly.GetName().Version.ToString(3);
107+
// Helper method to extract version from CliDetailedVersion
108+
private static string GetSemanticVersion()
109+
{
110+
var infoVersion = typeof(Constants).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
104111

105-
public static string CliDetailedVersion = typeof(Constants).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ?? string.Empty;
112+
if (string.IsNullOrEmpty(infoVersion))
113+
{
114+
return Assembly.GetExecutingAssembly().GetName().Version.ToString(3);
115+
}
106116

107-
public static string CliUserAgent = $"functions-core-tools/{Constants.CliVersion}";
117+
var match = Regex.Match(infoVersion, @"^(\S+)");
118+
return match.Success ? match.Groups[1].Value : infoVersion;
119+
}
108120

109121
public static readonly Dictionary<WorkerRuntime, IEnumerable<string>> WorkerRuntimeImages = new Dictionary<WorkerRuntime, IEnumerable<string>>
110122
{

src/Cli/func/Common/Utilities.cs

+22
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,28 @@ internal static void PrintVersion()
5353
.WriteLine($"Function Runtime Version: {ScriptHost.Version}\n".DarkGray());
5454
}
5555

56+
internal static void WarnIfPreviewVersion()
57+
{
58+
if (!Constants.CliVersion.Contains(Constants.PreviewVersionSuffixLabel, StringComparison.OrdinalIgnoreCase))
59+
{
60+
return;
61+
}
62+
63+
ColoredConsole
64+
.WriteLine("You are running a preview version of Azure Functions Core Tools.".DarkYellow());
65+
66+
bool isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
67+
Architecture arch = RuntimeInformation.ProcessArchitecture;
68+
69+
if (isLinux && arch == Architecture.Arm64)
70+
{
71+
ColoredConsole
72+
.WriteLine("This version of the Azure Functions Core Tools currently doesn't support linux-arm64 with Python workers, with PowerShell workers, or with .NET applications using the in-process model.".DarkYellow());
73+
}
74+
75+
ColoredConsole.WriteLine();
76+
}
77+
5678
private static RichString AlternateLogoColor(string str, int firstColorCount = -1)
5779
{
5880
if (str.Length == 1)

0 commit comments

Comments
 (0)