private void ProcessRepo(ConcurrentBag <PackageInfo> processedPackages, RepositoryInfo repo) { var repoDirectory = Path.Combine(_dropFolder, repo.Name, _buildBranch); if (string.IsNullOrEmpty(repo.BuildNumber)) { repo.BuildNumber = FindLatest(repoDirectory); } repoDirectory = Path.Combine(repoDirectory, repo.BuildNumber); var buildDirectory = Path.Combine(repoDirectory, repo.BuildDirectory); var lineupPackageDirectory = Path.Combine(repoDirectory, repo.LineupPackageDirectory); var packageTargetDir = Path.Combine(_outputPath, repo.PackagesDestinationDirectory); var symbolsTargetDir = Path.Combine(_outputPath, "symbols"); var buildTargetDirectory = Path.Combine(_outputPath, "build"); var lineupTargetDirectory = Path.Combine(_outputPath, "lineups"); Directory.CreateDirectory(symbolsTargetDir); Directory.CreateDirectory(packageTargetDir); Directory.CreateDirectory(buildTargetDirectory); Directory.CreateDirectory(lineupTargetDirectory); Parallel.ForEach(Directory.GetFiles(buildDirectory, "*"), file => { var fileName = Path.GetFileName(file); if (file.EndsWith(".symbols.nupkg", StringComparison.OrdinalIgnoreCase)) { var targetPath = Path.Combine(symbolsTargetDir, fileName); File.Copy(file, targetPath, overwrite: true); return; } var buildTargetPath = Path.Combine(buildTargetDirectory, fileName); File.Copy(file, buildTargetPath, overwrite: true); if (file.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase)) { var targetPath = Path.Combine(packageTargetDir, fileName); File.Copy(file, targetPath, overwrite: true); var packageInfo = new PackageInfo { IsPartnerPackage = repo.Name == "CoreCLR", PackagePath = targetPath, }; using (var fileStream = File.OpenRead(packageInfo.PackagePath)) using (var reader = new PackageArchiveReader(fileStream)) { packageInfo.Identity = reader.GetIdentity(); packageInfo.PackageDependencyGroups = reader.GetPackageDependencies(); } processedPackages.Add(packageInfo); } }); if (Directory.Exists(lineupPackageDirectory)) { Parallel.ForEach(Directory.GetFiles(lineupPackageDirectory, "*.nupkg"), file => { var fileName = Path.GetFileName(file); var targetPath = Path.Combine(lineupTargetDirectory, fileName); File.Copy(file, targetPath, overwrite: true); var packageInfo = new PackageInfo { IsLineupPackage = true, PackagePath = targetPath, }; using (var fileStream = File.OpenRead(packageInfo.PackagePath)) using (var reader = new PackageArchiveReader(fileStream)) { packageInfo.Identity = reader.GetIdentity(); packageInfo.PackageDependencyGroups = reader.GetPackageDependencies(); } processedPackages.Add(packageInfo); }); } }