From 27cc8ab96d1df1803a238778cd1f76e80c71e7fd Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Mon, 11 May 2020 18:33:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=8A=E9=93=BE=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=8F=8A=E4=BF=AE=E6=94=B9webhook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 7 +++++- app/controllers/projects_controller.rb | 1 + app/controllers/repositories_controller.rb | 4 ++++ app/jobs/project_create_chain_job.rb | 19 +++++++++++++++ .../gitea/repository/hooks/create_service.rb | 23 +++++++++++++++++++ app/services/repositories/create_service.rb | 18 +++++++++++++++ app/views/projects/index.json.jbuilder | 4 ++-- config/routes.rb | 1 + 8 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 app/jobs/project_create_chain_job.rb create mode 100644 app/services/gitea/repository/hooks/create_service.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e05e343e3..f16050151 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -381,7 +381,12 @@ class ApplicationController < ActionController::Base end def current_user - User.current + if Rails.env.development? + User.find(1) + else + User.current + end + # User.current end ## 默认输出json diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 02dacc5a1..c3a750cb3 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -16,6 +16,7 @@ class ProjectsController < ApplicationController ActiveRecord::Base.transaction do Projects::CreateForm.new(project_params).validate! @project = Projects::CreateService.new(current_user, project_params).call + end rescue Exception => e uid_logger_error(e.message) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 557ed4729..c5cd5a623 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -123,6 +123,10 @@ class RepositoriesController < ApplicationController end end + def repo_hook + Rails.logger.info("#####______222________########") + end + private def find_project diff --git a/app/jobs/project_create_chain_job.rb b/app/jobs/project_create_chain_job.rb new file mode 100644 index 000000000..ebd996df6 --- /dev/null +++ b/app/jobs/project_create_chain_job.rb @@ -0,0 +1,19 @@ +class ProjectCreateChainJob < ApplicationJob + queue_as :default + + def perform(owner_login, reponame) + status = 0 + + 5.times do |i| + if status == 200 + Rails.logger.info("########_repository__#{reponame}______create_chain_success__try:_#{i+1}_") + break + else + Rails.logger.info("########_repository__#{reponame}______start_to_create_chain__try:_#{i+1}_") + create_chain = system("chain trustieCreate #{owner_login} #{reponame}") + status = create_chain[:status].to_i + Rails.logger.info("########_repository__#{reponame}__create_chain:___#{create_chain}____failed_to_create_chain__") + end + end + end +end \ No newline at end of file diff --git a/app/services/gitea/repository/hooks/create_service.rb b/app/services/gitea/repository/hooks/create_service.rb new file mode 100644 index 000000000..422807760 --- /dev/null +++ b/app/services/gitea/repository/hooks/create_service.rb @@ -0,0 +1,23 @@ +class Gitea::Repository::Hooks::CreateService < Gitea::ClientService + attr_reader :user, :repo_name, :body + + def initialize(user, repo_name, body) + @user = user + @repo_name = repo_name + @body = body + end + + def call + response = post(url, params) + end + + private + def params + body.merge(token: user.gitea_token) + end + + def url + "/repos/#{user.login}/#{repo_name}/hooks".freeze + end + +end \ No newline at end of file diff --git a/app/services/repositories/create_service.rb b/app/services/repositories/create_service.rb index e259d28ac..c0543a31f 100644 --- a/app/services/repositories/create_service.rb +++ b/app/services/repositories/create_service.rb @@ -14,6 +14,24 @@ class Repositories::CreateService < ApplicationService gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, gitea_repository_params).call sync_project(@repository, gitea_repository) sync_repository(@repository, gitea_repository) + Rails.logger.info("#######________reuqest_domain____#########{EduSetting.get("host_name")}") + #if project.project_type == "common" + #hook_params = { + # active: true, + # type: "gitea" + # branch_filter: "", + # config: { + # content_type: "application/json", + # url: "#{EduSetting.get("host_name")}/repositories/#{project.id}/repo_hooks", + # http_method: "post" + #}, + #events: ["create", "pull", "push"], + #} + #Gitea::Repository::Hooks::CreateService.new(user, @repository.try(:identifier), hook_params).call + #end + + # 托管项目创建上链操作 + ProjectCreateChainJob.perform_later(user.try(:login), @repository.try(:identifier)) if project.project_type == "common" end @repository end diff --git a/app/views/projects/index.json.jbuilder b/app/views/projects/index.json.jbuilder index fc0bb470f..858cb5ac2 100644 --- a/app/views/projects/index.json.jbuilder +++ b/app/views/projects/index.json.jbuilder @@ -8,8 +8,8 @@ json.projects @projects do |project| json.name project.name json.description Nokogiri::HTML(project.description).text json.visits project.visits - json.praises_count project.praises_count - json.forked_count project.forked_count + json.praises_count project.praises_count.to_i + json.forked_count project.forked_count.to_i json.is_public project.is_public json.mirror_url project.repository&.mirror_url json.last_update_time render_unix_time(project.updated_on) diff --git a/config/routes.rb b/config/routes.rb index 1f1e54b25..badca06ba 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -192,6 +192,7 @@ Rails.application.routes.draw do post :create_file put :update_file delete :delete_file + post :repo_hook end end