1 | var DDPClient = require('ddp');
|
2 | var Config = require('./config');
|
3 | var path = require('path');
|
4 | var fs = require('fs');
|
5 | var _ = require('underscore');
|
6 | var spawn = require('child_process').spawn;
|
7 | var exec = require('child_process').exec;
|
8 | var git = require('./utils/git');
|
9 | var _ = require('underscore');
|
10 | var prompt = require('prompt');
|
11 | var meteoriteArgs = require('optimist').argv;
|
12 | var version = require('../package').version;
|
13 |
|
14 | var writeUserTokenFile = function(user) {
|
15 | var cfg = {
|
16 | user: user
|
17 | };
|
18 | var filePath = path.join(process.env.HOME, '.mrt.cfg');
|
19 |
|
20 | fs.writeFileSync(filePath, JSON.stringify(cfg));
|
21 | fs.chmodSync(filePath, '0600');
|
22 | };
|
23 |
|
24 | var readUserTokenFile = function() {
|
25 | var filePath = path.join(process.env.HOME, '.mrt.cfg');
|
26 |
|
27 | var fileContents = fs.readFileSync(filePath);
|
28 | return JSON.parse(fileContents);
|
29 | };
|
30 |
|
31 | Atmosphere = {
|
32 | publish: function(fn) {
|
33 |
|
34 | if (meteoriteArgs._.length !== 2)
|
35 | throw "Usage: mrt publish <path>";
|
36 |
|
37 | var packagePath = meteoriteArgs._[1];
|
38 | var config = new Config(path.resolve(packagePath));
|
39 | var versionName = 'v' + config.version;
|
40 |
|
41 |
|
42 | git.tagExists(versionName, packagePath, function(err, exists) {
|
43 | if (err || !exists)
|
44 | throw("Tag " + versionName + " doesn't exist in repository, please add!");
|
45 |
|
46 |
|
47 |
|
48 | Atmosphere.login(function(ddpclient) {
|
49 | meteoriteArgs.verbose && console.log("Publishing...");
|
50 | ddpclient.call("publish", [config], function(err) {
|
51 | if (err) {
|
52 | console.log('Error:', err.reason);
|
53 |
|
54 | if (err.details && err.details.length > 0) {
|
55 | _.each(err.details, function(errMessage) {
|
56 | console.log(' ' + errMessage);
|
57 | });
|
58 | }
|
59 |
|
60 | process.exit();
|
61 | }
|
62 | meteoriteArgs.verbose && console.log("Published.");
|
63 | console.log("Done!");
|
64 | fn();
|
65 | });
|
66 | });
|
67 | });
|
68 | },
|
69 |
|
70 | release: function(fn) {
|
71 | var config = new Config(process.cwd());
|
72 | var versionName = 'v' + config.version;
|
73 |
|
74 | if (meteoriteArgs._.length !== 2)
|
75 | throw "Usage: mrt release <path>";
|
76 |
|
77 |
|
78 | exec('git diff --exit-code', function (err, stdout, stderr) {
|
79 | if (err && err.code === 1)
|
80 | throw "There are files that need to be committed first.";
|
81 |
|
82 | exec('git tag', function (err, stdout, stderr) {
|
83 | if (stdout.indexOf(versionName) >= 0)
|
84 | throw "This tag has already been committed to the repo.";
|
85 |
|
86 | console.log('Adding tag and pushing repo');
|
87 | spawn('git', ['tag', versionName]).on('exit', function() {
|
88 | spawn('git', ['push']).on('exit', function() {
|
89 | spawn('git', ['push', '--tags']).on('exit', function() {
|
90 | Atmosphere.publish(fn);
|
91 | });
|
92 | });
|
93 | });
|
94 | });
|
95 | });
|
96 |
|
97 | },
|
98 |
|
99 |
|
100 | packages: function(fn) {
|
101 | if (Atmosphere._packages)
|
102 | return fn(Atmosphere._packages);
|
103 |
|
104 | Atmosphere.connect(function(ddpclient) {
|
105 |
|
106 | meteoriteArgs.verbose && console.log("Getting packages...");
|
107 | ddpclient.subscribe("allPackages", [], function() {
|
108 | meteoriteArgs.verbose && console.log("Got packages.");
|
109 |
|
110 | fn(Atmosphere._packages = ddpclient.collections.packages);
|
111 | });
|
112 | });
|
113 | },
|
114 |
|
115 |
|
116 | package: function(name, fn) {
|
117 | Atmosphere.packages(function(defns) {
|
118 | fn(_.find(defns, function(d) { return d.name === name; }));
|
119 | });
|
120 | },
|
121 |
|
122 | connect: function(fn) {
|
123 | meteoriteArgs.repoHost = meteoriteArgs.repoHost || 'atmosphere.meteor.com';
|
124 | meteoriteArgs.repoPort = meteoriteArgs.repoPort || 443;
|
125 | var use_ssl = (meteoriteArgs.repoPort === 443) ? true : false;
|
126 | var ddpclient = new DDPClient({
|
127 | port: meteoriteArgs.repoPort,
|
128 | host: meteoriteArgs.repoHost,
|
129 | use_ssl: use_ssl
|
130 | });
|
131 |
|
132 | meteoriteArgs.verbose && console.log("Connecting to " + meteoriteArgs.repoHost + ":" + meteoriteArgs.repoPort + "...");
|
133 |
|
134 | ddpclient.connect(function(err) {
|
135 | if (err) {
|
136 | console.log("Connection to Atmosphere server failed!".red);
|
137 | console.log("Please ensure you are running the latest version of Meteorite".red);
|
138 | console.log(" npm install -g meteorite".red);
|
139 | console.log("If problems persist, please report here: http://github.com/oortcloud/meteorite/issues".red);
|
140 | process.exit();
|
141 | }
|
142 |
|
143 | meteoriteArgs.verbose && console.log("Connected..");
|
144 | fn(ddpclient);
|
145 | });
|
146 | },
|
147 |
|
148 | login: function(fn) {
|
149 |
|
150 | Atmosphere.connect(function(ddpclient) {
|
151 | prompt.start();
|
152 |
|
153 | prompt.message = "";
|
154 | prompt.delimiter = "";
|
155 |
|
156 | var showPrompt = function() {
|
157 | prompt.get({
|
158 | properties: {
|
159 | username: {
|
160 | description: 'username: ',
|
161 | required: true
|
162 | },
|
163 | password: {
|
164 | description: 'password: ',
|
165 | required: true,
|
166 | hidden: true
|
167 | }
|
168 | }
|
169 | }, function (err, input) {
|
170 | ddpclient.call('login', ['mrt', version, {
|
171 | password: input.password,
|
172 | user: {
|
173 | username: input.username
|
174 | }
|
175 | }], function(err, user) {
|
176 | if (err) {
|
177 | console.log('Error:', err.reason);
|
178 | process.exit();
|
179 | }
|
180 |
|
181 | writeUserTokenFile(user);
|
182 |
|
183 | fn(ddpclient);
|
184 | });
|
185 | });
|
186 |
|
187 | };
|
188 |
|
189 | var user;
|
190 | try {
|
191 | user = readUserTokenFile().user;
|
192 | } catch(e) {}
|
193 |
|
194 | if (user && user.token) {
|
195 | meteoriteArgs.verbose && console.log("Logging in...");
|
196 | ddpclient.call('login', ['mrt', version, {
|
197 | resume: user.token
|
198 | }], function(err, user) {
|
199 | if (err) {
|
200 | meteoriteArgs.verbose && console.log("Failed.");
|
201 | showPrompt();
|
202 | } else {
|
203 | meteoriteArgs.verbose && console.log("Logged in.");
|
204 | fn(ddpclient);
|
205 | }
|
206 | });
|
207 | } else {
|
208 | showPrompt();
|
209 | }
|
210 |
|
211 | });
|
212 | }
|
213 | };
|
214 |
|
215 | module.exports = Atmosphere;
|