public Artifact Artifact(Product product) { var cacheKey = product.ToString(); if (_resolved.TryGetValue(cacheKey, out var artifact)) { return(artifact); } switch (ArtifactBuildState) { case ArtifactBuildState.Released: ReleasedVersionResolver.TryResolve(product, this, OsMonikers.CurrentPlatform(), out artifact); break; case ArtifactBuildState.Snapshot: SnapshotApiResolver.TryResolve(product, this, OsMonikers.CurrentPlatform(), null, out artifact); break; case ArtifactBuildState.BuildCandidate: StagingVersionResolver.TryResolve(product, this, BuildHash, out artifact); break; default: throw new ArgumentOutOfRangeException(nameof(ArtifactBuildState), $"{ArtifactBuildState} not expected here"); } _resolved.TryAdd(cacheKey, artifact); return(artifact); }
/// <summary> /// Resolves an Elasticsearch version using either (version | version-snapshot | 'latest' | 'latest-MAJORVERSION') /// </summary> public static ElasticVersion From(string managedVersionString) { ArtifactBuildState GetReleaseState(string s) => s.EndsWith("-SNAPSHOT") ? ArtifactBuildState.Snapshot : ApiResolver.IsReleasedVersion(s) ? ArtifactBuildState.Released : ArtifactBuildState.BuildCandidate; if (string.IsNullOrWhiteSpace(managedVersionString)) { return(null); } var version = managedVersionString; var state = GetReleaseState(version); var buildHash = string.Empty; switch (managedVersionString) { case string _ when managedVersionString.StartsWith("latest-", StringComparison.OrdinalIgnoreCase): var major = int.Parse(managedVersionString.Replace("latest-", "")); version = SnapshotApiResolver.LatestReleaseOrSnapshotForMajor(major).ToString(); state = GetReleaseState(version); if (state == ArtifactBuildState.BuildCandidate) { buildHash = ApiResolver.LatestBuildHash(version); } break; case string _ when managedVersionString.EndsWith("-snapshot", StringComparison.OrdinalIgnoreCase): state = ArtifactBuildState.Snapshot; break; case string _ when TryParseBuildCandidate(managedVersionString, out var v, out buildHash): state = ArtifactBuildState.BuildCandidate; version = v; break; case "latest": version = SnapshotApiResolver.LatestReleaseOrSnapshot.ToString(); state = GetReleaseState(version); break; } return(new ElasticVersion(version, state, buildHash)); }