Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split the main Rakefile into themed sub-files #5575

Merged
merged 2 commits into from
Dec 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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