#!/bin/bash
set -e # Exit at first error


set_version() {
    sed -i "s/generator.app.version=.*/generator.app.version=${VERSION}/" sdl.properties

    mvn versions:set --batch-mode --errors -DgenerateBackupPoms=false -DnewVersion=$VERSION
    mvn versions:set --batch-mode --errors -DgenerateBackupPoms=false -DnewVersion=$VERSION --file $OUTPUT
}


determine_properties() {
    OUTPUT=$(grep "^generator.java.output\+[[:space:]]*\+=" sdl.properties | cut -d "=" -f 2 | tr -d '[[:space:]]')
    : ${OUTPUT:=java}

    echo "[CI] - OUTPUT=$OUTPUT"
}


echo "[CI] Realizando release: hotfix. Versão - $VERSION"
echo "[CI] Completando o repositorio para executar o processo"

IS_SHALLOW=$(git rev-parse --is-shallow-repository)
if $IS_SHALLOW; then
    git fetch --unshallow
fi
git fetch --all

# A variável $VERSION deve vir da configuração de pipeline
VERSION_HYPHEN=$(echo "v$VERSION" | sed "s/\.\([[:digit:]]\)/-\1/g")
DATE=$(date +%d\/%m\/%Y)

echo "[CI] Atualizando placeholders {version} ($VERSION) e {date} ($DATE) no CHANGELOG.md"
[[ $(grep --count "{version}" CHANGELOG.md) -ne 1 ]] && echo "Placeholder {version} not defined in CHANGELOG.md" && exit 1
[[ $(grep --count "{date}" CHANGELOG.md) -ne 1 ]] && echo "Placeholder {date} not defined in CHANGELOG.md" && exit 1
[[ $(grep --fixed-strings --count "# $VERSION" CHANGELOG.md) -ne 0 ]] && echo "Version $VERSION already defined in CHANGELOG.md" && exit 1

sed -i 's/{version}/'"$VERSION"'/' CHANGELOG.md
sed -i 's!{date}!'"$DATE"'!' CHANGELOG.md

determine_properties

mvn $PARALLEL clean generate-sources --batch-mode --errors --update-snapshots
set_version
git commit -a -m "Criando versão $VERSION" -m "[auto release]"

git fetch --all

echo "[CI] Criando a tag $VERSION_HYPHEN"
git tag --force --annotate $VERSION_HYPHEN -m "Liberação versão $VERSION"

# Removendo merge da tag pra branch develop
# echo "[CI] Realizando o merge da tag $VERSION_HYPHEN para a develop"
# git checkout develop
# git reset --hard origin/develop
# MERGE_MESSAGE=$(echo $(git rev-parse $VERSION_HYPHEN)$'\t\t'"tag '$VERSION_HYPHEN'" | git fmt-merge-msg)
# git merge $VERSION_HYPHEN --no-ff -m "$MERGE_MESSAGE" -m "[auto release]"
# git branch -D $CI_COMMIT_REF_SLUG

CI_REPOSITORY_URL_FOR_PUSH=$(echo "$CI_REPOSITORY_URL" | sed -e "s|.*@\(.*\)|git@\1|" -e "s|/|:|" )
git remote set-url --push origin "$CI_REPOSITORY_URL_FOR_PUSH"

echo "[CI] Todas as tags "

git tag

echo "[CI] Pushing tag to server "

git push --all --follow-tags

git push origin --tags

echo "[CI] Criação da release versão $VERSION realizado com sucesso. Execute o job 'package' para publicar esta versão no Docker Hub."
