So far my idea is to follow something similar to topshelf (as
discussed here: http://codebetter.com/blogs/dru.sellers/archive/2009/01/11/topshelf.aspx)
in that there is a configuration and a runner for that configuration.
There's nothing too fancy planned yet, other than what's demonstrated
in my first snippet:
http://pastie.org/792754
The major things to note are:
1) Property usage (global and per task - only global is illustrated in
that snippet)
a) Global
b) Per task
c) IPropertySetter - I figured a ConsolePropertySetter would be
nice to defer to user input
d) Explicit property setting: TheValueIs or IsSetWith(Func<string>
function)
e) NAnt-like variable syntax support ("${root.namespace}")
2) Task configuration (With(i => i.Name("MyTask"))
3) Task result storage
a) So far I'm thinking that the "Registry" (see line 18 and 19)
will help facilitate sharing data between tasks. I'd like all tasks to
be constructed via some IoC strategy and this is my first stab at
allowing tasks to depend on the result of another. If anybody has any
ideas I'm MORE than open to them.
4) Explicit task dependencies (DependsOn("task.name"))
5) Support for pre/post execution (see line 30)
I definitely want to have some NAnt support in there. I'm thinking
about wrapping it with a task rather than have an explicit
"ExecuteNAntTask" although the explicit route would be more
predictable. What do you guys think?
Yeah, I envisioned either specifying a *.cs file via a "default host"
or allowing people to build it as an executable.
I'm going to play around with Albacore and see if I can get it to do
something similar rather than reinventing the wheel (I had only gotten
to the VERY preliminary stages of implementation of this beyond simply
getting it to compile).
this project startup seems to be a rather fortuitous event as we were
discussing something very similar on the AlbacoreDev group a few days
ago. I think there is a lot of potential value in doing this, and I'm
glad to see that the idea has it's own vision and leader!
I don't think albacore is the right place for this to live. that
project is all about build automation for .NET systems. Project
Composer seems to be all about project initialization - structure,
default architecture, common component usage, etc. It's a very
different problem space with very different needs. I'm very
interested in the direction of Project Composer, though, and would
love to help out (assuming i can find the time).
If you do decide to take this down the path of Ruby and you see some
components in Albacore that would be beneficial, we should talk about
extracting them from Albacore into a common gem that both projects can
use. i'm sure there's plenty of other great options available for
language choice, though. i think you and chad both have the right idea
in terms of figuring out what this thing should do before deciding on
what language it should run.
-derick
I agree. Perhaps we should focus the discussion in a way that
determines "what this thing should do" rather than "what methods do
people want?". I'll start up a new topic to kind of summarize what
we've come up with so far.
As a side note: I'm a fan of how Albacore is structured and would love
a chance to get my hands dirty with some Ruby work.
- Josh