/ Rakefile
Rakefile
  1  # frozen_string_literal: true
  2  
  3  # Rakefile for build / release supporting tasks
  4  require 'logger'
  5  require 'date'
  6  require 'digest'
  7  require 'git'
  8  require 'net/http'
  9  require 'json'
 10  require 'yaml'
 11  
 12  require_relative 'scripts/tasks/check'
 13  require_relative 'scripts/tasks/locale_utils'
 14  require_relative 'scripts/tasks/release_notes'
 15  task default: ['check:multiple_gem_versions']
 16  
 17  namespace :locales do
 18    # bundle exec rake locales:report_missing_keys
 19    desc 'Check for missing keys in locale files compared to :en'
 20    task :report_missing_keys do
 21      Check.run(Check::Locales.new(LOCALES_DIRS))
 22    end
 23  
 24    # bundle exec rake locales:fix_variables
 25    desc 'Fix translated variable names in locale files (replace with English variable names from en.yml)'
 26    task :fix_variables do
 27      LocaleUtils::LocaleFileProcessor.new(LOCALES_DIRS).check
 28    end
 29  
 30    # bundle exec rake locales:validate_yaml
 31    desc 'Validate that all locale YAML files can be parsed without errors'
 32    task :validate_yaml do
 33      validator = LocaleUtils::YamlValidator.new(LOCALES_DIRS)
 34      invalid_count = validator.validate
 35      exit(1) if invalid_count > 0
 36    end
 37  end
 38  
 39  namespace :check do
 40    GEMS_PATH = File.join(__dir__, 'build', 'gems', 'jruby', '3.1.0', 'gems', '*')
 41    LOCALES_DIRS = [
 42      File.join(__dir__, 'common', 'locales'),
 43      File.join(__dir__, 'common', 'locales', 'enums'),
 44      File.join(__dir__, 'frontend', 'config', 'locales'),
 45      File.join(__dir__, 'frontend', 'config', 'locales', 'help'),
 46      File.join(__dir__, 'public', 'config', 'locales')
 47    ]
 48  
 49    # bundle exec rake check:multiple_gem_versions
 50    desc 'Check for multiple versions of a gem in the build directory'
 51    task :multiple_gem_versions, [:clean_gems] do
 52      Check.run(Check::Gems.new(GEMS_PATH))
 53    end
 54  
 55    desc 'Clean gems build directory'
 56    task :clean_gems do
 57      FileUtils.rm_rf(GEMS_PATH)
 58    end
 59  end
 60  
 61  # This is a legacy task, see the newer thor task for updated version
 62  namespace :release_notes do
 63    # Requires setting ENV["REL_NOTES_TOKEN"] in the form of:
 64    # export REL_NOTES_TOKEN="github-user-name:personal-access-token"
 65    # or, for example:
 66    # export REL_NOTES_TOKEN="lorawoodford:12345"
 67    # See: https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token
 68    # The token only needs to have the following scope: public_repo, repo:status
 69    # Intended use:
 70    # bundle exec rake release_notes:generate[$current_milestone,$previous_milestone,style]
 71    # bundle exec rake release_notes:generate[2.8.1,2.8.0]
 72    desc 'Generate a release notes formatted document between commits'
 73    task :generate, [:milestone, :old_milestone, :style] do |_t, args|
 74      milestone = args.fetch(:milestone)
 75      old_milestone = args.fetch(:old_milestone)
 76      style  = args.fetch(:style, 'brief')
 77      log = ReleaseNotes::GitLogParser.run(
 78        milestone: milestone
 79      )
 80      puts ReleaseNotes::Generator.new(
 81        version: milestone,
 82        log: log,
 83        old_milestone: old_milestone,
 84        style: style).process
 85    end
 86  end
 87  
 88  namespace :coverage do
 89    task :colate do
 90      require 'simplecov'
 91  
 92      SimpleCov.coverage_dir("coverage/summary")
 93      SimpleCov.collate Dir["#{File.join(__dir__, 'coverage')}/**/.resultset.json"]
 94    end
 95  end
 96  
 97  namespace :http do
 98    namespace :checksum do
 99      # bundle exec rake http:checksum:solr["http://localhost:8983/solr/archivesspace","schema.xml"]
100      task :solr, [:base_url, :file] do |_t, args|
101        file = args[:file]
102        raise 'Invalid file' unless ['schema.xml', 'solrconfig.xml'].include? file
103  
104        path = "admin/file?file=#{file}&contentType=text%2Fxml%3Bcharset%3Dutf-8"
105        url = URI(File.join(args[:base_url], path))
106        internal_checksum = Digest::SHA2.hexdigest(File.read(File.join('solr', file)))
107        external_checksum = Digest::SHA2.hexdigest(Net::HTTP.get_response(url).body)
108  
109        if internal_checksum != external_checksum
110          raise 'Solr checksums do not match. Check configuration and try again.'
111        end
112  
113        puts internal_checksum
114      end
115    end
116  end