forgeplus/app/models/ci/repo.rb

108 lines
3.0 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class Ci::Repo < Ci::RemoteBase
self.primary_key = 'repo_id'
belongs_to :user, foreign_key: :repo_user_id
has_one :perm, foreign_key: :perm_repo_uid
has_many :builds, foreign_key: :build_repo_id, dependent: :destroy
def self.find_with_namespace(namespace_path, identifier)
logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} "
user = Ci::User.find_by_user_login namespace_path
repo = Ci::Repo.where(repo_namespace: namespace_path, repo_name: identifier).first
[user, repo]
end
def self.find_all_with_namespace(namespace_path)
logger.info "########namespace_path: #{namespace_path}"
repos = Ci::Repo.where(repo_namespace: namespace_path)
return repos
end
def self.load_repo_by_repo_slug(repo_slug)
logger.info "########repo_slug: #{repo_slug}"
repo = Ci::Repo.where(repo_slug: repo_slug).first
return repo
end
def find_by_repo_name(repo_name)
logger.info "########repo_name: #{repo_name}"
repos = Ci::Repo.where(repo_name: repo_name)
return repos
end
def self.auto_create!(user, project)
create_params = {
repo_user_id: user.user_id,
repo_namespace: project.owner.login,
repo_name: project.identifier,
repo_slug: "#{project.owner.login}/#{project.identifier}",
repo_clone_url: project.repository.url,
repo_branch: 'master',
repo_config: '.trustie-pipeline.yml'
}
repo = create_repo(create_params)
repo
end
def self.create_repo(create_params)
repo = new(
repo_user_id: create_params[:repo_user_id],
repo_namespace: create_params[:repo_namespace],
repo_name: create_params[:repo_name],
repo_slug: create_params[:repo_slug],
repo_scm: "git",
repo_ssh_url: "",
repo_html_url: "",
repo_clone_url: create_params[:repo_clone_url],
repo_active: 1,
repo_private: true,
repo_visibility: 'private',
repo_branch: create_params[:repo_branch],
repo_counter: 0,
repo_trusted: false,
repo_protected: false,
repo_synced: 0,
repo_version: 1,
repo_timeout: 60,
repo_config: create_params[:repo_config],
repo_created: Time.now.to_i,
repo_updated: Time.now.to_i
)
repo.repo_signer = repo.generate_code
repo.repo_secret = repo.generate_code
if repo.save!
Ci::Perm.auto_create!(create_params[:repo_user_id], repo.id)
repo.update_column(:repo_uid, repo.id)
repo
end
end
# 取消激活同一个项目多个repo
def deactivate_repos!
repos = find_by_repo_name(self.repo_name)
repos.each do |repo|
repo.update_column(:repo_active, 0)
end
end
def activate!(project)
repos = find_by_repo_name(self.repo_name)
project.update_column(:open_devops, true)
project.increment!(:open_devops_count)
repos.each do |repo|
repo.update_column(:repo_active, 1)
end
end
def deactivate!
update_column(:repo_active, 0)
end
def destroy!
self.destroy
end
end