From 4f87f6fb3faeff06d200430a4edd785384d3e445 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 19:25:06 -0400 Subject: [PATCH 1/8] Setup Jenkins Dockerfile for unit tests --- .dockerignore | 4 +++- Dockerfile.jenkins | 5 +++++ Jenkinsfile | 46 +++++++++++++++++++++++++++++----------------- package-lock.json | 46 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/karma.conf.js | 11 ++++++++--- 6 files changed, 92 insertions(+), 21 deletions(-) create mode 100644 Dockerfile.jenkins diff --git a/.dockerignore b/.dockerignore index 9ce4213..44d841b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,6 @@ .git* .idea/ dist/ -Dockerfile +output/ +node_modules/ +Dockerfile* diff --git a/Dockerfile.jenkins b/Dockerfile.jenkins new file mode 100644 index 0000000..531b27e --- /dev/null +++ b/Dockerfile.jenkins @@ -0,0 +1,5 @@ +FROM node:13.10-alpine +WORKDIR /app +RUN apk add --no-cache chromium +ADD . /app +ENTRYPOINT npm install && /app/node_modules/.bin/ng test --watch=false --progress=false --browsers=ChomeHeadlessCI diff --git a/Jenkinsfile b/Jenkinsfile index 48c50a8..eccd957 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,20 +1,32 @@ pipeline { - agent { docker { image 'node:13.10-alpine' } } - stages { - stage('setup') { - steps { - sh 'npm install' - } - } - stage('build') { - steps { - sh 'node_modules/.bin/ng build --prod' - } - } - stage('lint') { - steps { - sh 'node_modules/.bin/ng lint' - } - } + agent { + dockerfile { + filename 'Dockerfile.jenkins' + dir '.' + args '-e CHROME_BIN=/bin/chromium -e NG_CLI_ANALYTICS="false"' } + } + stages { + stage('setup') { + steps { + sh 'npm install' + } + } + stage('build') { + steps { + sh 'node_modules/.bin/ng build --prod' + } + } + stage('lint') { + steps { + sh 'node_modules/.bin/ng lint' + } + } + stage('test') { + steps { + sh 'node_modules/.bin/ng test --watch=false --progress=false --browsers=ChomeHeadlessCI' + } + } + } } + diff --git a/package-lock.json b/package-lock.json index 5e12a1f..e81e08f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2690,6 +2690,16 @@ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -5050,6 +5060,13 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -6843,6 +6860,24 @@ "karma-jasmine": "^1.0.2" } }, + "karma-junit-reporter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-2.0.1.tgz", + "integrity": "sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==", + "dev": true, + "requires": { + "path-is-absolute": "^1.0.0", + "xmlbuilder": "12.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-12.0.0.tgz", + "integrity": "sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==", + "dev": true + } + } + }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -7624,6 +7659,13 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -12075,6 +12117,8 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", "node-pre-gyp": "*" }, "dependencies": { @@ -12962,6 +13006,8 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", "node-pre-gyp": "*" }, "dependencies": { diff --git a/package.json b/package.json index bfd2650..5b28895 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "karma-coverage-istanbul-reporter": "^2.0.6", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", + "karma-junit-reporter": "^2.0.1", "protractor": "^5.4.3", "ts-node": "~7.0.0", "tslint": "~5.11.0", diff --git a/src/karma.conf.js b/src/karma.conf.js index b6e0042..d513820 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -10,6 +10,7 @@ module.exports = function (config) { require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), + require('karma-junit-reporter'), require('@angular-devkit/build-angular/plugins/karma') ], client: { @@ -20,12 +21,16 @@ module.exports = function (config) { reports: ['html', 'lcovonly'], fixWebpackSourcePaths: true }, - reporters: ['progress', 'kjhtml'], + reporters: ['progress', 'kjhtml', 'junit'], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], - singleRun: false + singleRun: false, + junitReporter: { + outputDir: 'junit-report', + useBrowserName: true + } }); -}; \ No newline at end of file +}; -- 2.49.1 From d1aeb04e64f146c984f3031e482c87b0d8e07423 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 19:31:48 -0400 Subject: [PATCH 2/8] Trying to fix entrypoint --- Dockerfile.jenkins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.jenkins b/Dockerfile.jenkins index 531b27e..bb4aeaf 100644 --- a/Dockerfile.jenkins +++ b/Dockerfile.jenkins @@ -2,4 +2,4 @@ FROM node:13.10-alpine WORKDIR /app RUN apk add --no-cache chromium ADD . /app -ENTRYPOINT npm install && /app/node_modules/.bin/ng test --watch=false --progress=false --browsers=ChomeHeadlessCI +CMD ["bash"] -- 2.49.1 From 49e782255c21bc764ca5863907246d64ab1765e2 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 19:38:17 -0400 Subject: [PATCH 3/8] Fix test command browser --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index eccd957..9c3d3a1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -24,7 +24,7 @@ pipeline { } stage('test') { steps { - sh 'node_modules/.bin/ng test --watch=false --progress=false --browsers=ChomeHeadlessCI' + sh 'node_modules/.bin/ng test --watch=false --progress=false' } } } -- 2.49.1 From c43695b0d71560ba4e1977d7795980e85d95be80 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 19:55:21 -0400 Subject: [PATCH 4/8] Use Puppeteer to launch headless chrome --- .dockerignore | 1 + .gitignore | 1 + Jenkinsfile | 2 +- package-lock.json | 298 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/karma.conf.js | 4 +- 6 files changed, 305 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 44d841b..d8256dd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,3 +4,4 @@ dist/ output/ node_modules/ Dockerfile* +junit-report/ diff --git a/.gitignore b/.gitignore index 7f740ac..b81fcb5 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ testem.log #System Files .DS_Store +junit-report/ diff --git a/Jenkinsfile b/Jenkinsfile index 9c3d3a1..ebebfdd 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -24,7 +24,7 @@ pipeline { } stage('test') { steps { - sh 'node_modules/.bin/ng test --watch=false --progress=false' + sh 'node_modules/.bin/ng test --watch=false --progress=false --browsers=ChromeHeadless' } } } diff --git a/package-lock.json b/package-lock.json index e81e08f..fff171c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1859,6 +1859,12 @@ "@types/jasmine": "*" } }, + "@types/mime-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", + "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -1908,6 +1914,16 @@ } } }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@webassemblyjs/ast": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", @@ -2700,6 +2716,46 @@ "file-uri-to-path": "1.0.0" } }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -2963,6 +3019,12 @@ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -4978,6 +5040,44 @@ } } }, + "extract-zip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.0.tgz", + "integrity": "sha512-i42GQ498yibjdvIhivUsRslx608whtGoFIhF26Z7O4MYncBxp8CwalOs1lnHy21A9sIohWO2+uiE4SRtC9JXDg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -5007,6 +5107,15 @@ "websocket-driver": ">=0.5.1" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", @@ -5289,6 +5398,12 @@ "null-check": "^1.0.0" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", @@ -7620,6 +7735,12 @@ } } }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", + "dev": true + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -8447,6 +8568,12 @@ "sha.js": "^2.4.8" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -9220,6 +9347,12 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -9381,6 +9514,12 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -9447,6 +9586,95 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "puppeteer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-3.0.0.tgz", + "integrity": "sha512-ArmIS8w+XhL4KGP05kxMousA9SFxmeirMkNNcVe5LjK4iGCbZ8qKnG4byuXMru7Ty7a9QwiMUIf80X+zmJuf2A==", + "dev": true, + "requires": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "dev": true, + "requires": { + "mime-db": "1.43.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ws": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", + "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", + "dev": true + } + } + }, "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", @@ -11150,6 +11378,44 @@ "yallist": "^3.0.3" } }, + "tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "dev": true, + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "terser": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.5.1.tgz", @@ -11689,6 +11955,28 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, + "unbzip2-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.1.tgz", + "integrity": "sha512-sgDYfSDPMsA4Hr2/w7vOlrJBlwzmyakk1+hW8ObLvxSp0LA36LcL2XItGvOT3OSblohSdevMuT8FQjLsqyy4sA==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -13881,6 +14169,16 @@ "decamelize": "^1.2.0" } }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json index 5b28895..9400518 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "karma-jasmine-html-reporter": "^0.2.2", "karma-junit-reporter": "^2.0.1", "protractor": "^5.4.3", + "puppeteer": "^3.0.0", "ts-node": "~7.0.0", "tslint": "~5.11.0", "typescript": "^3.7.5" diff --git a/src/karma.conf.js b/src/karma.conf.js index d513820..a70c125 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -1,6 +1,8 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html +process.env.CHROME_BIN = require('puppeteer').executablePath() + module.exports = function (config) { config.set({ basePath: '', @@ -26,7 +28,7 @@ module.exports = function (config) { colors: true, logLevel: config.LOG_INFO, autoWatch: true, - browsers: ['Chrome'], + browsers: ['Chrome', 'ChromeHeadless'], singleRun: false, junitReporter: { outputDir: 'junit-report', -- 2.49.1 From cd02d586e1ba93257f1ac2a1b97a4277cc821d94 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 20:01:32 -0400 Subject: [PATCH 5/8] ChromeHeadless no sandbox --- Jenkinsfile | 2 +- src/karma.conf.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index ebebfdd..30629c8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -24,7 +24,7 @@ pipeline { } stage('test') { steps { - sh 'node_modules/.bin/ng test --watch=false --progress=false --browsers=ChromeHeadless' + sh 'node_modules/.bin/ng test --watch=false --progress=false --browsers=ChromeHeadlessCI' } } } diff --git a/src/karma.conf.js b/src/karma.conf.js index a70c125..f7100da 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -28,7 +28,13 @@ module.exports = function (config) { colors: true, logLevel: config.LOG_INFO, autoWatch: true, - browsers: ['Chrome', 'ChromeHeadless'], + browsers: ['Chrome'], + customLaunchers: { + ChromeHeadlessCI: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + } singleRun: false, junitReporter: { outputDir: 'junit-report', -- 2.49.1 From 9c258f85b55130e633d7b2cd7bc2f9ce98dbfaeb Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 20:04:33 -0400 Subject: [PATCH 6/8] Added missing comma --- src/karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/karma.conf.js b/src/karma.conf.js index f7100da..7e3b9c9 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -34,7 +34,7 @@ module.exports = function (config) { base: 'ChromeHeadless', flags: ['--no-sandbox'] } - } + }, singleRun: false, junitReporter: { outputDir: 'junit-report', -- 2.49.1 From 12d05478ebf7e9df49c3ee1153cc66f30f404835 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 20:09:12 -0400 Subject: [PATCH 7/8] Trying Chromium Headless --- src/karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/karma.conf.js b/src/karma.conf.js index 7e3b9c9..a34975f 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -31,7 +31,7 @@ module.exports = function (config) { browsers: ['Chrome'], customLaunchers: { ChromeHeadlessCI: { - base: 'ChromeHeadless', + base: 'ChromiumHeadless', flags: ['--no-sandbox'] } }, -- 2.49.1 From cf3c8cd9f486136849c9946033b851275b9803cc Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 20 Apr 2020 21:23:54 -0400 Subject: [PATCH 8/8] Add JUnit test report collection and artifact archive --- Jenkinsfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 30629c8..5dd6a03 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -28,5 +28,11 @@ pipeline { } } } + post { + always { + archiveArtifacts artifacts: 'dist/Homepage/**', fingerprint: true + junit 'src/junit-report/**/*.xml' + } + } } -- 2.49.1