
- Re-factor - Remove code for notifications - Remove addons - Remove travis-core gem. - Ignore logs directory only - Move core tests to spec/lib
113 lines
2.4 KiB
Ruby
113 lines
2.4 KiB
Ruby
require 'active_record'
|
|
require 'simple_states'
|
|
require 'travis/model/encrypted_column'
|
|
|
|
# Models an incoming request. The only supported source for requests currently is Github.
|
|
#
|
|
# The Request will be configured by fetching `.travis.yml` from the Github API
|
|
# and needs to be approved based on the configuration. Once approved the
|
|
# Request creates a Build.
|
|
class Request < Travis::Model
|
|
require 'travis/model/request/pull_request'
|
|
|
|
include SimpleStates
|
|
|
|
serialize :token, Travis::Model::EncryptedColumn.new(disable: true)
|
|
|
|
class << self
|
|
def last_by_head_commit(head_commit)
|
|
where(head_commit: head_commit).order(:id).last
|
|
end
|
|
|
|
def older_than(id)
|
|
recent.where('id < ?', id)
|
|
end
|
|
|
|
def recent(limit = 25)
|
|
order('id DESC').limit(limit)
|
|
end
|
|
end
|
|
|
|
belongs_to :commit
|
|
belongs_to :repository
|
|
belongs_to :owner, polymorphic: true
|
|
has_many :builds
|
|
has_many :events, as: :source
|
|
|
|
validates :repository_id, presence: true
|
|
|
|
serialize :config
|
|
serialize :payload
|
|
|
|
def event_type
|
|
read_attribute(:event_type) || 'push'
|
|
end
|
|
|
|
def ref
|
|
payload['ref'] if payload
|
|
end
|
|
|
|
def branch_name
|
|
ref.scan(%r{refs/heads/(.*?)$}).flatten.first if ref
|
|
end
|
|
|
|
def tag_name
|
|
ref.scan(%r{refs/tags/(.*?)$}).flatten.first if ref
|
|
end
|
|
|
|
def api_request?
|
|
event_type == 'api'
|
|
end
|
|
|
|
def pull_request?
|
|
event_type == 'pull_request'
|
|
end
|
|
|
|
def pull_request
|
|
@pull_request ||= PullRequest.new(payload && payload['pull_request'])
|
|
end
|
|
|
|
def pull_request_title
|
|
pull_request.title if pull_request?
|
|
end
|
|
|
|
def pull_request_number
|
|
pull_request.number if pull_request?
|
|
end
|
|
|
|
def head_repo
|
|
pull_request.head_repo
|
|
end
|
|
|
|
def base_repo
|
|
pull_request.base_repo
|
|
end
|
|
|
|
def head_branch
|
|
pull_request.head_branch
|
|
end
|
|
|
|
def base_branch
|
|
pull_request.base_branch
|
|
end
|
|
|
|
def config_url
|
|
GH.full_url("repos/#{repository.slug}/contents/.travis.yml?ref=#{commit.commit}").to_s
|
|
end
|
|
|
|
def same_repo_pull_request?
|
|
begin
|
|
head_repo && base_repo && head_repo == base_repo
|
|
rescue => e
|
|
Travis.logger.error("[request:#{id}] Couldn't determine whether pull request is from the same repository: #{e.message}")
|
|
false
|
|
end
|
|
end
|
|
|
|
def creates_jobs?
|
|
Build::Config::Matrix.new(
|
|
Build::Config.new(config).normalize, multi_os: repository.multi_os_enabled?, dist_group_expansion: repository.dist_group_expansion_enabled?
|
|
).expand.size > 0
|
|
end
|
|
end
|