Skip to content

Commit

Permalink
Use dotnet --version to resolve local SDK
Browse files Browse the repository at this point in the history
  • Loading branch information
mclark1129 committed Apr 11, 2022
1 parent 04235f0 commit dfcce1e
Show file tree
Hide file tree
Showing 5 changed files with 1,226 additions and 39 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"sdk" : {
"version": "6.0.100"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#r "paket:
storage: none
source https://api.nuget.org/v3/index.json
source ../../../release/dotnetcore
nuget Fake.Runtime prerelease
nuget FSharp.Core prerelease"

open Fake.Runtime

printfn "Starting Build."
Trace.traceFAKE "Some Info from FAKE"
printfn "Ending Build."
61 changes: 26 additions & 35 deletions src/app/Fake.Runtime/SdkAssemblyResolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ type SdkAssemblyResolver(logLevel:Trace.VerboseLevel) =
let CustomDotNetHostPath = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_PATH" ""
let RuntimeResolverResolveMethod = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_RUNTIME_VERSION_RESOLVE_METHOD" ""


member this.LogLevel = logLevel

member this.SdkVersionRaw = "6.0"
Expand Down Expand Up @@ -86,44 +85,36 @@ type SdkAssemblyResolver(logLevel:Trace.VerboseLevel) =
Trace.traceError $"Could not get SDK runtime version from cache due to: {ex.Message}"
None

member this.ResolveSdkRuntimeVersion() =

let resolvedSdkVersion =
this.SdkVersionFromGlobalJson
|> Option.get
|> ReleaseVersion

let resolutionMethod =
match not(String.isNullOrEmpty RuntimeResolverResolveMethod) with
| true ->
member this.GetProductReleaseForSdk (version: ReleaseVersion) =
let net60releases =
if RuntimeResolverResolveMethod = "cache" then
// for testing only!
match RuntimeResolverResolveMethod = "cache" with
| true -> this.TryResolveSdkRuntimeVersionFromCache()
| false -> this.TryResolveSdkRuntimeVersionFromNetwork()
| false ->
this.TryResolveSdkRuntimeVersionFromCache ()
else
// this is the default case, we will try the network, if we could not, then we will reach for cached file.
this.TryResolveSdkRuntimeVersionFromNetwork()
|> Option.orElseWith(fun _ ->
this.TryResolveSdkRuntimeVersionFromCache()
)
this.TryResolveSdkRuntimeVersionFromNetwork ()
|> Option.orElseWith(this.TryResolveSdkRuntimeVersionFromCache)

let sdkRelease (release: ProductRelease) =
release.Sdks
|> List.ofSeq
|> List.exists (fun sdk -> sdk.Version.Equals(version))

net60releases |> Option.bind (List.tryFind sdkRelease)

member this.ResolveSdkRuntimeVersion() =
let sdkVersion = DotNet.getVersion id |> ReleaseVersion

match this.GetProductReleaseForSdk sdkVersion with
| Some release ->
let version = release.Runtime.Version.ToString()
if this.LogLevel.PrintVerbose then
Trace.trace $"Resolved runtime version: {version}"

let resolved =
resolutionMethod
|> Option.orElseWith(fun _ ->
failwithf $"Could not find a suitable runtime version matching SDK version: {resolvedSdkVersion.ToString()}"
)
|> Option.get
|> List.tryFind
(fun release ->
release.Sdks
|> List.ofSeq
|> List.exists (fun sdk -> sdk.Version.Equals(resolvedSdkVersion)))
|> Option.get
version

if this.LogLevel.PrintVerbose then
Trace.tracefn $"resolved runtime version: {resolved.Runtime.Version.ToString()}"
resolved.Runtime.Version.ToString()
| None ->
failwithf $"Could not find a suitable .NET 6 runtime version matching SDK version: {sdkVersion.ToString()}"

member this.SdkReferenceAssemblies() =
let isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
Expand All @@ -136,7 +127,7 @@ type SdkAssemblyResolver(logLevel:Trace.VerboseLevel) =
"dotnet"
else
"dotnet.exe"

let potentialDotnetHostEnvVars =
[ "DOTNET_HOST_PATH", id // is a full path to dotnet binary
"DOTNET_ROOT", (fun s -> Path.Combine(s, dotnetBinaryName)) // needs dotnet binary appended
Expand Down
Loading

0 comments on commit dfcce1e

Please sign in to comment.