Menu

Home

metaphor_systems

-Under construction-
This Wiki is still being written and as such may contain typos, or be poorly formatted at times. The files will not be posted until the Wiki has a reasonable amount of documentation, and will be able to get you started using the system.

I expect this process to take several days to a week. If you come across this project and notice the missing files, do not disregard this as a dead project, failed attempt, etc. The code is already complete and in use currently. I just believe that it would irresponsible to post the code without documentation.

Overview

psMake is quite possibly the most powerful build automation system available for the Windows platform.

A good build system must have a specific set of criteria, in order to be useful both for an individual product and across companies with large infrastructures.

Every choice made in the design of this system was considered and met.

Design Goals/Choice

The following technologies were chosen as the core of the engine:

  • PowerShell
  • XML
  • XPath

Portability

A build system must be immediately runnable and extendable without any prerequisites. A developer should be to synchronize with source control and immediately run the newest version of the build without "compiling this", "installing that", and "oh by the way"s.

By using PowerShell, it makes the entire build system immediately executable on any Windows machine (and possibly others, depending on the various states of Mono and PowerShell ports).


Extendability

A build system must be immediately extendable without any form of compilation. You should be able to immediately enhance the system by writing as little code as possible, and with no follow-up steps.


Platform Dependance

As popular as platform independence is these days, this may sound backward. But this is where reality and theory differ significantly. In theory, being able to run a build tool anywhere sounds great. In reality, a build tool must be able to deploy the application which almost always requires OS specific functionality. Deployment will usually involve things like stopping and starting services (or daemons), changing registry settings (or /etc files).

This can only be done well, if a commitment to a single platform is made. Linux has a host of free and solid build tools already available to it. Windows has none, except psMake, that meet all the criteria laid out here.


Power

It must have the power to automate all of your build/deployment work. And if there is something that it doesn't already support, must be easily extended to support that work. This is where all known build tools fail, IMO. Even the best tools are difficult to extend with complex rule sets, compilation requirements, etc.

Not only does psMake give you access to psMake specific tasks and functionality, it also opens up the world of PowerShell for immediate use without any additional coding. PowerShell was designed for heavy automation and as both a shell and an automation tool it is ideally suited to a build system.


Sharing

A build tool must be able to use the exact same configuration to run local development builds, release builds, and full deployments. Many build problems manifest themselves because of an attempt to treat local compilations differently than full deployments.


Exception Management

A good build tool must be able to trap and manage errors that occur. It needs to be able perform specific tasks in the event of a failure and it needs to log in perfect detail what had occurred. It also needs to produce this log in a shareable format.

A developer should be able to sent an output log from his local compile to his team lead to analyze and resolve a problem if it occurs.


Task Based

I have gone back and forth on the idea of a task vs script system. Ultimately, the reasons that I have chosen task based are the following:
1. Separation of code and configuration.
2. Configuration based build directives.
3. Easy to understand and implement configurations.
4. Burden on testing is reduced.


Why psMake?

I think a better question is why not another build tool. I do not like reinventing the wheel and would not have chosen to develop psMake if any legitimate alternative existed.

Many of the alternatives have some great features but they all fail in many of my criteria for a build automation system.

I would like to point out MSBuild and FinalBuilder in particular as the best of breed for their respective targets.

FinalBuilder is commercial, hindering sharing. Extending it is not as easy as it may sound. And as someone who has written extremely complex build scripts within it, it is not well suited to a "clean" script. Not to mention the requirement of installation and high cost. Thanks to my choices in design, psMake is already considerably more powerful than FinalBuilder, and hasn't been in development a fraction of the time.

MSBuild requires an additional installation but for all intents and purposes is free. Have you ever attempted to build a complex build/deployment solution? It is not elegant in the least. Difficult to use, difficult to maintain. If you are already using VisualStudio and it is building Solutions for you, then this becomes a little more reasonable, but makes it very VisualStudio centric (perhaps as it should be).

Extending it requires coding and compiling in C#, although relatively simple. This creates more hurdles to immediate pull/build modifications.

Why Wiki?

I hate writing websites. I always have. So, I had two choices. Wait until I put together a website to release this to the world (read: never), or just write up the information in this Wiki. However, I would gladly accept a volunteer to put together a website.

Why Opensource?

This is an easy answer. To satisfy my sharing requirement. Commercial licensing is a hindrance to sharing the build system with a full team of developers. However, I would ask that if you use this in your environment, please consider a donation to insure continued development. Also, consider how much you are saving by not purchasing a commercial product or fighting with other "not-quite-right" opensource tools.

Features

Documentation

Installation

Standard PowerShell Approach

Codebase Synchronization

Make File

Tasks

Targets

Common Configuration

XPath Support

Tasks

Loading Tasks

System Tasks

Currently Supported Tasks

Custom Tasks

Contribution

Donate

Code

Requests

Bug Reports

Feature Requests

Task Requests

FAQ

Other Projects