104 lines
3.0 KiB
JavaScript
104 lines
3.0 KiB
JavaScript
import Ember from 'ember';
|
|
import { githubCommit as githubCommitUrl } from 'travis/utils/urls';
|
|
import TravisRoute from 'travis/routes/basic';
|
|
import config from 'travis/config/environment';
|
|
|
|
export default Ember.Component.extend({
|
|
routing: Ember.inject.service('-routing'),
|
|
tagName: 'li',
|
|
classNameBindings: ['build.last_build.state'],
|
|
classNames: ['branch-row', 'row-li'],
|
|
isLoading: false,
|
|
isTriggering: false,
|
|
hasTriggered: false,
|
|
|
|
urlGithubCommit: function() {
|
|
return githubCommitUrl(this.get('build.repository.slug'), this.get('build.last_build.commit.sha'));
|
|
}.property('build.last_build'),
|
|
|
|
getLast5Builds: function() {
|
|
var apiEndpoint, branchName, lastBuilds, options, repoId;
|
|
lastBuilds = Ember.ArrayProxy.create({
|
|
content: [{}, {}, {}, {}, {}],
|
|
isLoading: true,
|
|
count: 0
|
|
});
|
|
if (!this.get('build.last_build')) {
|
|
lastBuilds.set('isLoading', false);
|
|
} else {
|
|
apiEndpoint = config.apiEndpoint;
|
|
repoId = this.get('build.repository.id');
|
|
branchName = this.get('build.name');
|
|
options = {};
|
|
if (this.get('auth.signedIn')) {
|
|
options.headers = {
|
|
Authorization: "token " + (this.auth.token())
|
|
};
|
|
}
|
|
$.ajax(apiEndpoint + "/v3/repo/" + repoId + "/builds?branch.name=" + branchName + "&limit=5&build.event_type=push,api", options).then(function(response) {
|
|
var array, i, j, ref;
|
|
array = response.builds.map(function(build) {
|
|
return Ember.Object.create(build);
|
|
});
|
|
if (array.length < 5) {
|
|
for (i = j = 1, ref = 5 - array.length; j <= ref; i = j += 1) {
|
|
array.push({});
|
|
}
|
|
}
|
|
lastBuilds.set('count', response['@pagination'].count);
|
|
lastBuilds.set('content', array);
|
|
return lastBuilds.set('isLoading', false);
|
|
});
|
|
}
|
|
return lastBuilds;
|
|
}.property(),
|
|
|
|
canTrigger: function() {
|
|
var permissions;
|
|
if (!this.get('auth.signedIn')) {
|
|
return false;
|
|
} else {
|
|
permissions = this.get('auth.currentUser.permissions');
|
|
if (permissions.contains(parseInt(this.get('build.repository.id')))) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}.property(),
|
|
|
|
triggerBuild: function() {
|
|
var apiEndpoint, options, repoId;
|
|
apiEndpoint = config.apiEndpoint;
|
|
repoId = this.get('build.repository.id');
|
|
options = {
|
|
type: 'POST',
|
|
body: {
|
|
request: {
|
|
branch: this.get('build.name')
|
|
}
|
|
}
|
|
};
|
|
if (this.get('auth.signedIn')) {
|
|
options.headers = {
|
|
Authorization: "token " + (this.auth.token())
|
|
};
|
|
}
|
|
return $.ajax(apiEndpoint + "/v3/repo/" + repoId + "/requests", options).then(() => {
|
|
this.set('isTriggering', false);
|
|
return this.set('hasTriggered', true);
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
tiggerBuild(branch) {
|
|
this.set('isTriggering', true);
|
|
return this.triggerBuild();
|
|
},
|
|
|
|
viewAllBuilds(branch) {
|
|
return this.get('routing').transitionTo('builds');
|
|
}
|
|
}
|
|
});
|