diff --git a/.travis.yml b/.travis.yml index c942d1c8..86f29f4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,8 +19,7 @@ branches: only: - master - /^SP\/.+$/ - - release - - /^release\/SP\/.+$/ + - /^HF\/.+$/ - company_release - /^ATS-.*$/ @@ -31,7 +30,7 @@ stages: jobs: include: - - name: "Build" + - name: "Build + Tests" stage: build if: branch NOT IN (company_release) before_install: bash _ci/init.sh @@ -46,7 +45,7 @@ jobs: - name: "Release" stage: release - if: branch = release OR branch =~ /^release\/SP\/.+$/ + if: commit_message ~= /\[trigger release\]/ AND branch ~= /^(master|SP\/.+|HF\/.+)$/ before_install: bash _ci/init.sh before_script: travis_wait bash _ci/cache_artifacts.sh script: travis_wait 30 bash _ci/release.sh diff --git a/alfresco-docker-alfresco-pdf-renderer/Dockerfile b/alfresco-docker-alfresco-pdf-renderer/Dockerfile index 2b3b8e6f..222d94b0 100644 --- a/alfresco-docker-alfresco-pdf-renderer/Dockerfile +++ b/alfresco-docker-alfresco-pdf-renderer/Dockerfile @@ -2,7 +2,7 @@ # alfresco-pdf-renderer uses the PDFium library from Google Inc. See the license at https://pdfium.googlesource.com/pdfium/+/master/LICENSE or in /pdfium.txt. -FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-6784d76a7b81 +FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-4c75291884e5 ENV ALFRESCO_PDF_RENDERER_LIB_RPM_URL=https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-pdf-renderer/1.1/alfresco-pdf-renderer-1.1-linux.tgz ENV PDFIUM_LICENSE_FILE=https://github.com/Alfresco/acs-community-packaging/blob/master/distribution/src/main/resources/licenses/3rd-party/pdfium.txt diff --git a/alfresco-docker-imagemagick/Dockerfile b/alfresco-docker-imagemagick/Dockerfile index 13ebcb22..d7a50b38 100644 --- a/alfresco-docker-imagemagick/Dockerfile +++ b/alfresco-docker-imagemagick/Dockerfile @@ -2,7 +2,7 @@ # ImageMagick is from ImageMagick Studio LLC. See the license at http://www.imagemagick.org/script/license.php or in /ImageMagick-license.txt. -FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-6784d76a7b81 +FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-4c75291884e5 ARG IMAGEMAGICK_VERSION=7.0.7-27 diff --git a/alfresco-docker-libreoffice/Dockerfile b/alfresco-docker-libreoffice/Dockerfile index ba09549f..72ef1dc4 100644 --- a/alfresco-docker-libreoffice/Dockerfile +++ b/alfresco-docker-libreoffice/Dockerfile @@ -2,7 +2,7 @@ # LibreOffice is from The Document Foundation. See the license at https://www.libreoffice.org/download/license/ or in /libreoffice.txt. -FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-6784d76a7b81 +FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-4c75291884e5 ARG LIBREOFFICE_VERSION=6.1.6 diff --git a/alfresco-docker-tika/Dockerfile b/alfresco-docker-tika/Dockerfile index ce0c6762..6cc50233 100644 --- a/alfresco-docker-tika/Dockerfile +++ b/alfresco-docker-tika/Dockerfile @@ -2,7 +2,7 @@ # Tika is from Apache. See the license at http://www.apache.org/licenses/LICENSE-2.0. -FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-6784d76a7b81 +FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-4c75291884e5 ENV APACHE_LICENSE_FILE=https://github.com/Alfresco/acs-community-packaging/blob/master/distribution/src/main/resources/licenses/3rd-party/Apache%202.0.txt ENV JAVA_OPTS="" diff --git a/alfresco-docker-tika/pom.xml b/alfresco-docker-tika/pom.xml index 2159a19b..734a95f8 100644 --- a/alfresco-docker-tika/pom.xml +++ b/alfresco-docker-tika/pom.xml @@ -86,12 +86,12 @@ org.bouncycastle bcprov-jdk15on - 1.63 + 1.64 org.bouncycastle bcmail-jdk15on - 1.63 + 1.64 diff --git a/alfresco-docker-transform-misc/Dockerfile b/alfresco-docker-transform-misc/Dockerfile index 972c37a6..4fe2c395 100644 --- a/alfresco-docker-transform-misc/Dockerfile +++ b/alfresco-docker-transform-misc/Dockerfile @@ -1,6 +1,6 @@ # Image provides a container in which to run miscellaneous transformations for Alfresco Content Services. -FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-6784d76a7b81 +FROM alfresco/alfresco-base-java:11.0.1-openjdk-centos-7-4c75291884e5 ENV APACHE_LICENSE_FILE=https://github.com/Alfresco/acs-community-packaging/blob/master/distribution/src/main/resources/licenses/3rd-party/Apache%202.0.txt ENV JAVA_OPTS="" diff --git a/alfresco-docker-transform-misc/pom.xml b/alfresco-docker-transform-misc/pom.xml index f4c44288..964f7b45 100644 --- a/alfresco-docker-transform-misc/pom.xml +++ b/alfresco-docker-transform-misc/pom.xml @@ -70,7 +70,7 @@ org.apache.pdfbox pdfbox-tools - 2.0.17 + 2.0.18 diff --git a/alfresco-transformer-base/pom.xml b/alfresco-transformer-base/pom.xml index c55d8746..2fd9a99b 100644 --- a/alfresco-transformer-base/pom.xml +++ b/alfresco-transformer-base/pom.xml @@ -72,7 +72,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.1.2 + 3.2.0 diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java index 47eb8c6e..f561b8ef 100644 --- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java +++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java @@ -35,7 +35,6 @@ import static org.springframework.http.HttpHeaders.CONTENT_TYPE; import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; import static org.springframework.http.HttpStatus.OK; -import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; @@ -352,7 +351,7 @@ public abstract class AbstractTransformerControllerTest String response = mockMvc .perform(MockMvcRequestBuilders.get("/transform/config")) .andExpect(status().is(OK.value())) - .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_UTF8_VALUE)) + .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE)) .andReturn().getResponse().getContentAsString(); TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class); @@ -371,7 +370,7 @@ public abstract class AbstractTransformerControllerTest String response = mockMvc .perform(MockMvcRequestBuilders.get("/transform/config")) .andExpect(status().is(OK.value())) - .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_UTF8_VALUE)) + .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE)) .andReturn().getResponse().getContentAsString(); TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class); @@ -398,7 +397,7 @@ public abstract class AbstractTransformerControllerTest String response = mockMvc .perform(MockMvcRequestBuilders.get("/transform/config")) .andExpect(status().is(OK.value())) - .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_UTF8_VALUE)) + .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE)) .andReturn().getResponse().getContentAsString(); TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class); @@ -421,7 +420,7 @@ public abstract class AbstractTransformerControllerTest String response = mockMvc .perform(MockMvcRequestBuilders.get("/transform/config")) .andExpect(status().is(OK.value())) - .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_UTF8_VALUE)) + .andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE)) .andReturn().getResponse().getContentAsString(); TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class); diff --git a/docs/build-and-release.md b/docs/build-and-release.md index 0c1d88bb..b9466530 100644 --- a/docs/build-and-release.md +++ b/docs/build-and-release.md @@ -4,36 +4,29 @@ The `.travis.yml` config file can be found in the root of the repository. ## Stages and Jobs -1. **Build**: Java Build with Unit and Integration Tests, WhiteSource -2. **Release**: Publish to Quay & DockerHub, Publish the S3 staging -3. **Company Release**: Publish to S3 release +1. **Build**: Java build with unit tests, integration tests and WhiteSource scan. +2. **Release**: Release with artifact deployment to Nexus and AWS Staging bucket. +3. **Company Release**: Artifact deployment to AWS Release bucket. ## Branches Travis CI builds differ by branch: -* `master`: - - regular builds which include only the _Build_ stage; - - the _Build_ stage updates the `latest` T-Engines images (only - from the `master` branch) on both Quay and DockerHub: - - alfresco/alfresco-pdf-renderer - - alfresco/alfresco-imagemagick - - alfresco/alfresco-tika - - alfresco/alfresco-libreoffice - -* `ATS-*` (any branch starting with "ATS-"), `SP/1.3.N` and `SP/2.0.N`: - - regular builds which include only the _Build_ stage; - - although built and used on the CI agent, no docker images are updated on remote repositories; -* `release`: - - builds that include the _Build_ and _Release_ stages; - - PR builds with release as the target branch only execute dry runs of the actual release, - without actually publishing anything; -* `release/SP/1.3.N` and `release/SP/2.0.N`: - - builds that include the _Build_ and _Release_ stages; - - PR builds with one of the release branches as the target branch only execute dry runs of the actual release, -without actually publishing anything; - - the branches should be deleted once the builds are completed -* `company_release`: - - builds that include only the `company_release` stage; +* `master` / `SP/*` / `HF/*` branches: + - regular builds which include the _Build_ stage; + > On the `master` branch only the _Build_ stage updates the `latest` T-Engines images on + > both Quay and DockerHub: + > - alfresco/alfresco-pdf-renderer + > - alfresco/alfresco-imagemagick + > - alfresco/alfresco-tika + > - alfresco/alfresco-libreoffice + - if the commit message contains the `[trigger release]` tag, the builds will also + include the _Release_ stage; + - PR builds where the latest commit contains the `[trigger release]` tag will execute dry runs + of the release jobs (no artifacts will be published until the PR is actually merged). +* `ATS-*` branches: + - regular builds which include only the _Build_ and _Tests_ stages; +* `company_release` branch: + - builds that include the _Company Release_ stage only. - the `company_release` branch should be used for one-off events; once used (a build completes), the branch should be deleted. @@ -42,65 +35,43 @@ All other branches are ignored. ## Release process steps & info Prerequisites: - - the `master` branch has a green build and it contains all the changes that should be included in - the next release + - the `master` / `SP/*` / `HF/*` branch is green and it contains all the changes that should be + included in the next release. Steps: -1. Create a new branch from the `master` branch with the name `ATS-###_release_version`; -2. (Optional) Update the project version if the current POM version is not the next desired - release; use a maven command, i.e. `mvn versions:set -DnewVersion=2.0.19-SNAPSHOT versions:commit`; -3. Update the project's dependencies (remove the `-SNAPSHOT` suffixes) through a new commit on the - `ATS-###_release_version` branch; -4. Open a new Pull Request from the `ATS-###_release_version` branch into the `release` branch and - wait for a green build; the **Release** stage on the PR build will only execute a _Dry_Run_ of - the release; -5. Once it is approved, merge the PR through the **Create a merge commit** option (as opposed to - _Squash and merge_ or _Rebase and merge_), delete the `ATS-###_release_version` branch, and wait - for a green build on the `release` branch; -6. Merge back the `release` branch into the `master` branch; -7. Update the project dependencies (append the `-SNAPSHOT` suffixes) +1. Create a new branch with the name `ATS-###_release_version` from the `master` / `SP/*`/ `HF/*` +branch. +2. Update the project version if the current POM version is not the next desired release; use a +maven command, i.e. + ```bash + mvn versions:set -DnewVersion=#.##.#-SNAPSHOT versions:commit + ``` +3. Update the project's dependencies (remove the `-SNAPSHOT` suffixes - only for dependencies, not + for the local project version). +4. Create a new commit with the `[trigger release]` tag in its message. If no local changes have +been generated by steps (2) and (3), then an empty commit should be created - e.g. + ```bash + git commit --allow-empty -m "ATS-###: Release AIS #.##.# [trigger release]" + ``` + + > The location of the `[trigger release]` tag in the commit message is irrelevant. -Steps (6) and (7) can be done either directly from an IDE or through the GitHub flow, by creating -another branch and PR. Just make sure you don't add extra commits directly to the release branch, -as this will trigger another release. - -After the release, the reference deployments (docker-compose, helm) should be updated with the -latest docker image tags. - -### Release of a Service Pack (SP/1.3.N or SP/2.0.N) -Prerequisites: - - the `SP/` ( could be 1.3.N or 2.0.N) branch has a green build and it contains all the changes that should be included in - the next release - -**NOTE**: Make sure you release the proper version and the `SP/` is merged into the correct `release/SP/` (both having the same version). -E.g. When releasing a 1.3.N Service Pack, a new branch (`ATS-###_release_version`) should be created from `SP/1.3.N` and the PR should target the `release/SP/1.3.N` branch. - -Steps (similar to those describing the release from `master`): -1. Create a new branch from the `SP/` (SP/1.3.N or SP/2.0.N) branch with the name `ATS-###_release_version`; -2. (Optional) Update the project version if the current POM version is not the next desired - release; use a maven command, i.e. `mvn versions:set -DnewVersion=1.3.1-SNAPSHOT versions:commit`; -3. Update the project's dependencies (remove the `-SNAPSHOT` suffixes) through a new commit on the - `ATS-###_release_version` branch; -4. Open a new Pull Request from the `ATS-###_release_version` branch into the `release/SP/` branch and - wait for a green build; the **Release** stage on the PR build will only execute a _Dry_Run_ of - the release; -5. Once it is approved, merge the PR through the **Create a merge commit** option (as opposed to - _Squash and merge_ or _Rebase and merge_), delete the `ATS-###_release_version` branch, and wait - for a green build on the `release` branch; -6. Merge back the `release/SP/` branch into the `SP/` branch; -7. Update the project dependencies (append the `-SNAPSHOT` suffixes) + > If for any reason your PR contains multiple commits, the commit with the `[trigger release]` + tag should be the last (newest) one. This will trigger the Release dry runs. +5. Open a new Pull Request from the `ATS-###_release_version` branch into the original +`master` / `SP/*` / `HF/*` branch and wait for a green build; the **Release** stage on the PR build + will only execute a _Dry_Run_ of the release. +6. Once it is approved, merge the PR, preferably through the **Rebase and merge** option. If the +**Create a merge commit** (_Merge pull request_) or **Squash and merge** options are used, you +need to ensure that the _commit message_ contains the `[trigger release]` tag (sub-string). ## Company Release process steps & info Prerequisites: - - Engineering Release of the desired version has been done. - -Steps: -1. Create a new `company_release` branch from `release`. This job uses the git tag to identify the - version to be uploaded to S3 release bucket. -2. If the last commit on `company_release` branch contains `[skip_ci]` in its message it will - prevent Travis from starting a build. Push an empty commit in order to trigger the build, - `git commit --allow-empty -m "Company Release "`. Wait for a green build on the branch. -3. Delete local and remote `company_release` branch. + - The **Release** stage is complete - i.e. the release commit is tagged and the release + artifacts are deployed on Nexus. -### Release of a Service Pack (SP/1.3.N or SP/2.0.N) -Follow the steps described in the previous section, but instead of creating the `company_release` from `release`, it needs to be created from the proper `release/SP/` (depending on what version needs the Company Release). +Steps: +1. Create a new `company_release` branch from the `master` / `SP/*`/ `HF/*` branch. This job uses +the latest branch git tag to identify the version that must be uploaded to the S3 release bucket. +2. Wait for a green build on the branch. +3. Delete local and remote `company_release` branch. diff --git a/pom.xml b/pom.xml index a0e9a8f6..81d15f51 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.8.RELEASE + 2.2.3.RELEASE @@ -15,19 +15,19 @@ pom - 1.8 - 1.8 - 1.8 + 11 + 11 + 11 latest - 2.0.17 + 2.0.18 3.0.1.1 ${project.version} 1.0.2.7 5.15.9 - 2.10.0 - 3.3.3 - 4.0.1 + 2.10.2 + 3.3.5 + 4.1.1 @@ -43,7 +43,7 @@ scm:git:https://github.com/Alfresco/alfresco-transform-core.git scm:git:https://github.com/Alfresco/alfresco-transform-core.git https://github.com/Alfresco/alfresco-transform-core - 2.1.0 + HEAD @@ -140,7 +140,7 @@ com.google.guava guava - 28.1-jre + 28.2-jre @@ -163,7 +163,7 @@ commons-codec commons-codec - 1.13 + 1.14 @@ -292,19 +292,19 @@ io.fabric8 fabric8-maven-plugin - 4.2.0 + 4.3.1 io.fabric8 docker-maven-plugin - 0.31.0 + 0.32.0 true before-integration-tests pre-integration-test - + stop start