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