PR decoration not showing up on GitLab instance

Hi! We don’t see the PR decoration on our merge requests in our instance of GitLab CI 12.9.

I followed the docs and the logs show no errors, even a success message:

2020.04.03 12:36:51 INFO ce[AXFACz6mgAJG5cIzCE__][o.s.c.t.p.a.p.PostProjectAnalysisTasksExecutor] Pull Request decoration | status=SUCCESS | time=0ms

No project ID was set as the docs advise us.

Here the Dockerfile of our sonarqube-scanner if it helps: https://github.com/kiwicom/dockerfiles/blob/master/sonar-scanner/Dockerfile

We’re using SonarQube Developer Edition version 8.2 (build 32929)

Hello @baptiste.darthenay!

Welcome to SonarSource community forum!
Indeed, the log message may be misleading here - to have more details raise the SQ log level verbosity to DEBUG and re-analyse your PR and the ce.log should much more informative.

Hope that helps.
Kris

Thanks for your quick answer!

I don’t see much more what would have gone wrong…

Here the logs after my adding SONAR_LOG_LEVEL_CE=DEBUG:

2020.04.03 16:19:44 INFO  ce[][o.s.c.t.CeWorkerImpl] Execute task | project=baptiste.darthenay:sonarqube-decorator | type=REPORT | branch=bd/debug | branchType=BRANCH | id=AXFA1lzeOl_SJDHLlyA8 | submitter=sonar-scanner
2020.04.03 16:19:44 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExtractReportStep] Analysis report is 144 KB uncompressed
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Extract report | status=SUCCESS | time=89ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist scanner context | status=SUCCESS | time=8ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Propagate analysis warnings from scanner report | status=SUCCESS | time=4ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Execute DB migrations for current project | status=SUCCESS | time=5ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Generate analysis UUID | status=SUCCESS | time=0ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Load analysis metadata | status=SUCCESS | time=24ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Initialize | status=SUCCESS | time=20ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Verify billing | status=SUCCESS | time=0ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Build tree of components | components=15 | status=SUCCESS | time=8ms
2020.04.03 16:19:44 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Validate project | status=SUCCESS | time=5ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Load quality profiles | status=SUCCESS | time=569ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Load Quality gate | status=SUCCESS | time=9ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.p.NewCodePeriodResolver] Resolving first analysis as new code period as there is only one existing version
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Load new code period | status=SUCCESS | time=10ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.f.FileMoveDetectionStep] Either no files added or no files removed. Do nothing.
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Detect file moves | reportFiles=10 | dbFiles=10 | addedFiles=0 | status=SUCCESS | time=4ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Load duplications | duplications=0 | status=SUCCESS | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.d.CrossProjectDuplicationStatusHolderImpl] Cross project duplication is disabled because it's disabled in the analysis report
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute cross project duplications | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute size measures | status=SUCCESS | time=2ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute new coverage | status=SUCCESS | time=32ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute coverage measures | status=SUCCESS | time=2ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute comment measures | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Copy custom measures | status=SUCCESS | time=4ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute duplication measures | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute size measures on new code | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute language distribution | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute test measures | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute complexity measures | status=SUCCESS | time=1ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Load measure computers | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute Quality Profile status | status=SUCCESS | time=46ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   Execution time for each component visitor:
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - LoadComponentUuidsHavingOpenIssuesVisitor | time=3ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - IntegrateIssuesVisitor | time=87ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - CloseIssuesOnRemovedComponentsVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - MaintainabilityMeasuresVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - NewMaintainabilityMeasuresVisitor | time=1ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - ReliabilityAndSecurityRatingMeasuresVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - NewReliabilityAndSecurityRatingMeasuresVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - SecurityReviewMeasuresVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - NewSecurityReviewMeasuresVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - LastCommitVisitor | time=0ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.ExecuteVisitorsStep]   - MeasureComputersVisitor | time=1ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Execute component visitors | status=SUCCESS | time=94ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Checks executed after computation of measures | status=SUCCESS | time=34ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute Quality Gate measures | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Compute Quality profile measures | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Generate Quality profile events | status=SUCCESS | time=4ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Generate Quality gate events | status=SUCCESS | time=3ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist components | status=SUCCESS | time=13ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist analysis | status=SUCCESS | time=4ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist analysis properties | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist measures | inserts=93 | status=SUCCESS | time=11ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist live measures | insertsOrUpdates=692 | status=SUCCESS | time=229ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist duplication data | insertsOrUpdates=0 | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist new ad hoc Rules | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist issues | inserts=0 | updates=0 | merged=0 | untouched=0 | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist project links | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist events | status=SUCCESS | time=5ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist sources | status=SUCCESS | time=9ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Persist cross project duplications | status=SUCCESS | time=0ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Enable analysis | status=SUCCESS | time=8ms
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Update last usage date of quality profiles | status=SUCCESS | time=9ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.KeepOneFilter] -> Keep one snapshot per day between 2020-03-06 and 2020-04-02
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.DefaultPeriodCleaner] <- Delete analyses of component AXFAqY03gAJG5cIzCE4t: 
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.KeepOneFilter] -> Keep one snapshot per week between 2019-04-05 and 2020-03-06
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.DefaultPeriodCleaner] <- Delete analyses of component AXFAqY03gAJG5cIzCE4t: 
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.KeepOneFilter] -> Keep one snapshot per month between 2015-04-10 and 2019-04-05
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.DefaultPeriodCleaner] <- Delete analyses of component AXFAqY03gAJG5cIzCE4t: 
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.KeepWithVersionFilter] -> Keep analyses with a version prior to 2018-04-06
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.DefaultPeriodCleaner] <- Delete analyses of component AXFAqY03gAJG5cIzCE4t: 
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.DeleteAllFilter] -> Delete data prior to: 2015-04-10
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.p.p.DefaultPeriodCleaner] <- Delete analyses of component AXFAqY03gAJG5cIzCE4t: 
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.purge.PurgeDao] <- Delete aborted builds
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.d.purge.PurgeDao] <- Purge stale branches
2020.04.03 16:19:45 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Purge db | status=SUCCESS | time=66ms
2020.04.03 16:19:45 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.IndexAnalysisStep] Call org.sonar.server.measure.index.ProjectMeasuresIndexer@73ce1fd7
2020.04.03 16:19:46 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.IndexAnalysisStep] Call org.sonar.server.component.index.ComponentIndexer@4a87b711
2020.04.03 16:19:46 DEBUG ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.s.IndexAnalysisStep] Call org.sonar.server.issue.index.IssueIndexer@665adbf9
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Index analysis | status=SUCCESS | time=31ms
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Send issue notifications | newIssuesNotifs=0 | newIssuesDeliveries=0 | myNewIssuesNotifs=0 | myNewIssuesDeliveries=0 | changesNotifs=0 | changesDeliveries=0 | status=SUCCESS | time=3ms
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Publish task results | status=SUCCESS | time=0ms
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.s.ComputationStepExecutor] Trigger refresh of Portfolios and Applications | status=SUCCESS | time=0ms
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.a.p.PostProjectAnalysisTasksExecutor] Webhooks | globalWebhooks=0 | projectWebhooks=0 | status=SUCCESS | time=5ms
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.p.a.p.PostProjectAnalysisTasksExecutor] Pull Request decoration | status=SUCCESS | time=0ms
2020.04.03 16:19:46 INFO  ce[AXFA1lzeOl_SJDHLlyA8][o.s.c.t.CeWorkerImpl] Executed task | project=baptiste.darthenay:sonarqube-decorator | type=REPORT | branch=bd/debug | branchType=BRANCH | id=AXFA1lzeOl_SJDHLlyA8 | submitter=sonar-scanner | status=SUCCESS | time=1828ms

