UNPKG

2.51 kBJavaScriptView Raw
1"use strict";
2
3var os = require('os');
4var path = require('path');
5
6var fs = require('fs-extra');
7var gotZip = require('got-zip');
8var GitHubApi = require('github');
9var github = new GitHubApi({
10 version: '3.0.0',
11 protocol: 'https',
12 headers: {
13 'user-agent': 'cartridge-cli-app'
14 }
15});
16
17var utils = require('./utils');
18
19var errorHandler = require('./errorHandler');
20
21var releaseServiceApi = {};
22var _log;
23
24var OS_TMP_DIR = os.tmpdir();
25var CARTRIDGE_FOLDER_REGEX = /^cartridge-cartridge/;
26var CARTRIDGE_FOLDER_PATH;
27
28/**
29 * Download the latest cartridge release from github
30 * @param {Object} logInstance Log module instance used for internal logging
31 */
32releaseServiceApi.downloadLatestRelease = function(options) {
33 _log = utils.getLogInstance(options);
34
35 return getLatestGitHubRelease()
36 .then(downloadGitHubZipFile)
37 .then(getCartridgeFolderPath)
38 .catch(function(err) {
39 errorHandler(err)
40 })
41}
42
43/**
44 * Delete the temp release directory
45 */
46releaseServiceApi.deleteReleaseTmpDirectory = function() {
47 _log.debug('Deleting cartridge temp directory in ' + OS_TMP_DIR);
48
49 fs.removeSync(CARTRIDGE_FOLDER_PATH)
50}
51
52/**
53 * Get the full cartridge temp directory path
54 * @param {Object} args gotZip argument object
55 */
56function getCartridgeFolderPath(args) {
57
58 return new Promise(function(resolve, reject) {
59 fs.readdir(args.dest, function(err, files) {
60
61 if(err) reject(err);
62
63 for (var i = 0; i < files.length; i++) {
64
65 if(CARTRIDGE_FOLDER_REGEX.test(files[i])) {
66 CARTRIDGE_FOLDER_PATH = path.join(args.dest, files[i])
67 resolve(CARTRIDGE_FOLDER_PATH);
68 }
69 }
70 })
71 });
72}
73
74/**
75 * Download the latest github release zip, store in OS temp directory
76 * @param {String} downloadUrl Download URL
77 */
78function downloadGitHubZipFile(downloadUrl) {
79 _log.debug('Downloading release from URL ' + downloadUrl);
80 _log.debug('');
81
82 return gotZip(downloadUrl, {
83 dest: OS_TMP_DIR,
84 extract: true,
85 cleanup: true,
86 strip: 0
87 })
88}
89
90/**
91 * Get the latest github release data
92 */
93function getLatestGitHubRelease() {
94 _log.debug('Getting latest release URL from GitHub');
95
96 return new Promise(function(resolve, reject) {
97 github.releases.listReleases({
98 owner: 'cartridge',
99 repo: 'cartridge',
100 page: 1,
101 per_page: 1
102 }, function(err, data) {
103 if(err) return reject(err);
104
105 _log.debug('Release ' + data[0].name + ' is latest');
106
107 if(data.length > 0) {
108 resolve(data[0].zipball_url);
109 }
110 });
111 });
112}
113
114module.exports = releaseServiceApi;