diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..bf9e054b8adedb7b280f965ce68606aa52d77db6 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,77 @@ +image: openjdk:11-jdk +stages: + - build + - test + - deploy + +variables: + MAVEN_CLI_OPTS: "-s ci_settings.xml --batch-mode" + MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dmaven.artifact.threads=10" + MAIN_BRANCH: "main" + RELEASE_BRANCH: "release" + +cache: + paths: + - .m2/repository/ + +build: + stage: build + script: + - ./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS package + tags: + - vips-java + +test: + stage: test + script: + - ./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS test + tags: + - vips-java + +deploy-snapshot: + stage: deploy + script: + - ./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS deploy -DskipTests + tags: + - vips-java + rules: + - if: '$CI_COMMIT_REF_NAME == $MAIN_BRANCH' + +deploy-release: + stage: deploy + script: + # For debugging git interaction + #- export GIT_TRACING=2 + #- export GIT_CURL_VERBOSE=1 + - git config --global user.name "${GITLAB_USER_NAME}" + - git config --global user.email "${GITLAB_USER_EMAIL}" + + # Use access token given by CI/CD variable ACCESS_TOKEN to authenticate + - export NEW_REPO_URL=https://root:$ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git + - git remote set-url --push origin $NEW_REPO_URL + - git fetch origin --prune --prune-tags + + # Checkout release branch, set release version and deploy. Commit, tag and push. + - git checkout $RELEASE_BRANCH + - git status + - git reset --hard origin/$RELEASE_BRANCH + - ./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS validate -DremoveSnapshot + - ./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS deploy -DskipTests + - export RELEASE_VERSION=$(mvn --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*") + - export RELEASE_TAG="v${RELEASE_VERSION}" + - git add pom.xml + - git commit -m "[ci skip] Set release version ${RELEASE_VERSION}" + - git tag -a $RELEASE_TAG -m "Tag release ${RELEASE_TAG}" + - git push origin $RELEASE_TAG + - git push origin $RELEASE_BRANCH + + # Checkout main branch, merge release branch. Push commit. + - git fetch + - git checkout $MAIN_BRANCH + - git reset --hard origin/$MAIN_BRANCH + - git merge -m "[ci skip] Merge ${RELEASE_BRANCH}" --no-ff $RELEASE_BRANCH + - git push origin $MAIN_BRANCH + tags: + - vips-java + rules: + - if: '$CI_COMMIT_REF_NAME == $RELEASE_BRANCH' diff --git a/ci_settings.xml b/ci_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..da49fc0ffec4b5da556e6482d8f903129998bd81 --- /dev/null +++ b/ci_settings.xml @@ -0,0 +1,16 @@ +<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> + <servers> + <server> + <id>gitlab-maven</id> + <configuration> + <httpHeaders> + <property> + <name>Job-Token</name> + <value>${CI_JOB_TOKEN}</value> + </property> + </httpHeaders> + </configuration> + </server> + </servers> +</settings> \ No newline at end of file