util.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. var path = require('path')
  2. var test = require('tape')
  3. var download = require('electron-download')
  4. var mkdirp = require('mkdirp')
  5. var rimraf = require('rimraf')
  6. var series = require('run-series')
  7. var compareVersion = require('compare-version')
  8. var extract = require('extract-zip')
  9. var config = require('./config')
  10. var ORIGINAL_CWD = process.cwd()
  11. var WORK_CWD = path.join(__dirname, 'work')
  12. var versions = config.versions
  13. var archs = ['x64']
  14. var platforms = ['darwin', 'mas']
  15. var slice = Array.prototype.slice
  16. var releases = []
  17. versions.forEach(function (version) {
  18. archs.forEach(function (arch) {
  19. platforms.forEach(function (platform) {
  20. // Only versions later than 0.34.0 offer mas builds
  21. if (platform !== 'mas' || compareVersion(version, '0.34.0') >= 0) {
  22. releases.push({
  23. arch: arch,
  24. platform: platform,
  25. version: version
  26. })
  27. }
  28. })
  29. })
  30. })
  31. exports.generateReleaseName = function getExtractName (release) {
  32. return 'v' + release.version + '-' + release.platform + '-' + release.arch
  33. }
  34. exports.generateAppPath = function getExtractName (release) {
  35. return path.join(exports.generateReleaseName(release), 'Electron.app')
  36. }
  37. exports.downloadElectrons = function downloadElectrons (callback) {
  38. series(releases.map(function (release) {
  39. return function (cb) {
  40. download(release, function (err, zipPath) {
  41. if (err) return callback(err)
  42. extract(zipPath, {dir: path.join(WORK_CWD, exports.generateReleaseName(release))}, cb)
  43. })
  44. }
  45. }), callback)
  46. }
  47. exports.setup = function setup () {
  48. test('setup', function (t) {
  49. mkdirp(WORK_CWD, function (err) {
  50. if (err) {
  51. t.end(err)
  52. } else {
  53. process.chdir(WORK_CWD)
  54. t.end()
  55. }
  56. })
  57. })
  58. }
  59. exports.teardown = function teardown () {
  60. test('teardown', function (t) {
  61. process.chdir(ORIGINAL_CWD)
  62. rimraf(WORK_CWD, function (err) {
  63. t.end(err)
  64. })
  65. })
  66. }
  67. exports.forEachRelease = function forEachRelease (cb) {
  68. releases.forEach(cb)
  69. }
  70. exports.testAllReleases = function testAllReleases (name, createTest /*, ...createTestArgs */) {
  71. var args = slice.call(arguments, 2)
  72. exports.setup()
  73. exports.forEachRelease(function (release) {
  74. test(name + ':' + exports.generateReleaseName(release),
  75. createTest.apply(null, [release].concat(args)))
  76. })
  77. exports.teardown()
  78. }