pmdtester 1.6.1 → 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: 7429c569bdac259cad6b5f768efeea761f09526feccae27fcb3ff25a8dc11da6
4
- data.tar.gz: f721bec1256b72ac94d81a06155be85724d2ecb27ddc4228ded4ffb4e23d85f2
3
+ metadata.gz: 97a93382c7d803e84a0e16c80f21e65a112d9b841e445063269d8844c9a513f1
4
+ data.tar.gz: c01aba1ed03f3cc16ea901eaabebc41de8a0990edc480acc6c4edc3469bd06ce
5
5
  SHA512:
6
- metadata.gz: 896eaf9c9979252c7fb326c4f80aa009db10dff63393f20482c48397c9efdacdd911faef516c2be198559fce9428776ec0728a1f8d6cc9f7f3d91803d1034f4c
7
- data.tar.gz: ae4143fa783d36093c8d0e1927732de4aa62d5e91563f04067dce22710f408a11e59e61e6e7ba14dfd35250b8ca85dc7a0007caed69807abd96fff011f981928
6
+ metadata.gz: e9c9d95b9cc5f0e03e7414aa63c919c28d3399f9fb771d6a60fd3be36500dbeac547cc52dd9ca130d9d4a826e12888056c4a4b57fdb6fbc8373a4abf66c3f960
7
+ data.tar.gz: 03b0d43189d7c462b50fde0be99aa7959d44717fe9b3248d366a430047d1dac7c2365c47469e242ed25951853e62e4d4ce588b84f99e0e9cec1991cb635517d8
@@ -27,7 +27,9 @@ jobs:
27
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
35
  - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4.2.4
@@ -22,7 +22,9 @@ jobs:
22
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
30
  - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4.2.4
data/History.md CHANGED
@@ -1,3 +1,10 @@
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
+
1
8
  # 1.6.1 / 2025-09-19
2
9
 
3
10
  ## Fixed Issues
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? || match_data[3].start_with?('Abstract')
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.1'
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.1 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.1".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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Dangel