From db40a21b044218d0389fd2b01610064959d986fa Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 29 Apr 2024 15:19:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=BB=91=E5=AE=9Awebhook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/v1/projects/sync_repositories_controller.rb | 1 + app/models/sync_repository.rb | 1 + .../v1/projects/sync_repositories/create_service.rb | 10 +++++----- ...0240429070012_add_webhook_gid_to_sync_repository.rb | 5 +++++ 4 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20240429070012_add_webhook_gid_to_sync_repository.rb diff --git a/app/controllers/api/v1/projects/sync_repositories_controller.rb b/app/controllers/api/v1/projects/sync_repositories_controller.rb index 4a6473cdf..c0600ef16 100644 --- a/app/controllers/api/v1/projects/sync_repositories_controller.rb +++ b/app/controllers/api/v1/projects/sync_repositories_controller.rb @@ -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 diff --git a/app/models/sync_repository.rb b/app/models/sync_repository.rb index 42579c81f..13af04f88 100644 --- a/app/models/sync_repository.rb +++ b/app/models/sync_repository.rb @@ -12,6 +12,7 @@ # created_at :datetime not null # updated_at :datetime not null # external_token :string(255) +# webhook_gid :integer # # Indexes # diff --git a/app/services/api/v1/projects/sync_repositories/create_service.rb b/app/services/api/v1/projects/sync_repositories/create_service.rb index 5a3fd1bb4..75d7f7e7e 100644 --- a/app/services/api/v1/projects/sync_repositories/create_service.rb +++ b/app/services/api/v1/projects/sync_repositories/create_service.rb @@ -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) diff --git a/db/migrate/20240429070012_add_webhook_gid_to_sync_repository.rb b/db/migrate/20240429070012_add_webhook_gid_to_sync_repository.rb new file mode 100644 index 000000000..dfd3e6c72 --- /dev/null +++ b/db/migrate/20240429070012_add_webhook_gid_to_sync_repository.rb @@ -0,0 +1,5 @@ +class AddWebhookGidToSyncRepository < ActiveRecord::Migration[5.2] + def change + add_column :sync_repositories, :webhook_gid, :integer + end +end