jt_tools 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f6ba3ad94a3bee3b2a28743ed3a29484aa2bdca6f9eea16465559d7a09b5e4b0
4
- data.tar.gz: 2ac38915548c69b18fc2df17612fc6d44e277d3beafe489ed8b6bc3cd3fb50b7
3
+ metadata.gz: b8fb6f06a07bd971f50e67990613d4e54c0d875cd267157a591274c3d0cdf2f8
4
+ data.tar.gz: a2e443bb4c2f0c69736104afa340a439d7bb56b63c6c6cb85c3507b62a9ff27b
5
5
  SHA512:
6
- metadata.gz: 1d396a3237e97aeee07d24583ed8dd06acbb4ef924e9b2030ba4235f2b89254381715036978b38c3abe2d6d72cbbb82378df51422af491a825a32b2649c0a08a
7
- data.tar.gz: 8c17719e1c87f8027acbd3a4653ef43254d5037fbed1d0dd83849246bd67ab6786ef12124618ea4f662c0a36d0d98598a78a9501b29aeeb9b87d485a53e4c4a0
6
+ metadata.gz: fb4f90d8cb5ffb05774500c70e27b8418691aee7cce474ad31d92e223cc98a17555074927d774c94a581e5cf3a8c41051ef34ec9d3bd6ae3bf9adfbdbbaed88c
7
+ data.tar.gz: 3709e81ba37922dde45c3851407f4a6b5f5a374277c203fe7697a5785bc8c753dae8e36315c1a881edcdd7b1fe89c4fe0b2bde106223dfa4ef4829cc0077c9b6
@@ -0,0 +1,30 @@
1
+ version: 2.1
2
+ jobs:
3
+ test:
4
+ docker:
5
+ - image: circleci/ruby:2.6-node
6
+ parallelism: 1
7
+ steps:
8
+ - checkout
9
+ - run: gem install rails -N --update-sources
10
+ - run: sudo apt-get install cmake curl
11
+ - run: curl -fLSs https://circle.ci/cli | sudo bash
12
+ - run: git config --global user.email "you@example.com" && git config --global user.name "Your Name"
13
+ - run: bin/test
14
+ - run: TEST_APP_TEMPLATE=true bin/test
15
+
16
+ workflows:
17
+ test:
18
+ jobs:
19
+ - test
20
+
21
+ daily:
22
+ triggers: #use the triggers key to indicate a scheduled build
23
+ - schedule:
24
+ cron: "0 0 * * *"
25
+ filters:
26
+ branches:
27
+ only:
28
+ - master
29
+ jobs:
30
+ - test
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ **Expected behavior**
21
+ A clear and concise description of what you expected to happen.
22
+
23
+ **Screenshots**
24
+ If applicable, add screenshots to help explain your problem.
25
+
26
+ **Desktop (please complete the following information):**
27
+ - OS: [e.g. iOS]
28
+ - Browser [e.g. chrome, safari]
29
+ - Version [e.g. 22]
30
+
31
+ **Smartphone (please complete the following information):**
32
+ - Device: [e.g. iPhone6]
33
+ - OS: [e.g. iOS8.1]
34
+ - Browser [e.g. stock browser, safari]
35
+ - Version [e.g. 22]
36
+
37
+ **Additional context**
38
+ Add any other context about the problem here.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: Custom issue template
3
+ about: Describe this issue template's purpose here.
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Additional context**
20
+ Add any other context or screenshots about the feature request here.
data/.gitignore CHANGED
@@ -29,29 +29,13 @@ config/master.key
29
29
  .bundle
30
30
  */vendor/bundle
31
31
 
32
- # these should all be checked in to normalize the environment:
33
- # Gemfile.lock, .ruby-version, .ruby-gemset
34
-
35
- Gemfile.tools.lock
36
-
37
- # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
38
- .rvmrc
39
-
40
- # if using bower-rails ignore default bower_components path bower.json files
41
- /vendor/assets/bower_components
42
- *.bowerrc
43
- bower.json
44
-
45
- # Ignore pow environment settings
46
- .powenv
47
-
48
32
  # Ignore Byebug command history file.
49
33
  .byebug_history
50
34
 
51
35
  # Ignore node_modules
52
36
  node_modules/
53
37
 
54
- .circleci/
55
- lib/install/.bundle/
56
-
57
38
  pkg
