diff --git a/.travis.settings.xml b/.travis.settings.xml
new file mode 100644
index 0000000000..e60b0e0c4c
--- /dev/null
+++ b/.travis.settings.xml
@@ -0,0 +1,68 @@
+
+
+
+ alfresco-internal
+
+ true
+
+
+
+ alfresco-internal
+
+ true
+
+
+ true
+
+ Alfresco Internal Repository
+ https://artifacts.alfresco.com/nexus/content/groups/internal
+
+
+
+
+ alfresco-internal
+ Alfresco Internal Repository
+ https://artifacts.alfresco.com/nexus/content/groups/internal
+
+
+ alfresco-public
+ Alfresco Public Repository
+ https://artifacts.alfresco.com/nexus/content/groups/public
+
+
+ alfresco-private
+ Alfresco Private Repository
+ https://artifacts.alfresco.com/nexus/content/groups/private
+
+
+
+
+
+
+
+ docker.io
+ ${env.DOCKERHUB_USERNAME}
+ ${env.DOCKERHUB_PASSWORD}
+
+
+ quay.io
+ ${env.QUAY_USERNAME}
+ ${env.QUAY_PASSWORD}
+
+
+ alfresco-internal
+ ${env.MAVEN_USERNAME}
+ ${env.MAVEN_PASSWORD}
+
+
+ alfresco-private
+ ${env.MAVEN_USERNAME}
+ ${env.MAVEN_PASSWORD}
+
+
+ alfresco-internal-snapshots
+ ${env.MAVEN_USERNAME}
+ ${env.MAVEN_PASSWORD}
+
+
+
diff --git a/.travis.yml b/.travis.yml
index 2172514ab1..598593f5a7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,107 @@
+os: linux
+dist: xenial
language: java
jdk:
- openjdk11
-sudo: false
-install: true
-script: travis_wait 35 mvn -B clean verify -Dcommunity -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+
+services:
+ - docker
+
+branches:
+ only:
+ - /release\/V3.\d+.*/
+ - /feature-3.\d+\/.*/
+ - /merge-3.\d+\/.*/
+ - /hotfix-3.\d+\/.*/
+
+cache:
+ directories:
+ - $HOME/.m2
+
+# the cache can grow constantly
+before_cache:
+ - rm -rf $HOME/.m2/repository/org/alfresco/alfresco-governance-services*
+
+before_install:
+ - "cp .travis.settings.xml $HOME/.m2/settings.xml"
+install: skip
+
+stages:
+ - name: Build AGS
+ - name: Tests
+ if: commit_message !~ /\[skip tests\]/
+ - name: Security Scans
+ - name: Release
+ - name: Publish
+
+jobs:
+ include:
+ - name: "Build AGS Community"
+ stage: Build AGS
+ before_script: source scripts/setUpMavenPhase.sh
+ script:
+ - travis_retry travis_wait 120 mvn -B -q clean ${MAVEN_PHASE} -P${BUILD_PROFILE} -Dimage.tag=${IMAGE_TAG} -Dskip.integrationtests=false -Dcommunity -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+
+ - name: "Build AGS Enterprise"
+ stage: Build AGS
+ before_script: source scripts/setUpMavenPhase.sh
+ install:
+ - travis_retry travis_wait 60 mvn -B -q clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -f rm-community/pom.xml -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+ script:
+ - travis_retry travis_wait 80 mvn -B -q ${MAVEN_PHASE} -P${BUILD_PROFILE} -Dimage.tag=${IMAGE_TAG} -Dskip.integrationtests=false -f rm-enterprise/pom.xml -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+
+ - name: "Build AGS Benchmark"
+ stage: Build AGS
+ before_script: source scripts/setUpMavenPhase.sh
+ install:
+ - travis_retry travis_wait 80 mvn -B -q clean install -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+ script:
+ - travis_retry travis_wait 35 mvn -B -q ${MAVEN_PHASE} -Dskip.integrationtests=false -f rm-benchmark/pom.xml -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+
+ - name: "Community Integrations Tests on MySQL"
+ stage: Tests
+ script:
+ - echo "Community Integrations Tests on MySQL"
+ - name: "Enterprise Integrations Tests on MySQL"
+ stage: Tests
+ script:
+ - echo "Enterprise Integrations Tests on MySQL"
+ - name: "Community Rest API Tests"
+ stage: Tests
+ script:
+ - echo "Community Rest API Tests"
+ - name: "Enterprise Rest API Tests"
+ stage: Tests
+ script:
+ - echo "Enterprise Rest API Tests"
+ - name: "Community UI Tests ..."
+ stage: Tests
+ script:
+ - echo "Community UI Tests ..."
+ - name: "Enterprise UI Tests ..."
+ stage: Tests
+ script:
+ - echo "Enterprise UI Tests ..."
+
+ - name: "Source Clear Scan (SCA)"
+ stage: Security Scans
+ script:
+ - echo "Source Clear Scan (SCA)"
+ - name: "Static Analysis (SAST)"
+ stage: Security Scans
+ script:
+ - echo "Static Analysis (SAST)"
+
+ - name: "Community Release"
+ stage: Release
+ script:
+ - echo "Community Release"
+ - name: "Enterprise Release"
+ stage: Release
+ script:
+ - echo "Enterprise Release"
+
+ - name: "Copy to S3 Release Bucket"
+ stage: Publish
+ script:
+ - echo "Copy to S3 Release Bucket"
diff --git a/pom.xml b/pom.xml
index 66e9d23947..2f68a47086 100644
--- a/pom.xml
+++ b/pom.xml
@@ -468,6 +468,7 @@
start
pre-integration-test
+ stop
start
diff --git a/scripts/setUpMavenPhase.sh b/scripts/setUpMavenPhase.sh
new file mode 100644
index 0000000000..688f019df8
--- /dev/null
+++ b/scripts/setUpMavenPhase.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+echo "Branch name: ${TRAVIS_BRANCH}"
+echo "Pull request: ${TRAVIS_PULL_REQUEST}"
+echo "Travis job name: ${TRAVIS_JOB_NAME}"
+branchName=${TRAVIS_BRANCH}
+imageTag=${branchName:8}
+echo "Image tag: ${imageTag}"
+
+ if [[ ${TRAVIS_JOB_NAME} == "Build AGS Enterprise" ]];
+ then
+ export BUILD_PROFILE="internal"
+ else
+ export BUILD_PROFILE="master"
+ fi
+
+ if [[ "${TRAVIS_BRANCH}" == "master" && "${TRAVIS_PULL_REQUEST}" == "false" ]];
+ then
+ export MAVEN_PHASE="deploy"
+ export IMAGE_TAG="latest"
+ elif [[ ${TRAVIS_BRANCH} = release* && "${TRAVIS_PULL_REQUEST}" == "false" ]];
+ then
+ export MAVEN_PHASE="deploy"
+ export IMAGE_TAG="${imageTag}-latest"
+ else
+ export MAVEN_PHASE="verify"
+ export BUILD_PROFILE="buildDockerImage"
+ export IMAGE_TAG="latest"
+ fi