diff --git a/lib/tasks/docker.rake b/lib/tasks/docker.rake index 2099dec7ac2..d2c99decf1a 100644 --- a/lib/tasks/docker.rake +++ b/lib/tasks/docker.rake @@ -28,10 +28,20 @@ # Run tests for a specific plugin (with a plugin mounted from host filesystem): # docker run -e SKIP_CORE=1 SINGLE_PLUGIN='my-awesome-plugin' -v $(pwd)/my-awesome-plugin:/var/www/discourse/plugins/my-awesome-plugin discourse/discourse_test:release -def run_or_fail(command, allowed_exit_codes: [0]) +def run_or_fail(command) pid = Process.spawn(command) Process.wait(pid) - allowed_exit_codes.include?($?.exitstatus) + $?.exitstatus == 0 +end + +def run_or_fail_prettier(*patterns) + if patterns.any? { |p| Dir[p].any? } + patterns = patterns.map { |p| "'#{p}'" }.join(' ') + run_or_fail("yarn prettier --list-different #{patterns}") + else + puts "Skipping prettier. Pattern not found." + true + end end desc 'Run all tests (JS and code in a standalone environment)' @@ -49,7 +59,7 @@ task 'docker:test' do @good &&= run_or_fail("yarn eslint --ext .es6 plugins/#{ENV['SINGLE_PLUGIN']}") puts "Listing prettier offenses in #{ENV['SINGLE_PLUGIN']}:" - @good &&= run_or_fail("yarn prettier --list-different 'plugins/#{ENV['SINGLE_PLUGIN']}/**/*.scss' 'plugins/#{ENV['SINGLE_PLUGIN']}/**/*.es6'", allowed_exit_codes: [0, 2]) + @good &&= run_or_fail_prettier("plugins/#{ENV['SINGLE_PLUGIN']}/**/*.scss", "plugins/#{ENV['SINGLE_PLUGIN']}/**/*.es6") else @good &&= run_or_fail("bundle exec rubocop --parallel") unless ENV["SKIP_CORE"] @good &&= run_or_fail("yarn eslint app/assets/javascripts test/javascripts") unless ENV["SKIP_CORE"] @@ -62,7 +72,7 @@ task 'docker:test' do unless ENV["SKIP_PLUGINS"] puts "Listing prettier offenses in plugins:" - @good &&= run_or_fail('yarn prettier --list-different "plugins/**/*.scss" "plugins/**/*.es6"', allowed_exit_codes: [0, 2]) + @good &&= run_or_fail('yarn prettier --list-different "plugins/**/*.scss" "plugins/**/*.es6"') end end puts "travis_fold:end:lint" if ENV["TRAVIS"]