| 1 |
module.exports = function (grunt, loader) { |
| 2 |
'use strict'; |
| 3 |
|
| 4 |
grunt.registerTask('wpmudev_release', function () { |
| 5 |
var wpmudev = grunt.config.get('wpmudev_release') || {}, |
| 6 |
version = wpmudev.version || false, |
| 7 |
version_define = wpmudev.version_define || false, |
| 8 |
type = wpmudev.type || false, |
| 9 |
tasks = wpmudev.build || [], |
| 10 |
error = '' |
| 11 |
; |
| 12 |
|
| 13 |
if (!version && !type) { |
| 14 |
grunt.fail.fatal("This task needs at the very least one argument (type), ideally two (version and type)."); |
| 15 |
return false; |
| 16 |
} |
| 17 |
|
| 18 |
if (version) { |
| 19 |
grunt.log.subhead("Attempting to update version number to " + version); |
| 20 |
|
| 21 |
grunt.log.writeln("Checking changelog"); |
| 22 |
if (grunt.file.exists("changelog.txt")) { |
| 23 |
var changelog = grunt.file.read("changelog.txt"); |
| 24 |
if (!changelog.match(new RegExp('^\\s*' + version + '\\s+', 'm'))) { |
| 25 |
grunt.log.warn("Changelog doesn't know about the current version!".red.bold); |
| 26 |
error = ':error'; |
| 27 |
} else { |
| 28 |
grunt.log.writeln("Changelog seems OK"); |
| 29 |
} |
| 30 |
} else { |
| 31 |
grunt.log.error("Couldn't find changelog.txt!"); |
| 32 |
return false; |
| 33 |
} |
| 34 |
|
| 35 |
grunt.log.writeln("Updating version info in package.json"); |
| 36 |
var pkg = grunt.file.readJSON('package.json'); |
| 37 |
pkg.version = version; |
| 38 |
grunt.config.set("pkg", pkg); |
| 39 |
grunt.file.write('package.json', JSON.stringify(pkg, null, 2)); |
| 40 |
|
| 41 |
grunt.log.writeln("Updating version info in main plugin file"); |
| 42 |
if (grunt.file.exists((pkg.main || pkg.name) + ".php")) { |
| 43 |
var plugin = grunt.file.read((pkg.main || pkg.name) + '.php'); |
| 44 |
|
| 45 |
grunt.log.writeln("\t* Updating version info in plugin header"); |
| 46 |
plugin = plugin.replace(/^(\s?\* )?Version:.*$/m, '$1Version: ' + version); |
| 47 |
|
| 48 |
if (version_define) { |
| 49 |
var vdrx = new RegExp("'" + version_define + "',\\s['\"].*?['\"]"); |
| 50 |
grunt.log.writeln("\t* Updating version info in version define"); |
| 51 |
plugin = plugin.replace(vdrx, "'" + version_define + "', '" + version + "'"); |
| 52 |
} |
| 53 |
|
| 54 |
grunt.log.writeln("Done updating info in main plugin file, writing changes"); |
| 55 |
grunt.file.write((pkg.main || pkg.name) + '.php', plugin); |
| 56 |
} else { |
| 57 |
grunt.log.warn("Could not find main plugin file".yellow.bold); |
| 58 |
} |
| 59 |
} |
| 60 |
|
| 61 |
tasks.unshift('wpmudev_makepot'); // Preparing for l10n is always a part of the release |
| 62 |
tasks.push('wpmudev_postrelease' + error); |
| 63 |
grunt.task.run(tasks); |
| 64 |
}); |
| 65 |
|
| 66 |
|
| 67 |
|
| 68 |
grunt.registerTask('wpmudev_postrelease', function (error) { |
| 69 |
var done = this.async(), |
| 70 |
wpmudev = grunt.config.get('wpmudev_release') || {}, |
| 71 |
type = wpmudev.type || 'full', |
| 72 |
tasks = wpmudev.clean || [] |
| 73 |
; |
| 74 |
|
| 75 |
if (tasks && tasks.length) grunt.task.run(tasks); |
| 76 |
|
| 77 |
var pkg = grunt.config.get('pkg'), |
| 78 |
version = (pkg || {}).version, |
| 79 |
name = (pkg || {}).name, |
| 80 |
out = function (cmderr, result) { |
| 81 |
if (cmderr) { |
| 82 |
grunt.log.error("Encountered an error with post-release git work:", result); |
| 83 |
} else { |
| 84 |
grunt.log.writeln("Post-release git work (commit+tag) successful *locally*, remember to git push --tags".white.bold); |
| 85 |
} |
| 86 |
|
| 87 |
grunt.log.subhead('Prepared a release package for ' + version); |
| 88 |
grunt.log.writeln('The releasable archive is in builds/' + name + '-' + version + ('full' !== type ? '-free' : '') + '.zip'); |
| 89 |
if ('full' === type) { |
| 90 |
var msg = 'Upload the archive to https://wpmudev.com/wp-admin/edit.php?post_type=project&page=projects-manage&manage_files='; |
| 91 |
msg += loader.environment.get_wdp_id(); |
| 92 |
grunt.log.ok(msg.green.bold); |
| 93 |
} |
| 94 |
|
| 95 |
if (error) { |
| 96 |
grunt.log.error("Apparently, we also encountered some errors along the way. Please, inspect the output to see what's up.".red.bold); |
| 97 |
} |
| 98 |
done(); |
| 99 |
} |
| 100 |
; |
| 101 |
|
| 102 |
// Commit all the stuff that's left hanging out and add version tag |
| 103 |
if (!error) { |
| 104 |
grunt.util.spawn({ |
| 105 |
cmd: 'git', |
| 106 |
args: ['commit', '-am', 'Prepared v' + version + ' release'] |
| 107 |
}, function (cmderr, result) { |
| 108 |
if (cmderr) { |
| 109 |
grunt.log.error("Encountered an error committing changes", result); |
| 110 |
return out(true); |
| 111 |
} |
| 112 |
grunt.util.spawn({ |
| 113 |
cmd: 'git', |
| 114 |
args: ['tag', version] |
| 115 |
}, out); |
| 116 |
}); |
| 117 |
} else { |
| 118 |
error = true; |
| 119 |
out(true, "Please, make sure your changelog is prepared"); |
| 120 |
} |
| 121 |
}); |
| 122 |
}; |
| 123 |
|