public async Task FindLatestReleaseAsync()

in sources/Google.Solutions.IapDesktop.Application/Client/GithubClient.cs [113:203]


        public async Task<IRelease?> FindLatestReleaseAsync(
            ReleaseFeedOptions options,
            CancellationToken cancellationToken)
        {
            using (ApplicationTraceSource.Log.TraceMethod().WithoutParameters())
            {
                Release? latestRelease;
                if (!options.HasFlag(ReleaseFeedOptions.IncludeCanaryReleases))
                {
                    //
                    // Use the whacky /latest API to avoid having
                    // to page over dozens of releases.
                    //
                    // The /latest API ignores prereleases
                    //
                    latestRelease = await this.restAdapter
                        .GetAsync<Release>(
                            new Uri($"https://api.github.com/repos/{this.Repository}/releases/latest"),
                            cancellationToken)
                        .ConfigureAwait(false);
                }
                else
                {
                    //
                    // Use the latest release (by version), regardless of
                    // whether it's a prerelease or not.
                    //
                    var releases = await
                        ListReleasesAsync(
                            options,
                            cancellationToken)
                        .ConfigureAwait(false);
                    latestRelease = (Release)releases.FirstOrDefault();
                }

                if (latestRelease == null)
                {
                    return null;
                }
                else
                {
                    ApplicationTraceSource.Log.TraceVerbose(
                        "Found new release: {0}", latestRelease.TagVersion);

                    var surveyAssetUrl = latestRelease
                        .Assets
                        .EnsureNotNull()
                        .FirstOrDefault(u => u.DownloadUrl.EndsWith(
                            "survey.dat",
                            StringComparison.OrdinalIgnoreCase))?
                        .DownloadUrl;
                    if (surveyAssetUrl != null)
                    {
                        ApplicationTraceSource.Log.TraceVerbose(
                            "Found survey: {0}", surveyAssetUrl);

                        //
                        // Try to load survey details.
                        //
                        try
                        {
                            var survey = await this.restAdapter
                               .GetAsync<ReleaseSurvey>(
                                   new Uri(surveyAssetUrl),
                                   cancellationToken)
                               .ConfigureAwait(false);
                            if (survey != null &&
                                !string.IsNullOrEmpty(survey.Title) &&
                                !string.IsNullOrEmpty(survey.Description) &&
                                !string.IsNullOrEmpty(survey.Url))
                            {
                                latestRelease.Survey = survey;
                            }
                        }
                        catch (Exception e)
                        {
                            // Ignore in Release builds.
                            if (!Install.IsExecutingTests)
                            {
                                Debug.Fail(e.FullMessage());
                            }
                        }
                    }

                    //
                    // New release available.
                    //
                    return latestRelease;
                }
            }
        }