/build/release.js

https://github.com/agcolom/jquery-mobile · JavaScript · 172 lines · 140 code · 28 blank · 4 comment · 12 complexity · c7311c4d1ead9834108c4b55f62976ad MD5 · raw file

  1. module.exports = function( Release ) {
  2. var cheerio = require( "cheerio" ),
  3. fs = require( "fs" ),
  4. semver = require( "semver" ),
  5. shell = require( "shelljs" ),
  6. clonedRepos = {};
  7. Release.define({
  8. issueTracker: "github",
  9. changelogShell: function() {
  10. return "# Changelog for jQuery Mobile v" + Release.newVersion + "\n";
  11. },
  12. generateArtifacts: function( done ) {
  13. Release.exec( "grunt dist:release" );
  14. done([]);
  15. },
  16. _cloneDemosRepo: function() {
  17. var local = Release.dir.base + "/demos.jquerymobile.com",
  18. remote = "git@github.com:jquery/demos.jquerymobile.com";
  19. if ( !clonedRepos[ remote ] ) {
  20. console.log( "Cloning " + remote.cyan + "..." );
  21. Release.exec( "git clone " + remote + " " + local, "Error cloning Demos repo." );
  22. console.log();
  23. clonedRepos[ remote ] = local;
  24. }
  25. return clonedRepos[ remote ];
  26. },
  27. _publishDemos: function() {
  28. var index,
  29. repo = Release._cloneDemosRepo(),
  30. dest = repo + "/" + Release.newVersion,
  31. src = Release.dir.repo + "/dist/demos",
  32. commitMessage = "Added version " + Release.newVersion;
  33. shell.mkdir( "-p", dest );
  34. shell.cp( "-r", src + "/*", dest );
  35. if (!Release.preRelease) {
  36. console.log( "Updating demos index..." );
  37. fs.writeFileSync( repo + "/index.php",
  38. "<?php header('Location: " + Release.newVersion + "');" );
  39. }
  40. console.log( "Adding files..." );
  41. process.chdir( repo );
  42. Release.exec( "git add .", "Error adding files." );
  43. Release.exec( "git commit -m '" + commitMessage + "'", "Error commiting demos files." );
  44. Release.exec( "npm version patch" );
  45. if ( !Release.isTest ) {
  46. console.log( "Pushing to github..." );
  47. Release.exec( "git push --tags origin master", "Error pushing demos to github." );
  48. }
  49. console.log();
  50. },
  51. _cloneWebsiteRepo: function() {
  52. var local = Release.dir.base + "/jquerymobile.com",
  53. remote = "git@github.com:jquery/jquerymobile.com";
  54. if ( !clonedRepos[ remote ] ) {
  55. console.log( "Cloning " + remote.cyan + "..." );
  56. Release.exec( "git clone " + remote + " " + local, "Error cloning website repo." );
  57. console.log();
  58. clonedRepos[ remote ] = local;
  59. }
  60. return clonedRepos[ remote ];
  61. },
  62. _updateBuilder: function() {
  63. var builder, $, option, newOption,
  64. repo = Release._cloneWebsiteRepo(),
  65. dest = repo + "/resources/download",
  66. src = Release.dir.repo + "/dist/jquery.mobile.images-" + Release.newVersion + ".zip",
  67. commitMessage = "Builder: Added version " + Release.newVersion;
  68. shell.cp( src, dest );
  69. console.log( "Updating builder page..." );
  70. $ = cheerio.load( fs.readFileSync( repo + "/pages/download-builder.html", "utf8" ) );
  71. if ( Release.preRelease ) {
  72. // If it's a prerelease the option should not be selected
  73. // and need to be inserted in the unstable optgroup
  74. newOption = "<option value='" + Release.newVersion + "'>" + Release.newVersion + "</option>\n\t\t"
  75. option = $( "select#branch optgroup[label='Unstable'] option" ).eq( 0 );
  76. } else {
  77. // If it's a release the option should be selected and need to be inserted in the stable optgroup
  78. newOption = "<option value='" + Release.newVersion + "' selected>" + Release.newVersion + "</option>\n\t\t";
  79. option = $( "select#branch optgroup[label='Stable'] option[selected]" );
  80. if ( semver.gt( Release.newVersion, option.val() ) ) {
  81. option.removeAttr( "selected" );
  82. }
  83. }
  84. // Figure out where to insert the new option
  85. while( option.length
  86. && semver.valid( option.val() )
  87. && semver.lt( Release.newVersion, option.val() ) ) {
  88. option = option.next();
  89. }
  90. if ( option.length ) {
  91. option.before( newOption );
  92. }
  93. fs.writeFileSync( repo + "/pages/download-builder.html", $.html() );
  94. console.log( "Adding files..." );
  95. process.chdir( repo );
  96. Release.exec( "git add .", "Error adding files." );
  97. Release.exec( "git commit -m '" + commitMessage + "'",
  98. "Error commiting builder files." );
  99. if ( !Release.isTest ) {
  100. console.log( "Pushing to github..." );
  101. Release.exec( "git push", "Error pushing builder update to github." );
  102. }
  103. console.log();
  104. },
  105. _publishZipsToWebsite: function() {
  106. var repo = Release._cloneWebsiteRepo(),
  107. dest = repo + "/resources/download",
  108. dist = Release.dir.repo + "/dist/jquery.mobile-" + Release.newVersion + ".zip",
  109. images = Release.dir.repo + "/dist/jquery.mobile.images-" + Release.newVersion + ".zip",
  110. commitMessage = "Release: Added zip for version " + Release.newVersion;
  111. shell.mkdir( "-p", dest );
  112. shell.cp( dist, dest );
  113. shell.cp( images, dest );
  114. console.log( "Adding files..." );
  115. process.chdir( repo );
  116. Release.exec( "git add .", "Error adding zip files." );
  117. Release.exec( "git commit -m '" + commitMessage + "'", "Error commiting zip files." );
  118. if ( !Release.isTest ) {
  119. console.log( "Pushing to github..." );
  120. Release.exec( "git push", "Error pushing zip files to github." );
  121. }
  122. console.log();
  123. },
  124. _complete: function( done ) {
  125. Release.walk([
  126. Release._section( "publishing demos" ),
  127. Release._publishDemos,
  128. Release._section( "publishing zip files" ),
  129. Release._publishZipsToWebsite,
  130. Release._section( "updating builder" ),
  131. Release._updateBuilder
  132. ], done );
  133. },
  134. complete: function() {
  135. Release._complete(function() {
  136. console.log( "Release of " + Release.project + " version " + Release.newVersion + " complete." );
  137. });
  138. }
  139. });
  140. };
  141. module.exports.dependencies = [
  142. "semver@2.2.1",
  143. "shelljs@0.2.6"
  144. ];