forgeplus/app/controllers/ci/projects_controller.rb

102 lines
3.8 KiB
Ruby

class Ci::ProjectsController < Ci::BaseController
include RepositoriesHelper
include Ci::CloudAccountManageable
before_action :load_project
before_action :load_repo, only: [:update_trustie_pipeline, :activate, :deactivate]
before_action :authorize_owner!, only: [:authorize]
before_action :find_cloud_account, only: [:authorize, :activate, :deactivate]
def authorize
@user = current_user
end
# get .trustie-pipeline.yml file
def get_trustie_pipeline
file_path_uri = URI.parse('.trustie-pipeline.yml')
interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master")
if interactor.success?
file = interactor.result
return render json: {} if file[:status]
json = {name: file['name'], path: file['path'], sha: file['sha'], content: render_decode64_content(file['content'])}
render json: json
end
end
def update_trustie_pipeline
interactor = Gitea::UpdateFileInteractor.call(current_user.gitea_token, params[:owner], params.merge(identifier: @project.identifier))
if interactor.success?
@file = interactor.result
render_result(1, "更新成功")
else
render_error(interactor.error)
end
end
def activate
return render_error('你还未认证') unless current_user.ci_certification?
begin
ActiveRecord::Base.transaction do
if @repo
Rails.logger.info "==========> @repo已经存在 直接激活: #{@repo.to_json}"
Rails.logger.info "==========> @repo.repo_signer: #{@repo.repo_signer} ==> @repo.repo_secret: #{@repo.repo_secret}"
if @repo.repo_signer.blank? && @repo.repo_secret.blank?
@repo.update_columns(
repo_user_id: @ci_user.user_id,
repo_namespace: @project.owner.login,
repo_name: @project.identifier,
repo_slug: "#{@project.owner.login}/#{@project.identifier}",
repo_scm: "git",
repo_ssh_url: "",
repo_html_url: "",
repo_clone_url: @project.repository.url,
repo_active: 0,
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_timeout: 60,
repo_config: '.trustie-pipeline.yml',
repo_signer: Ci::Repo.generate_code!,
repo_secret: Ci::Repo.generate_code!
)
end
Rails.logger.info "==========> 更新后的repo: #{@repo.to_json}"
return render_error('该项目已经激活') if @repo.repo_active?
@repo.activate!(@project)
else
Rails.logger.info "==========> 没有@repo, 进行创建..."
@repo = Ci::Repo.auto_create!(@ci_user, @project)
@ci_user.update_column(:user_syncing, false)
end
if @project.gitea_webhook_id.blank?
result = bind_hook!(current_user, @cloud_account, @repo)
Rails.logger.info "########## result: #{result}"
@project.update_columns(open_devops: true, gitea_webhook_id: result['id'])
@project.increment!(:open_devops_count)
@cloud_account.update_column(:ci_user_id, @ci_user.user_id)
Rails.logger.info "########## @cloud_account: #{@cloud_account.to_json} --- @repo: #{@repo.to_json} --- @project: #{@project.to_json}"
end
end
render_ok
rescue Exception => ex
render_error(ex.message)
end
end
def deactivate
return render_error('该项目已经取消激活') if !@repo.repo_active?
@project.update_column(:open_devops, false)
@repo.deactivate_repos!
render_ok
end
end