forked from cequel/cequel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
113 lines (96 loc) · 3.06 KB
/
Rakefile
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
require 'yaml'
require 'bundler/setup'
require 'rspec/core/rake_task'
require 'rubocop/rake_task'
require 'wwtd/tasks'
require File.expand_path('../lib/cequel/version', __FILE__)
task default: :test
task :release => [
:verify_changelog,
:"test:all",
:build,
:tag,
:update_stable,
:push,
:cleanup
]
desc 'Build gem'
task :build do
system 'gem build cequel.gemspec'
end
desc 'Build the package and publish it to rubygems.pkg.github.com'
task publish: :build do
# Requires local setup of personal access token, see:
# 1. https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry#authenticating-with-a-personal-access-token
system("gem push --key github --host https://rubygems.pkg.github.com/art19 " \
"pkg/cequel-#{Cequel::VERSION}.gem")
end
desc 'Create git release tag'
task :tag do
system "git tag -a -m 'Version #{Cequel::VERSION}' #{Cequel::VERSION}"
system "git push [email protected]:cequel/cequel.git #{Cequel::VERSION}:#{Cequel::VERSION}"
end
desc 'Update stable branch on GitHub'
task :update_stable do
if Cequel::VERSION =~ /^(\d+\.)+\d+$/ # Don't push for prerelease
system "git push -f origin HEAD:stable"
end
end
desc 'Push gem to repository'
task :push do
system "gem push cequel-#{Cequel::VERSION}.gem"
end
task 'Remove packaged gems'
task :cleanup do
system "rm -v *.gem"
end
desc 'Run the specs'
RSpec::Core::RakeTask.new(:test) do |t|
t.pattern = './spec/examples/**/*_spec.rb'
rspec_opts = '--backtrace'
version = File.basename(File.dirname(RbConfig::CONFIG['bindir']))
gemfile = ENV.fetch('BUNDLE_GEMFILE', 'Gemfile')
log_path = File.expand_path("../spec/log/#{Time.now.to_i}-#{version}-#{File.basename(gemfile, '.gemfile')}", __FILE__)
FileUtils.mkdir_p(File.dirname(log_path))
File.open(log_path, 'w') do |f|
f.puts "RBENV_VERSION=#{version} BUNDLE_GEMFILE=#{gemfile} bundle exec rake test"
end
rspec_opts << " --out='#{log_path}' --format=progress"
t.rspec_opts = rspec_opts
end
desc 'Check style with Rubocop'
RuboCop::RakeTask.new(:rubocop) do |task|
task.patterns = ['lib/**/*.rb']
task.formatters = ['files']
task.fail_on_error = true
end
namespace :test do
desc 'Run the specs with progress formatter'
RSpec::Core::RakeTask.new(:concise) do |t|
t.pattern = './spec/examples/**/*_spec.rb'
t.rspec_opts = '--fail-fast --format=progress'
t.fail_on_error = true
end
task :all do
abort unless system('bundle', 'exec', 'wwtd', '--parallel')
end
end
desc 'Update changelog'
task :changelog do
require './lib/cequel/version.rb'
last_tag = `git tag`.each_line.map(&:strip).last
existing_changelog = File.read('./CHANGELOG.md')
File.open('./CHANGELOG.md', 'w') do |f|
f.puts "## #{Cequel::VERSION}"
f.puts ""
f.puts `git log --no-merges --pretty=format:'* %s' #{last_tag}..`
f.puts ""
f.puts existing_changelog
end
end
task :verify_changelog do
require './lib/cequel/version.rb'
if File.read('./CHANGELOG.md').each_line.first.strip != "## #{Cequel::VERSION}"
abort "Changelog is not up-to-date."
end
end