public override async Task ExecuteAsync()
        {
            _repoNameFilterRegex = new Regex(ManifestFilter.GetFilterRegexPattern(Options.RepoName));

            _loggerService.WriteHeading("FINDING IMAGES TO CLEAN");

            _loggerService.WriteSubheading($"Connecting to ACR '{Options.RegistryName}'");
            using IAcrClient acrClient = await _acrClientFactory.CreateAsync(
                      Options.RegistryName,
                      Options.ServicePrincipal.Tenant,
                      Options.ServicePrincipal.ClientId,
                      Options.ServicePrincipal.Secret);

            _loggerService.WriteSubheading($"Querying catalog of ACR '{Options.RegistryName}'");
            Catalog catalog = await acrClient.GetCatalogAsync();

            _loggerService.WriteHeading("DELETING IMAGES");

            List <string> deletedRepos  = new List <string>();
            List <string> deletedImages = new List <string>();

            IEnumerable <Task> cleanupTasks = catalog.RepositoryNames
                                              .Where(repoName => _repoNameFilterRegex.IsMatch(repoName))
                                              .Select(repoName => acrClient.GetRepositoryAsync(repoName))
                                              .Select(getRepoTask => ProcessRepoAsync(acrClient, getRepoTask, deletedRepos, deletedImages))
                                              .ToArray();

            await Task.WhenAll(cleanupTasks);

            await LogSummaryAsync(acrClient, deletedRepos, deletedImages);
        }