From c8ca3e97e76c8ae918298ddf72c6e3eceeec3cb6 Mon Sep 17 00:00:00 2001 From: Bryan Orozco Date: Tue, 28 Nov 2023 16:35:12 -0800 Subject: [PATCH 1/7] SonarCloud setup (#143) * dev: initial sonarcloud setup * dev: config.yml update * dev: config.yml update * doc: README.md update --- .circleci/config.yml | 25 ++++++++++++++++++++++--- README.md | 7 ++++++- build.gradle.kts | 14 ++++++++++++++ sonar-project.properties | 4 ++++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 sonar-project.properties diff --git a/.circleci/config.yml b/.circleci/config.yml index 178aae6c..a3134863 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2.1 orbs: docker: circleci/docker@2.1.1 node: circleci/node@5.0.2 - + sonarcloud: sonarsource/sonarcloud@2.0.0 jobs: generate_schema: executor: @@ -45,14 +45,23 @@ jobs: docker build --network=flexo-mms-test-network -t flexo-mms-test:latest -f Dockerfile-Test . docker run --network=flexo-mms-test-network --name flexo-mms-test-container flexo-mms-test:latest SIG_INT=$? - docker cp flexo-mms-test-container:/application/build/reports/tests /home/circleci/results + docker cp flexo-mms-test-container:/application/build /home/circleci/flexo-mms-layer1-service/build exit "$SIG_INT" - store_artifacts: - path: /home/circleci/results + path: /home/circleci/flexo-mms-layer1-service/build - persist_to_workspace: root: /home/circleci/ paths: - flexo-mms-layer1-service/* + scan: + executor: + name: docker/docker + working_directory: /home/circleci/flexo-mms-layer1-service + steps: + - checkout + - attach_workspace: + at: /home/circleci/flexo-mms-layer1-service + - sonarcloud/scan deploy_snapshot: executor: @@ -132,6 +141,11 @@ workflows: version: 2 build-test-deploy: jobs: + - scan: + requires: + - build_and_test + context: + - SonarCloud - generate_schema: filters: tags: @@ -139,6 +153,11 @@ workflows: context: - DockerHub - build_and_test: + post-steps: + - persist_to_workspace: + root: /home/circleci/flexo-mms-layer1-service + paths: + - build/* requires: - generate_schema filters: diff --git a/README.md b/README.md index c337868d..cc3aebb1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ # Flexo MMS Layer 1 -[![CircleCI](https://circleci.com/gh/Open-MBEE/flexo-mms-layer1-service.svg?style=shield)](https://circleci.com/gh/Open-MBEE/flexo-mms-layer1-service) +[![CircleCI](https://circleci.com/gh/Open-MBEE/flexo-mms-layer1-service.svg?style=shield)](https://circleci.com/gh/Open-MBEE/flexo-mms-layer1-service) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) +
+ SonarCloud + +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=bugs)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=Open-MBEE_flexo-mms-layer1-service&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=Open-MBEE_flexo-mms-layer1-service) +
This project is currently under development. This document describes how to set up a local dev environment. diff --git a/build.gradle.kts b/build.gradle.kts index 023df2fb..6c264709 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,10 +5,21 @@ plugins { kotlin("jvm") version "1.9.20" kotlin("plugin.serialization") version "1.9.20" jacoco + id("org.sonarqube") version "4.4.1.3373" } group = "org.openmbee.flexo.mms" version = "0.1.0-ALPHA" + +sonar { + properties { + property("sonar.projectKey", "Open-MBEE_flexo-mms-layer1-service") + property("sonar.organization", "openmbee") + property("sonar.host.url", "https://sonarcloud.io") + property("sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco/test/jacocoTestReport.xml") + } +} + application { mainClass.set("io.ktor.server.netty.EngineMain") } @@ -108,4 +119,7 @@ tasks.test { } tasks.jacocoTestReport { dependsOn(tasks.test) // tests are required to run before generating the report + reports { + xml.required.set(true) + } } diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 00000000..d48f9459 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,4 @@ +sonar.projectKey=Open-MBEE_flexo-mms-layer1-service +sonar.organization=openmbee +sonar.language=kotlin +sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \ No newline at end of file From 5f701862e07ad0a3beab853db51d78203b79fe9d Mon Sep 17 00:00:00 2001 From: Blake Regalia Date: Tue, 23 Jan 2024 17:01:13 -0800 Subject: [PATCH 2/7] fix: resolve source graph in separate query --- .../flexo/mms/routes/gsp/ModelLoad.kt | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt b/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt index 92607978..3d2e030d 100644 --- a/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt +++ b/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt @@ -217,6 +217,80 @@ fun Route.loadModel() { // compute the delta run { + val selectQueryString = """ + select distinct ?srcGraph { + graph mor-graph:Metadata { + # select the latest commit from the current named ref + ?srcRef mms:commit ?srcCommit . + + # get the latest snapshot associated with the source commit + ?srcCommit ^mms:commit/mms:snapshot ?srcSnapshot . + { + # prefer the model snapshot + ?srcSnapshot a mms:Model ; + mms:graph ?srcGraph . + } union { + # settle for staging... + ?srcSnapshot a mms:Staging ; + mms:graph ?srcGraph . + + # ...if model is not available + filter not exists { + ?srcCommit ^mms:commit/mms:snapshot/a mms:Model . + } + } + } + + bind( + sha256( + concat(str(?dstCommit), "\n", str(?srcCommit)) + ) as ?diffId + ) + + bind( + iri( + concat(str(?dstCommit), "/diffs/", ?diffId) + ) as ?diff + ) + + bind( + iri( + concat(str(mor-graph:), "Diff.Ins.", ?diffId) + ) as ?insGraph + ) + + bind( + iri( + concat(str(mor-graph:), "Diff.Del.", ?diffId) + ) as ?delGraph + ) + } + """.trimIndent() + + val selectResponseText = executeSparqlSelectOrAsk(selectQueryString) { + prefixes(prefixes) + + iri( + // use current branch as ref source + "srcRef" to prefixes["morb"]!!, + + // set dst graph + "dstGraph" to loadGraphUri, + + // set dst commit (this commit) + "dstCommit" to prefixes["morc"]!!, + ) + } + + // parse the JSON response + val bindings = Json.parseToJsonElement(selectResponseText).jsonObject["results"]!!.jsonObject["bindings"]!!.jsonArray + + if(bindings.size != 1) { + throw ServerBugException("Failed to resolve source graph") + } + + val sourceGraphIri = bindings[0].jsonObject["srcGraph"]!!.jsonObject["value"]!!.jsonPrimitive.content + val updateString = genDiffUpdate("", localConditions, """ graph mor-graph:Metadata { # select the latest commit from the current named ref @@ -253,6 +327,9 @@ fun Route.loadModel() { // set dst commit (this commit) "dstCommit" to prefixes["morc"]!!, + + // use explicit srcGraph + "srcGraph" to sourceGraphIri, ) } } From d8cd6a6ef554a9b0ff4b8f9d00b72f2c8cfd0794 Mon Sep 17 00:00:00 2001 From: Blake Regalia Date: Wed, 24 Jan 2024 16:14:58 -0800 Subject: [PATCH 3/7] fix: remove unnecessary binds --- .../flexo/mms/routes/gsp/ModelLoad.kt | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt b/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt index 3d2e030d..bc7be57d 100644 --- a/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt +++ b/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt @@ -240,30 +240,6 @@ fun Route.loadModel() { } } } - - bind( - sha256( - concat(str(?dstCommit), "\n", str(?srcCommit)) - ) as ?diffId - ) - - bind( - iri( - concat(str(?dstCommit), "/diffs/", ?diffId) - ) as ?diff - ) - - bind( - iri( - concat(str(mor-graph:), "Diff.Ins.", ?diffId) - ) as ?insGraph - ) - - bind( - iri( - concat(str(mor-graph:), "Diff.Del.", ?diffId) - ) as ?delGraph - ) } """.trimIndent() @@ -273,12 +249,6 @@ fun Route.loadModel() { iri( // use current branch as ref source "srcRef" to prefixes["morb"]!!, - - // set dst graph - "dstGraph" to loadGraphUri, - - // set dst commit (this commit) - "dstCommit" to prefixes["morc"]!!, ) } From b5ff3416a102880018efbd964aeda86e371b2404 Mon Sep 17 00:00:00 2001 From: Blake Regalia Date: Wed, 24 Jan 2024 16:22:45 -0800 Subject: [PATCH 4/7] chore: merge sonar properties --- sonar-project.properties | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index d48f9459..6815bc5f 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,6 @@ sonar.projectKey=Open-MBEE_flexo-mms-layer1-service sonar.organization=openmbee sonar.language=kotlin -sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \ No newline at end of file +sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml +sonar.sources=src/main/ +sonar.tests=src/test/ \ No newline at end of file From 16979c2b8a9d701466e0983862f1f0807f2b20e9 Mon Sep 17 00:00:00 2001 From: Blake Regalia Date: Tue, 30 Jan 2024 16:07:46 -0800 Subject: [PATCH 5/7] fix: select srcGraph and srcCommit once --- .../flexo/mms/routes/gsp/ModelLoad.kt | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt b/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt index bc7be57d..a496ea97 100644 --- a/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt +++ b/src/main/kotlin/org/openmbee/flexo/mms/routes/gsp/ModelLoad.kt @@ -218,7 +218,7 @@ fun Route.loadModel() { // compute the delta run { val selectQueryString = """ - select distinct ?srcGraph { + select distinct ?srcGraph ?srcCommit { graph mor-graph:Metadata { # select the latest commit from the current named ref ?srcRef mms:commit ?srcCommit . @@ -261,29 +261,9 @@ fun Route.loadModel() { val sourceGraphIri = bindings[0].jsonObject["srcGraph"]!!.jsonObject["value"]!!.jsonPrimitive.content - val updateString = genDiffUpdate("", localConditions, """ - graph mor-graph:Metadata { - # select the latest commit from the current named ref - ?srcRef mms:commit ?srcCommit . - - # get the latest snapshot associated with the source commit - ?srcCommit ^mms:commit/mms:snapshot ?srcSnapshot . - { - # prefer the model snapshot - ?srcSnapshot a mms:Model ; - mms:graph ?srcGraph . - } union { - # settle for staging... - ?srcSnapshot a mms:Staging ; - mms:graph ?srcGraph . - - # ...if model is not available - filter not exists { - ?srcCommit ^mms:commit/mms:snapshot/a mms:Model . - } - } - } - """) + val sourceCommitri = bindings[0].jsonObject["srcCommit"]!!.jsonObject["value"]!!.jsonPrimitive.content + + val updateString = genDiffUpdate("", localConditions, "") executeSparqlUpdate(updateString) { prefixes(prefixes) @@ -300,6 +280,9 @@ fun Route.loadModel() { // use explicit srcGraph "srcGraph" to sourceGraphIri, + + // use explicit srcCommit + "srcCommit" to sourceCommitri, ) } } From f4ea1ac1ab330570f90fd80914ce28fb8fa905d7 Mon Sep 17 00:00:00 2001 From: Doris Lam Date: Wed, 31 Jan 2024 10:20:40 -0800 Subject: [PATCH 6/7] chore: update version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6c264709..31291c1e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } group = "org.openmbee.flexo.mms" -version = "0.1.0-ALPHA" +version = "0.1.2" sonar { properties { From 53bc1b45562a7c78c5361ee38cd8c4be177f077b Mon Sep 17 00:00:00 2001 From: Doris Lam Date: Wed, 31 Jan 2024 10:24:31 -0800 Subject: [PATCH 7/7] ci: store only test results --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a3134863..af74bf34 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -48,7 +48,7 @@ jobs: docker cp flexo-mms-test-container:/application/build /home/circleci/flexo-mms-layer1-service/build exit "$SIG_INT" - store_artifacts: - path: /home/circleci/flexo-mms-layer1-service/build + path: /home/circleci/flexo-mms-layer1-service/build/reports/tests - persist_to_workspace: root: /home/circleci/ paths: