From 0872a1182d5702cf24bfce8958fc7cf12339c5ae Mon Sep 17 00:00:00 2001 From: Abroskin Alexander Date: Tue, 2 Jul 2019 12:29:52 +0300 Subject: [PATCH] DEV: Replace Overcommit with Lefthook (#7826) Overcommit uses prebuilt hooks and require global installation. To avoid this issues replace it with Lefthook. Lefthook will be installed with npm packages. New contributors will have fully consistent git hooks. --- .overcommit.yml | 45 --------------------------------------------- .travis.yml | 8 +------- Gemfile | 1 + Gemfile.lock | 2 ++ lefthook.yml | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + yarn.lock | 5 +++++ 7 files changed, 59 insertions(+), 52 deletions(-) delete mode 100644 .overcommit.yml create mode 100644 lefthook.yml diff --git a/.overcommit.yml b/.overcommit.yml deleted file mode 100644 index 8a48ff500ee..00000000000 --- a/.overcommit.yml +++ /dev/null @@ -1,45 +0,0 @@ -# Use this file to configure the Overcommit hooks you wish to use. This will -# extend the default configuration defined in: -# https://github.com/brigade/overcommit/blob/master/config/default.yml -# -# At the topmost level of this YAML file is a key representing type of hook -# being run (e.g. pre-commit, commit-msg, etc.). Within each type you can -# customize each hook, such as whether to only run it on certain files (via -# `include`), whether to only display output if it fails (via `quiet`), etc. -# -# For a complete list of hooks, see: -# https://github.com/brigade/overcommit/tree/master/lib/overcommit/hook -# -# For a complete list of options that you can use to customize hooks, see: -# https://github.com/brigade/overcommit#configuration - -PreCommit: - RuboCop: - enabled: true - command: ['bundle', 'exec', 'rubocop'] - EsLint: - enabled: true - required_executable: './node_modules/.bin/eslint' - install_command: 'yarn install' - command: ['yarn', 'eslint', '--ext', '.es6', '-f', 'compact'] - include: '**/*.es6' - YamlSyntax: - enabled: true - -PostCheckout: - BundleInstall: - enabled: true - YarnInstall: - enabled: true - -PostMerge: - BundleInstall: - enabled: true - YarnInstall: - enabled: true - -PostRewrite: - BundleInstall: - enabled: true - YarnInstall: - enabled: true diff --git a/.travis.yml b/.travis.yml index f8bc50b5016..16534a38cf7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -74,13 +74,7 @@ script: - | bash -c " if [ '$RUN_LINT' == '1' ]; then - bundle exec rubocop --parallel && \ - yarn prettier --list-different "app/assets/stylesheets/**/*.scss" "app/assets/javascripts/**/*.es6" "test/javascripts/**/*.es6" - yarn eslint --ext .es6 app/assets/javascripts && \ - yarn eslint --ext .es6 test/javascripts && \ - yarn eslint --ext .es6 plugins/**/assets/javascripts && \ - yarn eslint --ext .es6 plugins/**/test/javascripts && \ - yarn eslint app/assets/javascripts test/javascripts + npx lefthook run lints else if [ '$QUNIT_RUN' == '1' ]; then bundle exec rake qunit:test['1200000'] && \ diff --git a/Gemfile b/Gemfile index 87a682b5758..172970aa1cc 100644 --- a/Gemfile +++ b/Gemfile @@ -152,6 +152,7 @@ group :development do gem 'bullet', require: !!ENV['BULLET'] gem 'better_errors' gem 'binding_of_caller' + gem 'yaml-lint' # waiting on 2.7.5 per: https://github.com/ctran/annotate_models/pull/595 if rails_master? diff --git a/Gemfile.lock b/Gemfile.lock index 18ba21d178c..46f9119c006 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -412,6 +412,7 @@ GEM webpush (0.3.8) hkdf (~> 0.2) jwt (~> 2.0) + yaml-lint (0.0.10) PLATFORMS ruby @@ -533,6 +534,7 @@ DEPENDENCIES unicorn webmock webpush + yaml-lint BUNDLED WITH 1.17.3 diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 00000000000..d085046ad6c --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,49 @@ +pre-commit: + parallel: true + commands: + rubocop: + glob: '*.rb' + run: bundle exec rubocop {staged_files} + eslint: + glob: '*.{js,es6}' + run: yarn eslint --ext .es6 -f compact {staged_files} + yaml-syntax: + glob: '*.{yaml,yml}' + run: bundle exec yaml-lint {staged_files} + +commands: &commands + bundle-install: + files: git diff --name-only HEAD master + glob: '{Gemfile,Gemfile.lock,*.gemspec}' + run: bundle install + yarn-install: + files: git diff --name-only HEAD master + glob: '{package.json,yarn.lock}' + run: yarn install + +post-checkout: + commands: *commands + +post-merge: + commands: *commands + +post-rewrite: + commands: *commands + +lints: + parallel: true + commands: + rubocop: + run: bundle exec rubocop --parallel + prettier: + run: yarn prettier --list-different app/assets/stylesheets/**/*.scss app/assets/javascripts/**/*.es6 test/javascripts/**/*.es6 + eslint-assets: + run: yarn eslint --ext .es6 app/assets/javascripts + eslint-test: + run: yarn eslint --ext .es6 test/javascripts + eslint-plugins-assets: + run: yarn eslint --ext .es6 plugins/**/assets/javascripts + eslint-plugins-test: + run: yarn eslint --ext .es6 plugins/**/test/javascripts + eslint-assets-tests: + run: yarn eslint app/assets/javascripts test/javascripts diff --git a/package.json b/package.json index d49c13b29c5..cf64652a7ea 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "spectrum-colorpicker": "1.8.0" }, "devDependencies": { + "@arkweid/lefthook": "^0.5.6", "babel-eslint": "^8.2", "chrome-launcher": "^0.10", "chrome-remote-interface": "^0.25", diff --git a/yarn.lock b/yarn.lock index 8180e843dcc..f5a6887babe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@arkweid/lefthook@^0.5.6": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@arkweid/lefthook/-/lefthook-0.5.6.tgz#6c44bc257c2ea2c2498c25df1757fd224a69a088" + integrity sha512-hnzXNq/tq7LZGOFE1CigEdSOd1lkhJpUX83pyseIQg7hzrwytnm3+qVLqnMAY/Zk/L7kvWVLXiYxJofDc+2TNg== + "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9"