# Build
The `alfresco-transform-core` project uses _Travis CI_. \
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.
2. **Release**: Release with artifact deployment to Nexus, DockerHub and Quay.io.


## Branches
Travis CI builds differ by branch:
* `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
    > - alfresco/alfresco-transform-misc
    > - alfresco/alfresco-transform-core-aio
  - if the commit message contains the `[release]` tag, the builds will also 
  include the _Release_ stage;
  - PR builds where the latest commit contains the `[release]` tag will execute dry runs 
  of the release jobs (no artifacts will be published until the PR is actually merged).
* `ATS-*` / `ACS-*` branches:
  - regular builds which include only the _Build_ and _Tests_ stages;

All other branches are ignored.


## Release process steps & info
Prerequisites:
 - 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 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 `[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 T-Core (T-Engines) #.##.# [release]"
     ```
 
     > The location of the `[release]` tag in the commit message is irrelevant.

     > If for any reason your PR contains multiple commits, the commit with the `[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 `[release]` tag (sub-string).