Consider the case where publication involves several routine tasks, to be executed in order: build, test, archive, upload, announce. Each task depends on the success of previous tasks. If any task fails, it aborts the process. This would be implemented with a custom makefile, along the lines of the makefile below (specific rules omitted). Other targets can easily be added to this model such as creating additional views of data, RSS news feeds, etc.
XM_phonyTargets+=build test release archive announce
# commands to send email announcement about new
# commands to transfer files to production server
# commands to commit to CVS, or create a tar ball
# commands to perform link checking or other tests
build: all; # make all output files
# no commands; 'all' is a predefined target