public Task <ManifestQueryResult> GetManifestAsync(string image, IRegistryCredentialsHost credsHost, bool isDryRun) { if (isDryRun) { return(Task.FromResult(new ManifestQueryResult("", new JsonObject()))); } ImageName imageName = ImageName.Parse(image, autoResolveImpliedNames: true); BasicAuthenticationCredentials?basicAuthCreds = null; // Lookup the credentials, if any, for the registry where the image is located if (credsHost.Credentials.TryGetValue(imageName.Registry !, out RegistryCredentials? registryCreds)) { basicAuthCreds = new BasicAuthenticationCredentials { UserName = registryCreds.Username, Password = registryCreds.Password }; } // Docker Hub's registry has a separate host name for its API string apiRegistry = imageName.Registry == DockerHelper.DockerHubRegistry ? DockerHelper.DockerHubApiRegistry : imageName.Registry !; RegistryServiceClient registryClient = new(apiRegistry, _httpClient, basicAuthCreds); return(registryClient.GetManifestAsync(imageName.Repo, (imageName.Tag ?? imageName.Digest) !)); }
private Task ExecuteAsync(string image, IConsole console) { ImageName imageName = ImageName.Parse(image); return(CommandHelper.ExecuteCommandAsync(console, imageName.Registry, async() => { using DockerRegistryClient.DockerRegistryClient client = await CommandHelper.GetRegistryClientAsync(imageName.Registry); ManifestInfo manifestInfo = await client.Manifests.GetAsync(imageName.Repo, (imageName.Tag ?? imageName.Digest) !); string output = JsonConvert.SerializeObject(manifestInfo.Manifest, Formatting.Indented); console.Out.WriteLine(output); }));
private Task ExecuteAsync(string repo, IConsole console) { ImageName imageName = ImageName.Parse(repo); return(CommandHelper.ExecuteCommandAsync(console, imageName.Registry, async() => { using DockerRegistryClient.DockerRegistryClient client = await CommandHelper.GetRegistryClientAsync(imageName.Registry); List <string> tags = new(); Page <RepositoryTags> tagsPage = await client.Tags.GetAsync(imageName.Repo); tags.AddRange(tagsPage.Value.Tags); while (tagsPage.NextPageLink is not null) { tagsPage = await client.Tags.GetNextAsync(tagsPage.NextPageLink); tags.AddRange(tagsPage.Value.Tags); } tags.Sort(); string output = JsonConvert.SerializeObject(tags, Formatting.Indented); console.Out.WriteLine(output); }));