39
+
40
+ # Temp files
41
+ /tmp/
data/README.md CHANGED
@@ -1,7 +1,35 @@
1
- # JT::Tools
1
+ [![CircleCI](https://circleci.com/gh/jetthoughts/jt_tools.svg?style=svg)](https://circleci.com/gh/jetthoughts/jt_tools)
2
+
3
+ # JetThoughts Tools
4
+
5
+ Ruby on Rails ecosystem to maintain projects without losing your mind.
6
+ Automatization scripts and services integrations which make your product world class level with no effort!
7
+
8
+ More details could be found in such posts:
9
+
10
+ * [How to Setup a Project That Can Host Up to 1000 Users for Free](https://jtway.co/how-to-setup-a-project-that-can-host-up-to-1000-users-for-free-ab59ad3edaf1)
11
+ * [Our Default Ruby Development Stack](https://jtway.co/our-default-ruby-development-stack-9d7e80ef21df)
12
+ * [Heroku Reviews Apps prevent delivering bugs on production](https://jtway.co/make-master-stable-again-b15c9ff3b129)
13
+
14
+ # Services and Tools
15
+
16
+ Pre-setup for service
17
+
18
+ * Heroku
19
+ * CircleCI
20
+ * Codecov
21
+ * Pronto
22
+ * Static Code Analysisers: Rubocop, Reek, and etc.
23
+ * Dependabot
2
24
 
3
25
  ## Installation
4
26
 
27
+ To install remotely:
28
+
29
+ ```bash
30
+ rails app:template LOCATION=https://raw.githubusercontent.com/jetthoughts/jt_tools/master/template.rb
31
+ ```
32
+
5
33
  Add this line to your application's Gemfile:
6
34
 
7
35
  ```ruby
@@ -13,28 +41,29 @@ And then execute:
13
41
  $ bundle
14
42
  $ bin/rails jt_tools:install
15
43
 
16
- ## Usage
17
44
 
18
- ```bash
19
- bin/pronto run
20
- ```
45
+ ## Usage
21
46
 
22
- ```bash
23
- bin/rubocop
24
- ```
47
+ Setup and update all tools required to maintain static code analysis
25
48
 
26
49
  ```bash
27
50
  bin/tools-setup
28
- ```
29
51
 
30
- ```bash
31
52
  bin/tools-upgrade
32
53
  ```
33
54
 
55
+ Auto-review on GitHub opened Pull Rquests to follow code consensentcy
56
+
34
57
  ```bash
35
58
  bin/lint-github-pr
36
59
  ```
37
60
 
61
+ Check localy all problems in the current branch cahnges
62
+
63
+ ```bash
64
+ bin/pronto run
65
+ ```
66
+
38
67
  ## License
39
68
 
40
69
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/_config.yml ADDED
@@ -0,0 +1 @@
1
+ theme: jekyll-theme-architect
data/bin/test ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -eo pipefail
4
+
5
+ mkdir -p tmp/
6
+
7
+ cd tmp
8
+ rm -rf test_tmpl
9
+
10
+ gem uninstall oj || true
11
+
12
+ if [[ "TEST_APP_TEMPLATE" == "true" ]]
13
+ then
14
+ rails new test_tmpl
15
+ cd test_tmpl
16
+ rails app:template LOCATION=../template.rb
17
+ else
18
+ rails new test_tmpl -m ../template.rb
19
+ cd test_tmpl
20
+ fi
21
+
22
+ echo " => Verify CircleCI config:"
23
+ cp .circleci/config.yml.sample .circleci/config.yml
24
+ circleci config validate
25
+
26
+ echo " => Verify installation scripts:"
27
+ bin/tools-setup
28
+ bin/tools-upgrade
29
+
30
+ echo " => Verify linters setup:"
31
+
32
+ git add .
33
+ git commit -m 'Initial Commit'
34
+ git checkout -b origin/master
35
+
36
+ git checkout -b test_pr
37
+
38
+ echo " => class SampleForLinters;end" > sample_for_linters.rb
39
+
40
+ git add .
41
+ git commit -m 'Adds sample_for_linters'
42
+
43
+ bin/rubocop --fail-level F sample_for_linters.rb
44
+ bin/pronto run -c HEAD~1 --no-exit-code
45
+
46
+ CIRCLECI=false bin/lint-github-pr -f text
47
+
48
+ echo " => Run git hooks verifications"
49
+ bin/git-hooks/post-merge.sample
50
+ CIRCLECI=false bin/git-hooks/pre-push.sample
@@ -0,0 +1,148 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ ---
6
+
7
+ version: 2.1
8
+
9
+ workflows:
10
+ version: 2
11
+ test:
12
+ jobs:
13
+ - lint:
14
+ filters:
15
+ branches:
16
+ ignore:
17
+ - master
18
+ - production
19
+ - staging
20
+
21
+ auto_upgrade_tools:
22
+ triggers:
23
+ - schedule:
24
+ cron: "0 10 1 * *"
25
+ filters:
26
+ branches:
27
+ only:
28
+ - master
29
+ jobs:
30
+ - upgrade_tools
31
+
32
+ jobs:
33
+ test:
34
+ docker:
35
+ # specify the version you desire here
36
+ - image: circleci/ruby:2.6-node-browsers
37
+ environment:
38
+ COVERAGE: true
39
+ BUNDLE_GEMFILE: Gemfile
40
+ BUNDLE_WITHOUT: "production:staging:development"
41
+ BUNDLE_JOBS: 3
42
+ BUNDLE_RETRY: 3
43
+ BUNDLE_PATH: vendor/bundle
44
+ RAILS_ENV: test
45
+ RACK_ENV: test
46
+ PGHOST: 127.0.0.1
47
+ PGUSER: ubuntu
48
+ DATABASE_URL: postgresql:ubuntu@127.0.0.1/db_test
49
+
50
+ # Specify service dependencies here if necessary
51
+ # CircleCI maintains a library of pre-built images
52
+ # documented at https://circleci.com/docs/2.0/circleci-images/
53
+ - image: circleci/postgres:alpine-ram
54
+ environment:
55
+ POSTGRES_USER: ubuntu
56
+ POSTGRES_DB: db_test
57
+
58
+ steps:
59
+ - checkout
60
+
61
+ # Download and cache dependencies
62
+ - restore_cache:
63
+ name: Restore Bundler Cache
64
+ keys:
65
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
66
+ - v1-dependencies-
67
+
68
+ - run:
69
+ name: Install Bundler Dependencies
70
+ command: bin/bundle check --path vendor/bundle || bin/bundle install --deployment
71
+
72
+ - save_cache:
73
+ name: Save Bundler Cache
74
+ paths:
75
+ - ./vendor/bundle
76
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
77
+
78
+ - run: bin/rails db:schema:load
79
+ - run: bin/rails test
80
+
81
+ # collect reports
82
+ - store_test_results:
83
+ path: ./test/reports/
84
+ - store_artifacts:
85
+ path: ./coverage
86
+ lint:
87
+ docker:
88
+ - image: circleci/ruby:2.6-stretch-node
89
+ environment:
90
+ DISABLE_SPRING: 1
91
+ BUNDLE_GEMFILE: Gemfile.tools
92
+ BUNDLE_JOBS: 3
93
+ BUNDLE_RETRY: 3
94
+
95
+ steps:
96
+ - checkout
97
+
98
+ - restore_cache:
99
+ keys:
100
+ - v1-tools-dependencies-{{ checksum "Gemfile.tools.lock" }}-{{ checksum "yarn.lock" }}
101
+ - v1-tools-dependencies-
102
+
103
+ - run:
104
+ name: Install cmake for building pronto dependencies
105
+ command: sudo apt-get install cmake yamllint python3-setuptools python3-pkg-resources
106
+
107
+ - run:
108
+ name: Install Bundle Dependencies
109
+ command: bin/bundle check --path vendor/bundle-tools || bin/bundle install --path vendor/bundle-tools
110
+
111
+ - run:
112
+ name: Install Node Packages
113
+ command: bin/yarn
114
+
115
+ - save_cache:
116
+ key: v1-tools-dependencies-{{ checksum "Gemfile.tools.lock" }}-{{ checksum "yarn.lock" }}
117
+ paths:
118
+ - ./vendor/bundle-tools
119
+ - ./node_modules
120
+
121
+ - run: bin/lint-github-pr
122
+
123
+ upgrade_tools:
124
+ docker:
125
+ - image: circleci/ruby:2.6-stretch-node
126
+ environment:
127
+ DISABLE_SPRING: 1
128
+ BUNDLE_GEMFILE: Gemfile.tools
129
+ BUNDLE_JOBS: 3
130
+ BUNDLE_RETRY: 3
131
+
132
+ steps:
133
+ - checkout
134
+
135
+ - run:
136
+ name: Install Bundler
137
+ command: |
138
+ echo 'export BUNDLER_VERSION=$(cat Gemfile.tools.lock | tail -1 | tr -d " ")' >> $BASH_ENV
139
+ source $BASH_ENV
140
+ gem install bundler:$BUNDLER_VERSION
141
+
142
+ - run: sudo apt-get install cmake
143
+
144
+ - run:
145
+ name: Run Gemfile tools update in separate branch
146
+ command: |
147
+ ./bin/circleci-auto_upgrade_tools
148
+
@@ -0,0 +1,32 @@
1
+ version: 1
2
+ update_configs:
3
+ # Keep package.json (& lockfiles) up to date as soon as
4
+ # new versions are published to the npm registry
5
+ - package_manager: javascript
6
+ directory: /
7
+ update_schedule: weekly
8
+ allowed_updates:
9
+ - match:
10
+ dependency_type: development
11
+ update_type: all
12
+ - match:
13
+ dependency_type: production
14
+ update_type: security
15
+ version_requirement_updates: off
16
+ -
17
+ - package_manager: ruby:bundler
18
+ directory: /
19
+ update_schedule: weekly
20
+ allowed_updates:
21
+ - match:
22
+ dependency_type: all
23
+ update_type: all
24
+ automerged_updates:
25
+ - match:
26
+ dependency_name: puma
27
+ update_type: semver:minor
28
+ - match:
29
+ dependency_name: rspec*
30
+ - match:
31
+ dependency_name: capybara*
32
+ version_requirement_updates: off
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ printWidth: 113,
3
+ singleQuote: true
4
+ };
@@ -0,0 +1,30 @@
1
+ ---
2
+ detectors:
3
+ IrresponsibleModule:
4
+ enabled: false
5
+ UncommunicativeVariableName:
6
+ accept:
7
+ - e
8
+ NestedIterators:
9
+ exclude:
10
+ - "ActiveJob::TestHelper#enqueued_jobs_for"
11
+ UnusedPrivateMethod:
12
+ enabled: false
13
+ DuplicateMethodCall:
14
+ max_calls: 4
15
+
16
+ directories:
17
+ "**/app/controllers/**":
18
+ InstanceVariableAssumption:
19
+ enabled: false
20
+ UtilityFunction:
21
+ enabled: false
22
+ "**/app/jobs":
23
+ UtilityFunction:
24
+ enabled: false
25
+ "**/app/helpers":
26
+ UtilityFunction:
27
+ enabled: false
28
+ "**/spec":
29
+ UtilityFunction:
30
+ enabled: false
@@ -4,23 +4,20 @@ require:
4
4
  - rubocop-rails
5
5
 
6
6
  AllCops:
7
- TargetRubyVersion: 2.6.4
7
+ TargetRubyVersion: 2.6
8
8
  Exclude:
9
9
  - 'db/schema.rb'
10
10
  - 'db/migrate/**/*'
11
11
 
12
- Layout/AlignHash:
13
- EnforcedHashRocketStyle: key
14
- EnforcedColonStyle: key
15
- EnforcedLastArgumentHashStyle: always_inspect
16
-
17
- Layout/AlignParameters:
18
- EnforcedStyle: with_fixed_indentation
19
-
20
12
  Layout/EmptyLinesAroundBlockBody:
21
13
  Exclude:
22
14
  - 'db/schema.rb'
23
15
 
16
+ Layout/HashAlignment:
17
+ EnforcedHashRocketStyle: key
18
+ EnforcedColonStyle: key
19
+ EnforcedLastArgumentHashStyle: always_inspect
20
+
24
21
  Layout/MultilineOperationIndentation:
25
22
  EnforcedStyle: indented
26
23
 
@@ -33,6 +30,9 @@ Layout/MultilineMethodCallBraceLayout:
33
30
  Layout/SpaceInLambdaLiteral:
34
31
  EnforcedStyle: require_space
35
32
 
33
+ Layout/ParameterAlignment:
34
+ EnforcedStyle: with_fixed_indentation
35
+
36
36
  Naming/PredicateName:
37
37
  Exclude:
38
38
  - 'app/helpers/application_helper.rb'
@@ -0,0 +1,12 @@
1
+ tap 'caskroom/cask'
2
+ cask_args appdir: '/Applications'
3
+
4
+ tap 'heroku/brew'
5
+
6
+ brew 'heroku'
7
+ brew 'hub'
8
+ # brew 'circleci'
9
+ brew 'rbenv'
10
+ brew 'ruby-build'
11
+ brew 'ruby'
12
+ brew 'yarn'
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) do |repo_name|
4
- repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
6
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
5
7
  "https://github.com/#{repo_name}.git"
6
8
  end
7
9
 
8
- gem 'hub', require: false
9
10
  gem 'oj', require: false
10
11
 
11
12
  group :tools do
@@ -21,6 +22,4 @@ group :tools do
21
22
 
22
23
  gem 'rubocop-rails', require: false
23
24
  gem 'rubocop-performance', require: false
24
-
25
- gem 'rugged', '0.28.2'
26
25
  end
data/lib/install/app.json CHANGED
@@ -54,7 +54,7 @@
54
54
  "ROLLBAR_ENDPOINT": {
55
55
  "required": true
56
56
  },
57
- "ROLLBAR_ENV": "development",
57
+ "ROLLBAR_ENV": "development"
58
58
  },
59
59
  "addons": [
60
60
  "mailtrap:unpaid",
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo "-----Create and switch to new branch-----"
6
+
7
+ current_date=`date +"%Y%m%d%H%M"`
8
+ new_branch_name="auto-upgrade-tools-dependencies-${current_date}"
9
+ git checkout -b $new_branch_name
10
+
11
+ echo "-----Run Gemfile.tools update-----"
12
+
13
+ if bin/tools-upgrade; then
14
+ echo 'Updated successfully'
15
+
16
+ git config user.name "jt-tools-deployments"
17
+ git config user.email "circleci.bot@example.com"
18
+
19
+ git commit -am "Upgrades Gemfile.tools dependencies"
20
+ git push https://$GITHUB_TOKEN@github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git -f
21
+
22
+ curl -X POST \
23
+ -H "Authorization: token ${GITHUB_TOKEN}" \
24
+ -d '{"title":"Upgrade tools dependencies","base":"master","head":"'$CIRCLE_PROJECT_USERNAME':'$new_branch_name'"}' \
25
+ https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pulls
26
+ exit 0
27
+ else
28
+ echo 'Failed to update\n'
29
+ exit 1
30
+ fi
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+
3
+ # Run updates on new changes
4
+ branch_name=$(git branch | grep "*" | sed "s/\* //")
5
+ reflog_message=$(git reflog -1)
6
+ merged_branch_name=$(echo $reflog_message | cut -d" " -f 4 | sed "s/://")
7
+
8
+ # if the merge was caused by a "git pull", we can safely ignore it
9
+ if [[ $reflog_message =~ "merge" ]]; then
10
+ echo "We support only pull"
11
+ exit 0
12
+ fi
13
+
14
+ if [[ $branch_name == "master" ]]; then
15
+ bin/update
16
+ bin/rake db:reset
17
+
18
+ # For crystalball gem usage
19
+ # file=tmp/crystalball_data.yml
20
+ # find $file -mtime +5 -exec rm {} \;
21
+ #
22
+ # if [ ! -f "$file" ]; then
23
+ # echo "Generete crystall ball index"
24
+ # DISABLE_SPRING=1 CRYSTALBALL=true bin/rspec
25
+ # fi
26
+
27
+ echo "Removing merged branches..."
28
+ git branch --merged master | grep -v "\*" | grep -v master | xargs -n 1 git branch -d
29
+ fi
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -eo pipefail
4
+
5
+ bin/lint-github-pr
6
+
7
+ # bin/rspec --tag critical
8
+ # bin/rails test
@@ -7,8 +7,7 @@ reporters_opt=""
7
7
  if [[ "$CIRCLECI" == "true" ]]
8
8
  then
9
9
  git fetch origin master
10
- reporters_opt="-f github_status github_pr_review -c origin/master --exit-code"
10
+ reporters_opt="-f github_status github_pr_review"
11
11
  fi
12
12
 
13
- BUNDLE_GEMFILE=Gemfile.tools bundle exec pronto run -c origin/master $reporters_opt --exit-code $@
14
-
13
+ bin/pronto run -c origin/master $reporters_opt --exit-code $@
@@ -1,4 +1,9 @@
1
- #!/bin/sh
1
+ #!/usr/bin/env bash
2
2
 
3
- BUNDLE_GEMFILE=Gemfile.tools bundle install --jobs=4 --retry=3
4
- yarn install
3
+ set -e
4
+
5
+ export BUNDLE_GEMFILE=Gemfile.tools
6
+
7
+ bundle check || bundle install --jobs=4 --retry=3
8
+
9
+ yarn install --link-duplicates --non-interactive
@@ -1,3 +1,7 @@
1
- #!/bin/sh
1
+ #!/usr/bin/env bash
2
2
 
3
- BUNDLE_GEMFILE=Gemfile.tools bundle update --jobs=4 --retry=3
3
+ set -e
4
+
5
+ export BUNDLE_GEMFILE=Gemfile.tools
6
+
7
+ bundle update --jobs=4 --retry=3
@@ -0,0 +1,8 @@
1
+ codecov:
2
+ notify:
3
+ require_ci_to_pass: yes
4
+
5
+ comment:
6
+ layout: diff, flags, files
7
+ behavior: once
8
+ require_changes: no
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Autogenerated file
4
+
5
+ if ENV['COVERAGE']
6
+ require 'simplecov'
7
+
8
+ SimpleCov.start 'rails'
9
+
10
+ if ENV['CODECOV_TOKEN']
11
+ require 'codecov'
12
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
13
+ end
14
+ end
data/lib/jt_tools.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'jt_tools/railtie' if defined?(Rails)
@@ -1,4 +1,4 @@
1
- install_template_path = File.expand_path('../install/template.rb', __dir__).freeze
1
+ install_template_path = File.expand_path('../../template.rb', __dir__).freeze
2
2
  bin_path = ENV['BUNDLE_BIN'] || './bin'
3
3
 
4
4
  namespace :jt_tools do
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JtTools
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.2'
5
5
  end
data/rejuvenation.rb ADDED
@@ -0,0 +1,19 @@
1
+
2
+ require 'json'
3
+
4
+ EXTRACT_DEPENDENCY_NAME = /"?(.+?)@.+?"?(?:,\s+|\Z)/.freeze
5
+ EXTRACT_DEPENDENCY_DETAILS = /(^((?!= ).*?):\n.*?(?:\n\n|\Z))/m.freeze
6
+
7
+ def direct_dependencies_names
8
+ package_json = JSON.parse(File.open('package.json').read)
9
+ direct_dependencies = package_json.fetch_values('dependencies', 'devDependencies', 'peerDependencies') { }
10
+ direct_dependencies.compact.inject([]) { |memo, v| memo.concat(v.keys) }
11
+ end
12
+
13
+ @dependencies = direct_dependencies_names
14
+
15
+ yarn_lock_content = File.open('yarn.lock').read
16
+ yarn_lock_content.scan(EXTRACT_DEPENDENCY_DETAILS).each do |dependency_block|
17
+ direct_dep = @dependencies.include?(dependency_block[1].match(EXTRACT_DEPENDENCY_NAME).to_a[1])
18
+ puts dependency_block[0] if direct_dep
19
+ end
data/template.rb ADDED
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copied from: https://github.com/mattbrictson/rails-template
4
+ # Add this template directory to source_paths so that Thor actions like
5
+ # copy_file and template resolve against our source files. If this file was
6
+ # invoked remotely via HTTP, that means the files are not present locally.
7
+ # In that case, use `git clone` to download them to a local temporary dir.
8
+ def add_template_repository_to_source_path
9
+ if __FILE__.match?(%r{\Ahttps?://})
10
+ require 'shellwords'
11
+ require 'tmpdir'
12
+
13
+ source_paths.unshift(temp_dir = Dir.mktmpdir('jt_tools-'))
14
+ at_exit { FileUtils.remove_entry(temp_dir) }
15
+ git clone: [
16
+ '--quiet',
17
+ 'https://github.com/jetthoughts/jt_tools.git',
18
+ temp_dir
19
+ ].map { |args| Shellwords.escape(args) }
20
+ .join(' ')
21
+
22
+ if (branch = __FILE__[%r{jt_tools/(.+)/template.rb}, 1])
23
+ Dir.chdir(temp_dir) { git checkout: branch }
24
+ end
25
+ else
26
+ source_paths.unshift(__dir__)
27
+ end
28
+ end
29
+
30
+ add_template_repository_to_source_path
31
+
32
+ say '=> Copying binstubs'
33
+ directory 'lib/install/bin', 'bin'
34
+
35
+ chmod 'bin', 0o755 & ~File.umask, verbose: false
36
+
37
+ say '=> Copying tools gemfile'
38
+ copy_file 'lib/install/Gemfile.tools', 'Gemfile.tools'
39
+
40
+ run 'yarn add -D eslint eslint-config-airbnb-base \
41
+ eslint-config-prettier eslint-plugin-import eslint-plugin-prettier prettier'
42
+
43
+ say 'Copying lint configurations'
44
+ copy_file 'lib/install/.better-html.yml', '.better-html.yml'
45
+ copy_file 'lib/install/.erb-lint.yml', '.erb-lint.yml'
46
+ copy_file 'lib/install/.eslintrc.js', '.eslintrc.js'
47
+ copy_file 'lib/install/.prettierrc.js', '.prettierrc.js'
48
+ copy_file 'lib/install/.pronto.yml', '.pronto.yml'
49
+ copy_file 'lib/install/.pronto_eslint_npm.yml', '.pronto_eslint_npm.yml'
50
+ copy_file 'lib/install/.rubocop.yml', '.rubocop.yml'
51
+ copy_file 'lib/install/.yamllint', '.yamllint'
52
+ copy_file 'lib/install/.reek.yml', '.reek.yml'
53
+
54
+ say '=> Copying services configuration'
55
+ gem 'simplecov', require: false, group: :test
56
+
57
+ copy_file 'lib/install/codecov.yml', 'codecov.yml'
58
+ gem 'codecov', require: false, group: :test
59
+
60
+ directory 'lib/install/.circleci', '.circleci'
61
+
62
+ # Add helpers to setup Simplecov and codecov loading for tests
63
+ directory 'lib/install/lib/test', 'lib/test'
64
+
65
+ if File.read('Gemfile').include? 'rspec'
66
+ gem 'rspec_junit_formatter', require: false, group: :test
67
+ insert_into_file(
68
+ 'spec/spec_helper.rb',
69
+ "require 'test/coverage'\n",
70
+ after: /\A/
71
+ )
72
+ else
73
+ gem 'minitest-ci', require: false, group: :test
74
+ insert_into_file(
75
+ 'test/test_helper.rb',
76
+ "require 'test/coverage'\n",
77
+ after: /\A/
78
+ )
79
+ end
80
+
81
+ directory 'lib/install/.dependabot', '.dependabot'
82
+
83
+ say '=> Copying heroku configuration'
84
+ copy_file 'lib/install/app.json', 'app.json'
85
+ copy_file 'lib/install/Procfile', 'Procfile'
86
+
87
+ say '=> Install Brew dependencies'
88
+ copy_file 'lib/install/Brewfile', 'Brewfile'
89
+
90
+ say 'Setup git hooks'
91
+ directory 'lib/install/bin/git-hooks', 'bin/git-hooks'
92
+
93
+ require 'bundler'
94
+ Bundler.with_original_env do
95
+ say '=> Install tools'
96
+ run 'bin/tools-setup'
97
+
98
+ say '=> Generate binstubs for linters'
99
+ run 'BUNDLE_GEMFILE=Gemfile.tools bundle binstub pronto'
100
+ run 'BUNDLE_GEMFILE=Gemfile.tools bundle binstub rubocop'
101
+ end
102
+
103
+ say '=> Set git hooks'
104
+ run 'git config core.hooksPath ./bin/git-hooks'
105
+
106
+ say '=> Install all new dependencies'
107
+ run <<~BREW_INSTALL
108
+ hash brew 2> /dev/null \
109
+ && (brew bundle check || brew bundle install) \
110
+ || echo "Please install Homebrew: https://brew.sh/"
111
+ BREW_INSTALL
112
+
113
+ after_bundle do
114
+ say '=> Setup default bundle config'
115
+ run 'bundle config jobs 4'
116
+ run 'bundle config retry 3'
117
+ end
118
+
119
+ say '**************************************************************************'
120
+ say '**************************************************************************'
121
+ say ''
122
+ say 'For code coverage report aggregator, running code static analysis'
123
+ say 'and auto-update of the tools.'
124
+ say ''
125
+ say 'Please, set CODECOV_TOKEN, GITHUB_TOKEN and PRONTO_GITHUB_ACCESS_TOKEN'
126
+ say 'environment variables in CircleCI and your local env'
127
+ say ''
128
+ say '**************************************************************************'
129
+ say '**************************************************************************'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jt_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Keen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-08 00:00:00.000000000 Z
11
+ date: 2019-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -31,44 +31,53 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - ".better-html.yml"
35
- - ".erb-lint.yml"
34
+ - ".circleci/config.yml"
35
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
36
+ - ".github/ISSUE_TEMPLATE/custom.md"
37
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
36
38
  - ".gitignore"
37
- - ".pronto.yml"
38
- - ".pronto_eslint_npm.yml"
39
- - ".rubocop.yml"
40
- - ".yamllint"
41
39
  - Gemfile
42
40
  - LICENSE
43
41
  - LICENSE.txt
44
42
  - README.md
45
43
  - Rakefile
44
+ - _config.yml
46
45
  - _sample/test_erb.html.erb
47
46
  - _sample/test_eslint.js
48
47
  - _sample/test_yamlint.yml
48
+ - bin/test
49
49
  - jt_tools.gemspec
50
50
  - lib/install/.better-html.yml
51
- - lib/install/.circleci/config.yml
51
+ - lib/install/.circleci/config.yml.sample
52
+ - lib/install/.dependabot/config.yml
52
53
  - lib/install/.erb-lint.yml
53
54
  - lib/install/.eslintrc.js
54
- - lib/install/.prettierrc
55
+ - lib/install/.prettierrc.js
55
56
  - lib/install/.pronto.yml
56
57
  - lib/install/.pronto_eslint_npm.yml
58
+ - lib/install/.reek.yml
57
59
  - lib/install/.rubocop.yml
58
60
  - lib/install/.yamllint
61
+ - lib/install/Brewfile
59
62
  - lib/install/Gemfile.tools
60
63
  - lib/install/Procfile
61
64
  - lib/install/app.json
65
+ - lib/install/bin/circleci-auto_upgrade_tools
66
+ - lib/install/bin/git-hooks/post-merge.sample
67
+ - lib/install/bin/git-hooks/pre-push.sample
62
68
  - lib/install/bin/heroku-postdeploy
63
69
  - lib/install/bin/heroku-release
64
70
  - lib/install/bin/lint-github-pr
65
71
  - lib/install/bin/tools-setup
66
72
  - lib/install/bin/tools-upgrade
67
- - lib/install/template.rb
73
+ - lib/install/codecov.yml
74
+ - lib/install/lib/test/coverage.rb
68
75
  - lib/jt_tools.rb
69
76
  - lib/jt_tools/railtie.rb
70
77
  - lib/tasks/install.rake
71
78
  - lib/version.rb
79
+ - rejuvenation.rb
80
+ - template.rb
72
81
  homepage: https://jtway.co
73
82
  licenses:
74
83
  - MIT
@@ -91,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
100
  - !ruby/object:Gem::Version
92
101
  version: '0'
93
102
  requirements: []
94
- rubygems_version: 3.0.6
103
+ rubygems_version: 3.1.1
95
104
  signing_key:
96
105
  specification_version: 4
97
106
  summary: Setup development scripts to manage code base effectively
data/.better-html.yml DELETED
@@ -1 +0,0 @@
1
- ./lib/install/.better-html.yml
data/.erb-lint.yml DELETED
@@ -1 +0,0 @@
1
- ./lib/install/.erb-lint.yml
data/.pronto.yml DELETED
@@ -1 +0,0 @@
1
- ./lib/install/.pronto.yml
@@ -1 +0,0 @@
1
- ./lib/install/.pronto_eslint_npm.yml
data/.rubocop.yml DELETED
@@ -1 +0,0 @@
1
- ./lib/install/.rubocop.yml
data/.yamllint DELETED
@@ -1 +0,0 @@
1
- ./lib/install/.yamllint
@@ -1,5 +0,0 @@
1
- {
2
- "printWidth": 113,
3
- "singleQuote": true
4
- }
5
-
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- say 'Copying binstubs'
4
- directory "#{__dir__}/bin", 'bin'
5
-
6
- chmod 'bin', 0o755 & ~File.umask, verbose: false
7
-
8
- say 'Setup default bundle parallel jobs to 4'
9
- run 'bundle config jobs 4'
10
-
11
- say 'Copying tools gemfile'
12
- copy_file "#{__dir__}/Gemfile.tools", 'Gemfile.tools'
13
-
14
- run 'yarn add -D eslint eslint-config-airbnb-base \
15
- eslint-config-prettier eslint-plugin-import eslint-plugin-prettier prettier'
16
-
17
- run 'bin/tools-setup'
18
-
19
- run 'BUNDLE_GEMFILE=Gemfile.tools bundle binstub pronto'
20
- run 'BUNDLE_GEMFILE=Gemfile.tools bundle binstub rubocop'
21
-
22
- say 'Copying lint configurations'
23
-
24
- copy_file "#{__dir__}/.better-html.yml", '.better-html.yml'
25
- copy_file "#{__dir__}/.erb-lint.yml", '.erb-lint.yml'
26
- copy_file "#{__dir__}/.eslintrc.js", '.eslintrc.js'
27
- copy_file "#{__dir__}/.prettierrc", '.prettierrc'
28
- copy_file "#{__dir__}/.pronto.yml", '.pronto.yml'
29
- copy_file "#{__dir__}/.pronto_eslint_npm.yml", '.pronto_eslint_npm.yml'
30
- copy_file "#{__dir__}/.rubocop.yml", '.rubocop.yml'
31
- copy_file "#{__dir__}/.yamllint", '.yamllint'
32
-
33
- say 'Copying circleci configuration'
34
- directory "#{__dir__}/.circleci", '.circleci'
35
-
36
- say 'Copying heroku configuration'
37
- copy_file "#{__dir__}/app.json", 'app.json'
38
- copy_file "#{__dir__}/Procfile", 'Procfile'