-
Notifications
You must be signed in to change notification settings - Fork 1
Enhance Spotbugs parametrization and sarif output #1 #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
11e1418
648230d
9aac327
bb00357
b66e17b
7c3b4b6
8b0e54a
b353785
850705f
87124df
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,106 @@ | ||
#!/bin/bash | ||
|
||
# set com.example.demo and all chid packages (.- means all children, .* this package only) | ||
# PACKAGES="com.example.demo.-" | ||
# source path to prepend to the class path | ||
# BASEPATH="src/main/java" | ||
# DEPENDENCIES_PATH="~/.m2" | ||
# OUTPUT_TYPE="sarif" | ||
|
||
# Check whether to use latest version of PMD | ||
if [ "$SPOTBUGS_VERSION" == 'latest' ]; then | ||
if [ "$SPOTBUGS_VERSION" == 'latest' ] || [ "$SPOTBUGS_VERSION" == "" ]; then | ||
LATEST_TAG="$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/spotbugs/spotbugs/releases/latest | jq --raw-output '.tag_name')" | ||
SPOTBUGS_VERSION=$LATEST_TAG | ||
fi | ||
|
||
# Download SpotBugs | ||
wget https://github.com/spotbugs/spotbugs/releases/download/"${SPOTBUGS_VERSION}"/spotbugs-"${SPOTBUGS_VERSION}".zip | ||
unzip spotbugs-"${SPOTBUGS_VERSION}".zip | ||
wget -q -N https://github.com/spotbugs/spotbugs/releases/download/"${SPOTBUGS_VERSION}"/spotbugs-"${SPOTBUGS_VERSION}".zip | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This change serves to avoid a too long log that is not related to the actual SAST review |
||
unzip -q -o spotbugs-"${SPOTBUGS_VERSION}".zip | ||
|
||
# Run SpotBugs | ||
SPOTBUGS_HOME=spotbugs-"${SPOTBUGS_VERSION}" | ||
SPOTBUGS=${SPOTBUGS_HOME}/bin/spotbugs | ||
sh $SPOTBUGS -textui -output "${OUTPUT}" "${ARGUMENTS}" "${TARGET}" | ||
|
||
#sh $SPOTBUGS -textui -output "${OUTPUT}" "${ARGUMENTS}" "${TARGET}" | ||
|
||
# Take care of parameter order, sometimes does not work if you change it | ||
|
||
CMD="java -Xmx1900M -Dlog4j2.formatMsgNoLookups=true \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here we start building the SpotBugs command line depending on the provided parameters |
||
-jar ${SPOTBUGS_HOME}/lib/spotbugs.jar -textui " | ||
|
||
if [ "$PACKAGES" != "" ]; then | ||
CMD="$CMD -onlyAnalyze ${PACKAGES}" | ||
fi | ||
|
||
CMD="$CMD -quiet -effort:max -low -noClassOk" | ||
|
||
case $OUTPUT_TYPE in | ||
"xml") | ||
if [ "$OUTPUT" == "" ]; then | ||
OUTPUT="results.xml" | ||
fi | ||
CMD="$CMD -xml:withMessages=./$OUTPUT" | ||
;; | ||
"html") | ||
if [ "$OUTPUT" == "" ]; then | ||
OUTPUT="results.html" | ||
fi | ||
CMD="$CMD -html:withMessages=./$OUTPUT" | ||
;; | ||
"emacs") | ||
if [ "$OUTPUT" == "" ]; then | ||
OUTPUT="results.emacs" | ||
fi | ||
CMD="$CMD -emacs:withMessages=./$OUTPUT" | ||
;; | ||
"xdocs") | ||
if [ "$OUTPUT" == "" ]; then | ||
OUTPUT="results.xdocs" | ||
fi | ||
CMD="$CMD -xdoc:withMessages=./$OUTPUT" | ||
;; | ||
*) | ||
OUTPUT_TYPE="sarif" | ||
if [ "$OUTPUT" == "" ]; then | ||
OUTPUT="results.sarif" | ||
fi | ||
CMD="$CMD -sarif:withMessages=./resultspre.sarif" | ||
;; | ||
esac | ||
|
||
if [ "$DEPENDENCIES_PATH" != "" ]; then | ||
DEP_CMD="find ${DEPENDENCIES_PATH} -name \"*.jar\" -type f > /tmp/jardependencies.txt" | ||
echo "Scanning jars with: ${DEP_CMD}" | ||
eval ${DEP_CMD} | ||
CMD="$CMD -auxclasspathFromFile /tmp/jardependencies.txt" | ||
fi | ||
|
||
if [ "$BASE_PATH" != "" ]; then | ||
if [[ "$BASE_PATH" != */ ]]; then | ||
BASE_PATH="$BASE_PATH/" | ||
fi | ||
# using sourcepath does not work for GitHub's sarif parser | ||
# but keeping there just in case | ||
CMD="$CMD -sourcepath ${BASE_PATH}" | ||
fi | ||
|
||
if [ "$ARGUMENTS" != "" ]; then | ||
CMD="$CMD ${ARGUMENTS}" | ||
fi | ||
|
||
if [ "$TARGET" != "" ]; then | ||
CMD="$CMD ${TARGET}" | ||
else | ||
CMD="$CMD ." | ||
fi | ||
|
||
echo "Running SpotBugs with command: $CMD" | ||
|
||
eval ${CMD} | ||
|
||
if [ "$OUTPUT_TYPE" == "sarif" ] && [ "$BASE_PATH" != "" ]; then | ||
# prepend the pyhsical path | ||
echo "Transform sarif file to include the physical path" | ||
jq -c "(.runs[].results[].locations[].physicalLocation.artifactLocation.uri) |=\"$BASE_PATH\"+." resultspre.sarif > "$OUTPUT" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is needed to provide compatibility with the GitHub SARIF parser that needs the base path as a prefix (typically src/main/java) |
||
fi | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This way the default behavior downloads the latest version