lib/release_tools/project/base_project.rb (114 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Project
class BaseProject
REMOTE_PATTERN = %r{
\A.*:
(?<group>.*)
/
(?<project>[^/]+)
\.git\z
}x
def self.default_branch
'master'
end
def self.remotes
if SharedStatus.security_release?
self::REMOTES.slice(:dev, :security)
else
self::REMOTES
end
end
def self.path
extract_path_from_remote(:canonical).captures.join('/')
end
def self.dev_path
extract_path_from_remote(:dev).captures.join('/')
end
def self.ops_path
extract_path_from_remote(:ops).captures.join('/')
end
def self.security_path
extract_path_from_remote(:security).captures.join('/')
end
def self.group
extract_path_from_remote(:canonical)[:group]
end
def self.dev_group
extract_path_from_remote(:dev)[:group]
end
def self.ops_group
extract_path_from_remote(:ops)[:group]
end
def self.security_group
extract_path_from_remote(:security)[:group]
end
def self.project_name
extract_path_from_remote(:canonical)[:project]
end
def self.metadata_project_name
project_name
end
def self.canonical_or_security_path
# This method exists so that it's more clear that one wants the path
# based on the patch release status, as using `#to_s` could make one
# think they can just remove the use of `#to_s` and produce the same
# result.
to_s
end
def self.auto_deploy_path
security_path
end
def self.to_s
if SharedStatus.security_release?
security_path
else
path
end
end
def self.inspect
if const_defined?(:REMOTES)
to_s
else
super
end
end
def self.extract_path_from_remote(remote_key)
remote = self::REMOTES.fetch(remote_key) do |name|
raise "Invalid remote for #{path}: #{name}"
end
if remote =~ REMOTE_PATTERN
$LAST_MATCH_INFO
else
raise "Unable to extract path from #{remote}"
end
end
def self.ignore_versions
[]
end
def self.extract_id_from_remote(remote_key)
return unless const_defined?(:IDS)
self::IDS.fetch(remote_key) do |name|
raise "Invalid remote for #{path}: #{name}"
end
end
def self.canonical_id
extract_id_from_remote(:canonical)
end
def self.ops_id
extract_id_from_remote(:ops)
end
def self.security_id
extract_id_from_remote(:security)
end
def self.ee_branch?
false
end
def self.ee_tag?
false
end
def self.tag_for(version)
version.tag(ee: ee_tag?)
end
def self.stable_branch_for(version)
version.stable_branch(ee: ee_branch?)
end
private_class_method :extract_path_from_remote, :extract_id_from_remote
end
end
end