public void OnBeforeLogo(
            NukeBuild build,
            IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            var completionItems = new SortedDictionary <string, string[]>();

            var targetNames = build.ExecutableTargets.Select(x => x.Name).OrderBy(x => x).ToList();

            completionItems[Constants.InvokedTargetsParameterName] = targetNames.ToArray();
            completionItems[Constants.SkippedTargetsParameterName] = targetNames.ToArray();

            var parameters = InjectionUtility.GetParameterMembers(build.GetType(), includeUnlisted: false);

            foreach (var parameter in parameters)
            {
                var parameterName = ParameterService.GetParameterMemberName(parameter);
                if (completionItems.ContainsKey(parameterName))
                {
                    continue;
                }

                var subItems = ParameterService.GetParameterValueSet(parameter, build)?.Select(x => x.Text);
                completionItems[parameterName] = subItems?.ToArray();
            }

            SerializationTasks.YamlSerializeToFile(completionItems, Constants.GetCompletionFile(NukeBuild.RootDirectory));

            if (EnvironmentInfo.GetParameter <bool>(Constants.CompletionParameterName))
            {
                Environment.Exit(exitCode: 0);
            }
        }
Exemple #2
0
        private static IEnumerable <InstalledPackage> GetLocalInstalledPackagesFromAssetsFile(
            string packagesConfigFile,
            bool resolveDependencies = true)
        {
            var assetsObject = SerializationTasks.JsonDeserializeFromFile <JObject>(packagesConfigFile);

            // ReSharper disable HeapView.BoxingAllocation
            var directReferences =
                assetsObject["project"]["frameworks"]
                .Single().Single()["dependencies"]
                ?.Children <JProperty>()
                .Select(x => x.Name).ToList()
                ?? new List <string>();

            var allReferences =
                assetsObject["libraries"]
                .Children <JProperty>()
                .Where(x => x.Value["type"].ToString() == "package")
                .Select(x => x.Name.Split('/'))
                .Select(x => (PackageId: x.First(), Version: x.Last())).ToList();

            // ReSharper restore HeapView.BoxingAllocation

            foreach (var(name, version) in allReferences)
            {
                if (!resolveDependencies && !directReferences.Contains(name))
                {
                    continue;
                }

                yield return(GetGlobalInstalledPackage(name, version, packagesConfigFile));
            }
        }
Exemple #3
0
        public static int Complete(string[] args, [CanBeNull] string rootDirectory, [CanBeNull] string buildScript)
        {
            if (rootDirectory == null)
            {
                return(0);
            }

            var words = args.Single();

            if (!words.StartsWithOrdinalIgnoreCase(CommandName))
            {
                return(0);
            }

            words = words.Substring(CommandName.Length).TrimStart();

            var completionFile = GetCompletionFile((AbsolutePath)rootDirectory);

            if (!File.Exists(completionFile))
            {
                Build(buildScript.NotNull(), $"--{CompletionParameterName}");
                return(1);
            }

            var position        = EnvironmentInfo.GetParameter <int?>("position");
            var completionItems = SerializationTasks.YamlDeserializeFromFile <Dictionary <string, string[]> >(completionFile);

            foreach (var item in CompletionUtility.GetRelevantCompletionItems(words, completionItems))
            {
                Console.WriteLine(item);
            }

            return(0);
        }
Exemple #4
0
        private static void WriteCompletionFile(NukeBuild build)
        {
            var completionItems = new SortedDictionary <string, string[]>();

            var targets = build.ExecutableTargets.OrderBy(x => x.Name).ToList();

            completionItems[InvokedTargetsParameterName] = targets.Where(x => x.Listed).Select(x => x.Name).ToArray();
            completionItems[SkippedTargetsParameterName] = targets.Select(x => x.Name).ToArray();

            var parameters = ValueInjectionUtility.GetParameterMembers(build.GetType(), includeUnlisted: false);

            foreach (var parameter in parameters)
            {
                var parameterName = ParameterService.GetParameterMemberName(parameter);
                if (completionItems.ContainsKey(parameterName))
                {
                    continue;
                }

                var subItems = ParameterService.GetParameterValueSet(parameter, build)?.Select(x => x.Text);
                completionItems[parameterName] = subItems?.ToArray();
            }

            SerializationTasks.YamlSerializeToFile(completionItems, GetCompletionFile(NukeBuild.RootDirectory));
        }
Exemple #5
0
        public static PackageManifest FromFile(string path = "./vc-package.json")
        {
            var result = SerializationTasks.JsonDeserializeFromFile <PackageManifest>(path);

            PlatformVersion.CurrentVersion = new SemanticVersion(Version.Parse(result.PlatformVersion));
            return(result);
        }
