/ 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