88 lines
2.5 KiB
CoffeeScript
88 lines
2.5 KiB
CoffeeScript
require 'travis/model'
|
|
|
|
@Travis.Build = Travis.Model.extend Travis.DurationCalculations,
|
|
eventType: DS.attr('string')
|
|
repoId: DS.attr('number')
|
|
commitId: DS.attr('number')
|
|
|
|
state: DS.attr('string')
|
|
number: DS.attr('number')
|
|
branch: DS.attr('string')
|
|
message: DS.attr('string')
|
|
_duration: DS.attr('number')
|
|
_config: DS.attr('object')
|
|
startedAt: DS.attr('string')
|
|
finishedAt: DS.attr('string')
|
|
pullRequest: DS.attr('boolean')
|
|
pullRequestTitle: DS.attr('string')
|
|
pullRequestNumber: DS.attr('number')
|
|
|
|
repo: DS.belongsTo('Travis.Repo')
|
|
commit: DS.belongsTo('Travis.Commit')
|
|
jobs: DS.hasMany('Travis.Job')
|
|
|
|
config: (->
|
|
Travis.Helpers.compact(@get('_config'))
|
|
).property('_config')
|
|
|
|
isPullRequest: (->
|
|
@get('eventType') == 'pull_request'
|
|
).property('eventType')
|
|
|
|
isMatrix: (->
|
|
@get('jobs.length') > 1
|
|
).property('jobs.length')
|
|
|
|
isFinished: (->
|
|
@get('state') in ['passed', 'failed', 'errored', 'canceled']
|
|
).property('state')
|
|
|
|
requiredJobs: (->
|
|
@get('jobs').filter (data) -> !data.get('allowFailure')
|
|
).property('jobs.@each.allowFailure')
|
|
|
|
allowedFailureJobs: (->
|
|
@get('jobs').filter (data) -> data.get('allowFailure')
|
|
).property('jobs.@each.allowFailure')
|
|
|
|
configKeys: (->
|
|
return [] unless config = @get('config')
|
|
keys = $.intersect($.keys(config), Travis.CONFIG_KEYS)
|
|
headers = (I18n.t(key) for key in ['build.job', 'build.duration', 'build.finished_at'])
|
|
$.map(headers.concat(keys), (key) -> return $.camelize(key))
|
|
).property('config')
|
|
|
|
canCancel: (->
|
|
@get('state') == 'created' # TODO
|
|
).property('state')
|
|
|
|
cancel: (->
|
|
Travis.ajax.post "/builds/#{@get('id')}", _method: 'delete'
|
|
)
|
|
|
|
requeue: ->
|
|
Travis.ajax.post '/requests', build_id: @get('id')
|
|
|
|
isAttributeLoaded: (key) ->
|
|
if ['_duration', 'finishedAt'].contains(key) && !@get('isFinished')
|
|
return true
|
|
else
|
|
@_super(key)
|
|
|
|
|
|
@Travis.Build.reopenClass
|
|
byRepoId: (id, parameters) ->
|
|
@find($.extend(parameters || {}, repository_id: id))
|
|
|
|
branches: (options) ->
|
|
@find repository_id: options.repoId, branches: true
|
|
|
|
olderThanNumber: (id, build_number, type) ->
|
|
console.log type
|
|
# TODO fix this api and use some kind of pagination scheme
|
|
options = { repository_id: id, after_number: build_number }
|
|
if type?
|
|
options.event_type = type.replace(/s$/, '') # poor man's singularize
|
|
|
|
@find(options)
|