示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }