Skip to content

Commit 479b300

Browse files
committed
Added didDeploy hook, and make activate hook add activatedRevisionKey to context.
The didDeploy hook works with a configurable `didDeployMessage` which is output when the hook runs.
1 parent dea2a06 commit 479b300

File tree

4 files changed

+78
-8
lines changed

4 files changed

+78
-8
lines changed

index.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,25 @@ module.exports = {
102102

103103
return _beginActivateMessage(ui, revisionKey)
104104
.then(redis.activate.bind(redis, config.keyPrefix, revisionKey))
105+
.then(function(){
106+
context.activatedRevisionKey = revisionKey;
107+
})
105108
.then(_activationSuccessMessage.bind(this, ui, revisionKey))
106109
.catch(_errorMessage.bind(this, ui));
107110
},
108111

112+
didDeploy: function(context){
113+
var deployment = context.deployment;
114+
var ui = deployment.ui;
115+
var config = deployment.config[this.name] || {};
116+
var didDeployMessage = this._resolveConfigValue('didDeployMessage', config, context);
117+
if (didDeployMessage) {
118+
ui.write(blue('| '));
119+
ui.write(blue(didDeployMessage + '`\n'));
120+
}
121+
return Promise.resolve();
122+
},
123+
109124
_resolvePipelineData: function(config, context) {
110125
config.revisionKey = config.revisionKey || function(context) {
111126
return context.deployment.commandLineArgs.revisionKey || context.revisionKey;

lib/utilities/validate-config.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ function applyDefaultConfigIfNecessary(config, prop, defaultConfig, ui){
88
if (!config[prop]) {
99
var value = defaultConfig[prop];
1010
config[prop] = value;
11+
if (typeof value === "function") {
12+
value = "[Function]";
13+
}
1114
ui.write(blue('| '));
1215
ui.writeLine(yellow('- Missing config: `' + prop + '`, using default: `' + value + '`'));
1316
}
@@ -21,15 +24,22 @@ module.exports = function(ui, config, projectName) {
2124
host: 'localhost',
2225
port: 6379,
2326
filePattern: 'dist/index.html',
24-
keyPrefix: projectName + ':index'
27+
keyPrefix: projectName + ':index',
28+
didDeployMessage: function(context){
29+
if (context.revisionKey && !context.activatedRevisionKey) {
30+
return "Deployed but did not activate revision " + context.revisionKey + ". "
31+
+ "To activate, run: "
32+
+ "ember activate " + context.revisionKey + " --environment=" + context.deployment.deployEnvironment + "\n";
33+
}
34+
}
2535
};
2636

2737
if (!config.url) {
2838
['host', 'port'].forEach(function(prop) {
2939
applyDefaultConfigIfNecessary(config, prop, defaultConfig, ui);
3040
});
3141
}
32-
['filePattern', 'keyPrefix'].forEach(function(configKey){
42+
['filePattern', 'keyPrefix', 'didDeployMessage'].forEach(function(configKey){
3343
applyDefaultConfigIfNecessary(config, configKey, defaultConfig, ui);
3444
});
3545

tests/unit/index-nodetest.js

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ describe('redis plugin', function() {
3737
name: 'test-plugin'
3838
});
3939

40-
assert.equal(hooks(plugin).length, 3);
41-
assert.sameMembers(hooks(plugin), ['configure', 'upload', 'activate']);
40+
assert.equal(hooks(plugin).length, 4);
41+
assert.sameMembers(hooks(plugin), ['configure', 'upload', 'activate', 'didDeploy']);
4242
});
4343

4444
describe('configure hook', function() {
@@ -223,6 +223,7 @@ describe('redis plugin', function() {
223223
return assert.isFulfilled(plugin.activate.call(plugin, context))
224224
.then(function() {
225225
assert.ok(activateCalled);
226+
assert.equal(context.activatedRevisionKey, '123abc');
226227
});
227228
});
228229

@@ -257,4 +258,45 @@ describe('redis plugin', function() {
257258
});
258259
});
259260
});
261+
describe('didDeploy hook', function() {
262+
it('prints default message about lack of activation when revision has not been activated', function() {
263+
var messageOutput = "";
264+
265+
var plugin = subject.createDeployPlugin({
266+
name: 'redis'
267+
});
268+
plugin.upload = function(){};
269+
plugin.activate = function(){};
270+
271+
var context = {
272+
deployment: {
273+
deployEnvironment: 'qa',
274+
ui: {
275+
write: function(message){
276+
messageOutput = messageOutput + message;
277+
},
278+
writeLine: function(message){
279+
messageOutput = messageOutput + message + "\n";
280+
}
281+
},
282+
project: stubProject,
283+
config: {
284+
redis: {
285+
revisionKey: '123abc',
286+
activatedRevisionKey: null
287+
}
288+
}
289+
},
290+
revisionKey: '123abc',
291+
};
292+
293+
return assert.isFulfilled(plugin.configure.call(plugin, context)).then(function(){
294+
return assert.isFulfilled(plugin.didDeploy.call(plugin, context));
295+
}).then(function() {
296+
assert.match(messageOutput, /Deployed but did not activate revision 123abc./);
297+
assert.match(messageOutput, /To activate, run/);
298+
assert.match(messageOutput, /ember activate 123abc --environment=qa/);
299+
});
300+
});
301+
});
260302
});

tests/unit/lib/utilities/validate-config-nodetest.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('validate-config', function() {
3434

3535
return previous;
3636
}, []);
37-
assert.equal(messages.length, 4);
37+
assert.equal(messages.length, 5);
3838
});
3939
});
4040

@@ -44,6 +44,7 @@ describe('validate-config', function() {
4444
assert.isDefined(config.host);
4545
assert.isDefined(config.port);
4646
assert.isDefined(config.keyPrefix);
47+
assert.isDefined(config.didDeployMessage);
4748
});
4849
});
4950

@@ -69,7 +70,7 @@ describe('validate-config', function() {
6970
return previous;
7071
}, []);
7172

72-
assert.equal(messages.length, 3);
73+
assert.equal(messages.length, 4);
7374
});
7475
});
7576
it('does not add default config to the config object', function() {
@@ -78,6 +79,7 @@ describe('validate-config', function() {
7879
assert.isDefined(config.host);
7980
assert.isDefined(config.port);
8081
assert.isDefined(config.filePattern);
82+
assert.isDefined(config.didDeployMessage);
8183
assert.equal(config.keyPrefix, 'proj:home');
8284
});
8385
});
@@ -89,7 +91,7 @@ describe('validate-config', function() {
8991
url: 'redis://localhost:6379'
9092
};
9193
});
92-
it('warns about missing optional filePattern and keyPrefix only', function() {
94+
it('warns about missing optional filePattern, keyPrefix and didDeployMessage only', function() {
9395
return assert.isFulfilled(subject(mockUi, config, projectName))
9496
.then(function() {
9597
var messages = mockUi.messages.reduce(function(previous, current) {
@@ -100,7 +102,7 @@ describe('validate-config', function() {
100102
return previous;
101103
}, []);
102104

103-
assert.equal(messages.length, 2);
105+
assert.equal(messages.length, 3);
104106
});
105107
});
106108

@@ -110,6 +112,7 @@ describe('validate-config', function() {
110112
assert.isUndefined(config.host);
111113
assert.isUndefined(config.port);
112114
assert.isDefined(config.filePattern);
115+
assert.isDefined(config.didDeployMessage);
113116
});
114117
});
115118

0 commit comments

Comments
 (0)