Awesome
Rosalia
Rosalia is a concurrency-aware build automation tool that utilize monadic query-comprehension syntax for writing tasks in concise and strongly-typed manner using C#.
Why?
- use the same language for both main codebase and build script
- get debugging, refactoring and testing tools to work for build "scripts" out of the box
- utilize any third-party .NET library for build task purposes
Quick example
var fooTask = Task( /**********************/
"fooTask", /* define a task as */
() => { /* a simple action... */
// do something here /**********************/
});
var barTask = Task( /**********************/
"barTask", /* ..or use a func if */
() => { /* you need to return */
return "bar".AsTaskResult(); /* a result... */
}); /**********************/
var bazTask = Task( /**********************/
"bazTask", /* ...or use a class */
new MyCustomTask()); /* to encapsulate */
/* task logic */
/**********************/
var mainTask = Task( /***********************************************/
"mainTask", /* Use Linq query-comprehension to fetch */
from barResult in barTask /* results from prior tasks (actually monads) */
from bazResult in bazTask /* and define dependencies at the same time. */
select new MyMainTask( /***********************************************/
barResult,
bazResult).AsTask(),
Default(), /* This task is default */
DependsOn(fooTask)); /* Add one more dependency manually */
Explore Wiki
<ul>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Home">Home</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Getting-Started">Getting Started</a></li>
</ul>
<p><strong>Writing Tasks</strong></p>
<ul>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Creating-a-Workflow">Creating a Workflow</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Defining-Tasks">Defining Tasks</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Share-state-accross-tasks">Share State accross Tasks</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Mastering-Dependencies">Mastering Dependencies</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Using-result-transformers">Using result transformers</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Using-Subflows-to-organize-tasks">Using Subflows to organize tasks</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Tasks-Preconditions">Tasks Preconditions</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Recovering-failure-results">Recovering failure results</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Declaring-dynamic-tasks" style="color: #FF0000"><code>absent</code> Declaring dynamic tasks</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Creating-Custom-Tasks"><code>absent</code> Creating Custom Tasks</a></li>
</ul>
<p><strong>Running Tasks</strong></p>
<ul>
<li><a href="https://github.com/rosaliafx/Rosalia/wiki/Rosalia.exe-command-line-reference">Rosalia.exe command line</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Passing-Properties-to-Workflow">Passing Properties to Workflow</a></li>
<li>
<a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Continuous-Integration">Continuous Integration</a>
<ul>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/Travis-CI">Travis CI</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Team-City"><code>absent</code> Team City</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/AppVeyor"><code>absent</code> AppVeyor</a></li>
</ul>
</li>
</ul>
<p><strong>API</strong></p>
<ul>
<li>
<a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/File-System">File System</a>
<ul>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/IFile">IFile</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/IDirectory">IDirectory</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/FileList">FileList</a></li>
</ul>
</li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/TaskContext"><code>absent</code> TaskContext</a></li>
</ul>
<p><strong>Tasklib</strong></p>
<ul>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/AssemblyInfo">AssemblyInfo</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Compression"><code>absent</code> Compression</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Git"><code>absent</code> Git</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/MsBuild">MsBuild</a></li>
<li><a class="internal present" href="//github.com/rosaliafx/Rosalia/wiki/NuGet">NuGet</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Standard"><code>absent</code> Standard</a></li>
<li><a class="internal absent" href="//github.com/rosaliafx/Rosalia/wiki/Svn"><code>absent</code> Svn</a></li>
</ul>