From 62e2c75aa05c54d24f260c57b2807170e641647d Mon Sep 17 00:00:00 2001 From: Matthew Beale Date: Fri, 29 Jul 2011 13:57:36 +0200 Subject: [PATCH] Add a release task to cake --- Cakefile | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/Cakefile b/Cakefile index cc58f0c..8b974b1 100644 --- a/Cakefile +++ b/Cakefile @@ -39,6 +39,9 @@ source_files = -> version = -> "#{fs.readFileSync('VERSION')}".replace /[^0-9a-zA-Z.]*/gm, '' +version_tag = -> + "v#{version()}" + # Write chosen files with a header # write_chosen_javascript = (filename, body) -> @@ -62,7 +65,7 @@ task 'build', 'build Chosen from source', build = (cb) -> write_chosen_javascript javascript.replace(/\.js$/,'.min.js'), ( uglify.gen_code uglify.ast_squeeze uglify.ast_mangle parser.parse code ) - cb() if typeof cb is 'function' + cb() if typeof cb is 'function' task 'watch', 'watch coffee/ for changes and build Chosen', -> console.log "Watching for changes in coffee/" @@ -76,3 +79,50 @@ task 'watch', 'watch coffee/ for changes and build Chosen', -> console.log "Saw change in #{file}" invoke 'build' )(file) + +run = (cmd, args, cb, err_cb) -> + exec "#{cmd} #{args.join(' ')}", (err, stdout, stderr) -> + if err isnt null + console.error stderr + if typeof err_cb is 'function' + err_cb() + else + throw "Failed command execution (#{err})." + else + cb(stdout) if typeof cb is 'function' + +with_clean_repo = (cb) -> + run 'git', ['diff', '--exit-code'], cb, -> + throw 'There are files that need to be committed first.' + +without_existing_tag = (cb) -> + run 'git', ['tag'], (stdout) -> + if stdout.split("\n").indexOf( version_tag() ) >= 0 + throw 'This tag has already been committed to the repo.' + else + cb() + +tag_release = (cb, cb_err) -> + run 'git', ['tag', '-a', '-m', "\"Version #{version()}\"", version_tag()], cb, cb_err + +untag_release = (e) -> + console.log "Failure to tag caught: #{e}" + console.log "Removing tag #{version_tag()}" + run 'git', ['tag', '-d', version_tag()] + +push_repo = (args=[], cb, cb_err) -> + run 'git', ['push'].concat(args), cb, cb_err + +task 'release', 'build, tag the current release, and push', -> + console.log "Trying to tag #{version_tag()}..." + with_clean_repo -> + without_existing_tag -> + build -> + tag_release -> + push_repo [], -> + push_repo ['--tags'], -> + console.log "Successfully tagged #{version_tag()}: https://github.com/harvesthq/chosen/tree/#{version_tag()}" + + , untag_release + , untag_release + , untag_release