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 +4 -4
- data/.github/workflows/build.yml +3 -1
- data/.github/workflows/manual-integration-tests.yml +3 -1
- data/History.md +7 -0
- data/README.rdoc +2 -1
- data/lib/pmdtester/builders/pmd_report_builder.rb +6 -4
- data/lib/pmdtester/builders/rule_set_builder.rb +41 -11
- data/lib/pmdtester/cmd.rb +13 -7
- data/lib/pmdtester.rb +1 -1
- data/pmdtester.gemspec +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 97a93382c7d803e84a0e16c80f21e65a112d9b841e445063269d8844c9a513f1
|
|
4
|
+
data.tar.gz: c01aba1ed03f3cc16ea901eaabebc41de8a0990edc480acc6c4edc3469bd06ce
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e9c9d95b9cc5f0e03e7414aa63c919c28d3399f9fb771d6a60fd3be36500dbeac547cc52dd9ca130d9d4a826e12888056c4a4b57fdb6fbc8373a4abf66c3f960
|
|
7
|
+
data.tar.gz: 03b0d43189d7c462b50fde0be99aa7959d44717fe9b3248d366a430047d1dac7c2365c47469e242ed25951853e62e4d4ce588b84f99e0e9cec1991cb635517d8
|
data/.github/workflows/build.yml
CHANGED
|
@@ -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:
|
|
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:
|
|
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/)),
|
|
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
|
-
|
|
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
|
-
#
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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=
|