
We should create a branch object for a v2 response if branch_is_default property is set on the commit object, not necessarily if it's true.
145 lines
4.0 KiB
JavaScript
145 lines
4.0 KiB
JavaScript
import { durationFrom, configKeys, compact } from 'travis/utils/helpers';
|
|
import configKeysMap from 'travis/utils/keys-map';
|
|
import Ember from 'ember';
|
|
import Model from 'travis/models/model';
|
|
import DurationCalculations from 'travis/utils/duration-calculations';
|
|
import Config from 'travis/config/environment';
|
|
import attr from 'ember-data/attr';
|
|
import { hasMany, belongsTo } from 'ember-data/relationships';
|
|
|
|
var Build;
|
|
|
|
if (Config.useV3API) {
|
|
Build = Model.extend(DurationCalculations, {
|
|
branch: belongsTo('branch', { async: false, inverse: 'builds' }),
|
|
branchName: Ember.computed.alias('branch.name')
|
|
});
|
|
} else {
|
|
Build = Model.extend(DurationCalculations, {
|
|
branchName: Ember.computed.alias('commit.branch')
|
|
});
|
|
}
|
|
|
|
Build.reopen({
|
|
ajax: Ember.inject.service(),
|
|
state: attr(),
|
|
number: attr('number'),
|
|
message: attr('string'),
|
|
_duration: attr('number'),
|
|
_config: attr(),
|
|
_startedAt: attr(),
|
|
_finishedAt: attr('string'),
|
|
pullRequest: attr('boolean'),
|
|
pullRequestTitle: attr(),
|
|
pullRequestNumber: attr('number'),
|
|
eventType: attr('string'),
|
|
repo: belongsTo('repo', { async: true }),
|
|
commit: belongsTo('commit', { async: false }),
|
|
jobs: hasMany('job', { async: true }),
|
|
|
|
config: function() {
|
|
var config;
|
|
if (config = this.get('_config')) {
|
|
return compact(config);
|
|
} else if (this.get('currentState.stateName') !== 'root.loading') {
|
|
if (this.get('isFetchingConfig')) {
|
|
return;
|
|
}
|
|
this.set('isFetchingConfig', true);
|
|
return this.reload();
|
|
}
|
|
}.property('_config'),
|
|
|
|
isPullRequest: function() {
|
|
return this.get('eventType') === 'pull_request' || this.get('pullRequest');
|
|
}.property('eventType'),
|
|
|
|
isMatrix: function() {
|
|
return this.get('jobs.length') > 1;
|
|
}.property('jobs.length'),
|
|
|
|
isFinished: function() {
|
|
var ref;
|
|
return (ref = this.get('state')) === 'passed' || ref === 'failed' || ref === 'errored' || ref === 'canceled';
|
|
}.property('state'),
|
|
|
|
notStarted: function() {
|
|
var ref;
|
|
return (ref = this.get('state')) === 'queued' || ref === 'created' || ref === 'received';
|
|
}.property('state'),
|
|
|
|
startedAt: function() {
|
|
if (!this.get('notStarted')) {
|
|
return this.get('_startedAt');
|
|
}
|
|
}.property('_startedAt', 'notStarted'),
|
|
|
|
finishedAt: function() {
|
|
if (!this.get('notStarted')) {
|
|
return this.get('_finishedAt');
|
|
}
|
|
}.property('_finishedAt', 'notStarted'),
|
|
|
|
requiredJobs: function() {
|
|
return this.get('jobs').filter(function(data) {
|
|
return !data.get('allowFailure');
|
|
});
|
|
}.property('jobs.@each.allowFailure'),
|
|
|
|
allowedFailureJobs: function() {
|
|
return this.get('jobs').filter(function(data) {
|
|
return data.get('allowFailure');
|
|
});
|
|
}.property('jobs.@each.allowFailure'),
|
|
|
|
rawConfigKeys: function() {
|
|
var keys;
|
|
keys = [];
|
|
this.get('jobs').forEach(function(job) {
|
|
return configKeys(job.get('config')).forEach(function(key) {
|
|
if (!keys.contains(key)) {
|
|
return keys.pushObject(key);
|
|
}
|
|
});
|
|
});
|
|
return keys;
|
|
}.property('config', 'jobs.@each.config'),
|
|
|
|
configKeys: function() {
|
|
var headers, keys;
|
|
keys = this.get('rawConfigKeys');
|
|
headers = ['Job', 'Duration', 'Finished'];
|
|
return $.map(headers.concat(keys), function(key) {
|
|
if (configKeysMap.hasOwnProperty(key)) {
|
|
return configKeysMap[key];
|
|
} else {
|
|
return key;
|
|
}
|
|
});
|
|
}.property('rawConfigKeys.length'),
|
|
|
|
canCancel: function() {
|
|
return this.get('jobs').filterBy('canCancel').length;
|
|
}.property('jobs.@each.canCancel', 'jobs', 'jobs.[]'),
|
|
|
|
canRestart: Ember.computed.alias('isFinished'),
|
|
|
|
cancel() {
|
|
return this.get('ajax').post("/builds/" + (this.get('id')) + "/cancel");
|
|
},
|
|
|
|
restart() {
|
|
return this.get('ajax').post("/builds/" + (this.get('id')) + "/restart");
|
|
},
|
|
|
|
formattedFinishedAt: function() {
|
|
var finishedAt;
|
|
if (finishedAt = this.get('finishedAt')) {
|
|
return moment(finishedAt).format('lll');
|
|
}
|
|
}.property('finishedAt')
|
|
|
|
});
|
|
|
|
export default Build;
|