From 62ae61ed96005c42d3de597a0c8b17f233e46f2e Mon Sep 17 00:00:00 2001 From: James Edwards-Jones Date: Tue, 7 Feb 2017 21:14:04 +0000 Subject: [PATCH] CI runs lint on shell scripts in lib/support --- .gitlab-ci.yml | 1 + lib/tasks/config_lint.rake | 25 +++++++++++++++++++++++++ spec/tasks/config_lint_spec.rb | 27 +++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 lib/tasks/config_lint.rake create mode 100644 spec/tasks/config_lint_spec.rb diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e2141716311..21e01cf94f5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -243,6 +243,7 @@ rubocop: rake haml_lint: *exec rake scss_lint: *exec +rake config_lint: *exec rake brakeman: *exec rake flay: *exec license_finder: *exec diff --git a/lib/tasks/config_lint.rake b/lib/tasks/config_lint.rake new file mode 100644 index 00000000000..ddbcf1e1eb8 --- /dev/null +++ b/lib/tasks/config_lint.rake @@ -0,0 +1,25 @@ +module ConfigLint + def self.run(files) + failures = files.reject do |file| + yield(file) + end + + if failures.present? + puts failures + exit failures.count + end + end +end + +desc "Checks syntax for shell scripts and nginx config files in 'lib/support/'" +task :config_lint do + shell_scripts = [ + 'lib/support/init.d/gitlab', + 'lib/support/init.d/gitlab.default.example', + 'lib/support/deploy/deploy.sh' + ] + + ConfigLint.run(shell_scripts) do |file| + Kernel.system('bash', '-n', file) + end +end diff --git a/spec/tasks/config_lint_spec.rb b/spec/tasks/config_lint_spec.rb new file mode 100644 index 00000000000..c32f9a740b7 --- /dev/null +++ b/spec/tasks/config_lint_spec.rb @@ -0,0 +1,27 @@ +require 'rake_helper' +Rake.application.rake_require 'tasks/config_lint' + +describe ConfigLint do + let(:files){ ['lib/support/fake.sh'] } + + it 'errors out if any bash scripts have errors' do + expect { ConfigLint.run(files){ system('exit 1') } }.to raise_error(SystemExit) + end + + it 'passes if all scripts are fine' do + expect { ConfigLint.run(files){ system('exit 0') } }.not_to raise_error + end +end + +describe 'config_lint rake task' do + before(:each) do + # Prevent `system` from actually being called + allow(Kernel).to receive(:system).and_return(true) + end + + it 'runs lint on shell scripts' do + expect(Kernel).to receive(:system).with('bash', '-n', 'lib/support/init.d/gitlab') + + run_rake_task('config_lint') + end +end