From 52a150e946c8e99acdef114af1f0ba19b90ce2a7 Mon Sep 17 00:00:00 2001 From: Daniel Rainer <daniel.m.rainer@student.uibk.ac.at> Date: Mon, 7 Mar 2022 17:19:54 +0100 Subject: [PATCH] Add PMD as java linter to pipeline --- .gitlab-ci.yml | 17 ++++++++++++++ pmd_rules.xml | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 pmd_rules.xml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 96593b6b6..f3fc63232 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,10 +12,27 @@ stages: - package - release - deploy + before_script: - export NG_CLI_ANALYTICS="false" - export MAVEN_USER_HOME=`pwd`/.maven +pmd: + stage: lint + allow_failure: true + when: always + before_script: + - 'export VERSION="6.40.0"' + - 'wget "https://github.com/pmd/pmd/releases/download/pmd_releases%2F$VERSION/pmd-bin-$VERSION.zip"' + - 'unzip "pmd-bin-$VERSION.zip"' + script: + - '"pmd-bin-$VERSION/bin/run.sh" pmd -d src/main/java -f textcolor -R pmd_rules.xml 2>&1 | tee pmd.log' + needs: [] + artifacts: + when: on_failure + paths: + - pmd.log + checkstyle: stage: lint script: diff --git a/pmd_rules.xml b/pmd_rules.xml new file mode 100644 index 000000000..49cc155ac --- /dev/null +++ b/pmd_rules.xml @@ -0,0 +1,60 @@ +<?xml version="1.0"?> + +<ruleset name="Custom Rules" + xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> + Rules for the PMD linter + </description> + + <rule ref="category/java/bestpractices.xml"> + <exclude name="GuardLogStatement"/> + <exclude name="UseVarargs"/> + </rule> + <rule ref="category/java/codestyle.xml"> + <exclude name="AtLeastOneConstructor"/> + <exclude name="OnlyOneReturn"/> + <exclude name="ShortClassName"/> + <exclude name="UselessParentheses"/> + <!-- does not work properly with annotation imports --> + <exclude name="UnnecessaryImport"/> + + <!-- should be included, removed to find other lints --> + <exclude name="MethodArgumentCouldBeFinal"/> + <exclude name="LocalVariableCouldBeFinal"/> + <exclude name="FieldNamingConventions"/> + <exclude name="ShortVariable"/> + <exclude name="LongVariable"/> + <exclude name="UseUnderscoresInNumericLiterals"/> + <exclude name="CommentDefaultAccessModifier"/> + <exclude name="BooleanGetMethodName"/> + </rule> + <rule ref="category/java/design.xml"> + <exclude name="LawOfDemeter"/> + <exclude name="DataClass"/> + <exclude name="ExcessiveImports"/> + <!-- seems to be broken in its default config --> + <exclude name="LoosePackageCoupling"/> + </rule> + <rule ref="category/java/documentation.xml"> + <exclude name="CommentSize"/> + <exclude name="CommentRequired"/> + <exclude name="UncommentedEmptyConstructor"/> + </rule> + <rule ref="category/java/errorprone.xml"> + <exclude name="BeanMembersShouldSerialize"/> + <exclude name="AvoidLiteralsInIfCondition"/> + </rule> + <rule ref="category/java/multithreading.xml"></rule> + <rule ref="category/java/performance.xml"> + <exclude name="RedundantFieldInitializer"/> + <exclude name="TooFewBranchesForASwitchStatement"/> + <exclude name="AvoidInstantiatingObjectsInLoops"/> + <exclude name="AvoidFileStream"/> + </rule> + <rule ref="category/java/security.xml"></rule> + +</ruleset> + -- GitLab