pronto 0.10.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c46191096dc80dd16c7d74cb071776e3d527c58030b205f13ef7cdd814bc2a75
4
- data.tar.gz: c0e30815ad2b8e4cc4dc5b0e3f020347346a2e27463855951399b270b136015b
3
+ metadata.gz: 544591a739632f48bdbe56cc7a006b02a8ce13a22c9fbc679d35a4d5e67a0b00
4
+ data.tar.gz: 1fee173f0ab873998cc2920a576687a842485509bbef0bd4fc23c03703372d20
5
5
  SHA512:
6
- metadata.gz: 005ccdcd8d549c490828c473658708c273f982fca0923897444cb84d02e2757b539d1acdf2accbe87220e08a55d5d2b3168780090c996e0449416cde798eaf92
7
- data.tar.gz: 4b3b8aefc717056f27840f5ad1693f6d053e4988c4d892b281dadb55ac6dbbe9824dd97bccc609caab3d2e772e60802bb45c0021772ef64fb19883219bd4f62e
6
+ metadata.gz: b172a79ba57c6319761945212c7d8991adfafb4fdb6a3a91d9dea587a2099859bc5b052e0c54f694a5760b5f98d1a32e146d5811cbaf45d85afbf3c1204526a3
7
+ data.tar.gz: ea63d5bb296cebc7628af1d1d20a93877cd40ac297954bbe898b7e7b8137482e2c516755c4ea63ef8ca2ee8c60331a39d3c9be6edc4aeab609a816c8ff9bc720
@@ -0,0 +1,3 @@
1
+ # Order is important. The last matching pattern takes the most precedence.
2
+ # Default owners for everything in the repo.
3
+ * @prontolabs/core
@@ -0,0 +1,20 @@
1
+ name: Pronto
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [master]
6
+
7
+ jobs:
8
+ pronto:
9
+ runs-on: ubuntu-20.04
10
+ steps:
11
+ - uses: actions/checkout@v3
12
+ with:
13
+ fetch-depth: 0
14
+ - name: Set up Ruby
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: 2.5
18
+ bundler-cache: true
19
+ - name: Run Pronto
20
+ run: bundle exec pronto run --exit-code -c origin/${{ github.base_ref }}
@@ -0,0 +1,41 @@
1
+ name: Specs
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ branches: [master]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-20.04
12
+ strategy:
13
+ matrix:
14
+ ruby-version:
15
+ - "2.3"
16
+ - "2.4"
17
+ - "2.5"
18
+ - "2.6"
19
+ - "2.7"
20
+ - "3.0"
21
+ - "3.1"
22
+ - "3.2"
23
+ exclude:
24
+ - ruby-version: "2.3" # Rugged uses the wrong openssl version on CI and segfaults (similar to https://github.com/libgit2/rugged/issues/718)
25
+ steps:
26
+ - uses: actions/checkout@v3
27
+ - name: Use specific gitlab gem version (if required)
28
+ if: matrix.ruby-version == '2.4'
29
+ run: echo "gem 'gitlab', '< 4.14.1'" >> Gemfile.local
30
+ - name: Set up Ruby
31
+ uses: ruby/setup-ruby@v1
32
+ with:
33
+ ruby-version: ${{ matrix.ruby-version }}
34
+ bundler-cache: true
35
+ - name: Test & publish code coverage
36
+ uses: paambaati/codeclimate-action@7bcf9e73c0ee77d178e72c0ec69f1a99c1afc1f3 # v2.7.5
37
+ env:
38
+ CC_TEST_REPORTER_ID: 3d676246ffa66d3fdef6253a9870431b1a2da04e9ecb25486c08a38823c37b6a
39
+ COVERAGE: true
40
+ with:
41
+ coverageCommand: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -1,6 +1,63 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 0.11.1
4
+
5
+ ### New features
6
+
7
+ * [#371](https://github.com/prontolabs/pronto/pull/371) allow to filter runners via config
8
+ * [#402](https://github.com/prontolabs/pronto/pull/402) add --workdir option
9
+ * [#410](https://github.com/prontolabs/pronto/pull/410) allow the default commit run against to be configured
10
+ * [#435](https://github.com/prontolabs/pronto/pull/435) allow override of config file path via PRONTO_CONFIG_FILE
11
+
12
+ ### Bugs fixed
13
+
14
+ * [#422](https://github.com/prontolabs/pronto/pull/422) fix Gitlab#slug_regex when URL has different host
15
+ * [#423](https://github.com/prontolabs/pronto/pull/423) show existing message count when reporting posted messages
16
+
17
+ ### Changes
18
+
19
+ * [#397](https://github.com/prontolabs/pronto/pull/397) migrate CI to GitHub Actions
20
+ * [#398](https://github.com/prontolabs/pronto/pull/398) fix duplicated runs on GitHub Actions
21
+ * [#403](https://github.com/prontolabs/pronto/pull/403) run pronto on GitHub Actions without any reporting
22
+ * [#408](https://github.com/prontolabs/pronto/pull/408) require rexml ~> 3.2.5 due to CVE-2021-28965
23
+ * [#409](https://github.com/prontolabs/pronto/pull/409) add article about GitHub Actions to README.md
24
+ * [#414](https://github.com/prontolabs/pronto/pull/414) fix typo in README.md
25
+ * [#415](https://github.com/prontolabs/pronto/pull/415) remove deprecated pronto-bundler_audit from README.md
26
+ * [#417](https://github.com/prontolabs/pronto/pull/417) relax rugged dependency to allow releases up to 1.2.0
27
+ * [#424](https://github.com/prontolabs/pronto/pull/424) add Ruby 3.1 to the test matrix
28
+ * [#431](https://github.com/prontolabs/pronto/pull/431) relax rugged dependency to allow releases up to 2.0
29
+ * [#436](https://github.com/prontolabs/pronto/pull/436) update dead links in README.md
30
+ * [#438](https://github.com/prontolabs/pronto/pull/438) add Ruby 3.2 to the test matrix
31
+ * [#439](https://github.com/prontolabs/pronto/pull/439) relax dependencies to allow currently released major versions
32
+
33
+ ## 0.11.0
34
+
35
+ ### New features
36
+
37
+ * [#304](https://github.com/prontolabs/pronto/pull/304) add option to limit comments per PR review
38
+ * [#333](https://github.com/prontolabs/pronto/pull/333) add github_combined_status formatter
39
+ * [#334](https://github.com/prontolabs/pronto/pull/334) add configurable review_type for GitHub (with REQUEST_CHANGES as default)
40
+ * [#351](https://github.com/prontolabs/pronto/pull/351) add gitLab_mr formatter
41
+ * [#369](https://github.com/prontolabs/pronto/pull/369) make Pronto::Git::Patch#new_file_path public
42
+ * update to the BitBucket 2.0 API (_as the 1.0 API was deprecated_) via [#347](https://github.com/prontolabs/pronto/pull/347), [#348](https://github.com/prontolabs/pronto/pull/348), [#352](https://github.com/prontolabs/pronto/pull/352) and [#354](https://github.com/prontolabs/pronto/pull/354)
43
+
44
+ ### Bugs fixed
45
+
46
+ * [#344](https://github.com/prontolabs/pronto/pull/344) treat Gemfile and .gemspecs as Ruby
47
+ * [#380](https://github.com/prontolabs/pronto/pull/380) fix compatibility with rugged >= 0.99
48
+ * [#387](https://github.com/prontolabs/pronto/pull/387) fix running pronto inside git submodules
49
+
50
+ ### Changes
51
+
52
+ * [#370](https://github.com/prontolabs/pronto/pull/370) allow thor 1.x gem versions
53
+ * [#379](https://github.com/prontolabs/pronto/pull/379) allow rugged 1.0.x gem versions
54
+ * [#386](https://github.com/prontolabs/pronto/pull/386) add ruby 2.7 to CI
55
+ * [#390](https://github.com/prontolabs/pronto/pull/390) fix issue with generating Sorbet RBI
56
+ * [#396](https://github.com/prontolabs/pronto/pull/396) add support for Ruby 3.0
57
+ * document/improve GitHub Actions integration in README.md via [#360](https://github.com/prontolabs/pronto/pull/360), [#378](https://github.com/prontolabs/pronto/pull/378) and [#389](https://github.com/prontolabs/pronto/pull/389)
58
+ * add links to additional pronto runners in README.md
59
+
60
+ ## 0.10.0
4
61
 
5
62
  ### New features
6
63
 
data/README.md CHANGED
@@ -110,18 +110,40 @@ If you want comments to appear on pull request diff, instead of commit:
110
110
  $ PRONTO_GITHUB_ACCESS_TOKEN=token pronto run -f github_pr -c origin/master
111
111
  ```
112
112
 
113
- If you want review to appear on pull request diff, instead of comments:
113
+ If you want review to appear on pull request diff, instead of separate comments:
114
114
 
115
115
  ```sh
116
116
  $ PRONTO_GITHUB_ACCESS_TOKEN=token pronto run -f github_pr_review -c origin/master
117
117
  ```
118
118
 
119
+ All the **N** pending comments will be now separated into **X** number of PR reviews.
120
+ The number of the PR reviews will be controlled by an additional environment variable or with the help of a config setting.
121
+ This way, by a single pronto run, all the comments will be published to the PR, but divided into small reviews
122
+ in order to avoid the rate limit of the providers.
123
+
124
+ ```
125
+ X = N / {PRONTO_WARNINGS_PER_REVIEW || warnings_per_review || 30})
126
+ ```
127
+
128
+ Note: In case no environment variable or config setting is specified in `.pronto.yml`,
129
+ a default value of `30` will be used.
130
+
131
+ ```sh
132
+ $ PRONTO_WARNINGS_PER_REVIEW=30 PRONTO_GITHUB_ACCESS_TOKEN=token pronto run -f github_pr_review -c origin/master
133
+ ```
134
+
119
135
  Use `GithubStatusFormatter` to submit [commit status](https://github.com/blog/1227-commit-status-api):
120
136
 
121
137
  ```sh
122
138
  $ PRONTO_GITHUB_ACCESS_TOKEN=token pronto run -f github_status -c origin/master
123
139
  ```
124
140
 
141
+ If you want to show a one single status for all runners, instead of status per runner:
142
+
143
+ ```sh
144
+ $ PRONTO_GITHUB_ACCESS_TOKEN=token pronto run -f github_combined_status -c origin/master
145
+ ```
146
+
125
147
  It's possible to combine multiple formatters.
126
148
  To get both pull request comments and commit status summary use:
127
149
 
@@ -140,6 +162,39 @@ formatters = [formatter, status_formatter]
140
162
  Pronto.run('origin/master', '.', formatters)
141
163
  ```
142
164
 
165
+ #### GitHub Actions Integration
166
+
167
+ You can also run Pronto as a GitHub action.
168
+
169
+ Here's an example `.github/workflows/pronto.yml` workflow file using the `github_status` and `github_pr` formatters and running on each GitHub PR, with `pronto-rubocop` as the runner:
170
+
171
+
172
+ ```yml
173
+ name: Pronto
174
+ on: [pull_request]
175
+
176
+ jobs:
177
+ pronto:
178
+
179
+ runs-on: ubuntu-latest
180
+
181
+ steps:
182
+ - name: Checkout code
183
+ uses: actions/checkout@v2
184
+ - run: |
185
+ git fetch --no-tags --prune --depth=10 origin +refs/heads/*:refs/remotes/origin/*
186
+ - name: Setup Ruby
187
+ uses: ruby/setup-ruby@v1
188
+ - name: Setup pronto
189
+ run: gem install pronto pronto-rubocop
190
+ - name: Run Pronto
191
+ run: pronto run -f github_status github_pr -c origin/${{ github.base_ref }}
192
+ env:
193
+ PRONTO_PULL_REQUEST_ID: ${{ github.event.pull_request.number }}
194
+ PRONTO_GITHUB_ACCESS_TOKEN: "${{ github.token }}"
195
+ ```
196
+ check Wiki on [GitHub Actions Integration](https://github.com/prontolabs/pronto/wiki/GitHub-Actions-Integration) for more info.
197
+
143
198
  ### GitLab Integration
144
199
 
145
200
  You can run Pronto as a step of your CI builds and get the results as comments
@@ -159,6 +214,29 @@ Then just run it:
159
214
  $ PRONTO_GITLAB_API_PRIVATE_TOKEN=token pronto run -f gitlab -c origin/master
160
215
  ```
161
216
 
217
+ **note: this requires at least Gitlab 11.6+**
218
+
219
+ Merge request integration:
220
+
221
+ ```sh
222
+ $ PRONTO_GITLAB_API_PRIVATE_TOKEN=token PRONTO_PULL_REQUEST_ID=id pronto run -f gitlab_mr -c origin/master
223
+ ```
224
+
225
+ On GitLabCI, make sure to run Pronto in a [merge request pipeline](https://docs.gitlab.com/ce/ci/merge_request_pipelines/):
226
+
227
+ ```yml
228
+ lint:
229
+ image: ruby
230
+ variables:
231
+ PRONTO_GITLAB_API_ENDPOINT: "https://gitlab.com/api/v4"
232
+ PRONTO_GITLAB_API_PRIVATE_TOKEN: token
233
+ only:
234
+ - merge_requests
235
+ script:
236
+ - bundle install
237
+ - bundle exec pronto run -f gitlab_mr -c origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
238
+ ```
239
+
162
240
  ### Bitbucket Integration
163
241
 
164
242
  You can run Pronto as a step of your CI builds and get the results as comments
@@ -183,7 +261,14 @@ $ PRONTO_BITBUCKET_USERNAME=user PRONTO_BITBUCKET_PASSWORD=pass pronto run -f bi
183
261
  ## Configuration
184
262
 
185
263
  The behavior of Pronto can be controlled via the `.pronto.yml` configuration
186
- file. It must be placed in your project directory.
264
+ file. It can either be placed in the working directory (*) or specified using
265
+ the environment variable `PRONTO_CONFIG_FILE`.
266
+
267
+ (*) The working directory is where you run the command from, which is typically
268
+ your project directory.
269
+
270
+ If this file cannot be found, then the default configuration in
271
+ [Pronto::ConfigFile::EMPTY](lib/pronto/config_file.rb) applies.
187
272
 
188
273
  The file has the following format:
189
274
 
@@ -210,7 +295,10 @@ bitbucket:
210
295
  password: pass
211
296
  web_endpoint: https://bitbucket.org/
212
297
  max_warnings: 150
298
+ warnings_per_review: 30
213
299
  verbose: false
300
+ runners: [rubocop, eslint] # only listed runners will be executed
301
+ skip_runners: [reek] # all, except listed runners will be executed
214
302
  ```
215
303
 
216
304
  All properties that can be specified via `.pronto.yml`, can also be specified
@@ -218,6 +306,14 @@ via environment variables. Their names will be the upcased path to the property.
218
306
  For example: `PRONTO_GITHUB_SLUG` or `PRONTO_GITLAB_API_PRIVATE_TOKEN`. Environment variables
219
307
  will always take precedence over values in configuration file.
220
308
 
309
+ | Property | Description |
310
+ |-----------------------|--------------------------------------------------------------------------------------|
311
+ | `max_warnings` | Limits the amount of warnings. Returns all warnings if option is skipped. |
312
+ | `runners` | Runs only listed runners. Runs everything if option is skipped. |
313
+ | `skip_runners` | All, except listed runners will be executed. Runs everything if option is skipped. |
314
+ | `verbose` | Outputs more information when set to `true`. |
315
+ | `warnings_per_review` | Limits the amount of warnings per review. Returns all warnings if option is skipped. |
316
+
221
317
  ### Message format
222
318
 
223
319
  Pronto allows you to configure the format of the messages that are produced. You
@@ -260,13 +356,16 @@ The following values are available only to the text formatter:
260
356
  Pronto can run various tools and libraries, as long as there's a runner for it.
261
357
  Currently available:
262
358
 
359
+ * [pronto-bigfiles](https://github.com/apiology/pronto-bigfiles)
263
360
  * [pronto-blacklist](https://github.com/pbstriker38/pronto-blacklist)
264
361
  * [pronto-brakeman](https://github.com/prontolabs/pronto-brakeman)
362
+ * [pronto-checkstyle](https://github.com/seikichi/pronto-checkstyle)
265
363
  * [pronto-coffeelint](https://github.com/siebertm/pronto-coffeelint)
266
364
  * [pronto-clang_format](https://github.com/micjabbour/pronto-clang_format)
267
365
  * [pronto-clang_tidy](https://github.com/micjabbour/pronto-clang_tidy)
268
366
  * [pronto-clippy](https://github.com/hauleth/pronto-clippy)
269
367
  * [pronto-credo](https://github.com/carakan/pronto-credo)
368
+ * [pronto-dialyxir](https://github.com/Apelsinka223/pronto-dialyxir)
270
369
  * [pronto-dialyzer](https://github.com/iurifq/pronto-dialyzer)
271
370
  * [pronto-dirty_words](https://github.com/kevinjalbert/pronto-dirty_words)
272
371
  * [pronto-dogma](https://github.com/iurifq/pronto-dogma)
@@ -274,11 +373,15 @@ Currently available:
274
373
  * [pronto-eslint](https://github.com/prontolabs/pronto-eslint) (uses [eslintrb](https://github.com/zendesk/eslintrb))
275
374
  * [pronto-eslint_npm](https://github.com/doits/pronto-eslint_npm) (uses eslint installed from npm)
276
375
  * [pronto-fasterer](https://github.com/prontolabs/pronto-fasterer)
376
+ * [pronto-findbugs](https://github.com/seikichi/pronto-findbugs)
277
377
  * [pronto-flake8](https://github.com/scoremedia/pronto-flake8)
278
378
  * [pronto-flay](https://github.com/prontolabs/pronto-flay)
279
379
  * [pronto-flow](https://github.com/kevinjalbert/pronto-flow)
280
380
  * [pronto-foodcritic](https://github.com/prontolabs/pronto-foodcritic)
381
+ * [pronto-goodcheck](https://github.com/aergonaut/pronto-goodcheck)
281
382
  * [pronto-haml](https://github.com/prontolabs/pronto-haml)
383
+ * [pronto-hlint](https://github.com/fretlink/pronto-hlint/) (uses Haskell code suggestions [hlint](https://github.com/ndmitchell/hlint))
384
+ * [pronto-infer](https://github.com/seikichi/pronto-infer)
282
385
  * [pronto-inspec](https://github.com/stiller-leser/pronto-inspec)
283
386
  * [pronto-jscs](https://github.com/spajus/pronto-jscs)
284
387
  * [pronto-jshint](https://github.com/prontolabs/pronto-jshint)
@@ -289,7 +392,9 @@ Currently available:
289
392
  * [pronto-phpmd](https://github.com/EllisV/pronto-phpmd)
290
393
  * [pronto-phpstan](https://github.com/Powerhamster/pronto-phpstan)
291
394
  * [pronto-poper](https://github.com/prontolabs/pronto-poper)
395
+ * [pronto-punchlist](https://github.com/apiology/pronto-punchlist)
292
396
  * [pronto-rails_best_practices](https://github.com/prontolabs/pronto-rails_best_practices)
397
+ * [pronto-rails_data_schema](https://github.com/mbajur/pronto-rails_data_schema)
293
398
  * [pronto-rails_schema](https://github.com/raimondasv/pronto-rails_schema)
294
399
  * [pronto-reek](https://github.com/prontolabs/pronto-reek)
295
400
  * [pronto-rubocop](https://github.com/prontolabs/pronto-rubocop)
@@ -297,15 +402,17 @@ Currently available:
297
402
  * [pronto-shellcheck](https://github.com/pclalv/pronto-shellcheck)
298
403
  * [pronto-slim](https://github.com/nysthee/pronto-slim)
299
404
  * [pronto-slim_lint](https://github.com/ibrahima/pronto-slim_lint)
405
+ * [pronto-sorbet](https://github.com/teamsimplepay/pronto-sorbet)
300
406
  * [pronto-spell](https://github.com/prontolabs/pronto-spell)
407
+ * [pronto-standardrb](https://github.com/julianrubisch/pronto-standardrb)
301
408
  * [pronto-stylelint](https://github.com/kevinjalbert/pronto-stylelint)
302
409
  * [pronto-swiftlint](https://github.com/ajanauskas/pronto-swiftlint)
303
410
  * [pronto-tailor](https://github.com/ajanauskas/pronto-tailor)
304
411
  * [pronto-textlint](https://github.com/seikichi/pronto-textlint)
305
412
  * [pronto-tslint_npm](https://github.com/eprislac/pronto-tslint_npm)
306
413
  * [pronto-yamllint](https://github.com/pauliusm/pronto-yamllint)
307
- * [pronto-goodcheck](https://github.com/aergonaut/pronto-goodcheck)
308
414
  * [pronto-undercover](https://github.com/grodowski/pronto-undercover)
415
+ * [pronto-xmllint](https://github.com/pauliusm/pronto-xmllint)
309
416
 
310
417
  ## Articles
311
418
 
@@ -319,12 +426,13 @@ Articles to help you to get started:
319
426
  * [How to end fruitless dev discussions about your project’s code style?](https://medium.com/appaloosa-store-engineering/how-to-end-fruitless-dev-discussions-about-your-project-s-code-style-245070bff6d4)
320
427
  * [Free automated code reviews using Pronto](https://hovancik.net/blog/2016/04/11/free-automated-code-reviews-using-pronto/)
321
428
  * [Automated Elixir code review with Github, Credo and Travis CI](https://medium.com/fazibear/automated-elixir-code-review-with-github-credo-and-travis-ci-986cd56b8f02)
322
- * [Running Rubocop before git commit](https://christoph.luppri.ch/articles/2016/11/21/running-rubocop-before-git-commit/)
429
+ * [Running Rubocop before git commit](https://web.archive.org/web/20181225040512/https://christoph.luppri.ch/articles/code-quality/running-rubocop-before-git-commit/)
323
430
  * [Pronto, Codeship and GitHub for automatic code review](http://abinoam.tl1n.com/pronto-codeship-and-github-for-automatic-code-review/)
324
- * [How to automatically review your PRs for style violations with Pronto and RuboCop](https://christoph.luppri.ch/articles/2017/03/05/how-to-automatically-review-your-prs-for-style-violations-with-pronto-and-rubocop/)
431
+ * [How to automatically review your PRs for style violations with Pronto and RuboCop](https://christoph.luppri.ch/how-to-automatically-review-your-prs-for-style-violations-with-pronto-and-rubocop)
325
432
  * [Create your own Pronto Runner](https://kevinjalbert.com/create-your-own-pronto-runner/)
326
433
  * [Make Code Reviews A Little Bit Better With Automation](https://medium.com/jimmy-farrell/make-codes-reviews-a-little-bit-better-with-automation-35640df08a62)
327
434
  * [Stop shipping untested Ruby code with undercover](https://medium.com/futuredev/stop-shipping-untested-ruby-code-with-undercover-1edc963be4a6)
435
+ * [Automatic code review with Pronto and GitHub Actions](https://everydayrails.com/2021/05/29/pronto-github-actions-code-quality.html)
328
436
 
329
437
  Make a Pull Request to add something you wrote or found useful.
330
438
 
data/lib/pronto/cli.rb CHANGED
@@ -20,7 +20,6 @@ module Pronto
20
20
 
21
21
  method_option :commit,
22
22
  type: :string,
23
- default: 'master',
24
23
  aliases: '-c',
25
24
  desc: 'Commit for the diff'
26
25
 
@@ -33,6 +32,11 @@ module Pronto
33
32
  type: :boolean,
34
33
  desc: 'Analyze changes in git staging area'
35
34
 
35
+ method_option :workdir,
36
+ type: :boolean,
37
+ aliases: ['-w'],
38
+ desc: 'Analyze both staged and unstaged changes'
39
+
36
40
  method_option :runner,
37
41
  type: :array,
38
42
  default: [],
@@ -55,7 +59,7 @@ module Pronto
55
59
 
56
60
  formatters = ::Pronto::Formatter.get(options[:formatters])
57
61
 
58
- commit_options = %i[staged unstaged index]
62
+ commit_options = %i[workdir staged unstaged index]
59
63
  commit = commit_options.find { |o| options[o] } || options[:commit]
60
64
 
61
65
  repo_workdir = ::Rugged::Repository.discover(path).workdir
@@ -1,28 +1,39 @@
1
1
  class BitbucketClient
2
2
  include HTTParty
3
- base_uri 'https://api.bitbucket.org/1.0/repositories'
3
+ base_uri 'https://api.bitbucket.org/2.0/repositories'
4
4
 
5
5
  def initialize(username, password)
6
6
  self.class.basic_auth(username, password)
7
7
  end
8
8
 
9
9
  def commit_comments(slug, sha)
10
- response = get("/#{slug}/changesets/#{sha}/comments")
11
- openstruct(response)
10
+ response = get("/#{slug}/commit/#{sha}/comments?pagelen=100")
11
+ result = parse_comments(openstruct(response))
12
+ while (response['next'])
13
+ response = get response['next']
14
+ result.concat(parse_comments(openstruct(response)))
15
+ end
16
+ result
12
17
  end
13
18
 
14
19
  def create_commit_comment(slug, sha, body, path, position)
15
- post("/#{slug}/changesets/#{sha}/comments", body, path, position)
20
+ post("/#{slug}/commit/#{sha}/comments", body, path, position)
16
21
  end
17
22
 
18
23
  def pull_comments(slug, pull_id)
19
- response = get("/#{slug}/pullrequests/#{pull_id}/comments")
20
- openstruct(response)
24
+ response = get("/#{slug}/pullrequests/#{pull_id}/comments?pagelen=100")
25
+ parse_comments(openstruct(response))
26
+ result = parse_comments(openstruct(response))
27
+ while (response['next'])
28
+ response = get response['next']
29
+ result.concat(parse_comments(openstruct(response)))
30
+ end
31
+ result
21
32
  end
22
33
 
23
34
  def pull_requests(slug)
24
- response = get("#{pull_request_api(slug)}/pullrequests?state=OPEN")
25
- openstruct(response['values'])
35
+ response = get("/#{slug}/pullrequests?state=OPEN")
36
+ openstruct(response)
26
37
  end
27
38
 
28
39
  def create_pull_comment(slug, pull_id, body, path, position)
@@ -30,29 +41,46 @@ class BitbucketClient
30
41
  end
31
42
 
32
43
  def approve_pull_request(slug, pull_id)
33
- self.class.post("#{pull_request_api(slug)}/pullrequests/#{pull_id}/approve")
44
+ self.class.post("/#{slug}/pullrequests/#{pull_id}/approve")
34
45
  end
35
46
 
36
47
  def unapprove_pull_request(slug, pull_id)
37
- self.class.delete("#{pull_request_api(slug)}/pullrequests/#{pull_id}/approve")
48
+ self.class.delete("/#{slug}/pullrequests/#{pull_id}/approve")
38
49
  end
39
50
 
40
51
  private
41
52
 
42
- def pull_request_api(slug)
43
- "https://api.bitbucket.org/2.0/repositories/#{slug}"
44
- end
45
-
46
53
  def openstruct(response)
47
- response.map { |r| OpenStruct.new(r) }
54
+ if response['values']
55
+ response['values'].map { |r| OpenStruct.new(r) }
56
+ else
57
+ p response
58
+ raise 'BitBucket response invalid'
59
+ end
48
60
  end
49
61
 
62
+ def parse_comments(values)
63
+ values.each do |value|
64
+ value.content = value.content['raw']
65
+ value.line_to = value.inline ? value.inline['to'] : 0
66
+ value.filename = value.inline ? value.inline['path'] : ''
67
+ end
68
+ values
69
+ end
70
+
50
71
  def post(url, body, path, position)
51
72
  options = {
52
73
  body: {
53
- content: body,
54
- line_to: position,
55
- filename: path
74
+ content: {
75
+ raw: body
76
+ },
77
+ inline: {
78
+ to: position,
79
+ path: path
80
+ }
81
+ }.to_json,
82
+ headers: {
83
+ 'Content-Type': 'application/json'
56
84
  }
57
85
  }
58
86
  self.class.post(url, options)
data/lib/pronto/config.rb CHANGED
@@ -11,6 +11,13 @@ module Pronto
11
11
  end
12
12
  end
13
13
 
14
+ def default_commit
15
+ default_commit =
16
+ ENV['PRONTO_DEFAULT_COMMIT'] ||
17
+ @config_hash.fetch('default_commit', 'master')
18
+ default_commit
19
+ end
20
+
14
21
  def consolidate_comments?
15
22
  consolidated =
16
23
  ENV['PRONTO_CONSOLIDATE_COMMENTS'] ||
@@ -18,6 +25,18 @@ module Pronto
18
25
  consolidated
19
26
  end
20
27
 
28
+ def github_review_type
29
+ review_type =
30
+ ENV['PRONTO_GITHUB_REVIEW_TYPE'] ||
31
+ @config_hash.fetch('github_review_type', false)
32
+
33
+ if review_type == 'request_changes'
34
+ 'REQUEST_CHANGES'
35
+ else
36
+ 'COMMENT'
37
+ end
38
+ end
39
+
21
40
  def excluded_files(runner)
22
41
  files =
23
42
  if runner == 'all'
@@ -39,8 +58,12 @@ module Pronto
39
58
  URI.parse(bitbucket_web_endpoint).host
40
59
  end
41
60
 
61
+ def warnings_per_review
62
+ fetch_integer('warnings_per_review')
63
+ end
64
+
42
65
  def max_warnings
43
- ENV['PRONTO_MAX_WARNINGS'] && Integer(ENV['PRONTO_MAX_WARNINGS']) || @config_hash['max_warnings']
66
+ fetch_integer('max_warnings')
44
67
  end
45
68
 
46
69
  def message_format(formatter)
@@ -48,15 +71,45 @@ module Pronto
48
71
  if formatter_config && formatter_config.key?('format')
49
72
  formatter_config['format']
50
73
  else
51
- ENV['PRONTO_FORMAT'] || @config_hash['format']
74
+ fetch_value('format')
52
75
  end
53
76
  end
54
77
 
78
+ def skip_runners
79
+ fetch_list('skip_runners')
80
+ end
81
+
82
+ def runners
83
+ fetch_list('runners')
84
+ end
85
+
55
86
  def logger
56
87
  @logger ||= begin
57
- verbose = ENV['PRONTO_VERBOSE'] || @config_hash['verbose']
88
+ verbose = fetch_value('verbose')
58
89
  verbose ? Logger.new($stdout) : Logger.silent
59
90
  end
60
91
  end
92
+
93
+ private
94
+
95
+ def fetch_integer(key)
96
+ full_key = env_key(key)
97
+
98
+ (ENV[full_key] && Integer(ENV[full_key])) || @config_hash[key]
99
+ end
100
+
101
+ def fetch_value(key)
102
+ ENV[env_key(key)] || @config_hash[key]
103
+ end
104
+
105
+ def env_key(key)
106
+ "PRONTO_#{key.upcase}"
107
+ end
108
+
109
+ def fetch_list(key)
110
+ Array(fetch_value(key)).flat_map do |runners|
111
+ runners.split(',')
112
+ end
113
+ end
61
114
  end
62
115
  end
@@ -1,6 +1,7 @@
1
1
  module Pronto
2
2
  class ConfigFile
3
3
  DEFAULT_MESSAGE_FORMAT = '%{msg}'.freeze
4
+ DEFAULT_WARNINGS_PER_REVIEW = 30
4
5
 
5
6
  EMPTY = {
6
7
  'all' => {
@@ -11,7 +12,8 @@ module Pronto
11
12
  'slug' => nil,
12
13
  'access_token' => nil,
13
14
  'api_endpoint' => 'https://api.github.com/',
14
- 'web_endpoint' => 'https://github.com/'
15
+ 'web_endpoint' => 'https://github.com/',
16
+ 'review_type' => 'request_changes'
15
17
  },
16
18
  'gitlab' => {
17
19
  'slug' => nil,
@@ -29,14 +31,18 @@ module Pronto
29
31
  'text' => {
30
32
  'format' => '%{color_location} %{color_level}: %{msg}'
31
33
  },
34
+ 'default_commit' => 'master',
32
35
  'runners' => [],
33
36
  'formatters' => [],
34
37
  'max_warnings' => nil,
38
+ 'warnings_per_review' => DEFAULT_WARNINGS_PER_REVIEW,
35
39
  'verbose' => false,
36
40
  'format' => DEFAULT_MESSAGE_FORMAT
37
41
  }.freeze
38
42
 
39
- def initialize(path = '.pronto.yml')
43
+ attr_reader :path
44
+
45
+ def initialize(path = ENV.fetch('PRONTO_CONFIG_FILE', '.pronto.yml'))
40
46
  @path = path
41
47
  end
42
48
 
@@ -7,7 +7,7 @@ module Pronto
7
7
  @output = ''
8
8
  end
9
9
 
10
- def format(messages, _, _)
10
+ def format(messages, _repo, _patches)
11
11
  open_xml
12
12
  process_messages(messages)
13
13
  close_xml
@@ -13,9 +13,11 @@ module Pronto
13
13
  FORMATTERS = {
14
14
  'github' => GithubFormatter,
15
15
  'github_status' => GithubStatusFormatter,
16
+ 'github_combined_status' => GithubCombinedStatusFormatter,
16
17
  'github_pr' => GithubPullRequestFormatter,
17
18
  'github_pr_review' => GithubPullRequestReviewFormatter,
18
19
  'gitlab' => GitlabFormatter,
20
+ 'gitlab_mr' => GitlabMergeRequestReviewFormatter,
19
21
  'bitbucket' => BitbucketFormatter,
20
22
  'bitbucket_pr' => BitbucketPullRequestFormatter,
21
23
  'bitbucket_server_pr' => BitbucketServerPullRequestFormatter,