add hooks controler and related services
This commit is contained in:
parent
63cf2f0dc8
commit
0b89372eef
|
@ -0,0 +1,85 @@
|
||||||
|
class HooksController < ApplicationController
|
||||||
|
before_action :require_login, except: [:index, :show]
|
||||||
|
before_action :find_project_with_id
|
||||||
|
before_action :set_repository
|
||||||
|
|
||||||
|
def index
|
||||||
|
hooks_response = Gitea::Hooks::ListService.new(@user, @repository.try(:identifier)).call
|
||||||
|
if hooks_response.status == 200
|
||||||
|
lists = JSON.parse(hooks_response.body)
|
||||||
|
@hooks_size = lists.size
|
||||||
|
@hooks = paginate(lists)
|
||||||
|
else
|
||||||
|
normal_status(-1, "出现错误")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
# hook_params = {
|
||||||
|
# active: true,
|
||||||
|
# type: "gitea",
|
||||||
|
# branch_filter: "",
|
||||||
|
# config: {
|
||||||
|
# content_type: "application/json",
|
||||||
|
# url: "#{EduSetting.get("host_name")}/repositories/#{project.id}/repo_hooks.json",
|
||||||
|
# http_method: "post"
|
||||||
|
# },
|
||||||
|
# events: ["create", "pull", "push"],
|
||||||
|
# }
|
||||||
|
# hook_params = {
|
||||||
|
# is_active: params[:is_active] || false,
|
||||||
|
# type: params[:type],
|
||||||
|
# http_method: params[:http_method] || "POST",
|
||||||
|
# content_type: params[:content_type].to_i,
|
||||||
|
# secret: params[:secret],
|
||||||
|
# events: {
|
||||||
|
# push_only: params[:push_only] || false, # 是否为推送事件
|
||||||
|
# send_everything: params[:send_everything] || false, #是否为所有事件
|
||||||
|
# choose_events: params[:choose_events] || false, #是否为自定义事件
|
||||||
|
# branch_filter: params[:branch_filter] || "*",
|
||||||
|
# events: {
|
||||||
|
# create: params[:create] || false, #创建分支/标签
|
||||||
|
# delete: params[:delete] || false, #删除分支/标签
|
||||||
|
# fork: params[:fork] || false, #仓库被派生
|
||||||
|
# issues: params[:issues] || false, #工单
|
||||||
|
# issue_comment: params[:issue_comment] || false, #评论
|
||||||
|
# push: params[:push] || false # 推送
|
||||||
|
# pull_request: params[:pull_request] || false #合并请求
|
||||||
|
# repository: params[:repository] || false #仓库
|
||||||
|
# release: params[:release] || false #版本发布
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
|
hook_params = params[:hook_params].compact
|
||||||
|
Gitea::Hooks::CreateService.new(@user, @repository.try(:identifier), hook_params).call #创建gitea的hook功能
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
hook_params = params[:hook_params].compact
|
||||||
|
response = Gitea::Hooks::UpdateService.new(@user, @repository.try(:identifier), hook_params, params[:id]).call
|
||||||
|
if response.status == 200
|
||||||
|
normal_status(1, "更新成功")
|
||||||
|
else
|
||||||
|
normal_status(-1, "更新失败")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
response = Gitea::Hooks::DestroyService.new(@user, @repository.try(:identifier), params[:id]).call
|
||||||
|
if response.status == 204
|
||||||
|
normal_status(1, "删除成功")
|
||||||
|
else
|
||||||
|
normal_status(-1, "删除失败")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_repository
|
||||||
|
@repository = @project.repository
|
||||||
|
@user = @project.owner
|
||||||
|
normal_status(-1, "仓库不存在") unless @repository.present?
|
||||||
|
normal_status(-1, "用户不存在") unless @user.present?
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
module HooksHelper
|
||||||
|
end
|
|
@ -1,4 +1,4 @@
|
||||||
class Gitea::Repository::Hooks::CreateService < Gitea::ClientService
|
class Gitea::Hooks::CreateService < Gitea::ClientService
|
||||||
attr_reader :user, :repo_name, :body
|
attr_reader :user, :repo_name, :body
|
||||||
|
|
||||||
def initialize(user, repo_name, body)
|
def initialize(user, repo_name, body)
|
|
@ -0,0 +1,23 @@
|
||||||
|
class Gitea::Hooks::DestroyService < Gitea::ClientService
|
||||||
|
attr_reader :user, :repo_name,:hook_id
|
||||||
|
|
||||||
|
def initialize(user, repo_name, hook_id)
|
||||||
|
@user = user
|
||||||
|
@repo_name = repo_name
|
||||||
|
@hook_id = hook_id
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
response = delete(url, params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def params
|
||||||
|
Hash.new.merge(token: user.gitea_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
"/repos/#{user.login}/#{repo_name}/hooks/#{hook_id}".freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,23 @@
|
||||||
|
class Gitea::Hooks::ListService < Gitea::ClientService
|
||||||
|
attr_reader :user, :repo_name
|
||||||
|
|
||||||
|
def initialize(user, repo_name)
|
||||||
|
@user = user
|
||||||
|
@repo_name = repo_name
|
||||||
|
@body = body
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
response = get(url, params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def params
|
||||||
|
Hash.new.merge(token: user.gitea_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
"/repos/#{user.login}/#{repo_name}/hooks".freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,24 @@
|
||||||
|
class Gitea::Hooks::UpdateService < Gitea::ClientService
|
||||||
|
attr_reader :user, :repo_name, :body,:hook_id
|
||||||
|
|
||||||
|
def initialize(user, repo_name, body, hook_id)
|
||||||
|
@user = user
|
||||||
|
@repo_name = repo_name
|
||||||
|
@body = body
|
||||||
|
@hook_id = hook_id
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
response = patch(url, params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def params
|
||||||
|
body.merge(token: user.gitea_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
"/repos/#{user.login}/#{repo_name}/hooks/#{hook_id}".freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -15,25 +15,14 @@ class Repositories::CreateService < ApplicationService
|
||||||
sync_project(@repository, gitea_repository)
|
sync_project(@repository, gitea_repository)
|
||||||
sync_repository(@repository, gitea_repository)
|
sync_repository(@repository, gitea_repository)
|
||||||
if project.project_type == "common"
|
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.json",
|
|
||||||
http_method: "post"
|
|
||||||
},
|
|
||||||
events: ["create", "pull", "push"],
|
|
||||||
}
|
|
||||||
chain_params = {
|
chain_params = {
|
||||||
type: "create",
|
type: "create",
|
||||||
ownername: user.try(:login),
|
ownername: user.try(:login),
|
||||||
reponame: @repository.try(:id)
|
reponame: @repository.try(:id)
|
||||||
}
|
}
|
||||||
ProjectCreateChainJob.perform_later(chain_params) #创建上链操作
|
ProjectCreateChainJob.perform_later(chain_params) #创建上链操作
|
||||||
#暂时gitea的hook功能未完善
|
|
||||||
#Gitea::Repository::Hooks::CreateService.new(user, @repository.try(:identifier), hook_params).call #创建gitea的hook功能
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@repository
|
@repository
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
json.count @hooks_size
|
||||||
|
json.hooks do
|
||||||
|
json.array! @hooks.each do |h|
|
||||||
|
json.merge! h
|
||||||
|
end
|
||||||
|
end
|
|
@ -53,6 +53,7 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :projects do
|
resources :projects do
|
||||||
|
resources :hooks
|
||||||
resources :pull_requests, except: [:destroy] do
|
resources :pull_requests, except: [:destroy] do
|
||||||
member do
|
member do
|
||||||
post :pr_merge
|
post :pr_merge
|
||||||
|
|
Loading…
Reference in New Issue