I am trying to integrate the angular test into SonarQube with GitHub actions. Currently, I am getting the error “npm ERR! Missing script: “sonar-scanner””. My angular project is located in the folder prisma-frontend . the test are written in jasmine The code I am using is down below.
GitHub actions
- name: Analyse Code
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }}
run: |
cd prisma-frontend
npm install -g @angular/cli
npm install -g sonarqube-scanner
npm install -D karma-sonarqube-reporter
npm run sonar-scanner
angular karma file
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma'),
require('karma-sonarqube-reporter'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true // removes the duplicated traces
},
coverageReporter: {
dir: require('path').join(__dirname, './coverage/prisma-frontend'),
subdir: '.',
reporters: [
{ type: 'html' },
{ type: 'text-summary' }
]
},
sonarqubeReporter: {
basePath: 'src/app', // test files folder
filePattern: '**/*spec.ts', // test files glob pattern
encoding: 'utf-8', // test files encoding
outputFolder: 'reports', // report destination
legacyMode: false, // report for Sonarqube < 6.2 (disabled)
reportName: function (metadata) {
// report name callback, but accepts also a
// string (file name) to generate a single file
/**
* Report metadata array:
* - metadata[0] = browser name
* - metadata[1] = browser version
* - metadata[2] = plataform name
* - metadata[3] = plataform version
*/
return 'sonarqube_report.xml';
},
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};
My Sonarqube properties file
sonar.projectKey=Frontend
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.sources=prisma-frontend/src
sonar.tests=prisma-frontend/src
sonar.test.inclusions=prisma-frontend**/*.spec.ts # only collect these for test-coverage
sonar.javascript.lcov.reportPaths=prisma-frontend/src/coverage/PROJECT_NAME/lcov.info
sonar.testExecutionReportPaths=prisma-frontend/reports/sonarqube_report.xml