# frozen_string_literal: true require "thor" require_relative "base" module Neetob class CLI module Github module MakePr class ComplianceFix < Base attr_accessor :repos, :sandbox, :should_fix_nanos def initialize(repos, should_fix_nanos = false, sandbox = false) super() @repos = repos @sandbox = sandbox @should_fix_nanos = should_fix_nanos @failed_repos = [] end def run matching_repos = should_fix_nanos ? add_org_suffix(find_all_matching_gems) : find_all_matching_apps_or_repos(repos, :github, sandbox) @failed_repos = matching_repos delete_and_create_temp_neetob_dir matching_repos.each do |repo| ui.info("\nWorking on #{repo}\n") begin shallow_clone_repo_in_tmp_dir(repo) check_and_delete_remote_branch(repo) bundle_install(repo) fix_neeto_audit(repo) ui.info(add_commmit_and_push_changes(repo)) delete_local_feature_branch(repo) pull_request = client.create_pull_request(repo, "main", BRANCH_NAME, PR_TITLE) ui.success("PR created in \"#{repo}\" project successfully.") @failed_repos.delete(repo) rescue StandardError => e ExceptionHandler.new(e).process end end print_failed_repos if @failed_repos.length > 0 `rm -rf /tmp/neetob` end private def bundle_install(repo) `#{cd_to_repo_in_tmp_dir(repo)} && bundle install` end def fix_neeto_audit(repo) `#{cd_to_repo_in_tmp_dir(repo)} && bundle exec neeto-audit -a` end def print_failed_repos ui.info("\nCompliance fix failed for repos:-") @failed_repos.each do |repo| ui.error(repo) end end end end end end end