Exemple #6
0
        public static int Complete(string[] args, [CanBeNull] string rootDirectory, [CanBeNull] string buildScript)
        {
            var words = args.Single();

            if (!words.StartsWithOrdinalIgnoreCase("nuke"))
            {
                return(0);
            }

            if (rootDirectory == null)
            {
                // TODO: parse --root parameter
                return(0);
            }

            var completionFile = Constants.GetCompletionFile((PathConstruction.AbsolutePath)rootDirectory);

            if (!File.Exists(completionFile))
            {
                Build(buildScript.NotNull(), $"--{Constants.CompletionParameterName}");
                return(1);
            }

            words = words.Substring("nuke ".Length);
            var position        = ParameterService.Instance.GetParameter <int?>("position");
            var completionItems = SerializationTasks.YamlDeserializeFromFile <Dictionary <string, string[]> >(completionFile);

            foreach (var item in GetRelevantCompletionItems(words, position, completionItems))
            {
                Console.WriteLine(item);
            }

            return(0);
        }
Exemple #7
0
        private static Dictionary <string, string> LoadSecrets(IReadOnlyCollection <string> secretParameters, byte[] password, string parametersFile)
        {
            var jobject = SerializationTasks.JsonDeserializeFromFile <JObject>(parametersFile);

            return(jobject.Properties()
                   .Where(x => secretParameters.Contains(x.Name))
                   .ToDictionary(x => x.Name, x => Decrypt(x.Value.Value <string>(), password, x.Name)));
        }
        private static string GetDotNetRuntimeVersion()
        {
            var globalJsonFile = NukeBuild.RootDirectory / "global.json";
            var jobject        = File.Exists(globalJsonFile)
                ? SerializationTasks.JsonDeserializeFromFile <JObject>(globalJsonFile)
                : new JObject();

            return(jobject["sdk"]?["version"]?.Value <string>().Substring(startIndex: 0, length: 5));
        }
Exemple #9
0
    public void ChangeProjectVersion(string prefix = null, string suffix = null)
    {
        //theme
        if (IsTheme)
        {
            //var json = JsonDocument.Parse(File.ReadAllText(PackageJsonPath));
            //json.RootElement.GetProperty("version")
            var json = SerializationTasks.JsonDeserializeFromFile <JObject>(PackageJsonPath);
            json["version"] = prefix;
            SerializationTasks.JsonSerializeToFile(json, Path.GetFullPath(PackageJsonPath));
        }
        else
        {
            //module.manifest
            if (IsModule)
            {
                var manifest = ModuleManifest.Clone();
                if (!String.IsNullOrEmpty(prefix))
                {
                    manifest.Version = prefix;
                }
                if (!String.IsNullOrEmpty(suffix))
                {
                    manifest.VersionTag = suffix;
                }
                using (var writer = new Utf8StringWriter())
                {
                    XmlSerializer xml = new XmlSerializer(typeof(ModuleManifest));
                    xml.Serialize(writer, manifest);
                    File.WriteAllText(ModuleManifestFile, writer.ToString(), Encoding.UTF8);
                }
            }

            //Directory.Build.props
            var xmlDoc = new XmlDocument()
            {
                PreserveWhitespace = true
            };
            xmlDoc.LoadXml(File.ReadAllText(DirectoryBuildPropsPath));
            if (!String.IsNullOrEmpty(prefix))
            {
                var prefixNodex = xmlDoc.GetElementsByTagName("VersionPrefix");
                prefixNodex[0].InnerText = prefix;
            }
            if (String.IsNullOrEmpty(VersionSuffix) && !String.IsNullOrEmpty(suffix))
            {
                var suffixNodes = xmlDoc.GetElementsByTagName("VersionSuffix");
                suffixNodes[0].InnerText = suffix;
            }
            using (var writer = new Utf8StringWriter())
            {
                xmlDoc.Save(writer);
                File.WriteAllText(DirectoryBuildPropsPath, writer.ToString());
            }
        }
    }
Exemple #10
0
        private static void SaveSecrets(Dictionary <string, string> secrets, byte[] password, string parametersFile)
        {
            var jobject = SerializationTasks.JsonDeserializeFromFile <JObject>(parametersFile);

            foreach (var(name, secret) in secrets)
            {
                jobject[name] = Encrypt(secret, password);
            }

            SerializationTasks.JsonSerializeToFile(jobject, parametersFile);
        }
Exemple #11
0
        private static List <VSWhereResult> GetResult(IProcess process, VSWhereSettings toolSettings)
        {
            if (!(toolSettings.UTF8 ?? false) || toolSettings.Format != VSWhereFormat.json || toolSettings.Property != null)
            {
                return(null);
            }

            var output = process.Output.EnsureOnlyStd().Select(x => x.Text).JoinNewLine();

            return(SerializationTasks.JsonDeserialize <VSWhereResult[]>(output).ToList());
        }
Exemple #12
0
        private static IEnumerable <string> GetSecretParameters(AbsolutePath rootDirectory)
        {
            var buildSchemaFile = GetBuildSchemaFile(rootDirectory);
            var jobject         = SerializationTasks.JsonDeserializeFromFile <JObject>(buildSchemaFile);

            return(jobject
                   .GetPropertyValue("definitions")
                   .GetPropertyValue("build")
                   .GetPropertyValue("properties")
                   .Children <JProperty>()
                   .Where(x => x.Value.Value <JObject>().GetPropertyValueOrNull <string>("default") != null)
                   .Select(x => x.Name));
        }
