pmdtester 1.6.0 → 1.6.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: 8b44aeb9d29dbe2fe0f366e51fb5694be4c37c395e8390e8c4a95ef5b7a60a2e
4
- data.tar.gz: ccc0f0d978c99a613d7c1172aad826f4373a4dc6c28b4f6043bc5f8553130984
3
+ metadata.gz: 97a93382c7d803e84a0e16c80f21e65a112d9b841e445063269d8844c9a513f1
4
+ data.tar.gz: c01aba1ed03f3cc16ea901eaabebc41de8a0990edc480acc6c4edc3469bd06ce
5
5
  SHA512:
6
- metadata.gz: f51981a21381f416629d5653864a6baeb6fe5d0af40d72f711d39a332471a4f117325399ac7895d3bd837cc23387c75d2613380481ecb3f45c9db30021e236f8
7
- data.tar.gz: c5d40c071579c0b5335d6cea19c796b0f80cb3709fa46caad2f07ce99b623f2d108712a43dc8348e3e3e05a14027103ac356d49de1f82fe219cf41b3d987f557
6
+ metadata.gz: e9c9d95b9cc5f0e03e7414aa63c919c28d3399f9fb771d6a60fd3be36500dbeac547cc52dd9ca130d9d4a826e12888056c4a4b57fdb6fbc8373a4abf66c3f960
7
+ data.tar.gz: 03b0d43189d7c462b50fde0be99aa7959d44717fe9b3248d366a430047d1dac7c2365c47469e242ed25951853e62e4d4ce588b84f99e0e9cec1991cb635517d8
@@ -23,14 +23,16 @@ jobs:
23
23
  run:
24
24
  shell: bash
25
25
  steps:
26
- - uses: actions/checkout@v4
27
- - uses: actions/setup-java@v4
26
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
27
+ - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 #v4.7.1
28
28
  with:
29
29
  distribution: 'temurin'
30
- java-version: '11'
30
+ java-version: |
31
+ 11
32
+ 17
31
33
  - name: Prepare HOME/openjdk11
32
34
  run: ln -sfn "${JAVA_HOME_11_X64}" "${HOME}/openjdk11"
33
- - uses: actions/cache@v4
35
+ - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4.2.4
34
36
  with:
35
37
  path: |
36
38
  ~/.m2/repository
@@ -42,7 +44,7 @@ jobs:
42
44
  restore-keys: |
43
45
  v4-${{ runner.os }}-
44
46
  - name: Set up Ruby 3.3
45
- uses: ruby/setup-ruby@v1
47
+ uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 #v1.254.0
46
48
  with:
47
49
  ruby-version: 3.3
48
50
  - name: Install dependencies (bundler)
@@ -18,14 +18,16 @@ jobs:
18
18
  runs-on: ubuntu-latest
19
19
  continue-on-error: false
20
20
  steps:
21
- - uses: actions/checkout@v4
22
- - uses: actions/setup-java@v4
21
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
22
+ - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 #v4.7.1
23
23
  with:
24
24
  distribution: 'temurin'
25
- java-version: '11'
25
+ java-version: |
26
+ 11
27
+ 17
26
28
  - name: Prepare HOME/openjdk11
27
29
  run: ln -sfn "${JAVA_HOME_11_X64}" "${HOME}/openjdk11"
28
- - uses: actions/cache@v4
30
+ - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4.2.4
29
31
  with:
30
32
  path: |
31
33
  ~/.m2/repository
@@ -37,7 +39,7 @@ jobs:
37
39
  restore-keys: |
38
40
  v4-${{ runner.os }}-
39
41
  - name: Set up Ruby 3.3
40
- uses: ruby/setup-ruby@v1
42
+ uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 #v1.254.0
41
43
  with:
42
44
  ruby-version: 3.3
43
45
  - name: Install dependencies (bundler)
@@ -30,11 +30,11 @@ jobs:
30
30
  outputs:
