pmdtester 1.0.0.pre.beta2 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/build.sh +67 -0
  3. data/.ci/files/env.gpg +1 -0
  4. data/.ci/inc/install-openjdk.inc +26 -0
  5. data/.ci/manual-integration-tests.sh +20 -0
  6. data/.github/workflows/build.yml +39 -0
  7. data/.github/workflows/manual-integration-tests.yml +32 -0
  8. data/.gitignore +9 -0
  9. data/.hoerc +1 -0
  10. data/.rubocop.yml +21 -2
  11. data/.rubocop_todo.yml +7 -8
  12. data/.ruby-version +1 -0
  13. data/Gemfile +1 -13
  14. data/History.md +108 -0
  15. data/Manifest.txt +60 -0
  16. data/README.rdoc +130 -7
  17. data/Rakefile +31 -17
  18. data/bin/pmdtester +1 -1
  19. data/config/all-java.xml +1 -1
  20. data/config/design.xml +1 -1
  21. data/config/projectlist_1_0_0.xsd +2 -1
  22. data/config/projectlist_1_1_0.xsd +31 -0
  23. data/lib/pmdtester.rb +48 -0
  24. data/lib/pmdtester/builders/liquid_renderer.rb +73 -0
  25. data/lib/pmdtester/builders/pmd_report_builder.rb +133 -64
  26. data/lib/pmdtester/builders/project_builder.rb +100 -0
  27. data/lib/pmdtester/builders/project_hasher.rb +126 -0
  28. data/lib/pmdtester/builders/rule_set_builder.rb +95 -51
  29. data/lib/pmdtester/builders/simple_progress_logger.rb +27 -0
  30. data/lib/pmdtester/builders/summary_report_builder.rb +62 -120
  31. data/lib/pmdtester/cmd.rb +15 -1
  32. data/lib/pmdtester/collection_by_file.rb +55 -0
  33. data/lib/pmdtester/parsers/options.rb +33 -10
  34. data/lib/pmdtester/parsers/pmd_report_document.rb +79 -29
  35. data/lib/pmdtester/parsers/projects_parser.rb +2 -6
  36. data/lib/pmdtester/pmd_branch_detail.rb +36 -13
  37. data/lib/pmdtester/pmd_configerror.rb +62 -0
  38. data/lib/pmdtester/pmd_error.rb +34 -34
  39. data/lib/pmdtester/pmd_report_detail.rb +10 -13
  40. data/lib/pmdtester/pmd_tester_utils.rb +57 -0
  41. data/lib/pmdtester/pmd_violation.rb +66 -26
  42. data/lib/pmdtester/project.rb +28 -25
  43. data/lib/pmdtester/report_diff.rb +194 -70
  44. data/lib/pmdtester/resource_locator.rb +4 -0
  45. data/lib/pmdtester/runner.rb +82 -57
  46. data/pmdtester.gemspec +64 -0
  47. data/resources/_includes/diff_pill_row.html +6 -0
  48. data/resources/css/bootstrap.min.css +7 -0
  49. data/resources/css/datatables.min.css +36 -0
  50. data/resources/css/pmd-tester.css +131 -0
  51. data/resources/js/bootstrap.min.js +7 -0
  52. data/resources/js/code-snippets.js +66 -0
  53. data/resources/js/datatables.min.js +726 -0
  54. data/resources/js/jquery-3.2.1.slim.min.js +4 -0
  55. data/resources/js/jquery.min.js +2 -0
  56. data/resources/js/popper.min.js +5 -0
  57. data/resources/js/project-report.js +136 -0
  58. data/resources/project_diff_report.html +205 -0
  59. data/resources/project_index.html +102 -0
  60. metadata +117 -44
  61. data/.travis.yml +0 -22
  62. data/lib/pmdtester/builders/diff_builder.rb +0 -35
  63. data/lib/pmdtester/builders/diff_report_builder.rb +0 -226
  64. data/lib/pmdtester/builders/html_report_builder.rb +0 -34
  65. data/lib/pmdtester/pmdtester.rb +0 -17
  66. data/resources/css/maven-base.css +0 -155
  67. data/resources/css/maven-theme.css +0 -171
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc98cf9ced82209cfacc2752160229c5eb067c9604c8639d3ec5d9663134d8fc
4
- data.tar.gz: 2c5a013fe96a5e60614f7d932837434a42e15ba19ae5a5e7096934ae4b7692f7
3
+ metadata.gz: 4d0d2deb3eea885db1ea9fd273fc2330f93be694a4a7f804f6ffc03811b67280
4
+ data.tar.gz: 1cd1d39bdfd34a113a88275c9662a180c352b425d2ab06278fdd4530ce2bf8d5
5
5
  SHA512:
