#pragma warning restore CS0612 // Type or member is obsolete public async Task <int> ExecuteAsync(CancellationToken cancellationToken) { var sw = System.Diagnostics.Stopwatch.StartNew(); _logger.SetDebugEnable(Verbose.HasValue()); try { var(baseRegistry, destRegistry) = CreateRegistries(); var(manifest, image) = await LoadBaseImage(baseRegistry); UpdateImageConfig(image); UpdateConfigInManifest(manifest, image); var layersAdded = new List <BuilderLayer>(); if (Add.HasValue()) { var layer = CreateLayer(Add.Values, AddFolder.Values, $"layer{layersAdded.Count():00}"); layersAdded.Add(layer); AddLayerToConfigAndManifest(layer, manifest, image); } var pusher = new Pusher(GetFromImage(), GetToImage(), destRegistry, layersAdded, CreateLogger("PUSHR")) { FakePullAndRetryMount = true, }; bool configExists = await pusher.CheckConfigExists(manifest); var missingLayers = await pusher.FindMissingLayers(manifest, !DryRun.HasValue() && destRegistry == baseRegistry); if (!DryRun.HasValue()) { if (!configExists) { await pusher.PushConfig(manifest.config, () => GetJsonStream(image)); } await pusher.CopyLayers(baseRegistry, ImageHelper.GetImageName(GetFromImage()), missingLayers); await pusher.PushLayers(f => File.OpenRead(Path.Combine(_tempFolderPath, f))); await pusher.PushManifest(() => GetJsonStream(manifest)); } string manifestDigest; using (var manifestStream = GetJsonStream(manifest)) { manifestDigest = FileHelper.Digest(manifestStream); } _logger.LogDebug($"Image digest: {manifestDigest}"); if (DigestFile.HasValue()) { string digestFilepath; if (!string.IsNullOrEmpty(DigestFile.Value())) { digestFilepath = DigestFile.Value(); } else { EnsureTempFolder(); digestFilepath = Path.Combine(_tempFolderPath, ManifestDigestFileName); } File.WriteAllText(digestFilepath, manifestDigest); } _logger.LogDebug($"completed in {sw.ElapsedMilliseconds} ms"); Console.WriteLine(manifestDigest); return(0); } catch (Exception ex) { Console.Error.WriteLine($"Error: {ex.Message}"); _logger.LogDebug(ex, "exception"); _logger.LogDebug($"completed in {sw.ElapsedMilliseconds} ms"); return(1); } }