diff --git a/.gitignore b/.gitignore index eabf65e51a3807e0c8933dde0bf44e8b5c75fb37..58cad79dcf31fddb9a7db9351d527bbce1fffe66 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,7 @@ testem.log # System Files .DS_Store Thumbs.db + +# sonar and gradle stuff +build +.gradle diff --git a/analysis/Dockerfile b/analysis/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..5a3bb32c4e8b5c2b92be5c6eb9e219e4e0075028 --- /dev/null +++ b/analysis/Dockerfile @@ -0,0 +1,10 @@ +FROM gradle:5.3.1-jdk8 + +USER 0 + +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - +RUN apt-get update && apt-get install -y nodejs npm + +WORKDIR /frag + +ENTRYPOINT ["/frag/analysis/entrypoint.sh"] diff --git a/analysis/docker-compose.yml b/analysis/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..0365a314e5fe76f85f303dafa6b2c2f0b49bfa2b --- /dev/null +++ b/analysis/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.7' + +services: + + analysis: + image: local-frag-scanner + build: + context: .. + dockerfile: analysis/Dockerfile + depends_on: + - sonarqube + networks: + - sonar + volumes: + - ..:/frag + + sonarqube: + image: sonarqube:7.9.1-community + environment: + - SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true + ports: + - '9000:9000' + networks: + - sonar + volumes: + - sonar_data:/opt/sonarqube/data + +networks: + sonar: + +volumes: + sonar_data: diff --git a/analysis/entrypoint.sh b/analysis/entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..cb4d9b1aa7125897c585ba96ce8cdd58f2dc53c5 --- /dev/null +++ b/analysis/entrypoint.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +if [[ $(curl -s -o /dev/null -w "%{http_code}" -u admin:admin -X POST http://sonarqube:9000/api/qualitygates/list) != 200 ]]; then + echo "Sonarqube has not finished startup yet." + echo "check http://localhost:9000 for progress." + echo "Please try again later..." + exit 0 +fi + +if [[ $(curl -s -o /dev/null -w "%{http_code}" -u admin:admin -X POST -F 'id=2' http://sonarqube:9000/api/qualitygates/show) == 404 ]]; then + + # quality gate does not yet exist + echo "Quality Gate not yet existing. Going to create..." + + # create the gate + curl -s -o /dev/null -w " - Creating gate: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'name=cards' \ + http://sonarqube:9000/api/qualitygates/create + + # create the conditions + curl -s -o /dev/null -w " - Add coverage condition: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'error=80' -F 'gateId=2' -F 'metric=coverage' -F 'op=LT' \ + http://sonarqube:9000/api/qualitygates/create_condition + + curl -s -o /dev/null -w " - Add duplicated lines condition: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'error=3' -F 'gateId=2' -F 'metric=duplicated_lines_density' -F 'op=GT' \ + http://sonarqube:9000/api/qualitygates/create_condition + + curl -s -o /dev/null -w " - Add sqale rating condition: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'error=1' -F 'gateId=2' -F 'metric=sqale_rating' -F 'op=GT' \ + http://sonarqube:9000/api/qualitygates/create_condition + + curl -s -o /dev/null -w " - Add reliability rating condition: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'error=1' -F 'gateId=2' -F 'metric=reliability_rating' -F 'op=GT' \ + http://sonarqube:9000/api/qualitygates/create_condition + + curl -s -o /dev/null -w " - Add security rating condition: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'error=1' -F 'gateId=2' -F 'metric=security_rating' -F 'op=GT' \ + http://sonarqube:9000/api/qualitygates/create_condition + + # set newly created gate as default + curl -s -o /dev/null -w " - Setting newly created gate as default: %{http_code}\n" \ + -u admin:admin -X POST \ + -F 'id=2' \ + http://sonarqube:9000/api/qualitygates/set_as_default + + echo "done." + +fi + +gradle sonarqube -Dsonar.host.url=http://sonarqube:9000 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..cdeef95b2578b005999d7d138558829dc17d1ae3 --- /dev/null +++ b/build.gradle @@ -0,0 +1,28 @@ +/* This Gradle build script is currently only used for SonarQube Scanner */ + +plugins { + id "org.sonarqube" version "2.5" +} + +group = "de.thm.arsnova" + +sonarqube { + properties { + + property "sonar.projectKey", "de.thm.arsnova:frag-jetzt-frontend" + property "sonar.projectName", "frag.jetzt Frontend" + property "sonar.projectVersion", "1.0" + + property "sonar.language", "ts" + property "sonar.sourceEncoding", "UTF-8" + + property "sonar.sources", "src" + property "sonar.exclusions", "**/node_modules/**, client/thirdParty/**" + + property "sonar.tests", "src" + property "sonar.test.inclusions", "**/*.spec.ts" + /* property "sonar.typescript.lcov.reportPaths", "coverage/lcov.info" */ + + property "sonar.host.url", "https://scm.thm.de/sonar/" + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000000000000000000000000000000000000..899c9f99f396152540a60d04f0b607bf1b746d9f --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx2048m