diff --git a/.travis.yml b/.travis.yml index 6b8f43fad1..6d5b121b6a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,9 @@ stages: if: commit_message !~ /\[skip tests\]/ - name: Security Scans - name: Release + if: fork = false AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND commit_message =~ /\[(community|enterprise) release .*\]/ - name: Publish + if: fork = false AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND commit_message =~ /\[publish\]/ jobs: include: @@ -68,6 +70,7 @@ jobs: stage: Tests script: - echo "Enterprise Integrations Tests on MySQL" + - name: "Community Rest API Tests" stage: Tests install: @@ -78,6 +81,7 @@ jobs: - bash scripts/waitForAlfrescoToStart.sh script: mvn -B test -pl :alfresco-rm-automation-community-rest-api -Dskip.automationtests=false after_failure: docker ps -a | grep '_alfresco_1' | awk '{print $1}' | xargs docker logs | tail -5000 + - name: "Enterprise Rest API Tests" stage: Tests install: @@ -89,24 +93,83 @@ jobs: script: - mvn -B test -pl :alfresco-rm-automation-enterprise-rest-api -Dskip.automationtests=false after_failure: docker ps -a | grep '_alfresco_1' | awk '{print $1}' | xargs docker logs | tail -5000 - - name: "Community UI Tests ..." + - &community_shared_UI_configuration + name: "Community Smoke UI Tests for Records" stage: Tests + addons: + firefox: "43.0.1" + artifacts: + paths: + - ./rm-automation/rm-automation-ui/target/surefire-reports + - ./rm-automation/rm-automation-ui/target/reports + - ./rm-automation/rm-automation-ui/target/screenshots + target_paths: $TRAVIS_BUILD_NUMBER before_install: - travis_retry travis_wait 90 mvn -B -q install $MVN_SKIP -PbuildDockerImage -pl :alfresco-rm-community-repo,:alfresco-rm-community-share -am install: - bash scripts/startAlfresco.sh $COMMUNITY_SHARE_PATH - bash scripts/waitForAlfrescoToStart.sh script: - - echo "Community UI Tests ..." - - name: "Enterprise UI Tests ..." + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=communitySmokeRecords.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *community_shared_UI_configuration + name: "Community Smoke UI Tests for actions in RM site" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=communitySmokeRMSite.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *community_shared_UI_configuration + name: "Community Level 2 UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=communityLevel2Tests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - &enterprise_shared_UI_configuration + name: "Enterprise Level 2 UI Tests" stage: Tests + addons: + firefox: "43.0.1" + artifacts: + paths: + - ./rm-automation/rm-automation-ui/target/surefire-reports + - ./rm-automation/rm-automation-ui/target/reports + - ./rm-automation/rm-automation-ui/target/screenshots + target_paths: $TRAVIS_BUILD_NUMBER before_install: - travis_retry travis_wait 90 mvn -B -q install $MVN_SKIP -PbuildDockerImage -pl :alfresco-rm-enterprise-repo,:alfresco-rm-enterprise-share -am install: - bash scripts/startAlfresco.sh $ENTERPRISE_SHARE_PATH - bash scripts/waitForAlfrescoToStart.sh script: - - echo "Enterprise UI Tests ..." + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseLevel2Tests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *enterprise_shared_UI_configuration + name: "Enterprise Classification Level 2 UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseLevel2ClassificationTests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *enterprise_shared_UI_configuration + name: "Enterprise Content Classification UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseContentClassificationTests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *enterprise_shared_UI_configuration + name: "Enterprise Folders Classification UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseFoldersClassificationTests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *enterprise_shared_UI_configuration + name: "Enterprise Guides UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseGuidesTests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *enterprise_shared_UI_configuration + name: "Enterprise Security Marks UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseSecurityMarksTests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} + + - <<: *enterprise_shared_UI_configuration + name: "Enterprise Console and Configuration UI Tests" + script: + - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-rm-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=enterpriseConsoleAndConfigurationTests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} - name: "Source Clear Scan (SCA)" stage: Security Scans @@ -117,16 +180,92 @@ jobs: script: - echo "Static Analysis (SAST)" - - name: "Community Release" + - name: "Community Release and Publish to S3 Staging Bucket" stage: Release + if: commit_message =~ /\[community release .*\]/ + before_script: + - source scripts/set-release-variables.sh script: - - echo "Community Release" - - name: "Enterprise Release" - stage: Release - script: - - echo "Enterprise Release" + - bash scripts/release.sh "community" + before_deploy: + - bash scripts/zip-artifacts-staging.sh "community" + deploy: + - provider: s3 + access_key_id: ${STAGING_AWS_ACCESS_KEY} + secret_access_key: ${STAGING_AWS_SECRET_KEY} + region: "eu-west-1" + bucket: "alfresco-artefacts-staging" + upload_dir: "community/RM/${RELEASE_VERSION}" + skip_cleanup: true + acl: private + local_dir: artifacts_dir + on: + all_branches: true + after_deploy: + - echo "Finished release and deployed to https://s3.console.aws.amazon.com/s3/buckets/alfresco-artefacts-staging/community/RM/${RELEASE_VERSION}" - - name: "Copy to S3 Release Bucket" - stage: Publish + - name: "Enterprise Release and Publish to S3 Staging Bucket" + stage: Release + if: commit_message =~ /\[enterprise release .*\]/ + before_script: + - source scripts/set-release-variables.sh script: - - echo "Copy to S3 Release Bucket" + - bash scripts/release.sh "enterprise" + before_deploy: + - bash scripts/zip-artifacts-staging.sh "enterprise" + deploy: + - provider: s3 + access_key_id: ${STAGING_AWS_ACCESS_KEY} + secret_access_key: ${STAGING_AWS_SECRET_KEY} + region: "eu-west-1" + bucket: "alfresco-artefacts-staging" + upload_dir: "enterprise/RM/${RELEASE_VERSION}" + skip_cleanup: true + acl: private + local_dir: artifacts_dir + on: + all_branches: true + after_deploy: + - echo "Finished release and deployed to https://s3.console.aws.amazon.com/s3/buckets/alfresco-artefacts-staging/enterprise/RM/${RELEASE_VERSION}" + + - name: "Community Publish to S3 Release Bucket" + stage: Publish + if: commit_message =~ /\[community release .*\]/ AND commit_message =~ /\[publish\]/ + before_script: source scripts/set-release-variables.sh + script: skip + before_deploy: bash scripts/zip-artifacts-release.sh "community" + deploy: + - provider: s3 + access_key_id: ${RELEASE_AWS_ACCESS_KEY} + secret_access_key: $RELEASE_AWS_ACCESS_SECRET} + region: "eu-west-1" + bucket: "eu.dl.alfresco.com" + upload_dir: "release/community/RM/${RELEASE_VERSION}" + skip_cleanup: true + acl: private + local_dir: artifacts_dir + on: + all_branches: true + after_deploy: + - echo "Finished release and deployed to https://s3.console.aws.amazon.com/s3/buckets/eu.dl.alfresco.com/release/community/RM/${RELEASE_VERSION}" + + - name: "Enterprise Publish to S3 Release Bucket" + stage: Publish + if: commit_message =~ /\[enterprise release .*\]/ AND commit_message =~ /\[publish\]/ + before_script: source scripts/set-release-variables.sh + script: skip + before_deploy: bash scripts/zip-artifacts-release.sh "enterprise" + deploy: + - provider: s3 + access_key_id: ${RELEASE_AWS_ACCESS_KEY} + secret_access_key: ${RELEASE_AWS_ACCESS_SECRET} + region: "eu-west-1" + bucket: "eu.dl.alfresco.com" + upload_dir: "release/enterprise/RM/${RELEASE_VERSION}" + skip_cleanup: true + acl: private + local_dir: artifacts_dir + on: + all_branches: true + after_deploy: + - echo "Finished release and deployed to https://s3.console.aws.amazon.com/s3/buckets/eu.dl.alfresco.com/release/enterprise/RM/${RELEASE_VERSION}" diff --git a/pom.xml b/pom.xml index c202937774..289cf37f53 100644 --- a/pom.xml +++ b/pom.xml @@ -15,9 +15,9 @@ - scm:git:ssh://git@github.com/Alfresco/governance-services.git - scm:git:ssh://git@github.com/Alfresco/governance-services.git - scm:git:ssh://git@github.com/Alfresco/governance-services.git + scm:git:https://github.com/Alfresco/governance-services.git + scm:git:https://github.com/Alfresco/governance-services.git + https://github.com/Alfresco/governance-services HEAD diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 0000000000..e49e7bc202 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -e + +# Use full history for release +git checkout -B "${TRAVIS_BRANCH}" + +git config user.email "build@alfresco.com" + +release_type=$1 +echo Release type: "$release_type" + +if [ -z $release_type ]; then + echo "Please provide a release type." + exit 1 +elif [ $release_type != "community" -a $release_type != "enterprise" ]; then + echo "The provided release type is not valid." + exit 1 +fi + +if [ -z ${RELEASE_VERSION} ] || [ -z ${DEVELOPMENT_VERSION} ]; then + echo "Please provide a Release and Development verison" + exit 1 +fi + +mvn --batch-mode \ + -Dusername="${GIT_USERNAME}" \ + -Dpassword="${GIT_PASSWORD}" \ + -DreleaseVersion=${RELEASE_VERSION} \ + -DdevelopmentVersion=${DEVELOPMENT_VERSION} \ + -DscmCommentPrefix="[maven-release-plugin][skip ci] " \ + -DskipTests -D${release_type} -DuseReleaseProfile=false \ + -P${release_type}-release release:clean release:prepare release:perform \ No newline at end of file diff --git a/scripts/set-release-variables.sh b/scripts/set-release-variables.sh new file mode 100755 index 0000000000..35013b7053 --- /dev/null +++ b/scripts/set-release-variables.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +echo "Travis commit message: $TRAVIS_COMMIT_MESSAGE" +release_message=$(echo $TRAVIS_COMMIT_MESSAGE | grep -Po '(\[(community|enterprise)\srelease\s(\d\.)+(\d|[a-z])(-[A-Z]\d){0,1}\s(\d\.)+\d-SNAPSHOT\])') + +if [ ! -n "$release_message" ]; then + echo "The commit message is in the wrong format or it does not contain all the required properties." + exit 1 +fi + +export RELEASE_VERSION=$(echo $release_message | grep -Po '(\d\.)+(\d|[a-z])(-[A-Z]\d){0,1}' | head -1) +export DEVELOPMENT_VERSION=$(echo $release_message | grep -Po '(\d\.)+\d-SNAPSHOT') + +echo "Release version is set to $RELEASE_VERSION" +echo "Development version is set to $DEVELOPMENT_VERSION" \ No newline at end of file diff --git a/scripts/zip-artifacts-release.sh b/scripts/zip-artifacts-release.sh new file mode 100644 index 0000000000..c8690dac21 --- /dev/null +++ b/scripts/zip-artifacts-release.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -e + +release_type=$1 + +mkdir "artifacts_dir" + +mvn -B org.apache.maven.plugins:maven-dependency-plugin:3.1.1:copy \ + -Dartifact=org.alfresco:alfresco-rm-${release_type}-repo:${RELEASE_VERSION}:amp \ + -DoutputDirectory=artifacts_dir + +mvn -B org.apache.maven.plugins:maven-dependency-plugin:3.1.1:copy \ + -Dartifact=org.alfresco:alfresco-rm-${release_type}-share:${RELEASE_VERSION}:amp \ + -DoutputDirectory=artifacts_dir + +mvn -B org.apache.maven.plugins:maven-dependency-plugin:3.1.1:copy \ + -Dartifact=org.alfresco:alfresco-rm-${release_type}-rest-api-explorer:${RELEASE_VERSION}:war \ + -DoutputDirectory=artifacts_dir + +cd artifacts_dir +zip alfresco-rm-${release_type}-${RELEASE_VERSION}.zip * + +# rm *.amp *.war -f +ls \ No newline at end of file diff --git a/scripts/zip-artifacts-staging.sh b/scripts/zip-artifacts-staging.sh new file mode 100755 index 0000000000..bada0395ae --- /dev/null +++ b/scripts/zip-artifacts-staging.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -e + +release_type=$1 + +mkdir "artifacts_dir" +cp rm-${release_type}/rm-${release_type}-repo/target/alfresco-rm-${release_type}-repo-*.amp artifacts_dir +cp rm-${release_type}/rm-${release_type}-share/target/alfresco-rm-${release_type}-share-*.amp artifacts_dir +cp rm-${release_type}/rm-${release_type}-rest-api-explorer/target/alfresco-rm-${release_type}-rest-api-explorer-*.war artifacts_dir + +cd artifacts_dir +zip alfresco-rm-${release_type}-${RELEASE_VERSION}.zip * + +# rm *.amp *.war -f +ls \ No newline at end of file diff --git a/travis-env-vars.yml b/travis-env-vars.yml index aa0e1f1190..016c5bc889 100644 --- a/travis-env-vars.yml +++ b/travis-env-vars.yml @@ -8,3 +8,7 @@ env: - 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' + - ALFRESCO_URL="http://localhost:8080/alfresco" + - SHARE_URL="http://localhost:8181/share" + - DISPLAY=:99.0 + - WEBDRIVER_ARGUMENTS='-Dwebdriver.local.grid=true -Dwebdriver.browser=RemoteFireFox -Dwebdriver.localGrid=false -Dorg.alfresco.rm.timeout_seconds.MEDIUM=30'