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'