public async Task <string> GetLatestVersionAsync(string owner, string repository) { Exception lastException = null; string tagName = null; try { _streamer.PushLine <GitHubVersionProvider>(new StreamOptions { Level = LogLevel.Debug, Messages = new StreamMessageBuilder() .Add($"Getting latest release for {owner}/{repository}...").Build() }); tagName = await _client.GetLatestReleaseVersionAsync(owner, repository); } catch (NotFoundException) { try { _streamer.PushLine <GitHubVersionProvider>(new StreamOptions { Level = LogLevel.Debug, Messages = new StreamMessageBuilder() .Add($"{owner}/{repository} release is not found. Getting latest tag...").Build() }); tagName = await _client.GetLatestTagVersionAsync(owner, repository); } catch (Exception e) { lastException = e; } } catch (Exception e) { lastException = e; } string errorMessage = $"{owner}/{repository} version is not found."; if (lastException != null) { _streamer.PushLine <GitHubVersionProvider>(new StreamOptions { Exception = lastException, Level = LogLevel.Error, Messages = new StreamMessageBuilder().Add(lastException.Message, ConsoleColor.Red).Build() }); throw new GitHubVersionNotFoundException(errorMessage, lastException); } if (tagName == null) { throw new GitHubVersionNotFoundException(errorMessage); } _streamer.PushLine <GitHubVersionProvider>(new StreamOptions { Level = LogLevel.Debug, Messages = new StreamMessageBuilder().Add($"{owner}/{repository} latest release is {tagName}").Build() }); return(tagName); }