Skip to content

Instantly share code, notes, and snippets.

@mahmoud-samy
Created May 12, 2020 03:20
Show Gist options
  • Save mahmoud-samy/a7a022ff2a3703b4eca9cd80ce9fb98f to your computer and use it in GitHub Desktop.
Save mahmoud-samy/a7a022ff2a3703b4eca9cd80ce9fb98f to your computer and use it in GitHub Desktop.
Code analysis
#!/bin/bash
BASE_RESULTS_DIR=~/development/tools/code-analyzer
function vis() {
REPO_NAME=$1
DATE=$2
AFTER=$DATE
GIT_COMMIT_DATE=$DATE
SCAN_NAME=$REPO_NAME-$DATE
OUT_FILE=$SCAN_NAME.cc.json
if [[ -z "$REPO_NAME" ]]; then
echo
echo "ERROR: missing repoName"
echo
echo "Usage:"
echo " codi vis repoName [date]"
exit -1
fi
if [[ -n "$DATE" ]]; then
GIT_COMMIT_DATE="--before=$DATE"
# AFTER="--after=$DATE"
AFTER=""
fi
cd ~/development/swvl/$REPO_NAME
OUT_DIR=$BASE_RESULTS_DIR/$REPO_NAME/$DATE
mkdir -p $OUT_DIR
echo "--------------------------------------------"
echo "REPO_NAME" $REPO_NAME
echo "DATE" $DATE
echo "AFTER" $AFTER
echo "GIT_COMMIT_DATE" $GIT_COMMIT_DATE
echo "SCAN_NAME" $SCAN_NAME
echo "OUT_FILE" $OUT_FILE
echo "--------------------------------------------"
# time machine to master
git checkout `git rev-list -n 1 --first-parent "$GIT_COMMIT_DATE" master`
# run sonarqube scanner
sonar-scanner \
-Dsonar.projectKey=$SCAN_NAME \
-Dsonar.projectName=$SCAN_NAME \
-Dsonar.projectVersion=1 \
-Dsonar.projectBaseDir=. \
-Dsonar.sources="." \
-Dsonar.exclusions="**/node_modules/**/*,.github,docs,junit_reports,test" \
-Dsonar.login=$SONAR_LOGIN
rm -rf .scannerwork
# -Dsonar.sources="bin,config,controllers,lib,middlewares,models,routes,workers,validators" \
# read history
echo '-----------------------tokie'
git log --pretty=format:'[%h] %an %ad %s' $AFTER --date=short --numstat > $OUT_DIR/project.log
git log --numstat --raw --topo-order $AFTER > $OUT_DIR/git.log
tokei . --output json > $OUT_DIR/tokei_results.json
ccsh tokeiimporter $OUT_DIR/tokei_results.json -o $OUT_DIR/tokei.cc.json
echo '-----------------------code maat'
java -jar ~/bin/code-maat.jar -c git -l $OUT_DIR/project.log -a coupling > $OUT_DIR/edges.csv
ccsh codemaatimport $OUT_DIR/edges.csv -o $OUT_DIR/edges.cc.json
echo '-----------------------edges'
ccsh edgefilter $OUT_DIR/edges.cc.json -o $OUT_DIR/visual_edges.cc.json
echo '-----------------------sonarqube'
ccsh scmlogparser $OUT_DIR/git.log --input-format GIT_LOG_NUMSTAT_RAW -o $OUT_DIR/metrics.cc.json
ccsh sonarimport http://localhost:9000 $SCAN_NAME > $OUT_DIR/api.temp.sonar.cc.json
ccsh modify $OUT_DIR/api.temp.sonar.cc.json -f root/$SCAN_NAME -t root > $OUT_DIR/api.sonar.cc.json
echo '-----------------------merge results'
ccsh merge $OUT_DIR/visual_edges.cc.json $OUT_DIR/metrics.cc.json $OUT_DIR/tokei.cc.json $OUT_DIR/api.sonar.cc.json -o $OUT_DIR/../$OUT_FILE
echo "Output at: " $OUT_DIR/../$OUT_FILE
}
FUNC_NAME=$1
shift
$FUNC_NAME $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment