Esempio n. 1
0
        ITakeValue <T> CreateTargetNode <T>(ITargetDefinition <T> target, Action <Exception> onError)
        {
            // TODO this smells: generally when you switch on a type like that it's that you should be doing a polymorphic call somewhere else.
            // shouldn't it be like that instead:
            // - an ActionDefinition know how to create a WriteOnlyNode (which could be renamed ActionNode btw)
            // - a MemberDefinition know how to create ReadWriteNode (which could be renamed MemberNode)
            // - a FormulaDefinition know how to create ReadOnlyNode (which could be renamed FormulaNode)

            // Jake: If we do that the internals need to be opened up and the public API will start bleeding implementation details.
            // I think it is better to have the switch?
            switch (target.NodeType)
            {
            case NodeType.Formula:
                throw new ArgumentException("Formula nodes cannot be a value target");

            case NodeType.Member:
                var memberDefinition = (MemberDefinition <T>)target;
                var getValueDelegate = memberDefinition.CreateGetValueDelegate();
                var setValueDelegate = memberDefinition.CreateSetValueDelegate();
                if (!memberDefinition.IsWritable)
                {
                    throw new InvalidOperationException("A readonly member cannot be a target");
                }

                var shouldTrackChanges = !memberDefinition.SourceType.IsValueType;
                var visualisationInfo  = new VisualisationInfo(NodeType.Member, IsRoot(memberDefinition));
                return(new ReadWriteNode <T>(getValueDelegate, setValueDelegate, target.FullPath, memberDefinition.PathFromParent, visualisationInfo, nodeRepository, shouldTrackChanges, onError));

            case NodeType.Action:
                return(new WriteOnlyNode <T>(target.CreateSetValueDelegate(), onError, target.FullPath));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        public static ITargetDefinition UseBuildAction <TBuildAction>(this ITargetDefinition targetDefinition, IBuildInfo buildInfo)
            where TBuildAction : IBuildAction <TBuildAction>, new()
        {
            var action = new TBuildAction();

            return(action.Setup(targetDefinition, x => x.SetBuildInfo(buildInfo)));
        }
        public static ITargetDefinition UseBuildAction <TBuildAction>(this ITargetDefinition targetDefinition, Action <TBuildAction> configureAction)
            where TBuildAction : IBuildAction <TBuildAction>, new()
        {
            var action = new TBuildAction();

            return(action.Setup(targetDefinition, configureAction));
        }
Esempio n. 4
0
 public static ITargetDefinition ExecutesToFolder(this ITargetDefinition targetDefinition, Func <AbsolutePath> output, Func <ICollection <AbsolutePath> > resultsList, Action <AbsolutePath> action)
 {
     return(targetDefinition.Executes(() =>
     {
         var artifacts = IBuildSolution.ResultsToFolder(output(), action);
         resultsList().AddRange(artifacts);
     }));
 }
Esempio n. 5
0
 /// <summary>
 /// nuget restore
 /// </summary>
 public static ITargetDefinition Restore(ITargetDefinition _, IXamarinBuild build) => _
 .DependsOn(build.Clean)
 .Executes(() => DotNetRestore(settings =>
                               settings
                               .SetProjectFile(build.Solution)
                               .SetDisableParallel(true)
                               .SetDefaultLoggers(build.LogsDirectory / "restore.log")
                               .SetGitVersionEnvironment(build.GitVersion)));
Esempio n. 6
0
 public static ITargetDefinition Executes <TOutput>(this ITargetDefinition targetDefinition, Func <ICollection <TOutput> > output, Func <IEnumerable <TOutput> > action)
 {
     return(targetDefinition.Executes(() =>
     {
         var results = action();
         var to = output();
         to.AddRange(results);
     }));
 }
Esempio n. 7
0
 /// <summary>
 /// msbuild
 /// </summary>
 public static ITargetDefinition Build(ITargetDefinition _, IXamarinBuild build) => _
 .DependsOn(build.Restore)
 .Executes(() => MSBuild(settings =>
                         settings
                         .SetSolutionFile(build.Solution)
                         .SetConfiguration(build.Configuration)
                         .SetDefaultLoggers(build.LogsDirectory / "build.log")
                         .SetGitVersionEnvironment(build.GitVersion)
                         .SetAssemblyVersion(build.GitVersion.AssemblySemVer)
                         .SetPackageVersion(build.GitVersion.NuGetVersionV2)));
        public static ITargetDefinition UseBuildAction <TBuildAction>(this ITargetDefinition targetDefinition, IBuildInfo buildInfo, Action <TBuildAction> configureAction)
            where TBuildAction : IBuildAction <TBuildAction>, new()
        {
            var action = new TBuildAction();

            return(action.Setup(targetDefinition,
                                x =>
            {
                x.SetBuildInfo(buildInfo);

                configureAction(x);
            }));
        }
Esempio n. 9
0
 /// <summary>
 /// nuget restore
 /// </summary>
 public static ITargetDefinition Restore(ITargetDefinition _, IMsBuild build) => _
 .DependsOn(build.Clean)
 .Executes(
     () =>
 {
     NuGetTasks
     .NuGetRestore(
         settings =>
         settings
         .SetSolutionDirectory(build.Solution)
         .EnableNoCache()
         );
 }
     );
Esempio n. 10
0
        ITakeValue <T> GetTargetNode <T>(ITargetDefinition <T> target, Action <Exception> onError)
        {
            ITakeValue <T> targetNode;

            if (definitionToNodeLookup.ContainsKey(target))
            {
                targetNode = (ITakeValue <T>)definitionToNodeLookup[target];
            }
            else
            {
                targetNode = CreateTargetNode(target, onError);
                definitionToNodeLookup.Add(target, targetNode);
            }

            return(targetNode);
        }
Esempio n. 11
0
 /// <summary>
 /// dotnet restore
 /// </summary>
 public static ITargetDefinition Restore(ITargetDefinition _, IDotNetCoreBuild build) => _
 .Description("Restores the dependencies.")
 .DependsOn(build.Clean)
 .DependsOn(build.DotnetToolRestore)
 .Executes(
     () =>
 {
     DotNetRestore(
         s => s
         .SetProjectFile(build.Solution)
         .SetDisableParallel(true)
         .SetDefaultLoggers(build.LogsDirectory / "restore.log")
         .SetGitVersionEnvironment(build.GitVersion)
         );
 }
     );
Esempio n. 12
0
 /// <summary>
 /// dotnet build
 /// </summary>
 public static ITargetDefinition Build(ITargetDefinition _, IDotNetCoreBuild build) => _
 .Description("Builds all the projects.")
 .DependsOn(build.Restore)
 .Executes(
     () =>
 {
     DotNetBuild(
         s => s
         .SetProjectFile(build.Solution)
         .SetDefaultLoggers(build.LogsDirectory / "build.log")
         .SetGitVersionEnvironment(build.GitVersion)
         .SetConfiguration(build.Configuration)
         .EnableNoRestore()
         );
 }
     );
Esempio n. 13
0
 /// <summary>
 /// nuget pack
 /// </summary>
 public static ITargetDefinition Pack(ITargetDefinition _, IMsBuild build) => _
 .DependsOn(build.Build)
 .Executes(
     () =>
 {
     foreach (var project in build.NuspecDirectory.GlobFiles("*.nuspec"))
     {
         NuGetTasks
         .NuGetPack(
             settings =>
             settings
             .SetTargetPath(project)
             .SetConfiguration(build.Configuration)
             .SetGitVersionEnvironment(build.GitVersion)
             .SetVersion(build.GitVersion.NuGetVersionV2)
             .SetOutputDirectory(build.NuGetPackageDirectory)
             .SetSymbols(true)
             );
     }
 }
     );
Esempio n. 14
0
 /// <summary>
 /// xunit test
 /// </summary>
 public static ITargetDefinition Test(ITargetDefinition _, IMsBuild build) => _
 .DependsOn(build.Build)
 .DependentFor(build.Pack)
 .Executes(
     () =>
 {
     foreach (var project in build.Solution.GetTestProjects())
     {
         DotNetTasks
         .DotNetTest(
             settings =>
             settings
             .SetProjectFile(project)
             .SetConfiguration(build.Configuration)
             .SetGitVersionEnvironment(build.GitVersion)
             .SetDefaultLoggers(build.LogsDirectory / "test.log")
             .EnableNoRestore()
             .SetLogger("trx")
             .SetProperty("VSTestResultsDirectory", build.TestResultsDirectory)
             );
     }
 }
     );
Esempio n. 15
0
        /// <summary>
        /// test
        /// </summary>
        public static ITargetDefinition Test(ITargetDefinition _, IXamarinBuild build) => _
        .DependsOn(build.Build)
        .OnlyWhenStatic(() => DirectoryExists(build.TestDirectory))
        .Executes(() =>
        {
            DotNetTest(settings =>
                       settings
                       .SetProjectFile(build.Solution)
                       .SetDefaultLoggers(build.LogsDirectory / "test.log")
                       .SetGitVersionEnvironment(build.GitVersion)
                       .SetConfiguration(build.Configuration)
                       .EnableNoRestore()
                       .SetLogger($"trx")
                       .SetProperty("CollectCoverage", "true")
                       .SetProperty("DeterministicSourcePaths", "false")  // DeterministicSourcePaths being true breaks coverlet!
                       .SetProperty("CoverageDirectory", build.CoverageDirectory)
                       .SetResultsDirectory(build.TestResultsDirectory));

            foreach (var coverage in build.TestResultsDirectory.GlobFiles("**/*.cobertura.xml"))
            {
                CopyFileToDirectory(coverage, build.CoverageDirectory, FileExistsPolicy.OverwriteIfNewer);
            }
        });
Esempio n. 16
0
        public void Add <T>(ISourceDefinition <T> source, ITargetDefinition <T> target, Action <Exception> onError)
        {
            var sourceNode = GetSourceNode(source, onError);
            var targetNode = GetTargetNode(target, onError);

            sourceNode.VisualisationInfo.IsDirectlyReferenced = true;
            targetNode.VisualisationInfo.IsDirectlyReferenced = true;

            targetNode.SetSource(sourceNode);
            var valueSource = (targetNode) as IValueSource <T>;

            if (valueSource != null)
            {
                var initialValue = valueSource.GetValue();
                sourceNode.SetTarget(targetNode, initialValue);
            }

            graph.AddEdge(sourceNode, targetNode, source.NodeName, target.NodeName);
            AddSourcePathExpressions(source, sourceNode, onError);
            var targetAsSource = target as ISourceDefinition <T>;

            if (targetAsSource != null)
            {
                AddSourcePathExpressions(targetAsSource, (IValueSource)targetNode, onError);
            }

            // Formulas should treat all arguments are directly referenced
            if (source.NodeType == NodeType.Formula)
            {
                var successorsOf = graph.PredecessorsOf(sourceNode);
                foreach (var edge in successorsOf)
                {
                    edge.Source.Data.VisualisationInfo.IsDirectlyReferenced = true;
                }
            }
        }
Esempio n. 17
0
 public void AddExpression <T>(ISourceDefinition <T> source, ITargetDefinition <T> target, Action <Exception> onError)
 {
     expressionAdder.Add(source, target, onError);
 }
Esempio n. 18
0
 /// <summary>
 /// <para>Call a target definition in context of a build script</para>
 /// <para>if the build scripts aren't setup correctly the nuke extensions will not detect them.</para>
 /// </summary>
 /// <typeparam name="T">The value type.</typeparam>
 /// <param name="target">The target.</param>
 /// <param name="value">The value.</param>
 /// <param name="func">The function.</param>
 /// <returns>The target definition.</returns>
 public static ITargetDefinition With <T>(
     this ITargetDefinition target,
     T value,
     Func <ITargetDefinition, T, ITargetDefinition> func
     ) => func(target, value);
Esempio n. 19
0
 public TargetDefinitionWrapped(ITargetDefinition inner)
 {
     Inner = inner;
 }
Esempio n. 20
0
 public TargetDefinitionIO(ITargetDefinition inner) : base(inner)
 {
 }
 public static ITargetDefinition Executes(this ITargetDefinition definition, Target target)
 {
     target(definition);
     return(definition);
 }
Esempio n. 22
0
 /// <summary>
 /// dotnet test
 /// </summary>
 public static ITargetDefinition Test(ITargetDefinition _, IDotNetCoreBuild build) => Test(true)(_, build);
 public static ITargetDefinition ExecuteTarget(this ITargetDefinition targetDefinition, Target target)
 {
     return(targetDefinition.Executes(() => target.Invoke(targetDefinition)));
 }
Esempio n. 24
0
 /// <summary>
 /// package
 /// </summary>
 public static ITargetDefinition Package(ITargetDefinition _, IXamarinBuild build) => _
 .DependsOn(build.Test)
 .Executes(() => { });
Esempio n. 25
0
 public static ITargetDefinition RunsOnAgent(this ITargetDefinition targetDefinition, params string[] agents)
 {
     Agents.AddRange(targetDefinition, agents);
     return(targetDefinition);
 }
Esempio n. 26
0
 public ITargetDefinition Setup(ITargetDefinition targetDefinition)
 {
     return(Setup(targetDefinition, null));
 }
Esempio n. 27
0
        public ITargetDefinition Setup(ITargetDefinition targetDefinition, Action <TBuildAction> configureAction)
        {
            targetDefinition.Executes(() => ExecuteAction(configureAction));

            return(targetDefinition);
        }