gitlab_awesome_release 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 275b6a408d136a5640c4c80d0798947403c1584c
4
- data.tar.gz: 8abbbd924954996a5f53338d69a598753569000b
3
+ metadata.gz: faf0baaeedceda64b9174c9bb51eee530f0318e8
4
+ data.tar.gz: 1fc19a40157181302624ba03bf87e52559e1a1bf
5
5
  SHA512:
6
- metadata.gz: 99f3b3db0ecc9ed025011d85ba4f3b1118a3e35f9a19b5b0c2df88a73d7ff7ef3e71d68ee0ece63029e6e6cbe8f33ca96c789c516d5f57bcd8ab717dd371167e
7
- data.tar.gz: f3adac92ac52c25f00f240e4d7836d4e9d615cd2f0c37bd2be18174a3fe582fa46f15425b4a81b80511998f72650f1097a4d2e5aff05ba7682bcc31b49e0abec
6
+ metadata.gz: 6e45e224237477007cb9cc328f7d7bf3e5ccf95b48b4c30edb49a4fdb98c0c2fe27d1475f483baf40d8c6e743365a3f96ef652c7edc89386e6ad3a8990901199
7
+ data.tar.gz: 4ecd3077daca1765e1fb710cdb65b06579cc450e14aa7dcfd488132aa30479f37eafa8c2ef4b6d15b18e47385e18ab65a4516be95aec0749e337e89b2c84e602
@@ -1,9 +1,86 @@
1
1
  stages:
2
2
  - test
3
3
 
4
- job1:
4
+ .job_template: &job_definition
5
+ variables:
6
+ CI: "true"
7
+ BUNDLE_CACHE: "vendor/bundle/"
8
+
9
+ cache:
10
+ untracked: true
11
+ key: "$CI_BUILD_NAME"
12
+ paths:
13
+ - vendor/bundle/
14
+
15
+ before_script:
16
+ - ./gitlab-ci/setup.sh
17
+
5
18
  stage: test
19
+
20
+ except:
21
+ - tags
22
+
23
+ ruby2.1:rspec:
24
+ <<: *job_definition
25
+ image: drecom/centos-ruby:2.1.10
26
+
27
+ script:
28
+ - ./gitlab-ci/rspec.sh
29
+
30
+ ruby2.1:rubocop:
31
+ <<: *job_definition
32
+ image: drecom/centos-ruby:2.1.10
33
+
34
+ script:
35
+ - ./gitlab-ci/rubocop.sh
36
+
37
+ allow_failure: true
38
+
39
+ ruby2.2:rspec:
40
+ <<: *job_definition
41
+ image: drecom/centos-ruby:2.2.6
42
+
43
+ script:
44
+ - ./gitlab-ci/rspec.sh
45
+
46
+ ruby2.2:rubocop:
47
+ <<: *job_definition
48
+
49
+ image: drecom/centos-ruby:2.2.6
50
+
51
+ script:
52
+ - ./gitlab-ci/rubocop.sh
53
+
54
+ allow_failure: true
55
+
56
+ ruby2.3:rspec:
57
+ <<: *job_definition
58
+ image: drecom/centos-ruby:2.3.3
59
+
60
+ script:
61
+ - ./gitlab-ci/rspec.sh
62
+
63
+ ruby2.3:rubocop:
64
+ <<: *job_definition
65
+ image: drecom/centos-ruby:2.3.3
66
+
6
67
  script:
7
- - ./script/build.sh
8
- tags:
9
- - ruby
68
+ - ./gitlab-ci/rubocop.sh
69
+
70
+ allow_failure: true
71
+
72
+ ruby2.4:rspec:
73
+ <<: *job_definition
74
+ image: drecom/centos-ruby:2.4.0
75
+
76
+ script:
77
+ - ./gitlab-ci/rspec.sh
78
+
79
+ ruby2.4:rubocop:
80
+ <<: *job_definition
81
+ image: drecom/centos-ruby:2.4.0
82
+
83
+ script:
84
+ - ./gitlab-ci/rubocop.sh
85
+
86
+ allow_failure: true
@@ -0,0 +1,8 @@
1
+ inherit_gem:
2
+ onkcop: "config/rubocop.yml"
3
+
4
+ AllCops:
5
+ TargetRubyVersion: 2.4
6
+
7
+ Metrics/ClassLength:
8
+ Max: 130
@@ -1,7 +1,12 @@
1
1
  ## Unreleased
