forked from tanaylakhani/mailbluster-ruby
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRakefile
More file actions
123 lines (96 loc) · 3.62 KB
/
Rakefile
File metadata and controls
123 lines (96 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
require 'bundler/gem_tasks'
require 'rake/testtask'
require 'rubocop/rake_task'
Rake::TestTask.new(:test) do |t|
t.libs << 'test'
t.libs << 'lib'
t.test_files = FileList['test/**/*_test.rb']
end
RuboCop::RakeTask.new
task default: %i[test rubocop]
# == "rake release" enhancements ==============================================
Rake::Task['release'].enhance do
puts "Don't forget to publish the release on GitHub!"
system 'open https://github.com/tanaylakhani/mailbluster-ruby/releases'
end
desc 'Disable Overcommit for the duration of the build'
task :disable_overcommit do
ENV['OVERCOMMIT_DISABLE'] = '1'
end
Rake::Task[:build].enhance [:disable_overcommit]
desc 'Verify that the gemspec files are all present in git'
task :verify_gemspec_files do
git_files = `git ls-files -z`.split("\x0")
gemspec_files = Gem::Specification.load('mailbluster.gemspec').files.sort
ignored_by_git = gemspec_files - git_files
next if ignored_by_git.empty?
raise <<~ERROR
The `spec.files` specified in mailbluster.gemspec include the following files
that are being ignored by git. Did you forget to add them to the repo? If
not, you may need to delete these files or modify the gemspec to ensure
that they are not included in the gem by mistake:
#{ignored_by_git.join("\n").gsub(/^/, ' ')}
ERROR
end
Rake::Task[:build].enhance [:verify_gemspec_files]
# == "rake bump" tasks ========================================================
task bump: %w[bump:bundler bump:ruby bump:year]
namespace :bump do
desc 'Update the Bundler version in the Gemfile.lock'
task :bundler do
version = Gem.latest_version_for('bundler').to_s
replace_in_file 'Gemfile.lock', /^BUNDLED WITH\n\s+(\d\S+)$/ => version
end
desc 'Update the Ruby version in the gemspec, RuboCop config, and Semaphore config'
task :ruby do
lowest_minor = RubyVersions.lowest_supported_minor
latest = RubyVersions.latest
latest_patches = RubyVersions.latest_supported_patches
replace_in_file 'mailbluster.gemspec', /ruby_version = .*">= (.*)"/ => lowest_minor
replace_in_file '.rubocop.yml', /TargetRubyVersion: (.*)/ => lowest_minor
replace_in_file '.semaphore/semaphore.yml', /SEM_RUBY:-([\d.]+)/ => latest
replace_in_file '.semaphore/semaphore.yml', /values: (\[.+\])/ => latest_patches.inspect
replace_in_file '.github/workflows/ci.yml', /ruby-version: "([\d.]+)"/ => latest
replace_in_file '.github/workflows/ci.yml', /ruby: (\[.+\])/ => latest_patches.inspect
end
desc 'Update the year in the license'
task :year do
replace_in_file 'LICENSE.txt', /\(c\) (\d+)/ => Date.today.year.to_s
end
end
require 'date'
require 'open-uri'
require 'yaml'
def replace_in_file(path, replacements)
contents = File.read(path)
orig_contents = contents.dup
replacements.each do |regexp, text|
raise "Can't find #{regexp} in #{path}" unless regexp.match?(contents)
contents.gsub!(regexp) do |match|
match[regexp, 1] = text
match
end
end
File.write(path, contents) if contents != orig_contents
end
module RubyVersions
class << self
def lowest_supported_minor
latest_supported_patches.first[/\d+\.\d+/]
end
def latest
latest_supported_patches.last
end
def latest_supported_patches
patches = versions.values_at(:stable, :security_maintenance, :eol).compact.flatten
patches.map { |p| Gem::Version.new(p) }.sort.map(&:to_s)
end
private
def versions
@versions ||= begin
yaml = URI.open('https://raw.githubusercontent.com/ruby/www.ruby-lang.org/HEAD/_data/downloads.yml')
YAML.safe_load(yaml, symbolize_names: true)
end
end
end
end