Skip to content

Commit

Permalink
Merge pull request solidusio#5575 from solidusio/elia/rakefile
Browse files Browse the repository at this point in the history
Split the main Rakefile into themed sub-files
  • Loading branch information
elia authored Dec 29, 2023
2 parents 2c82985 + 413c4c9 commit 5194d99
Show file tree
Hide file tree
Showing 10 changed files with 113 additions and 115 deletions.
13 changes: 3 additions & 10 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -246,20 +246,13 @@ jobs:
- run: 'bundle install'
- run:
name: Check Ruby
command: |
bundle exec rubocop --parallel --format junit --out "$PWD/test-results/rubocop-results.xml" --format progress
command: "bin/rake lint:rb"
- run:
name: Check ERB
command: |
# enable recursive globbing with "**"
shopt -s globstar
# we're only interested in errors
bundle exec erb-format **/*.html.erb > /dev/null
command: "bin/rake lint:erb"
- run:
name: Check JavaScript
command: |
npx -y eslint "**/*.js"
command: "bin/rake lint:js"
- store_test_results:
path: test-results

Expand Down
10 changes: 0 additions & 10 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
{
"extends": "eslint:recommended",
"ignorePatterns": [
"*tailwind.config.js",
"**/spec",
"**/vendor",
"**/node_modules",
"sandbox",
"coverage",
"core/doc",
"tmp"
],
"parserOptions": {
"ecmaVersion": 2019
},
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ yarn.lock
package-lock.json
.env
/admin/app/assets/builds
/test-results
7 changes: 1 addition & 6 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,7 @@ require:

AllCops:
Exclude:
- 'vendor/**/*'
- '**/vendor/**/*'
- '*/spec/dummy/**/*'
- 'sandbox/**/*'
- '**/templates/**/*'
- 'tmp/**/*'
- '**/{tmp,vendor,spec/dummy,sandbox,templates,pkg}/**/*'
TargetRubyVersion: 3.0
NewCops: disable
SuggestExtensions: false
Expand Down
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ gem 'rspec-rails', '~> 6.0.3', require: false
gem 'rspec-retry', '~> 0.6.2', require: false
gem 'simplecov', require: false
gem 'simplecov-cobertura', require: false
gem 'rake', require: false, groups: [:lint, :release]
gem 'rails-controller-testing', require: false
gem 'puma', '< 6', require: false
gem 'i18n-tasks', '~> 0.9', require: false
Expand Down Expand Up @@ -60,7 +61,7 @@ group :admin do
end

group :lint do
gem 'erb-formatter', require: false
gem 'erb-formatter', '~> 0.7', require: false
gem 'rubocop', '~> 1', require: false
gem 'rubocop-performance', '~> 1.4', require: false
gem 'rubocop-rails', '~> 2.9', require: false
Expand Down
92 changes: 4 additions & 88 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,90 +1,6 @@
# frozen_string_literal: true

require 'bundler'
require 'bundler/gem_tasks'

task default: :spec

def print_title(gem_name = '')
title = ["Solidus", gem_name].join(' ').strip
puts "\n#{'-' * title.size}\n#{title}\n#{'-' * title.size}"
end

def subproject_task(project, task, title: project, task_name: nil)
task_name ||= "#{task}:#{project}"
task task_name do
print_title(title)
Dir.chdir("#{File.dirname(__FILE__)}/#{project}") do
sh "rake #{task}"
end
end
end

%w[spec db:drop db:create db:migrate db:reset].each do |task|
%w(api backend core frontend sample).each do |project|
desc "Run specs for #{project}" if task == 'spec'
subproject_task(project, task)
end

desc "Run rake #{task} for each Solidus engine"
task task => %w(api backend core frontend sample).map { |p| "#{task}:#{p}" }
end

desc "Run backend JS specs"
subproject_task("backend", "spec:js", title: "backend JS", task_name: "spec:backend:js")

# Add backend JS specs to `rake spec` dependencies
task spec: 'spec:backend:js'

task test: :spec
task test_app: 'db:reset'

desc "clean the whole repository by removing all the generated files"
task :clean do
rm_f "Gemfile.lock"
rm_rf "sandbox"
rm_rf "pkg"

%w(api backend core frontend sample).each do |gem_name|
print_title(gem_name)
rm_f "#{gem_name}/Gemfile.lock"
rm_rf "#{gem_name}/pkg"
rm_rf "#{gem_name}/spec/dummy"
end
end

SOLIDUS_GEM_NAMES = %w[core api backend sample]

%w[build install].each do |task_name|
desc "Run rake #{task} for each Solidus gem"
task task_name do
SOLIDUS_GEM_NAMES.each do |gem_name|
cd(gem_name) { sh "rake #{task_name}" }
end
end
end

# We need to redefine release task to skip creating and pushing git tag
Rake::Task["release"].clear
desc "Build and push solidus gems to RubyGems"
task "release" => ["build", "release:guard_clean", "release:rubygem_push"] do
SOLIDUS_GEM_NAMES.each do |gem_name|
cd(gem_name) { sh "rake release:rubygem_push" }
end
end

namespace :solidus do
desc "Report code coverage results for all solidus gems"
task :coverage, [:formatter] do |task, args|
require "simplecov"
SimpleCov.merge_timeout 3600
if ENV["COVERAGE_DIR"]
SimpleCov.coverage_dir(ENV["COVERAGE_DIR"])
end
if args[:formatter] == "cobertura"
require "simplecov-cobertura"
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
end
SimpleCov.result.format!
end
end
import 'tasks/cleaning.rake'
import 'tasks/releasing.rake'
import 'tasks/testing.rake'
import 'tasks/linting.rake'
7 changes: 7 additions & 0 deletions tasks/cleaning.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

require 'rake/clean'

CLOBBER.include "sandbox"
CLOBBER.include "Gemfile.lock"
CLOBBER.include "{*/,}pkg"
19 changes: 19 additions & 0 deletions tasks/linting.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# frozen_string_literal: true

namespace :lint do
task :rb do
ci_options = "-f junit -o '#{__dir__}/../test-results/rubocop-results.xml' " if ENV['CI']

sh %{bundle exec rubocop -P -f q #{ci_options}$(git ls-files -co --exclude-standard | grep -E "\\.rb$" | grep -v "/templates/")}
end

task :erb do
sh 'bundle exec erb-format $(git ls-files -co --exclude-standard | grep -E "\.html.erb$") > /dev/null'
end

task :js do
sh 'npx -y eslint $(git ls-files -co --exclude-standard | grep -E "\.js$" | grep -vE "/(vendor|config|spec)/")'
end
end

task lint: %w[lint:rb lint:erb lint:js]
23 changes: 23 additions & 0 deletions tasks/releasing.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

require 'bundler/gem_tasks'

SOLIDUS_GEM_NAMES = %w[core api backend sample]

%w[build install].each do |task_name|
desc "Run rake #{task} for each Solidus gem"
task task_name do
SOLIDUS_GEM_NAMES.each do |gem_name|
cd(gem_name) { sh "rake #{task_name}" }
end
end
end

# We need to redefine release task to skip creating and pushing git tag
Rake::Task["release"].clear
desc "Build and push solidus gems to RubyGems"
task "release" => ["build", "release:guard_clean", "release:rubygem_push"] do
SOLIDUS_GEM_NAMES.each do |gem_name|
cd(gem_name) { sh "rake release:rubygem_push" }
end
end
53 changes: 53 additions & 0 deletions tasks/testing.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# frozen_string_literal: true

task default: :spec

def print_title(gem_name = '')
title = ["Solidus", gem_name].join(' ').strip
puts "\n#{'-' * title.size}\n#{title}\n#{'-' * title.size}"
end

def subproject_task(project, task, title: project, task_name: nil)
task_name ||= "#{task}:#{project}"
task task_name do
print_title(title)
Dir.chdir("#{File.dirname(__FILE__)}/#{project}") do
sh "rake #{task}"
end
end
end

%w[spec db:drop db:create db:migrate db:reset].each do |task|
%w(api backend core frontend sample).each do |project|
desc "Run specs for #{project}" if task == 'spec'
subproject_task(project, task)
end

desc "Run rake #{task} for each Solidus engine"
task task => %w(api backend core frontend sample).map { |p| "#{task}:#{p}" }
end

desc "Run backend JS specs"
subproject_task("backend", "spec:js", title: "backend JS", task_name: "spec:backend:js")

# Add backend JS specs to `rake spec` dependencies
task spec: 'spec:backend:js'

task test: :spec
task test_app: 'db:reset'

namespace :solidus do
desc "Report code coverage results for all solidus gems"
task :coverage, [:formatter] do |_task, args|
require "simplecov"
SimpleCov.merge_timeout 3600
if ENV["COVERAGE_DIR"]
SimpleCov.coverage_dir(ENV["COVERAGE_DIR"])
end
if args[:formatter] == "cobertura"
require "simplecov-cobertura"
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
end
SimpleCov.result.format!
end
end

0 comments on commit 5194d99

Please sign in to comment.