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.
# XMakefile.xms
XM_phonyTargets+=build test release archive announce
announce: upload
    # commands to send email announcement about new
    # release
upload: archive
    # commands to transfer files to production server
archive: test
    # commands to commit to CVS, or create a tar ball
test: build
    # commands to perform link checking or other tests
build: all; # make all output files
    # no commands; 'all' is a predefined target