diff --git a/.editorconfig b/.editorconfig index a06c1db68..102475698 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,7 +3,7 @@ root = true [*] -indent_style = tab +indent_style = space end_of_line = lf charset = utf-8 trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore index 45c11c5f7..667bb3e79 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,9 @@ lib-cov # Coverage directory used by tools like istanbul coverage +# Reports directory used for unit test reports +reports/ + # nyc test coverage .nyc_output diff --git a/.pipeline/config.yml b/.pipeline/config.yml new file mode 100644 index 000000000..2006a1f51 --- /dev/null +++ b/.pipeline/config.yml @@ -0,0 +1,6 @@ +steps: + dockerExecute: + dockerPullImage: false + sidecarPullImage: false + karmaExecuteTests: + runCommand: 'npm run karma-ci' diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..75d1df88d --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,13 @@ +@Library(['piper-lib-os']) _ + +pipeline { + agent any + stages { + stage('Test'){ + steps { + setupCommonPipelineEnvironment script: this + karmaExecuteTests script: this + } + } + } +} diff --git a/jenkins.yml b/jenkins.yml new file mode 100644 index 000000000..194afa238 --- /dev/null +++ b/jenkins.yml @@ -0,0 +1,12 @@ +jenkins: + numExecutors: 10 +unclassified: + globallibraries: + libraries: + - defaultVersion: "master" + name: "piper-lib-os" + retriever: + modernSCM: + scm: + git: + remote: "https://github.com/SAP/jenkins-library.git" diff --git a/karma-ci.conf.js b/karma-ci.conf.js index 138c5ed0b..7c437db35 100644 --- a/karma-ci.conf.js +++ b/karma-ci.conf.js @@ -1,5 +1,5 @@ module.exports = function(config) { - "use strict"; + "use strict"; require("./karma.conf")(config); config.set({ @@ -28,12 +28,39 @@ module.exports = function(config) { } } }, + // https://github.com/karma-runner/karma-junit-reporter#configuration + junitReporter: { + outputDir: "reports", + outputFile: "TEST-qunit.xml", + suite: "", + useBrowserName: true + }, + customLaunchers: { + "ChromeRemote": { + base: "WebDriver", + config: { + hostname: "localhost", + port: 4444 + }, + browserName: "chrome", + name: "Karma", + pseudoActivityInterval: 30000 + } + }, - reporters: ["progress", "coverage"], + reporters: ["progress", "coverage", "junit"], - browsers: ["ChromeHeadless"], + browsers: ["ChromeRemote"], singleRun: true - }); + }); + + if (process.env.ON_K8S == true){ + console.log("Running with Kubernetes setup.") + } else { + console.log("Running with Docker setup.") + config.hostname = 'karma' + config.customLaunchers.ChromeRemote.config.hostname = 'selenium' + } }; diff --git a/package.json b/package.json index e9719b7eb..c001accda 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,11 @@ "lint": "eslint webapp", "karma": "karma start", "karma-ci": "karma start karma-ci.conf.js", + "karma-compose": "docker-compose --file webapp/test/docker-compose.yml up --abort-on-container-exit", "watch": "npm run karma", "test": "npm run lint && rimraf coverage && npm run karma-ci", - "build": "rimraf dist && ui5 build --a" + "build": "rimraf dist && ui5 build --a", + "jenkinsfile": "docker run --rm -v /tmp -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/workspace -e CASC_JENKINS_CONFIG=/workspace/jenkins.yml ppiper/jenkinsfile-runner" }, "dependencies": { "@openui5/sap.m": "^1.60.0", @@ -23,7 +25,9 @@ "karma": "^4.0.1", "karma-chrome-launcher": "^2.2.0", "karma-coverage": "^1.1.2", + "karma-junit-reporter": "^1.2.0", "karma-ui5": "^1.0.0", + "karma-webdriver-launcher": "^1.0.5", "rimraf": "^2.6.2" } } diff --git a/webapp/test/docker-compose.yml b/webapp/test/docker-compose.yml new file mode 100644 index 000000000..dac1e88be --- /dev/null +++ b/webapp/test/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + karma: + image: node:8-stretch + user: node + working_dir: /home/node/app + volumes: + - ../..:/home/node/app + command: + - /bin/sh + - -c + - | + /usr/local/bin/npm install + /usr/local/bin/npm run karma-ci + depends_on: + - selenium + selenium: + image: selenium/standalone-chrome + ports: + - "4444:4444" + healthcheck: + test: "curl -sSL 'http://localhost:4444/wd/hub/status' 2>&1 | jq -r '.value.ready' 2>&1 | grep 'true' >/dev/null"