新增:同步仓库绑定webhook

This commit is contained in:
yystopf 2024-04-29 15:19:07 +08:00
parent 1c1cceabbe
commit db40a21b04
4 changed files with 12 additions and 5 deletions

View File

@ -43,6 +43,7 @@ class Api::V1::Projects::SyncRepositoriesController < Api::V1::BaseController
@sync_repositories = SyncRepository.where(id: params[:sync_repository_ids].split(","))
@sync_repositories.each do |repo|
Reposync::DeleteRepoService.call(repo.repo_name)
Api::V1::Projects::Webhooks::DeleteService.call(@project, repo.webhook_gid)
repo.destroy
end
render_ok

View File

@ -12,6 +12,7 @@
# created_at :datetime not null
# updated_at :datetime not null
# external_token :string(255)
# webhook_gid :integer
#
# Indexes
#

View File

@ -3,7 +3,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
include ActiveModel::Model
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 :external_repo_address, format: { with: CustomRegexp::URL_REGEX, multiline: true, message: "地址格式不正确" }
@ -24,6 +24,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
def call
raise Error, errors.full_messages.join(",") unless valid?
create_webhook
if sync_granularity == 2
# 创建两个不同方向的同步仓库
create_sync_repository
@ -35,7 +36,6 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
create_sync_repository
touch_first_sync
end
create_webhook
[@sync_repository1, @sync_repository2, @sync_repository_branch1, @sync_repository_branch2]
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)
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
@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_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_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, webhook_gid: @gitea_webhook["id"])
end
def create_sync_repository_branch
@ -82,7 +82,7 @@ class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
type: 'reposync',
events: ["push"]
}
Api::V1::Projects::Webhooks::CreateService.call(project, webhook_params)
@gitea_webhook = Api::V1::Projects::Webhooks::CreateService.call(project, webhook_params)
end
def repo_name(sync_direction)

View File

@ -0,0 +1,5 @@
class AddWebhookGidToSyncRepository < ActiveRecord::Migration[5.2]
def change
add_column :sync_repositories, :webhook_gid, :integer
end
end