From ad43c6975b4a5e6320b31e7223231a6efdc5703f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 10 Sep 2020 18:00:37 +0800 Subject: [PATCH] =?UTF-8?q?ADD=20=E8=A7=A3=E5=86=B3ci=E7=AB=AF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8E=88=E6=9D=83=E5=90=8E=EF=BC=8C=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/cloud_accounts_controller.rb | 12 ++++++-- app/models/ci/perm.rb | 14 +++++++++ app/models/ci/repo.rb | 30 ++++++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index b6ed50c4e..8efe6c959 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -26,11 +26,17 @@ class Ci::CloudAccountsController < Ci::BaseController return render_error('请先在指定地址做用户认证') unless @user.ci_certification? return render_error('该项目已经激活') if @repo && @repo.repo_active? - - @cloud_account = Ci::CloudAccount.find params[:id] begin + @cloud_account = Ci::CloudAccount.find params[:id] ActiveRecord::Base.transaction do - repo.activate!(@user.user_id) + if @repo + return render_error('该项目已经激活') if @repo.repo_active? + @repo.activate!(@user.user_id) + else + @repo = Ci::Repo.auto_create!(@uesr, @project) + @user.update_column(:user_syncing, false) + end + result = bind_hook!(@user, @cloud_account, @repo) @project.update_columns(open_devops: true, gitea_webhook_id: result['id']) @cloud_account.update_column(:ci_user_id, @user.user_id) diff --git a/app/models/ci/perm.rb b/app/models/ci/perm.rb index 65ee7ab4b..e6bc2ebbb 100644 --- a/app/models/ci/perm.rb +++ b/app/models/ci/perm.rb @@ -3,4 +3,18 @@ class Ci::Perm < Ci::RemoteBase belongs_to :user, class_name: 'Ci::User', foreign_key: :perm_user_id belongs_to :repo, class_name: 'Ci::Repo', foreign_key: :perm_repo_uid + + def self.auto_create!(user, repo) + perm = new( + perm_user_id: user.user_id, + perm_repo_uid: repo.repo_id, + perm_read: true, + perm_write: true, + perm_admin: true, + perm_synced: 0, + perm_created: Time.now.to_i, + perm_updated: Time.now.to_i + ) + perm.save! + end end diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index b7d6473f9..85416c1bc 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -11,7 +11,7 @@ class Ci::Repo < Ci::RemoteBase user = Ci::User.find_by_user_login namespace_path repo = Ci::Repo.where(repo_namespace: namespace_path, repo_name: identifier).first - (user.blank? || repo.blank?) ? nil : [user, repo] + [user, repo] end def activate!(ci_user_id) @@ -24,4 +24,32 @@ class Ci::Repo < Ci::RemoteBase repo_updated: Time.now.to_i) end + def self.auto_create!(user, project) + repo = new( + 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_active: 1, + repo_private: true, + repo_visibility: 'private', + repo_branch: 'master', + repo_counter: 0, + repo_trusted: false, + repo_protected: false, + repo_synced: 0, + repo_version: 1, + repo_signer: generate_code, + repo_secret: generate_code, + repo_timeout: 60, + repo_config: '.trustie-pipeline.yml', + repo_created: Time.now.to_i, + repo_updated: Time.now.to_i + ) + if repo.save! + Ci::Perm.auto_create!(user, repo) + repo + end + end end