protected async Task <T> SafeCall <T>(IActivityMonitor m, Func <SourceRepository, MetadataResource, NuGetLoggerAdapter, Task <T> > f) { bool retry = false; var logger = new NuGetLoggerAdapter(m); if (_sourceRepository == null) { _sourceRepository = new SourceRepository(PackageSource, NuGetClient.StaticProviders); } again: MetadataResource meta = null; try { meta = await _sourceRepository.GetResourceAsync <MetadataResource>(); return(await f(_sourceRepository, meta, logger)); } catch (MissingRequiredSecretException) { throw; //It's useless to retry in this case } catch (Exception ex) { if (meta != null && !retry) { retry = true; if (CanRetry(meta, logger, ex)) { goto again; } } throw; } }
/// <summary> /// Implements Package promotion in @CI, @Exploratory, @Preview, @Latest and @Stable views. /// </summary> /// <param name="logger">The logger.</param> /// <param name="skipped">The set of packages skipped because they already exist in the feed.</param> /// <param name="pushed">The set of packages pushed.</param> /// <returns>The awaitable.</returns> protected override Task OnAllPackagesPushed(NuGetLoggerAdapter logger, IReadOnlyList <LocalNuGetPackageFile> skipped, IReadOnlyList <LocalNuGetPackageFile> pushed) { string personalAccessToken = ResolveSecret(logger.Monitor); var packages = skipped.Concat(pushed).Select(i => i.Instance); return(AzureDevOpsAPIHelper.PromotePackagesAync(logger.Monitor, Client.HttpClient, ProjectName, Organization, FeedName, personalAccessToken, packages, false)); }
internal static bool Initalize(NuGetLoggerAdapter logger, out bool mustRefresh) { mustRefresh = false; lock ( _secretKeysLock ) { if (!_initialized) { using (logger.Monitor.OpenInfo("Installing the Azure Artifact Credential provider (https://github.com/Microsoft/artifacts-credprovider).")) { var a = System.Reflection.Assembly.GetExecutingAssembly(); using (var r = new StreamReader(a.GetManifestResourceStream("CK.Env.Artifact.NuGet.Res.InstallCredentialProvider.ps1.txt"))) { var tempPath = Path.GetTempPath(); var installer = Guid.NewGuid().ToString() + ".ps1"; var installerPath = Path.Combine(tempPath, installer); File.WriteAllText(installerPath, r.ReadToEnd()); ProcessRunner.RunPowerShell( logger.Monitor, tempPath, installer, new[] { "-AddNetfx" }, Core.LogLevel.Error, new[] { ("PSExecutionPolicyPreference", "Bypass") });
async Task <ArtifactAvailableInstances> GetAvailable(MetadataResource meta, NuGetLoggerAdapter logger, string name) { var v = new ArtifactAvailableInstances(this, name); var latest = await meta.GetVersions(name, true, false, _feed.Client.SourceCache, logger, CancellationToken.None); foreach (var nugetVersion in latest) { var vText = nugetVersion.ToNormalizedString(); var sV = SVersion.TryParse(vText); if (!sV.IsValid) { logger.Monitor.Warn($"Unable to parse version '{vText}' for '{name}': {sV.ErrorMessage}"); } else { v = v.WithVersion(sV); } } return(v); }
private protected abstract bool CanRetry(MetadataResource meta, NuGetLoggerAdapter logger, Exception ex);