Hello @baptiste.darthenay.

The scan log is referring to a normal branch type of scan. It is not a PR scan.
Check that you correctly pass all PR related properties (as documented at https://docs.sonarqube.org/latest/analysis/pull-request/) to the scanner command.

Hope that helps.
Kris

Thanks! But I’m not sure where and how to use the parameter sonar.pullrequest.branch=feature/my-new-feature.

Hi @Krzysztof_Jazgara,
Actually, according the docs nothing has to be set up when using GitLab CI, as everything is auto-detected, and there are even some threads in this forum advising against manually setting this parameters in this kind of setup.

Now… yep, you were right, we missed the docs part where it says that it only supports merge request pipelines, and after making the job run only on merge requests we have it working perfectly, but we’d really like to avoid using them. Overall it’s not something we feel comfortable with.

I tried to replicate the same environment as merge requests pipelines but I’m not succeeding to make PR decoration work on regular pipelines… could you maybe point me in the source code where this autodetection is done? I checked sonar-scanner-cli and sonar-scanner-api without much luck… Is it using something more than just env vars for this?

Here is what we currently have

sonarqube_scan:
  stage: release
  needs: []
  image:
    name: sonarsource/sonar-scanner-cli:4.3
    entrypoint: [""]
  variables:
    GIT_DEPTH: 0
  interruptible: true
  script:
    # This is a horrible hack in my opinion, but it seems that SonarQube doesn't allow passing
    # the options directly to sonar-scanner, and we don't want to use merge request pipelines
    # as they are really confusing because of the detached pipelines
    - export CI_MERGE_REQUEST_ID=$(git ls-remote ${CI_REPOSITORY_URL} refs/merge-requests/[0-9]*/head | awk "/$CI_COMMIT_SHA/"'{print $2}' | cut -d '/' -f3)
    - export CI_MERGE_REQUEST_PROJECT_URL=$CI_PROJECT_URL
    - export CI_MERGE_REQUEST_SOURCE_PROJECT_URL=$CI_MERGE_REQUEST_PROJECT_URL
    - export CI_MERGE_REQUEST_SOURCE_PROJECT_ID=$CI_PROJECT_ID
    - export CI_MERGE_REQUEST_SOURCE_BRANCH_NAME=$CI_COMMIT_REF_NAME
    - >
      sonar-scanner
      -Dsonar.projectKey="${CI_PROJECT_PATH//\//:}"
      -Dsonar.sources=$SONARQUBE_TARGET
      $SONARQUBE_EXTRA_ARGS
  allow_failure: true