From ef0c44f29cbb9b38c40ba7a0765cd59310a4aca0 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 22 Feb 2021 10:10:22 +0800 Subject: [PATCH] [ADD]fix error script --- .../gitea/organization/get_service.rb | 22 ++++++++++ lib/tasks/sync_org_mirror_repo.rake | 44 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 app/services/gitea/organization/get_service.rb create mode 100644 lib/tasks/sync_org_mirror_repo.rake diff --git a/app/services/gitea/organization/get_service.rb b/app/services/gitea/organization/get_service.rb new file mode 100644 index 000000000..0b58239f9 --- /dev/null +++ b/app/services/gitea/organization/get_service.rb @@ -0,0 +1,22 @@ +class Gitea::Organization::GetService < Gitea::ClientService + attr_reader :user, :org_name + + def initialize(user, org_name) + @user = user + @org_name = org_name + end + + def call + response = get(url, params) + render_status(response) + end + + private + def params + Hash.new.merge(token: user.gitea_token) + end + + def url + "/orgs/#{org_name}".freeze + end +end \ No newline at end of file diff --git a/lib/tasks/sync_org_mirror_repo.rake b/lib/tasks/sync_org_mirror_repo.rake new file mode 100644 index 000000000..a62230369 --- /dev/null +++ b/lib/tasks/sync_org_mirror_repo.rake @@ -0,0 +1,44 @@ +# 执行示例 bundle exec rake sync_org_mirror_repo:init_org_gitea_uid +# RAILS_ENV=production bundle exec rake sync_org_mirror_repo:init_org_gitea_uid +# + +namespace :sync_org_mirror_repo do + desc "更新组织gitea_uid" + task init_org_gitea_uid: :environment do + puts "=========begin to init organization gitea_uid==========" + need_init_orgs = Organization.where(gitea_uid: nil) + puts "=========need init count is [#{need_init_orgs.size}]==========" + need_init_orgs.find_each do |org| + puts "=== fix org name is [#{org.name}] ===" + user = User.first + gitea_org = Gitea::Organization::GetService.call(user, org.name) + org.update(gitea_uid: gitea_org["id"]) + end + puts "========end to init organization gitea_uid===========" + end + + desc "同步组织创建失败的镜像项目" + task fix_mirror_repo: :environment do + puts "========begin to fix mirror repository =========" + need_fix_repos = Repository.joins(:mirror, project: :owner) + .where.not(mirrors: {id: nil}) + .where(users: {type: 'Organization'}) + need_fix_repos.find_each do |repo| + puts "=== fix repository owner is [#{repo&.project&.owner&.login}] ===" + puts "=== fix repository identifier is [#{repo.identifier}] ===" + Gitea::Repository::DeleteService.call(repo.project.owner, repo.identifier) + gitea_repository_params = { + clone_addr: repo.mirror_url, + repo_name: repo.identifier, + uid: repo.project.owner.gitea_uid, + private: repo.hidden, + mirror: ActiveModel::Type::Boolean.new.cast(repo.is_mirror) || false, + auth_username: repo.login, + auth_password: repo.password + } + MigrateRemoteRepositoryJob.perform_later(repo.id, repo.project&.owner&.gitea_token, gitea_repository_params) + repo.update_columns(user_id: repo.project&.user_id) + end + puts "========end to fix mirror repository =========" + end +end \ No newline at end of file