|
- # 执行示例 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}] ==="
- gitea_org = Gitea::Organization::GetService.call(org)
- if gitea_org[:status] == 404
- org.destroy
- next
- end
- 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|
- next if repo.user_id == repo.project&.user_id
- 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
|