public async Task <bool> ExecuteAsync() { if (!DependencyVersionsFile.TryLoad(DependenciesFile, out var localVersionsFile)) { Log.LogError($"Could not load file from {DependenciesFile}"); return(false); } if (!localVersionsFile.HasVersionsPropertyGroup()) { Log.LogKoreBuildWarning(KoreBuildErrors.PackageRefPropertyGroupNotFound, $"No PropertyGroup with Label=\"{DependencyVersionsFile.PackageVersionsLabel}\" could be found in {DependenciesFile}"); } if (localVersionsFile.VersionVariables.Count == 0) { Log.LogMessage(MessageImportance.High, $"No version variables could be found in {DependenciesFile}"); return(true); } var tmpNupkgPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); var logger = new MSBuildLogger(Log); try { var remoteDepsVersionFile = await TryDownloadLineupDepsFile() ?? await TryDownloadLineupPackage(logger, tmpNupkgPath); if (remoteDepsVersionFile == null) { return(false); } var updateCount = UpdateDependencies(localVersionsFile, remoteDepsVersionFile); if (updateCount > 0) { Log.LogMessage($"Finished updating {updateCount} version variables in {DependenciesFile}"); localVersionsFile.Save(DependenciesFile); } else { Log.LogMessage($"Versions in {DependenciesFile} are already up to date"); } return(!Log.HasLoggedErrors); } finally { if (File.Exists(tmpNupkgPath)) { File.Delete(tmpNupkgPath); } } }
public override bool Execute() { if (Projects == null || Projects.Length == 0) { Log.LogMessage(MessageImportance.Low, "No projects or solutions were found. Skipping PackageReference validation."); return(true); } if (!File.Exists(DependenciesFile)) { Log.LogKoreBuildError(KoreBuildErrors.DependenciesFileDoesNotExist, $"Expected the dependencies file to exist at {DependenciesFile}"); return(false); } if (!DependencyVersionsFile.TryLoad(DependenciesFile, out var depsFile)) { Log.LogError($"Could not load the dependencies file from {DependenciesFile}"); return(false); } if (!depsFile.HasVersionsPropertyGroup()) { Log.LogKoreBuildWarning(KoreBuildErrors.PackageRefPropertyGroupNotFound, $"No PropertyGroup with Label=\"{DependencyVersionsFile.PackageVersionsLabel}\" could be found in {DependenciesFile}"); } foreach (var proj in Projects) { var ext = Path.GetExtension(proj.ItemSpec); if (ext == ".sln") { var solutionProps = MSBuildListSplitter.GetNamedProperties(Properties); var projectFiles = Projects.SelectMany(p => SolutionInfoFactory.GetProjects(p, solutionProps)).Distinct(); foreach (var project in projectFiles) { VerifyPackageReferences(project, depsFile.VersionVariables); } } else { VerifyPackageReferences(proj.ItemSpec, depsFile.VersionVariables); } } return(!Log.HasLoggedErrors); }
public override bool Execute() { OutputPath = OutputPath.Replace('\\', '/'); Directory.CreateDirectory(Path.GetDirectoryName(OutputPath)); DependencyVersionsFile depsFile; if (File.Exists(OutputPath)) { if (!DependencyVersionsFile.TryLoad(OutputPath, out depsFile)) { depsFile = DependencyVersionsFile.Create(AddOverrideImport, AdditionalImports); Log.LogWarning($"Could not load the existing deps file from {OutputPath}. This file will be overwritten."); } } else { depsFile = DependencyVersionsFile.Create(AddOverrideImport, AdditionalImports); } var varNames = new HashSet <string>(); foreach (var pkg in Packages) { var packageVersion = pkg.GetMetadata("Version"); if (string.IsNullOrEmpty(packageVersion)) { Log.LogError("Package {0} is missing the Version metadata", pkg.ItemSpec); continue; } string packageVarName; if (!string.IsNullOrEmpty(pkg.GetMetadata("VariableName"))) { packageVarName = pkg.GetMetadata("VariableName"); if (!packageVarName.EndsWith("Version", StringComparison.Ordinal)) { Log.LogError("VariableName for {0} must end in 'Version'", pkg.ItemSpec); continue; } } else { packageVarName = DependencyVersionsFile.GetVariableName(pkg.ItemSpec); } if (varNames.Contains(packageVarName)) { Log.LogError("Multiple packages would produce {0} in the generated dependencies.props file. Set VariableName to differentiate the packages manually", packageVarName); continue; } var item = depsFile.Update(packageVarName, packageVersion); if (!SuppressVariableLabels) { item.SetLabel(pkg.ItemSpec); } } depsFile.Save(OutputPath); Log.LogMessage(MessageImportance.Normal, $"Generated {OutputPath}"); return(!Log.HasLoggedErrors); }