31
31
  VERSION: ${{ steps.version.outputs.VERSION }}
32
32
  steps:
33
- - uses: actions/checkout@v4
33
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
34
34
  with:
35
35
  ref: ${{ github.event.workflow_run.head_branch }}
36
36
  - name: Set up Ruby 3.3
37
- uses: ruby/setup-ruby@v1
37
+ uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 #v1.254.0
38
38
  with:
39
39
  ruby-version: 3.3
40
40
  - name: Install dependencies (bundler)
@@ -91,8 +91,11 @@ jobs:
91
91
  run:
92
92
  shell: bash
93
93
  steps:
94
+ - uses: actions/checkout@v4
95
+ with:
96
+ ref: ${{ github.event.workflow_run.head_branch }}
94
97
  - name: Set up Ruby 3.3
95
- uses: ruby/setup-ruby@v1
98
+ uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 #v1.254.0
96
99
  with:
97
100
  ruby-version: 3.3
98
101
  - name: Install dependencies (bundler)
@@ -116,10 +119,18 @@ jobs:
116
119
  gem build pmdtester.gemspec
117
120
  gempkgfile="$(echo pmdtester-*.gem)"
118
121
  gem push "${gempkgfile}"
122
+ - uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e #v2.0.6
123
+ id: pmd-actions-helper-app-token
124
+ with:
125
+ app-id: ${{ secrets.PMD_ACTIONS_HELPER_ID }}
126
+ private-key: ${{ secrets.PMD_ACTIONS_HELPER_PRIVATE_KEY }}
127
+ owner: pmd
128
+ repositories: pmd-regression-tester
129
+ permission-contents: write # create a release
119
130
  - name: Create GitHub Release
120
131
  env:
121
132
  # Token required for GH CLI:
122
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
133
+ GH_TOKEN: ${{ steps.pmd-actions-helper-app-token.outputs.token }}
123
134
  TAG_NAME: ${{ github.event.workflow_run.head_branch }}
124
135
  VERSION: ${{ needs.check-version.outputs.VERSION }}
125
136
  run: |
@@ -135,6 +146,7 @@ jobs:
135
146
  gempkgfile="$(echo pmdtester-*.gem)"
136
147
 
137
148
  gh release create "$TAG_NAME" "${gempkgfile}" \
149
+ --repo pmd/pmd-regression-tester \
138
150
  --verify-tag \
139
151
  --notes-file release_notes.md \
140
152
  --title "$RELEASE_NAME"
