pmdtester 1.4.1 → 1.5.0
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 -2
- data/.github/workflows/manual-integration-tests.yml +3 -2
- data/History.md +11 -0
- data/lib/pmdtester/builders/liquid_renderer.rb +6 -0
- data/lib/pmdtester/builders/pmd_report_builder.rb +32 -15
- data/lib/pmdtester/builders/project_builder.rb +4 -4
- data/lib/pmdtester/builders/project_hasher.rb +3 -0
- data/lib/pmdtester/builders/rule_set_builder.rb +1 -1
- data/lib/pmdtester/cmd.rb +39 -11
- data/lib/pmdtester/pmd_report_detail.rb +16 -2
- data/lib/pmdtester/pmd_tester_utils.rb +2 -1
- data/lib/pmdtester/project.rb +3 -0
- data/lib/pmdtester/report_diff.rb +7 -1
- data/lib/pmdtester/runner.rb +2 -2
- data/lib/pmdtester/semver.rb +6 -0
- data/lib/pmdtester.rb +1 -1
- data/pmdtester.gemspec +3 -3
- data/resources/project_diff_report.html +6 -0
- data/resources/project_pmd_report.html +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d00209411d45b04f8ebcfb34d4289b682a9c3d044998b1f82e15c1d08e184ed
|
4
|
+
data.tar.gz: d6d6a48c4a2c558b9058c91dc57e2043e304addc90b8e7cc7441f07c50dac624
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82c0d9bce215128d2fb56f44116c7c6f5394b8a34ff8b26918974a89e2c6e67b4d76c14b3a920b372e345ffbe33e114cdacfbcdd962f1c76f5fddc24595d8998
|
7
|
+
data.tar.gz: effbb41f97137a0b6a93bc200cd8ebb3b7323dabaeef1eca50bfee3dd97b00e0418987b28661328902b1f66942843acad32bc397f1dc04590cbc9d0a19d1c4b7
|
data/.github/workflows/build.yml
CHANGED
@@ -15,6 +15,7 @@ on:
|
|
15
15
|
|
16
16
|
jobs:
|
17
17
|
build:
|
18
|
+
timeout-minutes: 120
|
18
19
|
runs-on: ubuntu-latest
|
19
20
|
continue-on-error: false
|
20
21
|
if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }}
|
@@ -27,9 +28,9 @@ jobs:
|
|
27
28
|
~/.cache
|
28
29
|
vendor/bundle
|
29
30
|
target/repositories
|
30
|
-
key:
|
31
|
+
key: v3-${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
|
31
32
|
restore-keys: |
|
32
|
-
|
33
|
+
v3-${{ runner.os }}-
|
33
34
|
- name: Set up Ruby 2.7
|
34
35
|
uses: ruby/setup-ruby@v1
|
35
36
|
with:
|
@@ -8,6 +8,7 @@ on:
|
|
8
8
|
|
9
9
|
jobs:
|
10
10
|
build:
|
11
|
+
timeout-minutes: 120
|
11
12
|
runs-on: ubuntu-latest
|
12
13
|
continue-on-error: false
|
13
14
|
steps:
|
@@ -19,9 +20,9 @@ jobs:
|
|
19
20
|
~/.cache
|
20
21
|
vendor/bundle
|
21
22
|
target/repositories
|
22
|
-
key:
|
23
|
+
key: v3-${{ runner.os }}-${{ hashFiles('pmdtester.gemspec') }}
|
23
24
|
restore-keys: |
|
24
|
-
|
25
|
+
v3-${{ runner.os }}-
|
25
26
|
- name: Set up Ruby 2.7
|
26
27
|
uses: ruby/setup-ruby@v1
|
27
28
|
with:
|
data/History.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# 1.5.0 / 2022-05-06
|
2
|
+
|
3
|
+
## Enhancements
|
4
|
+
|
5
|
+
* [#108](https://github.com/pmd/pmd-regression-tester/issues/108): Disable progress bar for PMD 7
|
6
|
+
* [#109](https://github.com/pmd/pmd-regression-tester/issues/109): Make stdout/stderr and exit code available
|
7
|
+
|
8
|
+
## Fixed Issues
|
9
|
+
|
10
|
+
* [#107](https://github.com/pmd/pmd-regression-tester/issues/107): Deprecated command line options is used: `-auxclasspath`
|
11
|
+
|
1
12
|
# 1.4.1 / 2022-04-12
|
2
13
|
|
3
14
|
## Fixed Issues
|
@@ -60,6 +60,11 @@ module PmdTester
|
|
60
60
|
# copy original pmd reports
|
61
61
|
copy_file("#{root}/base_pmd_report.xml", project.report_diff.base_report.file)
|
62
62
|
copy_file("#{root}/patch_pmd_report.xml", project.report_diff.patch_report.file)
|
63
|
+
# copy stdout and stderr outputs
|
64
|
+
copy_file("#{root}/base_stdout.txt", "#{project.report_diff.base_report.report_folder}/stdout.txt")
|
65
|
+
copy_file("#{root}/base_stderr.txt", "#{project.report_diff.base_report.report_folder}/stderr.txt")
|
66
|
+
copy_file("#{root}/patch_stdout.txt", "#{project.report_diff.patch_report.report_folder}/stdout.txt")
|
67
|
+
copy_file("#{root}/patch_stderr.txt", "#{project.report_diff.patch_report.report_folder}/stderr.txt")
|
63
68
|
# render full pmd reports
|
64
69
|
write_file("#{root}/base_pmd_report.html",
|
65
70
|
render_liquid('project_pmd_report.html', pmd_report_liquid_env(project, BASE)))
|
@@ -120,6 +125,7 @@ module PmdTester
|
|
120
125
|
|
121
126
|
'execution_time' => PmdReportDetail.convert_seconds(report.exec_time),
|
122
127
|
'timestamp' => report.timestamp,
|
128
|
+
'exit_code' => report.exit_code,
|
123
129
|
|
124
130
|
'rules' => report.rule_summaries,
|
125
131
|
'errors' => report.errors_by_file.all_values.map { |e| error_to_hash(e, project) },
|
@@ -25,7 +25,7 @@ module PmdTester
|
|
25
25
|
def get_pmd_binary_file
|
26
26
|
logger.info "#{@pmd_branch_name}: Start packaging PMD"
|
27
27
|
Dir.chdir(@local_git_repo) do
|
28
|
-
build_branch_sha = Cmd.
|
28
|
+
build_branch_sha = Cmd.execute_successfully("git rev-parse #{@pmd_branch_name}^{commit}")
|
29
29
|
|
30
30
|
checkout_build_branch # needs a clean working tree, otherwise fails
|
31
31
|
|
@@ -70,49 +70,53 @@ module PmdTester
|
|
70
70
|
' -Dcheckstyle.skip=true' \
|
71
71
|
' -Dpmd.skip=true' \
|
72
72
|
' -T1C -B'
|
73
|
-
Cmd.
|
73
|
+
Cmd.execute_successfully(package_cmd)
|
74
74
|
end
|
75
75
|
|
76
76
|
logger.info "#{@pmd_branch_name}: Extracting the zip"
|
77
|
-
Cmd.
|
78
|
-
Cmd.
|
77
|
+
Cmd.execute_successfully("unzip -qo #{pmd_dist_target} -d pmd-dist/target/exploded")
|
78
|
+
Cmd.execute_successfully("mv pmd-dist/target/exploded/pmd-bin-#{@pmd_version} #{into_dir}")
|
79
79
|
end
|
80
80
|
|
81
81
|
def determine_pmd_version
|
82
82
|
version_cmd = "./mvnw -q -Dexec.executable=\"echo\" -Dexec.args='${project.version}' " \
|
83
83
|
'--non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec'
|
84
|
-
Cmd.
|
84
|
+
Cmd.execute_successfully(version_cmd)
|
85
85
|
end
|
86
86
|
|
87
87
|
def get_last_commit_sha
|
88
88
|
get_last_commit_sha_cmd = 'git rev-parse HEAD^{commit}'
|
89
|
-
Cmd.
|
89
|
+
Cmd.execute_successfully(get_last_commit_sha_cmd)
|
90
90
|
end
|
91
91
|
|
92
92
|
def get_last_commit_message
|
93
93
|
get_last_commit_message_cmd = 'git log -1 --pretty=%B'
|
94
|
-
Cmd.
|
94
|
+
Cmd.execute_successfully(get_last_commit_message_cmd)
|
95
95
|
end
|
96
96
|
|
97
97
|
def generate_pmd_report(project)
|
98
98
|
error_recovery_options = @error_recovery ? 'PMD_JAVA_OPTS="-Dpmd.error_recovery -ea" ' : ''
|
99
99
|
run_path = "#{saved_distro_path(@pmd_branch_details.branch_last_sha)}/bin/run.sh"
|
100
100
|
fail_on_violation = should_use_long_cli_options ? '--fail-on-violation false' : '-failOnViolation false'
|
101
|
+
auxclasspath_option = create_auxclasspath_option(project)
|
101
102
|
pmd_cmd = "#{error_recovery_options}" \
|
102
103
|
"#{run_path} pmd -d #{project.local_source_path} -f xml " \
|
103
104
|
"-R #{project.get_config_path(@pmd_branch_name)} " \
|
104
105
|
"-r #{project.get_pmd_report_path(@pmd_branch_name)} " \
|
105
106
|
"#{fail_on_violation} -t #{@threads} " \
|
106
|
-
"#{
|
107
|
+
"#{auxclasspath_option}" \
|
108
|
+
"#{pmd7? ? ' --no-progress' : ''}"
|
107
109
|
start_time = Time.now
|
110
|
+
exit_code = nil
|
108
111
|
if File.exist?(project.get_pmd_report_path(@pmd_branch_name))
|
109
112
|
logger.warn "#{@pmd_branch_name}: Skipping PMD run - report " \
|
110
113
|
"#{project.get_pmd_report_path(@pmd_branch_name)} already exists"
|
111
114
|
else
|
112
|
-
Cmd.execute(pmd_cmd)
|
115
|
+
status = Cmd.execute(pmd_cmd, project.get_project_target_dir(@pmd_branch_name))
|
116
|
+
exit_code = status.exitstatus
|
113
117
|
end
|
114
118
|
end_time = Time.now
|
115
|
-
[end_time - start_time, end_time]
|
119
|
+
[end_time - start_time, end_time, exit_code]
|
116
120
|
end
|
117
121
|
|
118
122
|
def generate_config_for(project)
|
@@ -139,12 +143,12 @@ module PmdTester
|
|
139
143
|
progress_logger = SimpleProgressLogger.new("generating #{project.name}'s PMD report")
|
140
144
|
progress_logger.start
|
141
145
|
generate_config_for(project)
|
142
|
-
execution_time, end_time = generate_pmd_report(project)
|
146
|
+
execution_time, end_time, exit_code = generate_pmd_report(project)
|
143
147
|
progress_logger.stop
|
144
148
|
sum_time += execution_time
|
145
149
|
|
146
|
-
|
147
|
-
|
150
|
+
PmdReportDetail.create(execution_time: execution_time, timestamp: end_time,
|
151
|
+
exit_code: exit_code, report_info_path: project.get_report_info_path(@pmd_branch_name))
|
148
152
|
logger.info "#{project.name}'s PMD report was generated successfully"
|
149
153
|
end
|
150
154
|
|
@@ -167,7 +171,7 @@ module PmdTester
|
|
167
171
|
def checkout_build_branch
|
168
172
|
logger.info "#{@pmd_branch_name}: Checking out the branch"
|
169
173
|
# note that this would fail if the tree is dirty
|
170
|
-
Cmd.
|
174
|
+
Cmd.execute_successfully("git checkout #{@pmd_branch_name}")
|
171
175
|
|
172
176
|
# determine the version
|
173
177
|
@pmd_version = determine_pmd_version
|
@@ -193,12 +197,25 @@ module PmdTester
|
|
193
197
|
end
|
194
198
|
|
195
199
|
def wd_has_dirty_git_changes
|
196
|
-
!Cmd.
|
200
|
+
!Cmd.execute_successfully('git status --porcelain').empty?
|
197
201
|
end
|
198
202
|
|
199
203
|
def should_use_long_cli_options
|
200
204
|
logger.debug "PMD Version: #{@pmd_version}"
|
201
205
|
Semver.compare(@pmd_version, '6.41.0') >= 0
|
202
206
|
end
|
207
|
+
|
208
|
+
def create_auxclasspath_option(project)
|
209
|
+
auxclasspath_option = ''
|
210
|
+
unless project.auxclasspath.empty?
|
211
|
+
auxclasspath_option = should_use_long_cli_options ? '--aux-classpath ' : '-auxclasspath '
|
212
|
+
auxclasspath_option += project.auxclasspath
|
213
|
+
end
|
214
|
+
auxclasspath_option
|
215
|
+
end
|
216
|
+
|
217
|
+
def pmd7?
|
218
|
+
Semver.compare(@pmd_version, '7.0.0-SNAPSHOT') >= 0
|
219
|
+
end
|
203
220
|
end
|
204
221
|
end
|
@@ -30,7 +30,7 @@ module PmdTester
|
|
30
30
|
# once but may be used with several tags.
|
31
31
|
clone_cmd = "git clone --no-single-branch --depth 1 #{project.connection} #{path}"
|
32
32
|
|
33
|
-
Cmd.
|
33
|
+
Cmd.execute_successfully(clone_cmd)
|
34
34
|
end
|
35
35
|
|
36
36
|
Dir.chdir(path) do
|
@@ -71,7 +71,7 @@ module PmdTester
|
|
71
71
|
if project.auxclasspath_command
|
72
72
|
logger.debug "Executing auxclasspath-command: #{project.auxclasspath_command}"
|
73
73
|
auxclasspath = run_as_script(Dir.getwd, project.auxclasspath_command)
|
74
|
-
project.auxclasspath =
|
74
|
+
project.auxclasspath = auxclasspath
|
75
75
|
else
|
76
76
|
project.auxclasspath = ''
|
77
77
|
end
|
@@ -87,7 +87,7 @@ module PmdTester
|
|
87
87
|
if command.start_with?('#!')
|
88
88
|
shell = command.lines[0].chomp[2..] # remove leading "#!"
|
89
89
|
end
|
90
|
-
stdout = Cmd.
|
90
|
+
stdout = Cmd.execute_successfully("#{shell} #{script.path}")
|
91
91
|
ensure
|
92
92
|
script.unlink
|
93
93
|
end
|
@@ -99,7 +99,7 @@ module PmdTester
|
|
99
99
|
|
100
100
|
reset_cmd = "git checkout #{tag}; git reset --hard #{tag}"
|
101
101
|
|
102
|
-
Cmd.
|
102
|
+
Cmd.execute_successfully(reset_cmd)
|
103
103
|
end
|
104
104
|
end
|
105
105
|
end
|
@@ -21,6 +21,9 @@ module PmdTester
|
|
21
21
|
'base_timestamp' => rdiff.base_report.timestamp,
|
22
22
|
'patch_timestamp' => rdiff.patch_report.timestamp,
|
23
23
|
|
24
|
+
'base_exit_code' => rdiff.base_report.exit_code,
|
25
|
+
'patch_exit_code' => rdiff.patch_report.exit_code,
|
26
|
+
|
24
27
|
'rule_diffs' => rdiff.rule_summaries
|
25
28
|
}
|
26
29
|
end
|
@@ -176,7 +176,7 @@ module PmdTester
|
|
176
176
|
|
177
177
|
# We only need to support git here, since PMD's repo is using git.
|
178
178
|
diff_cmd = "git diff --name-only #{base}..#{patch} #{filepath_filter}"
|
179
|
-
filenames = Cmd.
|
179
|
+
filenames = Cmd.execute_successfully(diff_cmd)
|
180
180
|
end
|
181
181
|
filenames.split("\n")
|
182
182
|
end
|
data/lib/pmdtester/cmd.rb
CHANGED
@@ -6,9 +6,35 @@ module PmdTester
|
|
6
6
|
# Containing the common method for executing shell command
|
7
7
|
class Cmd
|
8
8
|
extend PmdTester
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
|
10
|
+
#
|
11
|
+
# Executes the given command and returns the process status.
|
12
|
+
# stdout and stderr are written to the files "stdout.txt" and "stderr.txt"
|
13
|
+
# in path.
|
14
|
+
#
|
15
|
+
def self.execute(cmd, path)
|
16
|
+
stdout, stderr, status = internal_execute(cmd)
|
17
|
+
|
18
|
+
file = File.new("#{path}/stdout.txt", 'w')
|
19
|
+
file.puts stdout
|
20
|
+
file.close
|
21
|
+
|
22
|
+
file = File.new("#{path}/stderr.txt", 'w')
|
23
|
+
file.puts stderr
|
24
|
+
file.close
|
25
|
+
|
26
|
+
status
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.execute_successfully(cmd)
|
30
|
+
stdout, stderr, status = internal_execute(cmd)
|
31
|
+
|
32
|
+
unless status.success?
|
33
|
+
logger.error stdout
|
34
|
+
logger.error stderr
|
35
|
+
raise CmdException.new(cmd, stdout, stderr, status)
|
36
|
+
end
|
37
|
+
|
12
38
|
stdout
|
13
39
|
end
|
14
40
|
|
@@ -22,14 +48,12 @@ module PmdTester
|
|
22
48
|
|
23
49
|
stdout, stderr, status = Open3.capture3("#{cmd};")
|
24
50
|
|
25
|
-
logger.debug
|
26
|
-
|
27
|
-
|
28
|
-
logger.error stderr
|
29
|
-
raise CmdException.new(cmd, stderr)
|
30
|
-
end
|
51
|
+
logger.debug "status: #{status}"
|
52
|
+
logger.debug "stdout: #{stdout}"
|
53
|
+
logger.debug "stderr: #{stderr}"
|
31
54
|
|
32
55
|
stdout&.chomp!
|
56
|
+
stderr&.chomp!
|
33
57
|
|
34
58
|
[stdout, stderr, status]
|
35
59
|
end
|
@@ -40,15 +64,19 @@ module PmdTester
|
|
40
64
|
# The exception should be raised when the shell command failed.
|
41
65
|
class CmdException < StandardError
|
42
66
|
attr_reader :cmd
|
67
|
+
attr_reader :stdout
|
43
68
|
attr_reader :error
|
69
|
+
attr_reader :status
|
44
70
|
attr_reader :message
|
45
71
|
|
46
72
|
COMMON_MSG = 'An error occurred while executing the shell command'
|
47
73
|
|
48
|
-
def initialize(cmd, error)
|
74
|
+
def initialize(cmd, stdout, error, status)
|
49
75
|
@cmd = cmd
|
76
|
+
@stdout = stdout
|
50
77
|
@error = error
|
51
|
-
@
|
78
|
+
@status = status
|
79
|
+
@message = "#{COMMON_MSG} '#{cmd}' #{status}"
|
52
80
|
end
|
53
81
|
end
|
54
82
|
end
|
@@ -8,15 +8,22 @@ module PmdTester
|
|
8
8
|
attr_accessor :execution_time
|
9
9
|
attr_accessor :timestamp
|
10
10
|
attr_accessor :working_dir
|
11
|
+
attr_accessor :exit_code
|
11
12
|
|
12
|
-
def initialize(execution_time: 0, timestamp: '', working_dir: Dir.getwd)
|
13
|
+
def initialize(execution_time: 0, timestamp: '', working_dir: Dir.getwd, exit_code: nil)
|
13
14
|
@execution_time = execution_time
|
14
15
|
@timestamp = timestamp
|
15
16
|
@working_dir = working_dir
|
17
|
+
@exit_code = exit_code.nil? ? '?' : exit_code.to_s
|
16
18
|
end
|
17
19
|
|
18
20
|
def save(report_info_path)
|
19
|
-
hash = {
|
21
|
+
hash = {
|
22
|
+
execution_time: @execution_time,
|
23
|
+
timestamp: @timestamp,
|
24
|
+
working_dir: @working_dir,
|
25
|
+
exit_code: @exit_code
|
26
|
+
}
|
20
27
|
file = File.new(report_info_path, 'w')
|
21
28
|
file.puts JSON.generate(hash)
|
22
29
|
file.close
|
@@ -36,6 +43,13 @@ module PmdTester
|
|
36
43
|
self.class.convert_seconds(@execution_time)
|
37
44
|
end
|
38
45
|
|
46
|
+
def self.create(execution_time: 0, timestamp: '', working_dir: Dir.getwd, exit_code: nil, report_info_path:)
|
47
|
+
detail = PmdReportDetail.new(execution_time: execution_time, timestamp: timestamp,
|
48
|
+
working_dir: working_dir, exit_code: exit_code)
|
49
|
+
detail.save(report_info_path)
|
50
|
+
detail
|
51
|
+
end
|
52
|
+
|
39
53
|
# convert seconds into HH::MM::SS
|
40
54
|
def self.convert_seconds(seconds)
|
41
55
|
Time.at(seconds.abs).utc.strftime('%H:%M:%S')
|
data/lib/pmdtester/project.rb
CHANGED
@@ -123,6 +123,9 @@ module PmdTester
|
|
123
123
|
get_report_info_path(base_branch),
|
124
124
|
get_report_info_path(patch_branch),
|
125
125
|
filter_set)
|
126
|
+
|
127
|
+
report_diff.base_report.report_folder = get_project_target_dir(base_branch)
|
128
|
+
report_diff.patch_report.report_folder = get_project_target_dir(patch_branch)
|
126
129
|
end
|
127
130
|
end
|
128
131
|
end
|
@@ -57,17 +57,22 @@ module PmdTester
|
|
57
57
|
:configerrors_by_rule,
|
58
58
|
:exec_time,
|
59
59
|
:timestamp,
|
60
|
+
:exit_code,
|
60
61
|
:file
|
61
62
|
|
63
|
+
attr_accessor :report_folder
|
64
|
+
|
62
65
|
def initialize(report_document: nil,
|
63
66
|
file: '',
|
64
67
|
exec_time: 0,
|
65
|
-
timestamp: '0'
|
68
|
+
timestamp: '0',
|
69
|
+
exit_code: '?')
|
66
70
|
initialize_empty
|
67
71
|
initialize_with_report_document report_document unless report_document.nil?
|
68
72
|
@exec_time = exec_time
|
69
73
|
@timestamp = timestamp
|
70
74
|
@file = file
|
75
|
+
@exit_code = exit_code
|
71
76
|
end
|
72
77
|
|
73
78
|
def self.empty
|
@@ -108,6 +113,7 @@ module PmdTester
|
|
108
113
|
@violations_by_file = CollectionByFile.new
|
109
114
|
@errors_by_file = CollectionByFile.new
|
110
115
|
@configerrors_by_rule = {}
|
116
|
+
@report_folder = ''
|
111
117
|
end
|
112
118
|
end
|
113
119
|
|
data/lib/pmdtester/runner.rb
CHANGED
@@ -97,8 +97,8 @@ module PmdTester
|
|
97
97
|
unzip_cmd = "unzip -qo #{zip_filename}"
|
98
98
|
|
99
99
|
Dir.chdir(target_path) do
|
100
|
-
Cmd.
|
101
|
-
Cmd.
|
100
|
+
Cmd.execute_successfully(wget_cmd) unless File.exist?(zip_filename)
|
101
|
+
Cmd.execute_successfully(unzip_cmd)
|
102
102
|
end
|
103
103
|
|
104
104
|
"#{target_path}/#{branch_filename}"
|
data/lib/pmdtester/semver.rb
CHANGED
@@ -4,6 +4,12 @@ module PmdTester
|
|
4
4
|
# Utility to deal with semantic versions
|
5
5
|
class Semver
|
6
6
|
def self.compare(version_a, version_b)
|
7
|
+
result = internal_compare(version_a, version_b)
|
8
|
+
PmdTester.logger.debug " result: #{result}"
|
9
|
+
result
|
10
|
+
end
|
11
|
+
|
12
|
+
private_class_method def self.internal_compare(version_a, version_b)
|
7
13
|
PmdTester.logger.debug "Comparing #{version_a} <=> #{version_b}"
|
8
14
|
m = /(\d+)\.(\d+)\.(\d+)(.*)/.match(version_a)
|
9
15
|
a_major = m[1].to_i
|
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.
|
36
|
+
VERSION = '1.5.0'
|
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,17 +1,17 @@
|
|
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.
|
4
|
+
# stub: pmdtester 1.5.0 ruby lib
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "pmdtester".freeze
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.5.0"
|
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=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Andreas Dangel".freeze, "Binguo Bao".freeze, "Cl\u00E9ment Fournier".freeze]
|
14
|
-
s.date = "2022-
|
14
|
+
s.date = "2022-05-06"
|
15
15
|
s.description = "A regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue , and new rules can work as expected.".freeze
|
16
16
|
s.email = ["andreas.dangel@pmd-code.org".freeze, "djydewang@gmail.com".freeze, "clement.fournier76@gmail.com".freeze]
|
17
17
|
s.executables = ["pmdtester".freeze]
|
@@ -71,6 +71,12 @@
|
|
71
71
|
<td class="patch">{{diff.patch_timestamp}}</td>
|
72
72
|
<td class="diff"></td>
|
73
73
|
</tr>
|
74
|
+
<tr>
|
75
|
+
<td class="item">Exit Code</td>
|
76
|
+
<td class="base">{{diff.base_exit_code}} <a href="base_stdout.txt">stdout</a> | <a href="base_stderr.txt">stderr</a></td>
|
77
|
+
<td class="patch">{{diff.patch_exit_code}} <a href="patch_stdout.txt">stdout</a> | <a href="patch_stderr.txt">stderr</a></td>
|
78
|
+
<td class="diff"></td>
|
79
|
+
</tr>
|
74
80
|
<tr>
|
75
81
|
<td class="item">Full Report</td>
|
76
82
|
<td class="base"><a href="base_pmd_report.html">Base PMD Report</a></td>
|
@@ -53,6 +53,10 @@
|
|
53
53
|
<td class="item">Timestamp</td>
|
54
54
|
<td class="{{branch}}">{{report.timestamp}}</td>
|
55
55
|
</tr>
|
56
|
+
<tr>
|
57
|
+
<td class="item">Exit Code</td>
|
58
|
+
<td class="{{branch}}">{{report.exit_code}} <a href="{{branch}}_stdout.txt">stdout</a> | <a href="{{branch}}_stderr.txt">stderr</a></td>
|
59
|
+
</tr>
|
56
60
|
<tr>
|
57
61
|
<td class="item">Full Report</td>
|
58
62
|
<td class="{{branch}}"><a href="{{branch}}_pmd_report.xml">{{branch}}_pmd_report.xml</a></td>
|
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.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Dangel
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-05-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|