新增:同步仓库绑定webhook
This commit is contained in:
parent
1c1cceabbe
commit
db40a21b04
|
@ -43,6 +43,7 @@ class Api::V1::Projects::SyncRepositoriesController < Api::V1::BaseController
|
||||||
@sync_repositories = SyncRepository.where(id: params[:sync_repository_ids].split(","))
|
@sync_repositories = SyncRepository.where(id: params[:sync_repository_ids].split(","))
|
||||||
@sync_repositories.each do |repo|
|
@sync_repositories.each do |repo|
|
||||||
Reposync::DeleteRepoService.call(repo.repo_name)
|
Reposync::DeleteRepoService.call(repo.repo_name)
|
||||||
|
Api::V1::Projects::Webhooks::DeleteService.call(@project, repo.webhook_gid)
|
||||||
repo.destroy
|
repo.destroy
|
||||||
end
|
end
|
||||||
render_ok
|
render_ok
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
# external_token :string(255)
|
# external_token :string(255)
|
||||||
|
# webhook_gid :integer
|
||||||
#
|
#
|
||||||
# Indexes
|
# Indexes
|
||||||
#
|
#
|
||||||
|
|
|
@ -3,7 +3,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
|
||||||
include ActiveModel::Model
|
include ActiveModel::Model
|
||||||
|
|
||||||
attr_reader :project, :type, :external_token, :external_repo_address, :sync_granularity, :external_branch_name, :gitlink_branch_name, :first_sync_direction
|
attr_reader :project, :type, :external_token, :external_repo_address, :sync_granularity, :external_branch_name, :gitlink_branch_name, :first_sync_direction
|
||||||
attr_accessor :sync_repository1, :sync_repository2, :sync_repository_branch1, :sync_repository_branch2
|
attr_accessor :sync_repository1, :sync_repository2, :sync_repository_branch1, :sync_repository_branch2, :gitea_webhook
|
||||||
|
|
||||||
validates :type, inclusion: {in: %w(SyncRepositories::Gitee SyncRepositories::Github)}
|
validates :type, inclusion: {in: %w(SyncRepositories::Gitee SyncRepositories::Github)}
|
||||||
validates :external_repo_address, format: { with: CustomRegexp::URL_REGEX, multiline: true, message: "地址格式不正确" }
|
validates :external_repo_address, format: { with: CustomRegexp::URL_REGEX, multiline: true, message: "地址格式不正确" }
|
||||||
|
@ -24,6 +24,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
|
||||||
def call
|
def call
|
||||||
raise Error, errors.full_messages.join(",") unless valid?
|
raise Error, errors.full_messages.join(",") unless valid?
|
||||||
|
|
||||||
|
create_webhook
|
||||||
if sync_granularity == 2
|
if sync_granularity == 2
|
||||||
# 创建两个不同方向的同步仓库
|
# 创建两个不同方向的同步仓库
|
||||||
create_sync_repository
|
create_sync_repository
|
||||||
|
@ -35,7 +36,6 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
|
||||||
create_sync_repository
|
create_sync_repository
|
||||||
touch_first_sync
|
touch_first_sync
|
||||||
end
|
end
|
||||||
create_webhook
|
|
||||||
|
|
||||||
[@sync_repository1, @sync_repository2, @sync_repository_branch1, @sync_repository_branch2]
|
[@sync_repository1, @sync_repository2, @sync_repository_branch1, @sync_repository_branch2]
|
||||||
end
|
end
|
||||||
|
@ -52,8 +52,8 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
|
||||||
repository1 = Reposync::CreateSyncRepoService.call(repo_name(1), gitlink_repo_address, gitlink_token, external_repo_address, external_token, sync_granularity, 1)
|
repository1 = Reposync::CreateSyncRepoService.call(repo_name(1), gitlink_repo_address, gitlink_token, external_repo_address, external_token, sync_granularity, 1)
|
||||||
repository2 = Reposync::CreateSyncRepoService.call(repo_name(2), gitlink_repo_address, gitlink_token, external_repo_address, external_token, sync_granularity, 2)
|
repository2 = Reposync::CreateSyncRepoService.call(repo_name(2), gitlink_repo_address, gitlink_token, external_repo_address, external_token, sync_granularity, 2)
|
||||||
raise Error, '创建同步仓库失败' if repository1[0].to_i > 0 || repository2[0].to_i > 0
|
raise Error, '创建同步仓库失败' if repository1[0].to_i > 0 || repository2[0].to_i > 0
|
||||||
@sync_repository1 = SyncRepository.create!(project: project, type: type, repo_name: repo_name(1), external_repo_address: external_repo_address, external_token: external_token, sync_granularity: sync_granularity, sync_direction: 1)
|
@sync_repository1 = SyncRepository.create!(project: project, type: type, repo_name: repo_name(1), external_repo_address: external_repo_address, external_token: external_token, sync_granularity: sync_granularity, sync_direction: 1, webhook_gid: @gitea_webhook["id"])
|
||||||
@sync_repository2 = SyncRepository.create!(project: project, type: type, repo_name: repo_name(2), external_repo_address: external_repo_address, external_token: external_token, sync_granularity: sync_granularity, sync_direction: 2)
|
@sync_repository2 = SyncRepository.create!(project: project, type: type, repo_name: repo_name(2), external_repo_address: external_repo_address, external_token: external_token, sync_granularity: sync_granularity, sync_direction: 2, webhook_gid: @gitea_webhook["id"])
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_sync_repository_branch
|
def create_sync_repository_branch
|
||||||
|
@ -82,7 +82,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
|
||||||
type: 'reposync',
|
type: 'reposync',
|
||||||
events: ["push"]
|
events: ["push"]
|
||||||
}
|
}
|
||||||
Api::V1::Projects::Webhooks::CreateService.call(project, webhook_params)
|
@gitea_webhook = Api::V1::Projects::Webhooks::CreateService.call(project, webhook_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def repo_name(sync_direction)
|
def repo_name(sync_direction)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddWebhookGidToSyncRepository < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
add_column :sync_repositories, :webhook_gid, :integer
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue