diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a9a04066b758509e503e0af24fe62a27ad45d9b5..dc356ea249954d4a5281f05bbffbef7156b97b0e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -37,7 +37,7 @@ before_script: - apt-get update -y && apt-get install -y python3 && apt-get install -y rsync openssh-client - "python3 build_pom_with_models.py" -build: +build-for-staging: stage: build script: - "./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS package -DskipTests" @@ -48,6 +48,55 @@ build: - target/*.war rules: - if: $CI_COMMIT_REF_NAME == $MAIN_BRANCH + +build-for-production: + stage: build + script: + # Use access token given by CI/CD variable ACCESS_TOKEN to authenticate + # This is necessary in order to push changes to git + - &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 + - &checkout_release + - git stash -a + - git checkout $RELEASE_BRANCH + - git reset --hard origin/$RELEASE_BRANCH + - git stash pop + + # Set release version. Commit and push if tag for release version does not already exist. + - "./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS validate -DremoveSnapshot" + - "python3 build_pom_with_models.py" + - export RELEASE_VERSION=$(./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*") + - echo "New version in release '$RELEASE_VERSION'" + # If tag for new release version already exist, exit with error + - export RELEASE_TAG="v${RELEASE_VERSION}" + - echo "Release tag '$RELEASE_TAG'" + - export EXISTING_TAGS=$(git ls-remote --tags origin | cut -f 2 | grep "refs/tags/$RELEASE_TAG$") + - echo "Existing tags '$EXISTING_TAGS'" + - if [ -n "$EXISTING_TAGS" ]; then + echo "Tag $RELEASE_TAG already exists"; exit 1; + fi + # If release tag does not already exist, commit and push pom with new version + - git add pom.xml + - | + if git diff --cached --quiet -- pom.xml; then + echo "No changes to commit for pom.xml, skipping commit and push" + else + git commit -m "[ci skip] Set release version ${RELEASE_VERSION}" + git push origin $RELEASE_BRANCH + fi + # Build new war file + - echo "Build war file with version '$RELEASE_VERSION'" + - "./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS package -DskipTests" + tags: + - vips-java + artifacts: + paths: + - target/*.war + rules: - if: $CI_COMMIT_REF_NAME == $RELEASE_BRANCH test: @@ -116,7 +165,7 @@ upload-snapshot: deploy-to-production: stage: deploy script: - # Authentication setup + # Authentication setup, for running commands on server - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_dsa - chmod 600 ~/.ssh/id_dsa @@ -133,7 +182,7 @@ deploy-to-production: # Find name of currently deployed application. Undeploy. - CURRENTLY_DEPLOYED=$(ssh $SERVER_USER@$SERVER_IP "$CLI_PATH/jboss-cli.sh --user=$WILDFLY_ADMIN_USERNAME --password=$WILDFLY_ADMIN_PASSWORD --connect --commands=ls\ deployment | tr ' ' '\n' | grep VIPSCore-.*war") - echo $CURRENTLY_DEPLOYED - - ssh $SERVER_USER@$SERVER_IP "$CLI_PATH/jboss-cli.sh --user=$WILDFLY_ADMIN_USERNAME --password=$WILDFLY_ADMIN_PASSWORD --connect --command='undeploy $CURRENTLY_DEPLOYED'" + - if [ -n "$CURRENTLY_DEPLOYED" ]; then ssh $SERVER_USER@$SERVER_IP "$CLI_PATH/jboss-cli.sh --user=$WILDFLY_ADMIN_USERNAME --password=$WILDFLY_ADMIN_PASSWORD --connect --command='undeploy $CURRENTLY_DEPLOYED'"; fi # Deploy war file using JBoss CLI and credentials given in CI/CD variables - echo "Deploy $WAR_FILE using JBoss CLI" - ssh $SERVER_USER@$SERVER_IP "$CLI_PATH/jboss-cli.sh --user=$WILDFLY_ADMIN_USERNAME --password=$WILDFLY_ADMIN_PASSWORD --connect --file=$TMP_PATH/deploy.cli" > deployment.log 2>&1 @@ -157,56 +206,42 @@ upload-and-tag-release: stage: upload script: # Use access token given by CI/CD variable ACCESS_TOKEN to authenticate - - &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 + # This is necessary in order to push changes to git + - 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 - - &checkout_release - - git stash -a - - git checkout $RELEASE_BRANCH - - git reset --hard origin/$RELEASE_BRANCH - - git stash pop + - git stash -a + - git checkout $RELEASE_BRANCH + - git reset --hard origin/$RELEASE_BRANCH + - git stash pop # Set release version and deploy. Commit, tag and push. - - &release_and_tag # Change version in pom.xml - build new pom_with_models.xml - - "./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS validate -DremoveSnapshot" - - "python build_pom_with_models.py" - - export RELEASE_VERSION=$(./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*") - - echo "New version in release '$RELEASE_VERSION'" - - export RELEASE_TAG="v${RELEASE_VERSION}" - - echo "Release tag '$RELEASE_TAG'" - - export EXISTING_TAGS=$(git ls-remote --tags origin | cut -f 2 | grep "refs/tags/$RELEASE_TAG$") - - echo "Existing tags '$EXISTING_TAGS'" - - if [ -n "$EXISTING_TAGS" ]; then - echo "Tag $RELEASE_TAG already exists"; exit 1; - fi - - "./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS deploy -DskipTests" - - 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 + - export RELEASE_VERSION=$(./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*") + - export RELEASE_TAG="v${RELEASE_VERSION}" + - echo "Version to deploy '$RELEASE_VERSION', will be tagged '$RELEASE_TAG'" + - "./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS deploy -DskipTests" + # NB! Wanted to use deploy:deploy-file with already built war file above, but this requires url to be specifically set + - git tag -a $RELEASE_TAG -m "Tag release ${RELEASE_TAG}" + - git push origin $RELEASE_TAG # Checkout main branch - - &checkout_main - - git stash -a - - git checkout $MAIN_BRANCH - - git reset --hard origin/$MAIN_BRANCH - - git stash pop + - git stash -a + - git checkout $MAIN_BRANCH + - git reset --hard origin/$MAIN_BRANCH + - git stash pop # Merge release branch, bump patch version, push commits. - - &merge_and_bump - - git merge -m "[ci skip] Merge branch '${RELEASE_BRANCH}' into ${MAIN_BRANCH}" --no-ff $RELEASE_BRANCH - # Change version in pom.xml - build new pom_with_models.xml - - "./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS validate -DbumpPatch" - - "python build_pom_with_models.py" - - export SNAPSHOT_VERSION=$(./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*") - - echo "New version in main '$SNAPSHOT_VERSION'" - - git add pom.xml - - git commit -m "[ci skip] Set snapshot version ${SNAPSHOT_VERSION}" - - git push origin $MAIN_BRANCH + - git merge -m "[ci skip] Merge branch '${RELEASE_BRANCH}' into ${MAIN_BRANCH}" --no-ff $RELEASE_BRANCH + # Change version in pom.xml - build new pom_with_models.xml + - "./mvnw $MAVEN_CLI_OPTS $MAVEN_OPTS validate -DbumpPatch" + - "python3 build_pom_with_models.py" + - export SNAPSHOT_VERSION=$(./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*") + - echo "New version in main '$SNAPSHOT_VERSION'" + - git add pom.xml + - git commit -m "[ci skip] Set snapshot version ${SNAPSHOT_VERSION}" + - git push origin $MAIN_BRANCH tags: - vips-java rules: diff --git a/pom.xml b/pom.xml index 56322f4cc69fed7628d22887f437ac43433198ad..4d9e0cc6557f8f816d673834daf241764d2384ef 100755 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ <groupId>no.nibio</groupId> <artifactId>VIPSCore</artifactId> <packaging>war</packaging> - <version>2.0.5-SNAPSHOT</version> + <version>9.9.4</version> <name>VIPSCore</name> <url>http://maven.apache.org</url>