Table of Contents

Fetch an artifact from a remote repository

// This example demonstrates how to fetch an artifact by tag/digest from a remote repository.

// Create a HttpClient instance to be used for making HTTP requests.
var httpClient = new HttpClient();

// Create a repository instance with the target registry.
var mockCredentialProvider = new Mock<ICredentialProvider>();
var repo = new Repository(new RepositoryOptions()
{
    Reference = Reference.Parse("localhost:5000/test"),
    Client = new Client(httpClient, mockCredentialProvider.Object),
});

var reference = "foobar"; // The tag or digest of the artifact to fetch, such as "latest" or "sha256:abc123...".
var (manifestDescriptor, manifestContent) = await repo.FetchAsync(reference);

// Verify received content against received descriptor
var manifestData = await manifestContent.ReadAllAsync(manifestDescriptor);

// Fetch blob content
if (manifestDescriptor.MediaType == MediaType.ImageManifest)
{
    var imageManifest = JsonSerializer.Deserialize<Manifest>(manifestData) ??
                                    throw new JsonException("Failed to deserialize manifest");

    foreach (var layer in imageManifest.Layers)
    {
        var layerBlob = await repo.FetchAllAsync(layer);
    }
}