From 495de925ddf5a900886bdcca17e61d8610ca044f Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 19 Mar 2021 11:29:31 +0800 Subject: [PATCH] add: sync mulan repo --- lib/tasks/sync_mulan_repo.rake | 46 +++++++++++++++++++++++++++++++++ public/mulan_repo.xlsx | Bin 0 -> 20757 bytes 2 files changed, 46 insertions(+) create mode 100644 lib/tasks/sync_mulan_repo.rake create mode 100644 public/mulan_repo.xlsx diff --git a/lib/tasks/sync_mulan_repo.rake b/lib/tasks/sync_mulan_repo.rake new file mode 100644 index 00000000..e1ab8ddb --- /dev/null +++ b/lib/tasks/sync_mulan_repo.rake @@ -0,0 +1,46 @@ +namespace :create_mulan_repository do + desc "sync mulan repository from gitee.com" + task sync_from_gitee: :environment do + doc = SimpleXlsxReader.open("#{Rails.root}/public/mulan_repo.xlsx") + data = doc.sheets.first.rows + data.each_with_index do |row, index| + next if index == 0 + begin + user = User.find_by(login: row[1]) + unless user.present? + username = row[1] + email = "#{row[1]}@forge.com" + password = "Mr123456." + user = User.new(nickname: row[0], login: username, mail: email, password: password, type: 'User') + interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password}) + gitea_user = interactor.result + result = Gitea::User::GenerateTokenService.call(username, password) + user.gitea_token = result['sha1'] + user.gitea_uid = gitea_user[:body]['id'] + user.save! + UserExtension.create!(user_id: user.id) + end + project = user.projects.find_by(identifier: row[4]) + unless project.present? + p_category = ProjectCategory.find_or_create_by(name: row[6]) + p_language = ProjectLanguage.find_or_create_by(name: row[7].split("/")[0]) + p_license = License.find_by(name: row[8]) + + mirror_params = { + user_id: user.id, + name: row[5], + description: row[9], + repository_name: row[4], + project_category_id: p_category.id, + project_language_id: p_language.id, + clone_addr: row[10] + } + Projects::MigrateService.call(user, mirror_params) + end + puts "sync mulan repository from gitee.com Success repo: #{row[5]} username: #{row[0]}" + rescue Exception => e + puts "sync mulan repository from gitee.com Error repo: #{row[5]} username: #{row[0]}" + end + end + end +end \ No newline at end of file diff --git a/public/mulan_repo.xlsx b/public/mulan_repo.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1c9e45851dabc2525521874ceffa6a5e0f11489e GIT binary patch literal 20757 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 literal 0 HcmV?d00001