data/History.md CHANGED
@@ -1,3 +1,22 @@
1
+ # 1.6.2 / 2025-10-24
2
+ ## Fixed Issues
3
+ * [#142](https://github.com/pmd/pmd-regression-tester/pull/142): Support `--auto-gen-config` for rules which start with "Abstract"
4
+ ## Merged pull requests
5
+ * [#142](https://github.com/pmd/pmd-regression-tester/pull/142): Support `--auto-gen-config` for rules which start with "Abstract" - [Andreas Dangel](https://github.com/adangel) (@adangel)
6
+ * [#143](https://github.com/pmd/pmd-regression-tester/pull/143): chore(ci): Use java 17 as default - [Andreas Dangel](https://github.com/adangel) (@adangel)
7
+
8
+ # 1.6.1 / 2025-09-19
9
+
10
+ ## Fixed Issues
11
+ * [#124](https://github.com/pmd/pmd-regression-tester/issues/124): With `--auto-gen-config` invalid rule references might be generated
12
+ * [#138](https://github.com/pmd/pmd-regression-tester/issues/138): chore(ci): Fix public-release workflow
13
+ * [#139](https://github.com/pmd/pmd-regression-tester/issues/139): chore(ci): CI Improvements
14
+
15
+ ## Merged pull requests
16
+ * [#138](https://github.com/pmd/pmd-regression-tester/pull/138): chore(ci): Fix public-release workflow - [Andreas Dangel](https://github.com/adangel) (@adangel)
17
+ * [#139](https://github.com/pmd/pmd-regression-tester/pull/139): chore(ci): CI Improvements - [Andreas Dangel](https://github.com/adangel) (@adangel)
18
+ * [#141](https://github.com/pmd/pmd-regression-tester/pull/141): Fix #124: If an abstract rule is changed, run all rules - [UncleOwen](https://github.com/UncleOwen) (@UncleOwen)
19
+
1
20
  # 1.6.0 / 2025-07-25
2
21
 
3
22
  ## New and Noteworthy
data/README.rdoc CHANGED
@@ -167,5 +167,6 @@ The tool creates the following folders:
167
167
  * Push to main.
168
168
  * Push the tag. Github Actions will build and publish the new gem
169
169
  * A github release is automatically created, verify it on https://github.com/pmd/pmd-regression-tester/releases
170
- * To make pmd's main CI use the new version (in [pmd/pmd](https://github.com/pmd/pmd/)), go to the root directory and run `bundle lock --update`. Commit these changes.
170
+ * To make pmd's main CI use the new version (in [pmd/pmd](https://github.com/pmd/pmd/)),
171
+ go to the directory ".ci/files" and run `bundle lock --update`. Commit these changes.
171
172
  * Rename milestone to version, close it and create a new "Next" milestone: https://github.com/pmd/pmd-regression-tester/milestones
@@ -250,16 +250,18 @@ module PmdTester
250
250
 
251
251
  def build_pmd_with_maven
252
252
  logger.info "#{@pmd_branch_name}: Building PMD #{@pmd_version}..."
253
+ extra_java_home = nil
253
254
 
254
255
  package_cmd = if Semver.compare(@pmd_version, '7.14.0') >= 0
255
256
  # build command since PMD migrated to central portal
256
- './mvnw clean package ' \
257
+ './mvnw clean package -V ' \
257
258
  '-PfastSkip ' \
258
259
  '-DskipTests ' \
259
260
  '-T1C -B'
260
261
  else
262
+ extra_java_home = "#{Dir.home}/openjdk11"
261
263
  # build command for older PMD versions
262
- './mvnw clean package ' \
264
+ './mvnw clean package -V ' \
263
265
  "-s #{ResourceLocator.resource('maven-settings.xml')} " \
264
266
  '-Pfor-dokka-maven-plugin ' \
265
267
  '-Dmaven.test.skip=true ' \
@@ -270,8 +272,8 @@ module PmdTester
270
272
  '-T1C -B'
271
273
  end
272
274
 
273
- logger.debug "#{@pmd_branch_name}: maven command: #{package_cmd}"
274
- Cmd.execute_successfully(package_cmd)
275
+ logger.debug "#{@pmd_branch_name}: maven command: #{package_cmd} java_home: #{extra_java_home}"
276
+ Cmd.execute_successfully(package_cmd, extra_java_home)
275
277
  end
276
278
  end
277
279
  end
@@ -25,7 +25,8 @@ module PmdTester
25
25
  def build?
26
26
  languages = determine_languages
27
27
  filenames = diff_filenames(languages)
28
- run_required, rule_refs = get_rule_refs(filenames)
28
+ all_rules_hash = determine_all_rules
29
+ run_required, rule_refs = get_rule_refs(filenames, all_rules_hash)
29
30
  if run_required
30
31
  output_filter_set(rule_refs)
31
32
  build_config_file(rule_refs)
@@ -71,8 +72,8 @@ module PmdTester
71
72
  # filtering possible or if no rules are affected.
72
73
  # Whether to run the regression test is returned as an additional boolean flag.
73
74
  #
74
- def get_rule_refs(filenames)
75
- run_required, categories, rules = determine_categories_rules(filenames)
75
+ def get_rule_refs(filenames, all_rules_hash)
76
+ run_required, categories, rules = determine_categories_rules(filenames, all_rules_hash)
76
77
  logger.debug "Regression test required: #{run_required}"
77
78
  logger.debug "Categories: #{categories}"
78
79
  logger.debug "Rules: #{rules}"
@@ -122,12 +123,12 @@ module PmdTester
122
123
 
123
124
  private
124
125
 
125
- def determine_categories_rules(filenames)
126
+ def determine_categories_rules(filenames, all_rules_hash)
126
127
  regression_test_required = false
127
128
  categories = Set[]
128
129
  rules = Set[]
129
130
  filenames.each do |filename|
130
- matched = check_single_filename?(filename, categories, rules)
131
+ matched = check_single_filename?(filename, all_rules_hash, categories, rules)
131
132
  regression_test_required = true if matched
132
133
 
133
134
  next if matched
@@ -141,14 +142,13 @@ module PmdTester
141
142
  [regression_test_required, categories, rules]
142
143
  end
143
144
 
144
- def check_single_filename?(filename, categories, rules)
145
+ def check_single_filename?(filename, all_rules_hash, categories, rules)
145
146
  logger.debug "Checking #{filename}"
146
147
 
147
- # matches Java-based rule implementations
148
- match_data = %r{.+/src/main/java/.+/lang/([^/]+)/rule/([^/]+)/([^/]+)Rule.java}.match(filename)
149
- unless match_data.nil?
150
- logger.debug "Matches: #{match_data.inspect}"
151
- rules.add("#{match_data[1]}/#{match_data[2]}.xml/#{match_data[3]}")
148
+ # direct match of a Java-based rule implementation
149
+ if all_rules_hash.key?(filename)
150
+ logger.debug "Direct match: #{all_rules_hash[filename]}"
151
+ rules.add(all_rules_hash[filename])
152
152
  return true
153
153
  end
154
154
 
@@ -196,5 +196,35 @@ module PmdTester
196
196
  end
197
197
  languages
198
198
  end
199
+
200
+ # Creates a mapping between java source files and the rule reference
201
+ # in the ruleset, e.g.:
202
+ # 'pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/NcssCountRule.java'
203
+ # => 'java/design.xml/NcssCount'
204
+ def determine_all_rules
205
+ all_rules_hash = {}
206
+ Dir.chdir(@options.local_git_repo) do
207
+ Dir.glob('**/src/main/resources/category/*/*.xml').each do |rulesetfile|
208
+ match_data = %r{.+/src/main/resources/category/([^/]+)/([^/.]+\.xml)}.match(rulesetfile)
209
+ ref_prefix = "#{match_data[1]}/#{match_data[2]}"
210
+ java_base_path = rulesetfile.gsub(%r{src/main/resources/category/.+/.+\.xml}, 'src/main/java')
211
+
212
+ doc = File.open(rulesetfile) { |f| Nokogiri::XML(f) }
213
+ rules = doc.css('ruleset rule')
214
+ rules.each do |r|
215
+ next if r.attributes['class'].nil? # skip rule references
216
+
217
+ ref = "#{ref_prefix}/#{r.attributes['name'].content}"
218
+ clazz = r.attributes['class'].content
219
+
220
+ # guess java file name at standard location src/main/java relative to the category ruleset
221
+ java_filename = "#{java_base_path}/#{clazz.gsub('.', '/')}.java"
222
+
223
+ all_rules_hash[java_filename] = ref
224
+ end
225
+ end
226
+ end
227
+ all_rules_hash
228
+ end
199
229
  end
200
230
  end
data/lib/pmdtester/cmd.rb CHANGED
@@ -13,7 +13,7 @@ module PmdTester
13
13
  # in path.
14
14
  #
15
15
  def self.execute(cmd, path)
16
- stdout, stderr, status = internal_execute(cmd)
16
+ stdout, stderr, status = internal_execute(cmd, nil)
17
17
 
18
18
  file = File.new("#{path}/stdout.txt", 'w')
19
19
  file.puts stdout
@@ -26,8 +26,8 @@ module PmdTester
26
26
  status
27
27
  end
28
28
 
29
- def self.execute_successfully(cmd)
30
- stdout, stderr, status = internal_execute(cmd)
29
+ def self.execute_successfully(cmd, extra_java_home = nil)
30
+ stdout, stderr, status = internal_execute(cmd, extra_java_home)
31
31
 
32
32
  unless status.success?
33
33
  logger.error "Command failed: #{cmd}"
@@ -40,14 +40,20 @@ module PmdTester
40
40
  end
41
41
 
42
42
  def self.stderr_of(cmd)
43
- _stdout, stderr, _status = internal_execute(cmd)
43
+ _stdout, stderr, _status = internal_execute(cmd, nil)
44
44
  stderr
45
45
  end
46
46
 
47
- def self.internal_execute(cmd)
48
- logger.debug "execute command '#{cmd}'"
47
+ def self.internal_execute(cmd, extra_java_home)
48
+ logger.debug "execute command '#{cmd}' (extra_java_home: #{extra_java_home})"
49
49
 
50
- stdout, stderr, status = Open3.capture3("#{cmd};")
50
+ new_env = ENV.to_h
51
+ unless extra_java_home.nil?
52
+ new_env['JAVA_HOME'] = extra_java_home
53
+ new_env['PATH'] = "#{extra_java_home}/bin:#{new_env['PATH']}"
54
+ end
55
+
56
+ stdout, stderr, status = Open3.capture3(new_env, "#{cmd};")
51
57
 
52
58
  logger.debug "status: #{status}"
53
59
  logger.debug "stdout: #{stdout}"
data/lib/pmdtester.rb CHANGED
@@ -33,7 +33,7 @@ require_relative 'pmdtester/parsers/projects_parser'
33
33
  # and unexpected behaviors will not be introduced to PMD project
34
34
  # after fixing an issue and new rules can work as expected.
35
35
  module PmdTester
36
- VERSION = '1.6.0'
36
+ VERSION = '1.6.2'
37
37
  BASE = 'base'
38
38
  PATCH = 'patch'
39
39
  PR_NUM_ENV_VAR = 'PMD_CI_PULL_REQUEST_NUMBER' # see PmdBranchDetail
data/pmdtester.gemspec CHANGED
@@ -1,11 +1,11 @@
1
1
  # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake hoe:spec`.
2
2
 
3
3
  # -*- encoding: utf-8 -*-
4
- # stub: pmdtester 1.6.0 ruby lib
4
+ # stub: pmdtester 1.6.2 ruby lib
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pmdtester".freeze
8
- s.version = "1.6.0".freeze
8
+ s.version = "1.6.2".freeze
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
11
11
  s.metadata = { "bug_tracker_uri" => "https://github.com/pmd/pmd-regression-tester/issues", "homepage_uri" => "https://pmd.github.io", "source_code_uri" => "https://github.com/pmd/pmd-regression-tester" } if s.respond_to? :metadata=
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Dangel
8
8
  - Binguo Bao
9
9
  - Clément Fournier
10
+ autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
13
  date: 1980-01-02 00:00:00.000000000 Z
@@ -349,6 +350,7 @@ metadata:
349
350
  bug_tracker_uri: https://github.com/pmd/pmd-regression-tester/issues
350
351
  homepage_uri: https://pmd.github.io
351
352
  source_code_uri: https://github.com/pmd/pmd-regression-tester
353
+ post_install_message:
352
354
  rdoc_options:
353
355
  - "--main"
354
356
  - README.rdoc
@@ -365,7 +367,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
365
367
  - !ruby/object:Gem::Version
366
368
  version: '0'
367
369
  requirements: []
368
- rubygems_version: 3.6.9
370
+ rubygems_version: 3.5.22
371
+ signing_key:
369
372
  specification_version: 4
370
373
  summary: A regression testing tool ensure that new problems and unexpected behaviors
371
374
  will not be introduced to PMD project after fixing an issue , and new rules can