diff --git a/.travis.settings.xml b/.travis.settings.xml
index 3c61da4f43..e60b0e0c4c 100644
--- a/.travis.settings.xml
+++ b/.travis.settings.xml
@@ -44,6 +44,11 @@
${env.DOCKERHUB_USERNAME}
${env.DOCKERHUB_PASSWORD}
+
+ quay.io
+ ${env.QUAY_USERNAME}
+ ${env.QUAY_PASSWORD}
+
alfresco-internal
${env.MAVEN_USERNAME}
@@ -54,5 +59,10 @@
${env.MAVEN_USERNAME}
${env.MAVEN_PASSWORD}
+
+ alfresco-internal-snapshots
+ ${env.MAVEN_USERNAME}
+ ${env.MAVEN_PASSWORD}
+
diff --git a/.travis.yml b/.travis.yml
index ae2b234671..1ede9fe6aa 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,22 +1,28 @@
+import:
+ - source: travis-env-vars.yml
os: linux
dist: xenial
language: java
jdk:
- openjdk11
+services:
+ - docker
+
branches:
only:
- - /release\/V2.7.*/
- - /feature-2.7\/.*/
- - /merge-2.7\/.*/
- - /hotfix-2.7\/.*/
+ - master
+ - /feature\/.*/
+ - /merge\/.*/
+ - /hotfix\/.*/
cache:
directories:
- $HOME/.m2
+
# the cache can grow constantly
before_cache:
- - rm -rf $HOME/.m2/repository/org/alfresco/alfresco-rm*
+ - rm -rf $HOME/.m2/repository/org/alfresco/alfresco-governance-services*
before_install:
- "cp .travis.settings.xml $HOME/.m2/settings.xml"
@@ -32,18 +38,28 @@ stages:
jobs:
include:
- - name: "Build Community"
+ - name: "Build AGS Community"
stage: Build AGS
+ before_script: source scripts/setUpMavenPhase.sh
script:
- - echo "Build Community"
- - name: "Build Enterprise"
+ - 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 30 mvn -B deploy -N
+ - travis_retry travis_wait 60 mvn -B -q clean install $MVN_SKIP -f rm-community/pom.xml -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
script:
- - echo "Build Enterprise"
- - name: "Benchmark"
+ - 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 $MVN_SKIP -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
script:
- - echo "Benchmark"
+ - 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
@@ -55,18 +71,38 @@ jobs:
- echo "Enterprise Integrations Tests on MySQL"
- name: "Community Rest API Tests"
stage: Tests
+ before_install:
+ - travis_retry travis_wait 90 mvn -B -q install $MVN_SKIP -PbuildDockerImage -pl :alfresco-governance-services-community-repo -am
+ install:
+ - bash scripts/startAlfresco.sh $COMMUNITY_REPO_PATH
+ - bash scripts/waitForAlfrescoToStart.sh
script:
- echo "Community Rest API Tests"
- name: "Enterprise Rest API Tests"
stage: Tests
+ before_install:
+ - travis_retry travis_wait 90 mvn -B -q install $MVN_SKIP -PbuildDockerImage -pl :alfresco-governance-services-enterprise-repo -am
+ install:
+ - bash scripts/startAlfresco.sh $ENTERPRISE_REPO_PATH
+ - bash scripts/waitForAlfrescoToStart.sh
script:
- echo "Enterprise Rest API Tests"
- name: "Community UI Tests ..."
stage: Tests
+ before_install:
+ - travis_retry travis_wait 90 mvn -B -q install $MVN_SKIP -PbuildDockerImage -pl :alfresco-governance-services-community-repo,:alfresco-governance-services-community-share -am
+ install:
+ - bash scripts/startAlfresco.sh $COMMUNITY_SHARE_PATH
+ - bash scripts/waitForAlfrescoToStart.sh
script:
- echo "Community UI Tests ..."
- name: "Enterprise UI Tests ..."
stage: Tests
+ before_install:
+ - travis_retry travis_wait 90 mvn -B -q install $MVN_SKIP -PbuildDockerImage -pl :alfresco-governance-services-enterprise-repo,:alfresco-governance-services-enterprise-share -am
+ install:
+ - bash scripts/startAlfresco.sh $ENTERPRISE_SHARE_PATH
+ - bash scripts/waitForAlfrescoToStart.sh
script:
- echo "Enterprise UI Tests ..."
diff --git a/pom.xml b/pom.xml
index 08b46561ec..b534bc1222 100644
--- a/pom.xml
+++ b/pom.xml
@@ -468,6 +468,7 @@
start
pre-integration-test
+ stop
start
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java
index b89ece7329..f54e63d4cd 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/CopyMoveLinkFileToBaseAction.java
@@ -289,13 +289,15 @@ public abstract class CopyMoveLinkFileToBaseAction extends RMActionExecuterAbstr
// get the create parameter
Boolean createValue = (Boolean)action.getParameterValue(PARAM_CREATE_RECORD_PATH);
final boolean create = createValue == null ? false : createValue.booleanValue();
+ QName type = getNodeService().getType(actionedUponNodeRef);
+ final boolean isRecord = getDictionaryService().isSubClass(type, ContentModel.TYPE_CONTENT);
// create or resolve the specified path
path = getTransactionService().getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
{
public NodeRef execute() throws Throwable
{
- return createOrResolvePath(action, context, actionedUponNodeRef, Arrays.asList(pathElementsArray), targetisUnfiledRecords, create, false);
+ return createOrResolvePath(action, context, actionedUponNodeRef, isRecord, Arrays.asList(pathElementsArray), targetisUnfiledRecords, create, false);
}
}, false, true);
}
@@ -308,13 +310,14 @@ public abstract class CopyMoveLinkFileToBaseAction extends RMActionExecuterAbstr
* @param action Action to use for reporting if anything goes wrong
* @param parent Parent of path to be created
* @param actionedUponNodeRef The node subject to the file/move/copy action
+ * @param isRecord true if node is a CONTENT SubType
* @param pathElements The elements of the path to be created
* @param targetisUnfiledRecords true if the target is within unfiled records
* @param create true if the path should be creeated if it does not exist
* @param creating true if we have already created the parent and therefore can skip the check to see if the next path element already exists
* @return
*/
- private NodeRef createOrResolvePath(Action action, NodeRef parent, NodeRef actionedUponNodeRef, List pathElements, boolean targetisUnfiledRecords, boolean create, boolean creating)
+ private NodeRef createOrResolvePath(Action action, NodeRef parent, NodeRef actionedUponNodeRef, boolean isRecord, List pathElements, boolean targetisUnfiledRecords, boolean create, boolean creating)
{
NodeRef nodeRef = null;
String childName = pathElements.get(0);
@@ -328,7 +331,7 @@ public abstract class CopyMoveLinkFileToBaseAction extends RMActionExecuterAbstr
if(create)
{
creating = true;
- boolean lastAsFolder = lastPathElement && (getDictionaryService().isSubClass(getNodeService().getType(actionedUponNodeRef), ContentModel.TYPE_CONTENT) || RecordsManagementModel.TYPE_NON_ELECTRONIC_DOCUMENT.equals(getNodeService().getType(actionedUponNodeRef)));
+ boolean lastAsFolder = lastPathElement && isRecord;
nodeRef = createChild(action, parent, childName, targetisUnfiledRecords, lastAsFolder);
}
else
@@ -348,7 +351,7 @@ public abstract class CopyMoveLinkFileToBaseAction extends RMActionExecuterAbstr
}
if(pathElements.size() > 1)
{
- nodeRef = createOrResolvePath(action, nodeRef, actionedUponNodeRef, pathElements.subList(1, pathElements.size()), targetisUnfiledRecords, create, creating);
+ nodeRef = createOrResolvePath(action, nodeRef, actionedUponNodeRef, isRecord, pathElements.subList(1, pathElements.size()), targetisUnfiledRecords, create, creating);
}
return nodeRef;
}
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
diff --git a/scripts/startAlfresco.sh b/scripts/startAlfresco.sh
new file mode 100644
index 0000000000..b161dbde05
--- /dev/null
+++ b/scripts/startAlfresco.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# fail script immediately on any errors in external commands and print the lines
+set -ev
+
+cd $1
+docker login quay.io -u ${QUAY_USERNAME} -p ${QUAY_PASSWORD}
+docker-compose up -d
diff --git a/travis-env-vars.yml b/travis-env-vars.yml
new file mode 100644
index 0000000000..aa0e1f1190
--- /dev/null
+++ b/travis-env-vars.yml
@@ -0,0 +1,10 @@
+env:
+ global:
+ - AUTOMATION_COMMUNITY_PATH=rm-automation/rm-automation-community-rest-api
+ - AUTOMATION_ENTERPRISE_PATH=rm-automation/rm-automation-enterprise-rest-api
+ - AUTOMATION_UI_PATH=rm-automation/rm-automation-ui
+ - COMMUNITY_REPO_PATH=rm-community/rm-community-repo
+ - COMMUNITY_SHARE_PATH=rm-community/rm-community-share
+ - ENTERPRISE_REPO_PATH=rm-enterprise/rm-enterprise-repo
+ - ENTERPRISE_SHARE_PATH=rm-enterprise/rm-enterprise-share
+ - MVN_SKIP='-Dmaven.javadoc.skip=true -Dmaven.source.skip=true -DskipTests'