6
- metadata.gz: eb72595523c73e2a2a9adfe560f653baf0c35581ee803d3381ef9f400c90aeec9f92ef262f19f6f56323a848a5b4a98fb898af811577c815429a6ac93c619e7e
7
- data.tar.gz: 93d11d0f0943378987968434a6f0a36391830826a70dc6a8ce09a9706aef6cd5cfe87bf31671e7bba031ac52f34c2d26e4edc96f096a5c02f9be19dfd2ce4a82
6
+ metadata.gz: 4fea894ba2fe827517f09a54cef4f729f7a2a3340318479422a3d4f5ca064d3ef7fefc7474a174b2b0a0de8644b8985d83da3663828ee2bb1e37b4b2f33faf39
7
+ data.tar.gz: d3057fde3a18df5ba4fcad91ed1159de018ae2b3732eb867fc546ac4e8f819547765bdbb3acb20787e126a09edc2b929f9dab6c9e2f5bf946e1acc58677a2c1e
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env bash
2
+
3
+ source $(dirname $0)/inc/install-openjdk.inc
4
+
5
+ set -e
6
+
7
+
8
+ function build_regression_tester() {
9
+ echo "::group::Install OpenJDK 8+11"
10
+ install_openjdk 8
11
+ install_openjdk 11 # last one is the default
12
+ echo "::endgroup::"
13
+
14
+ echo "::group::Install dependencies"
15
+ gem install bundler
16
+ bundle config set --local path vendor/bundle
17
+ bundle install
18
+ echo "::endgroup::"
19
+
20
+ echo "::group::Build with rake"
21
+ bundle exec rake check_manifest
22
+ bundle exec rake rubocop
23
+ bundle exec rake clean test
24
+ echo "::endgroup::"
25
+
26
+ echo "::group::Run Integration Tests"
27
+ bundle exec rake clean integration-test
28
+ echo "::endgroup::"
29
+
30
+ echo "::group::Build Package"
31
+ bundle exec rake install_gem
32
+ bundle exec pmdtester -h
33
+ echo "::endgroup::"
34
+
35
+ # builds on forks or builds for pull requests stop here
36
+ if [[ "${PMD_CI_REPO}" != "pmd/pmd-regression-tester" || -n "${PMD_CI_PULL_REQUEST_NUMBER}" ]]; then
37
+ exit 0
38
+ fi
39
+
40
+ # if this is a release build from a tag...
41
+ if [[ "${PMD_CI_REPO}" == "pmd/pmd-regression-tester" && "${PMD_CI_GIT_REF}" == refs/tags/* ]]; then
42
+ echo "::group::Publish to rubygems"
43
+ setup_secrets
44
+
45
+ git stash --all
46
+ gem build pmdtester.gemspec
47
+ gem push pmdtester-*.gem
48
+ echo "::endgroup::"
49
+ fi
50
+
51
+ }
52
+
53
+ ## helper functions
54
+
55
+ function setup_secrets() {
56
+ echo "Setting up secrets..."
57
+ # Required secrets are: GEM_HOST_API_KEY
58
+ local -r env_file=".ci/files/env"
59
+ printenv PMD_CI_SECRET_PASSPHRASE | gpg --batch --yes --decrypt \
60
+ --passphrase-fd 0 \
61
+ --output ${env_file} ${env_file}.gpg
62
+ source ${env_file} >/dev/null 2>&1
63
+ rm ${env_file}
64
+ }
65
+
66
+
67
+ build_regression_tester
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,26 @@
1
+
2
+ function install_openjdk() {
3
+ OPENJDK_VERSION=$1
4
+ echo "Installing OpenJDK ${OPENJDK_VERSION}"
5
+ JDK_OS=linux
6
+ COMPONENTS_TO_STRIP=1 # e.g. openjdk-11.0.3+7/bin/java
7
+ DOWNLOAD_URL=$(curl --silent -X GET "https://api.adoptopenjdk.net/v3/assets/feature_releases/${OPENJDK_VERSION}/ga?architecture=x64&heap_size=normal&image_type=jdk&jvm_impl=hotspot&os=${JDK_OS}&page=0&page_size=1&project=jdk&sort_method=DEFAULT&sort_order=DESC&vendor=adoptopenjdk" \
8
+ -H "accept: application/json" \
9
+ | jq -r ".[0].binaries[0].package.link")
10
+ OPENJDK_ARCHIVE=$(basename ${DOWNLOAD_URL})
11
+ CACHE_DIR=${HOME}/.cache/openjdk
12
+ TARGET_DIR=${HOME}/openjdk${OPENJDK_VERSION}
13
+ mkdir -p ${CACHE_DIR}
14
+ mkdir -p ${TARGET_DIR}
15
+ if [ ! -e ${CACHE_DIR}/${OPENJDK_ARCHIVE} ]; then
16
+ echo "Downloading from ${DOWNLOAD_URL} to ${CACHE_DIR}"
17
+ curl --location --output ${CACHE_DIR}/${OPENJDK_ARCHIVE} "${DOWNLOAD_URL}"
18
+ else
19
+ echo "Skipped download, file ${CACHE_DIR}/${OPENJDK_ARCHIVE} already exists"
20
+ fi
21
+ tar --extract --file ${CACHE_DIR}/${OPENJDK_ARCHIVE} -C ${TARGET_DIR} --strip-components=${COMPONENTS_TO_STRIP}
22
+ export JAVA_HOME="${TARGET_DIR}"
23
+ export PATH="${TARGET_DIR}/bin:${PATH}"
24
+ java -version
25
+ echo "Java is available at ${TARGET_DIR}"
26
+ }
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env bash
2
+
3
+ source $(dirname $0)/inc/install-openjdk.inc
4
+
5
+ set -e
6
+
7
+ echo "::group::Install OpenJDK 8+11"
8
+ install_openjdk 8
9
+ install_openjdk 11 # last one is the default
10
+ echo "::endgroup::"
11
+
12
+ echo "::group::Install dependencies"
13
+ gem install bundler
14
+ bundle config set --local path vendor/bundle
15
+ bundle install
16
+ echo "::endgroup::"
17
+
18
+ echo "::group::Run Manual Integration Tests"
19
+ bundle exec ruby -I test test/manual_integration_tests.rb
20
+ echo "::endgroup::"
@@ -0,0 +1,39 @@
1
+ name: build
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ tags:
7
+ - '**'
8
+ pull_request:
9
+ branches: [ master ]
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ continue-on-error: false
15
+ if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }}
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - uses: actions/cache@v2
19
+ with:
20
+ path: |
21
+ ~/.m2/repository
22
+ ~/.cache
23
+ vendor/bundle
24
+ key: ${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
25
+ restore-keys: |
26
+ ${{ runner.os }}-
27
+ - name: Set up Ruby
28
+ uses: ruby/setup-ruby@v1
29
+ with:
30
+ ruby-version: 2.7
31
+ - name: Build
32
+ run: .ci/build.sh
33
+ shell: bash
34
+ env:
35
+ MAVEN_OPTS: -Dmaven.wagon.httpconnectionManager.ttlSeconds=180 -Dmaven.wagon.http.retryHandler.count=3
36
+ PMD_CI_SECRET_PASSPHRASE: ${{ secrets.PMD_CI_SECRET_PASSPHRASE }}
37
+ PMD_CI_REPO: ${{ github.repository }}
38
+ PMD_CI_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
39
+ PMD_CI_GIT_REF: ${{ github.ref }}
@@ -0,0 +1,32 @@
1
+ name: manual-integration-tests
2
+
3
+ on: workflow_dispatch
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ continue-on-error: false
9
+ steps:
10
+ - uses: actions/checkout@v2
11
+ - uses: actions/cache@v2
12
+ with:
13
+ path: |
14
+ ~/.m2/repository
15
+ ~/.cache
16
+ vendor/bundle
17
+ key: ${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
18
+ restore-keys: |
19
+ ${{ runner.os }}-
20
+ - name: Set up Ruby
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: 2.7
24
+ - name: Build
25
+ run: .ci/manual-integration-tests.sh
26
+ shell: bash
27
+ env:
28
+ MAVEN_OPTS: -Dmaven.wagon.httpconnectionManager.ttlSeconds=180 -Dmaven.wagon.http.retryHandler.count=3
29
+ PMD_CI_SECRET_PASSPHRASE: ${{ secrets.PMD_CI_SECRET_PASSPHRASE }}
30
+ PMD_CI_REPO: ${{ github.repository }}
31
+ PMD_CI_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
32
+ PMD_CI_GIT_REF: ${{ github.ref }}
@@ -0,0 +1,9 @@
1
+ pkg/
2
+ doc/
3
+ Gemfile.lock
4
+ .project
5
+ .idea
6
+ .bundle
7
+ target/
8
+ vendor/
9
+ localtests/
data/.hoerc ADDED
@@ -0,0 +1 @@
1
+ exclude: !ruby/regexp /tmp$|\.(git|idea)\/|\.project|target|test\/|Gemfile\.lock|\.bundle\/|vendor\/bundle|localtests/
@@ -1,10 +1,29 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.4
4
+ TargetRubyVersion: 2.7
5
+ Include:
6
+ - 'lib/**/*'
7
+ - 'test/**/*'
5
8
  Exclude:
9
+ # pmdtester.gemspec and Gemfile are generated
10
+ - 'pmdtester.gemspec'
11
+ - 'Gemfile'
6
12
  - 'target/**/*'
7
13
  - 'test/resources/**/*'
14
+ - 'vendor/**/*'
8
15
 
9
16
  Metrics/LineLength:
10
- Max: 100
17
+ Max: 120
18
+
19
+ Metrics/MethodLength:
20
+ Exclude:
21
+ - 'lib/pmdtester/parsers/options.rb'
22
+
23
+ Metrics/ClassLength:
24
+ Exclude:
25
+ - '**/*'
26
+
27
+ Metrics/BlockLength:
28
+ Exclude:
29
+ - 'lib/pmdtester/parsers/options.rb'
@@ -1,27 +1,26 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2018-07-12 16:57:46 +0800 using RuboCop version 0.56.0.
3
+ # on 2018-11-25 11:00:37 +0100 using RuboCop version 0.51.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 22
9
+ # Offense count: 30
10
10
  Metrics/AbcSize:
11
11
  Max: 47
12
12
 
13
- # Offense count: 3
13
+ # Offense count: 6
14
14
  # Configuration parameters: CountComments.
15
15
  Metrics/ClassLength:
16
- Max: 174
16
+ Max: 135
17
17
 
18
- # Offense count: 33
18
+ # Offense count: 38
19
19
  # Configuration parameters: CountComments.
20
20
  Metrics/MethodLength:
21
- Max: 35
21
+ Max: 22
22
22
 
23
- # Offense count: 5
23
+ # Offense count: 3
24
24
  Naming/AccessorMethodName:
25
25
  Exclude:
26
26
  - 'lib/pmdtester/builders/pmd_report_builder.rb'
27
- - 'lib/pmdtester/parsers/projects_parser.rb'
@@ -0,0 +1 @@
1
+ 2.7
data/Gemfile CHANGED
@@ -3,18 +3,6 @@
3
3
  # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake bundler:gemfile`.
4
4
 
5
5
  source "https://rubygems.org/"
6
-
7
- gem "nokogiri", "~>1.8.2"
8
- gem "slop", "~>4.6.2"
9
-
10
- gem "hoe-bundler", "~>1.2", :group => [:development, :test]
11
- gem "hoe-gemspec", "~>1.0", :group => [:development, :test]
12
- gem "hoe-git", "~>1.6", :group => [:development, :test]
13
- gem "minitest", "~>5.10.1", :group => [:development, :test]
14
- gem "mocha", "~>1.5.0", :group => [:development, :test]
15
- gem "rubocop", "~>0.56.0", :group => [:development, :test]
16
- gem "test-unit", "~>3.2.3", :group => [:development, :test]
17
- gem "rdoc", ">=4.0", "<6", :group => [:development, :test]
18
- gem "hoe", "~>3.17", :group => [:development, :test]
6
+ gemspec
19
7
 
20
8
  # vim: syntax=ruby
data/History.md CHANGED
@@ -1,3 +1,111 @@
1
+ # 1.1.1 / 2021-01-15
2
+
3
+ This is a bugfix release.
4
+
5
+ ## Fixed Issues
6
+
7
+ * [#81](https://github.com/pmd/pmd-regression-tester/pull/81): Dynamically generated rulesets are not applied on diffs
8
+ * [#82](https://github.com/pmd/pmd-regression-tester/pull/82): Summary hash uses wrong key names
9
+ * An already built PMD binary was not reused in CI
10
+
11
+ # 1.1.0 / 2020-12-05
12
+
13
+ ## New and Noteworthy
14
+
15
+ * At least ruby 2.7 is required.
16
+
17
+ * Typeresolution is now supported by two new tags in the project-list.xml file:
18
+ `build-command` and `auxclasspath-command`. For details, see pull request [#72](https://github.com/pmd/pmd-regression-tester/pull/72).
19
+
20
+ * As part of [#74](https://github.com/pmd/pmd-regression-tester/pull/74) runner now returns a single hash
21
+ with the summarized values instead of multiple numbers:
22
+
23
+ ```
24
+ summary = PmdTester::Runner.new(argv).run
25
+ puts summary
26
+ # {:errors=>{:new=>0, :removed=>0}, :violations=>{:new=>0, :removed=>0, :changed=>0}, :configerrors=>{:new=>0, :removed=>0}}
27
+ ```
28
+
29
+ * As part of [#73](https://github.com/pmd/pmd-regression-tester/issues/73) and [#78](https://github.com/pmd/pmd-regression-tester/pull/78)
30
+ a improved HTML report is now generated with the following features:
31
+ * searchable table for violations with filters by rule/file/kind (added, removed, changed)
32
+ * summary of changes by rule
33
+ * code snippets for the violations
34
+
35
+ ## Fixed Issues
36
+
37
+ * [#48](https://github.com/pmd/pmd-regression-tester/issues/48): Support auxclasspath / typeresolution
38
+ * [#67](https://github.com/pmd/pmd-regression-tester/pull/67): Report contains errors having nil filename
39
+ * [#68](https://github.com/pmd/pmd-regression-tester/pull/68): Don't generate a dynamic ruleset if not needed
40
+ * [#69](https://github.com/pmd/pmd-regression-tester/pull/69): Detect single rules with auto-gen-config
41
+ * [#70](https://github.com/pmd/pmd-regression-tester/pull/70): Add link to PR on github in HTML report
42
+ * [#73](https://github.com/pmd/pmd-regression-tester/issues/73): Better HTML presentation for diff report
43
+ * [#74](https://github.com/pmd/pmd-regression-tester/pull/74): Merge violations that have just changed messages
44
+ * [#75](https://github.com/pmd/pmd-regression-tester/pull/75): Add new option "--error-recovery"
45
+ * [#76](https://github.com/pmd/pmd-regression-tester/pull/76): Speedup XML parsing
46
+ * [#79](https://github.com/pmd/pmd-regression-tester/pull/79): Add new configuration option "--baseline-download-url"
47
+ * [#80](https://github.com/pmd/pmd-regression-tester/pull/80): Cache and reuse pmd builds
48
+
49
+ ## External Contributions
50
+
51
+ # 1.0.1 / 2020-07-08
52
+
53
+ This is a bugfix release.
54
+
55
+ ## Fixed Issues
56
+
57
+ * [#62](https://github.com/pmd/pmd-regression-tester/pull/62): Violation descriptions parsed incompletely
58
+
59
+ # 1.0.0 / 2020-04-25
60
+
61
+ ## New and Noteworthy
62
+
63
+ First stable release.
64
+
65
+ ## Fixed Issues
66
+
67
+ * [#35](https://github.com/pmd/pmd-regression-tester/issues/35): exclude-pattern hasn't been implemented
68
+ * [#37](https://github.com/pmd/pmd-regression-tester/issues/37): Render stack traces properly
69
+ * [#38](https://github.com/pmd/pmd-regression-tester/issues/38): Improve Danger messages
70
+ * [#40](https://github.com/pmd/pmd-regression-tester/issues/40): NoMethodError on beta3
71
+ * [#42](https://github.com/pmd/pmd-regression-tester/issues/42): Installing the snapshot version of pmdtester locally from github
72
+ * [#46](https://github.com/pmd/pmd-regression-tester/issues/46): Support multithreaded execution of PMD
73
+ * [#47](https://github.com/pmd/pmd-regression-tester/issues/47): Reuse the already built PMD binary for PR checks
74
+ * [#49](https://github.com/pmd/pmd-regression-tester/issues/49): Support comparing two error stacktraces
75
+ * [#50](https://github.com/pmd/pmd-regression-tester/issues/50): Differences due to different locale settings
76
+ * [#57](https://github.com/pmd/pmd-regression-tester/issues/57): Support configuration errors in the report
77
+ * [#60](https://github.com/pmd/pmd-regression-tester/issues/60): Display a simple progress report
78
+
79
+ ## External Contributions
80
+
81
+ * [#33](https://github.com/pmd/pmd-regression-tester/pull/33): Ignore changes to test code of PMD when generating dynamic rule sets - [BBG](https://github.com/djydewang)
82
+ * [#34](https://github.com/pmd/pmd-regression-tester/pull/34): Clear old reports before generating new differences regression reports - [BBG](https://github.com/djydewang)
83
+ * [#36](https://github.com/pmd/pmd-regression-tester/pull/36): Implements exclude-pattern - [BBG](https://github.com/djydewang)
84
+ * [#39](https://github.com/pmd/pmd-regression-tester/pull/39): Render stacktraces properly - [BBG](https://github.com/djydewang)
85
+ * [#41](https://github.com/pmd/pmd-regression-tester/pull/41): Fixes NoMethodError in Project class - [BBG](https://github.com/djydewang)
86
+ * [#43](https://github.com/pmd/pmd-regression-tester/pull/43): Adds pmdtester.gemspec file - [BBG](https://github.com/djydewang)
87
+ * [#44](https://github.com/pmd/pmd-regression-tester/pull/44): Improve Danger messages & Increase the readability of the summary report - [BBG](https://github.com/djydewang)
88
+ * [#45](https://github.com/pmd/pmd-regression-tester/pull/45): Removes the exit statement in RuleSetBuilder Class - [BBG](https://github.com/djydewang)
89
+ * [#51](https://github.com/pmd/pmd-regression-tester/pull/51): Add the JDK version and locale info to the summary table of the diff report - [BBG](https://github.com/djydewang)
90
+ * [#52](https://github.com/pmd/pmd-regression-tester/pull/52): Get the result of command 'java -version' from stderr rather than stdout - [BBG](https://github.com/djydewang)
91
+ * [#53](https://github.com/pmd/pmd-regression-tester/pull/53): Support comparing the two error stacktraces - [BBG](https://github.com/djydewang)
92
+ * [#54](https://github.com/pmd/pmd-regression-tester/pull/54): Support multithreaded execution of PMD - [BBG](https://github.com/djydewang)
93
+ * [#61](https://github.com/pmd/pmd-regression-tester/pull/61): Display a simple progress report every 2 minutes - [BBG](https://github.com/djydewang)
94
+
95
+ # 1.0.0.beta3 / 2018-08-01
96
+
97
+ Note: This is a beta release. The pmdtester is feature complete,
98
+ but might contain bugs.
99
+
100
+ ## External Contributions
101
+
102
+ * [#28](https://github.com/pmd/pmd-regression-tester/pull/28): Refactor require statements - [BBG](https://github.com/djydewang)
103
+ * [#29](https://github.com/pmd/pmd-regression-tester/pull/29): Add 'verify' rake task to verify code quality before committing changes - [BBG](https://github.com/djydewang)
104
+ * [#30](https://github.com/pmd/pmd-regression-tester/pull/30): Fix diff_cmd in RuleSetBuilder - [BBG](https://github.com/djydewang)
105
+ * [#31](https://github.com/pmd/pmd-regression-tester/pull/31): Fix color scheme for diff report, add default values for various options - [BBG](https://github.com/djydewang)
106
+ * [#32](https://github.com/pmd/pmd-regression-tester/pull/32): Update Readme.rdoc - [BBG](https://github.com/djydewang)
107
+
108
+
1
109
  # 1.0.0.beta2 / 2018-07-17
2
110
 
3
111
  * First release of pmdtester
@@ -0,0 +1,60 @@
1
+ .ci/build.sh
2
+ .ci/files/env.gpg
3
+ .ci/inc/install-openjdk.inc
4
+ .ci/manual-integration-tests.sh
5
+ .github/workflows/build.yml
6
+ .github/workflows/manual-integration-tests.yml
7
+ .gitignore
8
+ .hoerc
9
+ .rubocop.yml
10
+ .rubocop_todo.yml
11
+ .ruby-version
12
+ Gemfile
13
+ History.md
14
+ LICENSE
15
+ Manifest.txt
16
+ README.rdoc
17
+ Rakefile
18
+ bin/pmdtester
19
+ config/all-java.xml
20
+ config/design.xml
21
+ config/project-list.xml
22
+ config/projectlist_1_0_0.xsd
23
+ config/projectlist_1_1_0.xsd
24
+ lib/pmdtester.rb
25
+ lib/pmdtester/builders/liquid_renderer.rb
26
+ lib/pmdtester/builders/pmd_report_builder.rb
27
+ lib/pmdtester/builders/project_builder.rb
28
+ lib/pmdtester/builders/project_hasher.rb
29
+ lib/pmdtester/builders/rule_set_builder.rb
30
+ lib/pmdtester/builders/simple_progress_logger.rb
31
+ lib/pmdtester/builders/summary_report_builder.rb
32
+ lib/pmdtester/cmd.rb
33
+ lib/pmdtester/collection_by_file.rb
34
+ lib/pmdtester/parsers/options.rb
35
+ lib/pmdtester/parsers/pmd_report_document.rb
36
+ lib/pmdtester/parsers/projects_parser.rb
37
+ lib/pmdtester/pmd_branch_detail.rb
38
+ lib/pmdtester/pmd_configerror.rb
39
+ lib/pmdtester/pmd_error.rb
40
+ lib/pmdtester/pmd_report_detail.rb
41
+ lib/pmdtester/pmd_tester_utils.rb
42
+ lib/pmdtester/pmd_violation.rb
43
+ lib/pmdtester/project.rb
44
+ lib/pmdtester/report_diff.rb
45
+ lib/pmdtester/resource_locator.rb
46
+ lib/pmdtester/runner.rb
47
+ pmdtester.gemspec
48
+ resources/_includes/diff_pill_row.html
49
+ resources/css/bootstrap.min.css
50
+ resources/css/datatables.min.css
51
+ resources/css/pmd-tester.css
52
+ resources/js/bootstrap.min.js
53
+ resources/js/code-snippets.js
54
+ resources/js/datatables.min.js
55
+ resources/js/jquery-3.2.1.slim.min.js
56
+ resources/js/jquery.min.js
57
+ resources/js/popper.min.js
58
+ resources/js/project-report.js
59
+ resources/project_diff_report.html
60
+ resources/project_index.html