diff --git a/.travis.yml b/.travis.yml index a29a47f5e..3e6578c0a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -77,37 +77,54 @@ jobs: - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./start.sh script: ng run app-e2e:e2elite --suite "authentication,listViews,navigation,application,pagination,search" - after_script: ./start.sh -d + after_script: + - ./scripts/ci/job_hooks/after_e2e.sh + - ./start.sh -d + - name: Test Suite actionsAvailable before_script: - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./start.sh script: ng run app-e2e:e2elite --suite "actionsAvailable" - after_script: ./start.sh -d + after_script: + - ./scripts/ci/job_hooks/after_e2e.sh + - ./start.sh -d + - name: Test Suite addRemoveContent before_script: - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./start.sh script: ng run app-e2e:e2elite --suite "addRemoveContent" - after_script: ./start.sh -d + after_script: + - ./scripts/ci/job_hooks/after_e2e.sh + - ./start.sh -d + - name: Test Suite manageContent before_script: - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./start.sh script: ng run app-e2e:e2elite --suite "manageContent" - after_script: ./start.sh -d + after_script: + - ./scripts/ci/job_hooks/after_e2e.sh + - ./start.sh -d + - name: Test Suite sharingContent&markFavorite before_script: - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./start.sh script: ng run app-e2e:e2elite --suite "sharingContent" - after_script: ./start.sh -d + after_script: + - ./scripts/ci/job_hooks/after_e2e.sh + - ./start.sh -d + - name: Test Suite viewContent&metadata&extensions before_script: - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./start.sh script: ng run app-e2e:e2elite --suite "viewer,infoDrawer,extensions" - after_script: ./start.sh -d + after_script: + - ./scripts/ci/job_hooks/after_e2e.sh + - ./start.sh -d - stage: Update Rancher name: Update Rancher diff --git a/protractor.conf.js b/protractor.conf.js index 163c2b131..7f2b07b8e 100755 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -6,6 +6,7 @@ const { SpecReporter } = require('jasmine-spec-reporter'); const afterLaunch = require('./e2e/e2e-config/hooks/after-launch'); const fs = require('fs'); const resolve = require('path').resolve; +const logger = require('./tools/helpers/logger'); require('dotenv').config({ path: process.env.ENV_FILE }); @@ -18,8 +19,7 @@ const BROWSER_RUN = process.env.BROWSER_RUN; const width = 1366; const height = 768; -const API_CONTENT_HOST = - process.env.API_CONTENT_HOST || 'http://localhost:8080'; +const API_CONTENT_HOST = process.env.API_CONTENT_HOST || 'http://localhost:8080'; function rmDir(dirPath) { try { @@ -138,10 +138,8 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 100000, - print: function() {}, - ...SmartRunner.withOptionalExclusions( - resolve(__dirname, './e2e/protractor.excludes.json'), - ) + print: function () {}, + ...SmartRunner.withOptionalExclusions(resolve(__dirname, './e2e/protractor.excludes.json')) }, plugins: [ @@ -157,7 +155,11 @@ exports.config = { onPrepare() { if (process.env.CI) { - SmartRunner.apply({repoHash: process.env.GIT_HASH || ''}); + const repoHash = process.env.GIT_HASH || ''; + const outputDirectory = process.env.SMART_RUNNER_DIRECTORY; + logger.info(`SmartRunner's repoHash: "${repoHash}"`); + logger.info(`SmartRunner's outputDirectory: "${outputDirectory}"`); + SmartRunner.apply({ outputDirectory, repoHash }); } const tsConfigPath = path.resolve(e2eFolder, 'tsconfig.e2e.json'); @@ -176,10 +178,7 @@ exports.config = { paths: tsConfig.compilerOptions.paths }); - browser - .manage() - .window() - .setSize(width, height); + browser.manage().window().setSize(width, height); jasmine.getEnv().addReporter( new SpecReporter({ @@ -196,7 +195,6 @@ exports.config = { behavior: 'allow', downloadPath: downloadFolder }); - }, afterLaunch }; diff --git a/scripts/ci/job_hooks/after_e2e.sh b/scripts/ci/job_hooks/after_e2e.sh new file mode 100755 index 000000000..a85f2496d --- /dev/null +++ b/scripts/ci/job_hooks/after_e2e.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# Upload protractor-smartrunner artifact related to this particular job to S3 +./scripts/ci/utils/artifact-to-s3.sh -a "$SMART_RUNNER_DIRECTORY" -o "$S3_DBP_FOLDER/protractor-smartrunner-$TRAVIS_JOB_ID.tar.bz2" diff --git a/scripts/ci/job_hooks/before_e2e.sh b/scripts/ci/job_hooks/before_e2e.sh index eb94340a3..eae4ffac4 100755 --- a/scripts/ci/job_hooks/before_e2e.sh +++ b/scripts/ci/job_hooks/before_e2e.sh @@ -4,13 +4,12 @@ FROM=$1; TO=$2; PARAMS=$3; -echo "Download artefact from S3 $FROM" +# Download built application artifact from S3 ./scripts/ci/utils/artifact-from-s3.sh -a "$FROM" -o "$TO" -echo "Download artefact done" - -echo "Replace app.config with options $PARAMS" node "./scripts/app-config-replace.js" --config="$TO/app.config.json" $PARAMS -echo "Replace app.config done" + +# Download protractor-smartrunner artifact related to this particular job from S3, if exists +./scripts/ci/utils/artifact-from-s3.sh -a "$S3_DBP_FOLDER/protractor-smartrunner-$TRAVIS_JOB_ID.tar.bz2" -o "$SMART_RUNNER_DIRECTORY" echo "====== Update webdriver-manager =====" if [ "$CI" = "true" ]; then diff --git a/scripts/ci/job_hooks/before_install.sh b/scripts/ci/job_hooks/before_install.sh index d7acd8bc3..30285cd6f 100755 --- a/scripts/ci/job_hooks/before_install.sh +++ b/scripts/ci/job_hooks/before_install.sh @@ -1,30 +1,37 @@ #!/usr/bin/env bash -# Run the build on mergin to development with always the latest ADF -if [ "${TRAVIS_BRANCH}" == "develop" ] && [ "${TRAVIS_EVENT_TYPE}" == "api" ] || [ "${TRAVIS_EVENT_TYPE}" == "cron" ] || [ "${TRAVIS_EVENT_TYPE}" == "push" ]; then +# Run the build on develop branch with always the latest ADF +if [[ "${TRAVIS_BRANCH}" == "develop" && ( "${TRAVIS_EVENT_TYPE}" == "api" || "${TRAVIS_EVENT_TYPE}" == "cron" || "${TRAVIS_EVENT_TYPE}" == "push" ) ]]; then + echo " ===== USING LATEST ADF VERSION ===== " ./scripts/update-version.sh -v $ADF_RELEASE_VERSION fi -pip install --user awscli - +# Settings for Angular builder -------------------------------------------------------- export NODE_OPTIONS="--max_old_space_size=30000" + +# Settings for protractor-smartrunner ------------------------------------------------- export GIT_HASH=`git rev-parse HEAD` -S3_DBP_PATH="s3://alfresco-travis-builds/aca" +export SMART_RUNNER_DIRECTORY=".protractor-smartrunner" + +# Settings for Nx --------------------------------------------------------------------- export BASE_HASH="$(git describe --tags `git rev-list --tags --max-count=1`)" export HEAD_HASH="HEAD" +# Settings for S3 caching ------------------------------------------------------------- +pip install --user awscli +S3_DBP_PATH="s3://alfresco-travis-builds/aca" if [ "${TRAVIS_EVENT_TYPE}" == "push" ]; then - export S3_DBP_FOLDER="$S3_DBP_PATH/$TRAVIS_BRANCH/$TRAVIS_BUILD_ID" + export S3_DBP_ROOT_FOLDER="$S3_DBP_PATH/$TRAVIS_BRANCH" elif [ "${TRAVIS_EVENT_TYPE}" == "pull_request" ]; then - export S3_DBP_FOLDER="$S3_DBP_PATH/$TRAVIS_PULL_REQUEST/$TRAVIS_BUILD_ID" + export S3_DBP_ROOT_FOLDER="$S3_DBP_PATH/$TRAVIS_PULL_REQUEST" export BASE_HASH="origin/$TRAVIS_BRANCH" elif [ "${TRAVIS_EVENT_TYPE}" == "cron" ]; then - export S3_DBP_FOLDER="$S3_DBP_PATH/cron/$TRAVIS_BUILD_ID" + export S3_DBP_ROOT_FOLDER="$S3_DBP_PATH/cron" else - export S3_DBP_FOLDER="$S3_DBP_PATH/api/$TRAVIS_BUILD_ID" + export S3_DBP_ROOT_FOLDER="$S3_DBP_PATH/api" fi +export S3_DBP_FOLDER="$S3_DBP_ROOT_FOLDER/$TRAVIS_BUILD_ID" echo "BASE_HASH: $BASE_HASH" +echo "S3 DBP root folder: $S3_DBP_ROOT_FOLDER" echo "S3 DBP destination: $S3_DBP_FOLDER" - - diff --git a/scripts/npm/lite-serve.ts b/scripts/npm/lite-serve.ts index d90ed6cf7..42b6cbd15 100755 --- a/scripts/npm/lite-serve.ts +++ b/scripts/npm/lite-serve.ts @@ -19,6 +19,7 @@ import * as ora from 'ora'; require('dotenv').config({ path: process.env.ENV_FILE }); const API_HOST = process.env.API_HOST; +const API_CONTENT_HOST = process.env.API_CONTENT_HOST; const OAUTH_HOST = process.env.OAUTH_HOST; const IDENTITY_HOST = process.env.IDENTITY_HOST; const NOTIFICATION_LAST = process.env.NOTIFICATION_LAST; @@ -49,18 +50,7 @@ export default class LiteServeRunner { alias: 'c', title: 'Rewrite app.config.json with the following environment vars?', required: false, - choices: [ - ...(API_HOST !== undefined ? [{ name: `API_HOST=${API_HOST}`, value: 'a', short: 'API_HOST', checked: true }] : []), - ...(OAUTH_HOST !== undefined - ? [{ name: `OAUTH_HOST=${OAUTH_HOST} ${red('+ authType=OAUTH also!!!')}`, value: 'o', short: 'OAUTH_HOST', checked: true }] - : []), - ...(IDENTITY_HOST !== undefined - ? [{ name: `IDENTITY_HOST=${IDENTITY_HOST} ${red('+ authType=OAUTH also!!!')}`, value: 'i', short: 'IDENTITY_HOST', checked: true }] - : []), - ...(NOTIFICATION_LAST !== undefined - ? [{ name: `NOTIFICATION_LAST=${NOTIFICATION_LAST}`, value: 'n', short: 'NOTIFICATION_LAST', checked: true }] - : []) - ] + choices: this.getEnvVarChoices.bind(this) }) ]; } @@ -156,4 +146,46 @@ export default class LiteServeRunner { }; }); } + + private getEnvVarChoices() { + const choices = []; + + if (API_HOST !== undefined || API_CONTENT_HOST !== undefined) { + choices.push({ + name: `API_HOST=${API_HOST} && API_CONTENT_HOST=${API_CONTENT_HOST || API_HOST}`, + value: 'a', + short: 'API_HOST', + checked: true + }); + } + + if (OAUTH_HOST !== undefined) { + choices.push({ + name: `OAUTH_HOST=${OAUTH_HOST} ${red('+ authType=OAUTH also!!!')}`, + value: 'o', + short: 'OAUTH_HOST', + checked: true + }); + } + + if (IDENTITY_HOST !== undefined) { + choices.push({ + name: `IDENTITY_HOST=${IDENTITY_HOST} ${red('+ authType=OAUTH also!!!')}`, + value: 'i', + short: 'IDENTITY_HOST', + checked: true + }); + } + + if (NOTIFICATION_LAST !== undefined) { + choices.push({ + name: `NOTIFICATION_LAST=${NOTIFICATION_LAST}`, + value: 'n', + short: 'NOTIFICATION_LAST', + checked: true + }); + } + + return choices; + } } diff --git a/scripts/run b/scripts/run index 543153332..98ca5e6ae 100755 --- a/scripts/run +++ b/scripts/run @@ -1,7 +1,7 @@ #!/usr/bin/env node const path = require('path'); -const tsConfigPath = path.resolve(__dirname, 'tsconfig.base.json'); +const tsConfigPath = path.resolve(__dirname, 'tsconfig.json'); const tsConfig = require(tsConfigPath); require('ts-node').register({ project: tsConfigPath });