2
- [full changelog](https://gitlab.com/sue445/gitlab_awesome_release/compare/v0.1.0.beta8...HEAD)
2
+ [full changelog](https://gitlab.com/sue445/gitlab_awesome_release/compare/v0.1.0...HEAD)
3
3
 
4
4
 
5
+ ## v0.1.0
6
+ [full changelog](https://gitlab.com/sue445/gitlab_awesome_release/compare/v0.1.0.beta8...v0.1.0)
7
+
8
+ * Add create_latest_note [!18](https://gitlab.com/sue445/gitlab_awesome_release/merge_requests/18) *@sue445*
9
+
5
10
  ## v0.1.0.beta8
6
11
  [full changelog](https://gitlab.com/sue445/gitlab_awesome_release/compare/v0.1.0.beta7...v0.1.0.beta8)
7
12
 
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in gitlab_awesome_release.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
  Generate changelog from tags and MergeRequests on [GitLab](https://about.gitlab.com/)
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/gitlab_awesome_release.svg)](https://badge.fury.io/rb/gitlab_awesome_release)
5
- [![build status](https://gitlab.com/ci/projects/9759/status.png?ref=master)](https://gitlab.com/ci/projects/9759?ref=master)
6
5
  [![Dependency Status](https://gemnasium.com/7f058801015a4fbcf603d936c08836a4.svg)](https://gemnasium.com/19478d2f2735ee355f4c6cd1b8d2c12e)
7
6
 
8
7
  This is inspired by [GitHub Changelog Generator](https://github.com/skywinder/github-changelog-generator)
@@ -0,0 +1,3 @@
1
+ #!/bin/bash -xe
2
+
3
+ bundle exec rspec
@@ -0,0 +1,3 @@
1
+ #!/bin/bash -xe
2
+
3
+ bundle exec rubocop
@@ -0,0 +1,3 @@
1
+ #!/bin/bash -xe
2
+
3
+ bundle check --path=${BUNDLE_CACHE} || bundle install --path=${BUNDLE_CACHE} --jobs=2 --retry=3
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'gitlab_awesome_release/version'
4
+ require "gitlab_awesome_release/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "gitlab_awesome_release"
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["sue445"]
10
10
  spec.email = ["sue445@sue445.net"]
11
11
 
12
- spec.summary = %q{Generate changelog from tags and MergeRequests on GitLab}
13
- spec.description = %q{Generate changelog from tags and MergeRequests on GitLab}
12
+ spec.summary = "Generate changelog from tags and MergeRequests on GitLab"
13
+ spec.description = "Generate changelog from tags and MergeRequests on GitLab"
14
14
  spec.homepage = "https://gitlab.com/sue445/gitlab_awesome_release"
15
15
  spec.license = "MIT"
16
16
 
@@ -21,12 +21,12 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = ">= 2.1.0"
23
23
 
24
- spec.add_dependency "activesupport"
25
24
  spec.add_dependency "dotenv"
26
25
  spec.add_dependency "gitlab"
27
26
  spec.add_dependency "thor"
28
27
 
29
28
  spec.add_development_dependency "bundler", "~> 1.10"
29
+ spec.add_development_dependency "onkcop", "0.47.1.0"
30
30
  spec.add_development_dependency "pry-byebug"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec"
@@ -1,4 +1,3 @@
1
- require "active_support/all"
2
1
  require "gitlab_awesome_release/version"
3
2
  require "gitlab_awesome_release/project"
4
3
  require "gitlab"
@@ -3,14 +3,16 @@ require "gitlab_awesome_release"
3
3
  require "dotenv"
4
4
 
5
5
  module GitlabAwesomeRelease
6
+ require "logger"
7
+
6
8
  class CLI < Thor
7
- DEFAULT_VERSION_FORMAT = "^v?[\\d.]+"
8
- GITLAB_ENV_FILES = %w(.env.gitlab ~/.env.gitlab)
9
+ DEFAULT_VERSION_FORMAT = "^v?[\\d.]+".freeze
10
+ GITLAB_ENV_FILES = %w(.env.gitlab ~/.env.gitlab).freeze
9
11
 
10
- GITLAB_API_DESCRIPTION = "GitLab API endpoint (e.g. http://example.com/api/v3)"
11
- GITLAB_API_PRIVATE_TOKEN_DESCRIPTION = "Your private token"
12
- GITLAB_API_PROJECT_NAME = "Target project (e.g. group/repo_name)"
13
- LOG_LEVEL_DESCRIPTION = "Log level (debug|info|warn|error|fatal|unknown)"
12
+ GITLAB_API_DESCRIPTION = "GitLab API endpoint (e.g. http://example.com/api/v3)".freeze
13
+ GITLAB_API_PRIVATE_TOKEN_DESCRIPTION = "Your private token".freeze
14
+ GITLAB_API_PROJECT_NAME = "Target project (e.g. group/repo_name)".freeze
15
+ LOG_LEVEL_DESCRIPTION = "Log level (debug|info|warn|error|fatal|unknown)".freeze
14
16
 
15
17
  desc "version", "Show gitlab_awesome_release version"
16
18
  def version
@@ -92,70 +94,73 @@ module GitlabAwesomeRelease
92
94
 
93
95
  private
94
96
 
95
- def option_or_env(name, default = nil)
96
- upper_name = name.to_s.upcase
97
- options[name].presence || ENV[upper_name].presence || default
98
- end
97
+ def option_or_env(name, default = nil)
98
+ upper_name = name.to_s.upcase
99
+ return options[name] if options[name] && !options[name].to_s.empty?
100
+ return ENV[upper_name] if ENV[upper_name] && !ENV[upper_name].empty?
99
101
 
100
- def option_or_env!(name)
101
- value = option_or_env(name)
102
- return value if value
102
+ default
103
+ end
103
104
 
104
- puts "--#{name.to_s.gsub("_", "-")} or #{name.to_s.upcase} is either required!"
105
- exit!
106
- end
105
+ def option_or_env!(name)
106
+ value = option_or_env(name)
107
+ return value if value
107
108
 
108
- def create_project
109
- gitlab_api_endpoint = option_or_env!(:gitlab_api_endpoint)
110
- gitlab_api_private_token = option_or_env!(:gitlab_api_private_token)
111
- gitlab_project_name = option_or_env!(:gitlab_project_name)
112
- allow_tag_format = option_or_env(:allow_tag_format, DEFAULT_VERSION_FORMAT)
113
-
114
- @logger = Logger.new(STDOUT)
115
- @logger.level = logger_level(option_or_env(:log_level))
116
- @logger.formatter = proc{ |severity, datetime, progname, message|
117
- "[#{datetime}] #{severity} #{message}\n"
118
- }
119
-
120
- Gitlab::Request.logger = @logger
121
- GitlabAwesomeRelease::Project.new(
122
- api_endpoint: gitlab_api_endpoint,
123
- private_token: gitlab_api_private_token,
124
- project_name: gitlab_project_name,
125
- allow_tag_format: /#{allow_tag_format}/,
126
- logger: @logger,
127
- )
128
- end
109
+ puts "--#{name.to_s.tr("_", "-")} or #{name.to_s.upcase} is either required!"
110
+ exit!
111
+ end
129
112
 
130
- def write_changelog(changelog)
131
- filename = option_or_env(:filename)
132
- if filename
133
- File.open(filename, "wb") do |f|
134
- f.write(changelog)
113
+ def create_project
114
+ gitlab_api_endpoint = option_or_env!(:gitlab_api_endpoint)
115
+ gitlab_api_private_token = option_or_env!(:gitlab_api_private_token)
116
+ gitlab_project_name = option_or_env!(:gitlab_project_name)
117
+ allow_tag_format = option_or_env(:allow_tag_format, DEFAULT_VERSION_FORMAT)
118
+
119
+ @logger = Logger.new(STDOUT)
120
+ @logger.level = logger_level(option_or_env(:log_level))
121
+ @logger.formatter = proc { |severity, datetime, _progname, message|
122
+ "[#{datetime}] #{severity} #{message}\n"
123
+ }
124
+
125
+ Gitlab::Request.logger = @logger
126
+ GitlabAwesomeRelease::Project.new(
127
+ api_endpoint: gitlab_api_endpoint,
128
+ private_token: gitlab_api_private_token,
129
+ project_name: gitlab_project_name,
130
+ allow_tag_format: /#{allow_tag_format}/,
131
+ logger: @logger
132
+ )
133
+ end
134
+
135
+ def write_changelog(changelog)
136
+ filename = option_or_env(:filename)
137
+ if filename
138
+ File.open(filename, "wb") do |f|
139
+ f.write(changelog)
140
+ end
141
+ @logger.info "Write to #{filename}"
142
+ else
143
+ puts changelog
135
144
  end
136
- @logger.info "Write to #{filename}"
137
- else
138
- puts changelog
139
145
  end
140
- end
141
146
 
142
- def logger_level(log_level)
143
- case log_level.to_sym
144
- when :debug
145
- Logger::DEBUG
146
- when :error
147
- Logger::ERROR
148
- when :fatal
149
- Logger::FATAL
150
- when :info
151
- Logger::INFO
152
- when :unknown
153
- Logger::UNKNOWN
154
- when :warn
155
- Logger::WARN
156
- else
157
- raise "Unknown log_level: #{log_level}"
147
+ def logger_level(log_level)
148
+ case log_level.to_sym
149
+ when :debug
150
+ Logger::DEBUG
151
+ when :error
152
+ Logger::ERROR
153
+ when :fatal
154
+ Logger::FATAL
155
+ when :info
156
+ Logger::INFO
157
+ when :unknown
158
+ Logger::UNKNOWN
159
+ when :warn
160
+ Logger::WARN
161
+ else
162
+ raise "Unknown log_level: #{log_level}"
163
+ end
158
164
  end
159
- end
160
165
  end
161
166
  end
@@ -10,8 +10,8 @@ module GitlabAwesomeRelease
10
10
  end_time = Time.now
11
11
 
12
12
  # NOTE: options[:headers] contains PRIVATE-TOKEN
13
- _options = options.reject{ |k, _v| k == :headers }
14
- logger.debug "(#{end_time - start_time} sec) #{method.upcase} #{path} #{_options}"
13
+ _options = options.reject { |k, _v| k == :headers }
14
+ self.class.logger.debug "(#{end_time - start_time} sec) #{method.upcase} #{path} #{_options}"
15
15
  end
16
16
  end
17
17
  end
@@ -20,5 +20,12 @@ end
20
20
 
21
21
  Gitlab::Request.class_eval do
22
22
  prepend GitlabAwesomeRelease::GitlabLoggingExt
23
- cattr_accessor :logger
23
+
24
+ def self.logger
25
+ Gitlab::Request.instance_variable_get(:@logger)
26
+ end
27
+
28
+ def self.logger=(logger)
29
+ Gitlab::Request.instance_variable_set(:@logger, logger)
30
+ end
24
31
  end
@@ -35,7 +35,7 @@ module GitlabAwesomeRelease
35
35
  with_paging do |params|
36
36
  Gitlab.repo_tags(escaped_project_name, params)
37
37
  end
38
- @all_tag_names = repo_tags.sort_by{ |tag| tag.commit.authored_date }.map(&:name)
38
+ @all_tag_names = repo_tags.sort_by { |tag| tag.commit.authored_date }.map(&:name)
39
39
  end
40
40
 
41
41
  # @return [Array<String>]
@@ -60,8 +60,8 @@ module GitlabAwesomeRelease
60
60
  str << "\n"
61
61
  end
62
62
 
63
- changelog << <<-MARKDOWN.strip_heredoc
64
- *This Change Log was automatically generated by [gitlab_awesome_release](https://gitlab.com/sue445/gitlab_awesome_release)*
63
+ changelog << <<-MARKDOWN
64
+ *This Change Log was automatically generated by [gitlab_awesome_release](https://gitlab.com/sue445/gitlab_awesome_release)*
65
65
  MARKDOWN
66
66
 
67
67
  changelog
@@ -79,8 +79,8 @@ module GitlabAwesomeRelease
79
79
  summary = merge_requests_summary_between(from, to)
80
80
 
81
81
  header = generate_heading(title)
82
- header << <<-MARKDOWN.strip_heredoc
83
- [full changelog](#{web_url}/compare/#{from}...#{to})
82
+ header << <<-MARKDOWN
83
+ [full changelog](#{web_url}/compare/#{from}...#{to})
84
84
 
85
85
  MARKDOWN
86
86
 
@@ -97,10 +97,14 @@ module GitlabAwesomeRelease
97
97
  # @return [Array<Integer>] MergeRequest iids
98
98
  def merge_request_iids_between(from, to)
99
99
  commits = Gitlab.repo_compare(escaped_project_name, from, to).commits
100
- commits.map do |commit|
101
- commit["message"] =~ /^Merge branch .*See merge request \!(\d+)$/m
102
- $1
103
- end.compact.map(&:to_i)
100
+
101
+ merge_request_iids =
102
+ commits.map do |commit|
103
+ commit["message"] =~ /^Merge branch .*See merge request \!(\d+)$/m
104
+ Regexp.last_match(1)
105
+ end
106
+
107
+ merge_request_iids.compact.map(&:to_i)
104
108
  end
105
109
 
106
110
  # @param iid [Integer] MergeRequest iid
@@ -130,34 +134,34 @@ module GitlabAwesomeRelease
130
134
 
131
135
  private
132
136
 
133
- def escaped_project_name
134
- CGI.escape(@project_name)
135
- end
137
+ def escaped_project_name
138
+ CGI.escape(@project_name)
139
+ end
136
140
 
137
- # @yield [params] paging block
138
- # @yieldparam params [Hash] paging params for GitLab API (page: current page, per_page)
139
- # @yieldreturn response in all pages
140
- def with_paging
141
- all_response = []
142
- page = 1
143
- loop do
144
- response = yield(page: page, per_page: PER_PAGE)
145
- all_response += response
146
- return all_response if response.size < PER_PAGE
147
- page += 1
141
+ # @yield [params] paging block
142
+ # @yieldparam params [Hash] paging params for GitLab API (page: current page, per_page)
143
+ # @yieldreturn response in all pages
144
+ def with_paging
145
+ all_response = []
146
+ page = 1
147
+ loop do
148
+ response = yield(page: page, per_page: PER_PAGE)
149
+ all_response += response
150
+ return all_response if response.size < PER_PAGE
151
+ page += 1
152
+ end
148
153
  end
149
- end
150
154
 
151
- def merge_requests_summary_between(from, to)
152
- mr_iids = merge_request_iids_between(from, to)
153
- mr_iids.each_with_object("") do |iid, str|
154
- str << merge_request_summary(iid) + "\n"
155
+ def merge_requests_summary_between(from, to)
156
+ mr_iids = merge_request_iids_between(from, to)
157
+ mr_iids.each_with_object("") do |iid, str|
158
+ str << merge_request_summary(iid) + "\n"
159
+ end
155
160
  end
156
- end
157
161
 
158
- def assert_merge_request_iid(mr, iid)
159
- # NOTE: MR is found, but server is old GitLab?
160
- raise "MergeRequest iid does not match (expected #{iid}, but #{mr.iid})" unless iid == mr.iid
161
- end
162
+ def assert_merge_request_iid(mr, iid)
163
+ # NOTE: MR is found, but server is old GitLab?
164
+ raise "MergeRequest iid does not match (expected #{iid}, but #{mr.iid})" unless iid == mr.iid
165
+ end
162
166
  end
163
167
  end
@@ -1,3 +1,3 @@
1
1
  module GitlabAwesomeRelease
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1".freeze
3
3
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_awesome_release
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - sue445
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-17 00:00:00.000000000 Z
11
+ date: 2017-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: dotenv
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +66,20 @@ dependencies:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: onkcop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.47.1.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.47.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry-byebug
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -190,6 +190,7 @@ files:
190
190
  - ".gitignore"
191
191
  - ".gitlab-ci.yml"
192
192
  - ".rspec"
193
+ - ".rubocop.yml"
193
194
  - ".yardopts"
194
195
  - CHANGELOG.md
195
196
  - Gemfile
@@ -199,6 +200,9 @@ files:
199
200
  - bin/console
200
201
  - bin/setup
201
202
  - exe/gitlab_awesome_release
203
+ - gitlab-ci/rspec.sh
204
+ - gitlab-ci/rubocop.sh
205
+ - gitlab-ci/setup.sh
202
206
  - gitlab_awesome_release.gemspec
203
207
  - img/private_token.png
204
208
  - lib/gitlab_awesome_release.rb
@@ -207,7 +211,6 @@ files:
207
211
  - lib/gitlab_awesome_release/gitlab_logging_ext.rb
208
212
  - lib/gitlab_awesome_release/project.rb
209
213
  - lib/gitlab_awesome_release/version.rb
210
- - script/build.sh
211
214
  homepage: https://gitlab.com/sue445/gitlab_awesome_release
212
215
  licenses:
213
216
  - MIT
@@ -228,9 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
231
  version: '0'
229
232
  requirements: []
230
233
  rubyforge_project:
231
- rubygems_version: 2.4.5.1
234
+ rubygems_version: 2.5.1
232
235
  signing_key:
233
236
  specification_version: 4
234
237
  summary: Generate changelog from tags and MergeRequests on GitLab
235
238
  test_files: []
236
- has_rdoc:
@@ -1,7 +0,0 @@
1
- #!/bin/bash -xe
2
-
3
- export CI=true
4
-
5
- bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=2 --retry=3
6
-
7
- bundle exec rspec