Skip to content

Commit

Permalink
Merge branch 'version_system' into build_system
Browse files Browse the repository at this point in the history
  • Loading branch information
mixonic committed Jul 29, 2011
2 parents b793dd3 + 62e2c75 commit eb30cd3
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 4 deletions.
74 changes: 70 additions & 4 deletions Cakefile
Expand Up @@ -34,19 +34,38 @@ source_files = ->
all_sources.push source
all_sources.unique()

# Get the version number
#
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) ->
fs.writeFileSync filename, """
// Chosen #{version()} https://github.com/harvesthq/chosen
// Copyright (c) 2011 Harvest http://getharvest.com
// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
// This file is generated by `cake build`, do not edit it by hand.
#{body}
"""

# Build Chosen.
#
task 'build', 'build Chosen from source', build = (cb) ->
for javascript, sources of javascripts
code = ''
for source in sources
code += CoffeeScript.compile "\n#{fs.readFileSync source}"
fs.writeFileSync javascript, code
code += CoffeeScript.compile "#{fs.readFileSync source}"
write_chosen_javascript javascript, code
unless process.env.MINIFY is 'false'
fs.writeFileSync javascript.replace(/\.js$/,'.min.js'), (
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/"
Expand All @@ -60,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
1 change: 1 addition & 0 deletions VERSION
@@ -0,0 +1 @@
0.9

0 comments on commit eb30cd3

Please sign in to comment.