Exemple #13
0
 private static OctoVersionInfo GetResult(IProcess process, OctoVersionGetVersionSettings toolSettings)
 {
     Assert.FileExists(toolSettings.OutputJsonFile);
     try
     {
         return(SerializationTasks.JsonDeserializeFromFile <OctoVersionInfo>(toolSettings.OutputJsonFile, settings =>
         {
             settings.ContractResolver = new AllWritableContractResolver();
             return settings;
         }));
     }
     catch (Exception exception)
     {
         throw new Exception($"Cannot parse {nameof(OctoVersion)} output from {toolSettings.OutputJsonFile.SingleQuote()}.", exception);
     }
 }
Exemple #14
0
        private static GitVersion GetResult(IProcess process, GitVersionSettings toolSettings)
        {
            var output = process.Output.EnsureOnlyStd().Select(x => x.Text).JoinNewLine();

            try
            {
                return(SerializationTasks.JsonDeserialize <GitVersion>(output, settings =>
                {
                    settings.ContractResolver = new AllWritableContractResolver();
                    return settings;
                }));
            }
            catch (Exception exception)
            {
                throw new Exception($"Cannot parse {nameof(GitVersion)} output:".Concat(new[] { output }).JoinNewLine(), exception);
            }
        }
Exemple #15
0
        private static void UpdateGlobalJsonFile(AbsolutePath rootDirectory)
        {
            var latestInstalledSdk = DotNetTasks.DotNet("--list-sdks", logInvocation: false, logOutput: false)
                                     .LastOrDefault().Text?.Split(" ").First();

            if (latestInstalledSdk == null)
            {
                return;
            }

            var globalJsonFile = rootDirectory / "global.json";
            var jobject        = File.Exists(globalJsonFile)
                ? SerializationTasks.JsonDeserializeFromFile <JObject>(globalJsonFile)
                : new JObject();

            jobject["sdk"] ??= new JObject();
            jobject["sdk"].NotNull()["version"] = latestInstalledSdk;
            SerializationTasks.JsonSerializeToFile(jobject, globalJsonFile);
        }
Exemple #16
0
        private static async Task <JObject> PostMessage(string url, object message, string accessToken)
        {
            var httpHandler = new GitterTasks.AuthenticatedHttpClientHandler(accessToken);

            using var client = new HttpClient(httpHandler);

            var payload  = JsonConvert.SerializeObject(message);
            var response = await client.PostAsync(url, new StringContent(payload, Encoding.UTF8, "application/json"));

            var responseContent = await response.Content.ReadAsStringAsync();

            ControlFlow.Assert(response.StatusCode == HttpStatusCode.OK, responseContent);

            var jobject = SerializationTasks.JsonDeserialize <JObject>(responseContent);
            var error   = jobject.GetPropertyValueOrNull <string>("error");

            ControlFlow.Assert(error == null, error);
            return(jobject);
        }
Exemple #17
0
        private static void HandleCompletion(NukeBuild build)
        {
            var completionItems = new SortedDictionary <string, string[]>();

            var targetNames = build.TargetDefinitions.Select(x => x.Name).OrderBy(x => x).ToList();

            completionItems[NukeBuild.InvokedTargetsParameterName] = targetNames.ToArray();
            completionItems[NukeBuild.SkippedTargetsParameterName] = targetNames.ToArray();

            string[] GetSubItems(Type type)
            {
                if (type.IsEnum)
                {
                    return(type.GetEnumNames());
                }
                if (type.IsSubclassOf(typeof(Enumeration)))
                {
                    return(type.GetFields(ReflectionService.Static).Select(x => x.Name).ToArray());
                }
                return(null);
            }

            foreach (var parameter in build.GetParameterMembers())
            {
                var parameterName = ParameterService.Instance.GetParameterName(parameter);
                if (completionItems.ContainsKey(parameterName))
                {
                    continue;
                }

                completionItems[parameterName] = GetSubItems(parameter.GetFieldOrPropertyType())?.OrderBy(x => x).ToArray();
            }

            SerializationTasks.YamlSerializeToFile(completionItems, NukeBuild.CompletionFile);

            if (EnvironmentInfo.ParameterSwitch(NukeBuild.CompletionParameterName))
            {
                Environment.Exit(exitCode: 0);
            }
        }
Exemple #18
0
 public static T StdToJson <T>(this IEnumerable <Output> output)
 {
     return(SerializationTasks.JsonDeserialize <T>(output.StdToText()));
 }
Exemple #19
0
        public static PackageManifest FromFile(string path = "./vc-package.json")
        {
            var result = SerializationTasks.JsonDeserializeFromFile <PackageManifest>(path);

            return(result);
        }
Exemple #20
0
 public static void ToFile(PackageManifest manifest, string path = "./vc-package.json")
 {
     SerializationTasks.JsonSerializeToFile(manifest, path);
 }