diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d1122bacaff527531930cb45b39caabf80fed89c..9c30766bf84ffe73759e7cda8efab85c72ae3ac4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,11 +4,10 @@ variables: POSTGRES_PASSWORD: "" stages: - - logs - - new_branch - - new_tag + - sync - test - - synchronization + - deploy + - after_deploy before_script: - apt-get update -yqq > /dev/null @@ -36,12 +35,8 @@ job_php-8.1: - curl --location -s --output /usr/local/bin/phpunit https://phar.phpunit.de/phpunit-9.phar - chmod +x /usr/local/bin/phpunit - phpunit --coverage-text --colors=never - # only: - # - develop - # except: - # - schedules rules: - - if: '$CI_COMMIT_BRANCH =~ /(feat|fix)\/[0-9]{4,5}\/develop/' + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' artifacts: paths: @@ -60,12 +55,8 @@ job_php-8.0: - curl --location -s --output /usr/local/bin/phpunit https://phar.phpunit.de/phpunit-9.phar - chmod +x /usr/local/bin/phpunit - phpunit --coverage-text --colors=never - # only: - # - develop - # except: - # - schedules rules: - - if: '$CI_COMMIT_BRANCH =~ /(feat|fix)\/[0-9]{4,5}\/develop/' + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' artifacts: paths: - test/unitTests/build/ @@ -83,172 +74,82 @@ job_php-7.4: - curl --location -s --output /usr/local/bin/phpunit https://phar.phpunit.de/phpunit-9.phar - chmod +x /usr/local/bin/phpunit - phpunit --coverage-text --colors=never -c phpunit.xml - # only: - # - develop - # except: - # - schedules rules: - - if: '$CI_COMMIT_BRANCH =~ /(feat|fix)\/[0-9]{4,5}\/develop/' + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' artifacts: paths: - test/unitTests/build/ expire_in: 2h # coverage: '^\s*Lines:\s*\d+.\d+\%' -commits: +create_merge_request: image: debian:10-slim - stage: synchronization - only: - - develop - - "21.03" - except: - - tags - - schedules + stage: sync + rules: + - if: '$CI_COMMIT_BRANCH =~ /(feat|fix)\/[0-9]*/ && $CI_OPEN_MERGE_REQUESTS == null && $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"' before_script: - # Skip the synchronisation if it is not enabled - - if [ $SYNC_ENABLED = "true" ]; then echo "Sync enabled"; else echo "Sync disabled, stopping the job" && exit 0; fi - # Configure ssh, with the private key to push to the private repository - - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - ssh-keyscan "$GITLAB_URL" >> ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config' - # Install git command - - apt install -y git + - apt-get update -yqq > /dev/null + - apt install -y curl + - apt install -y jq script: - - chmod +x ./ci/commit_synchronization.sh - - ./ci/commit_synchronization.sh + - chmod +x ./ci/create_mr.sh + - ./ci/create_mr.sh -tags: +end_merge_request: image: debian:10-slim - stage: synchronization - only: - - tags - except: - - schedules + stage: sync + rules: + - if: '$CI_COMMIT_MESSAGE =~ /^Merge branch/ && $CI_PIPELINE_SOURCE != "schedule" && ($CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "2301_releases")' before_script: - # Skip the synchronisation if it is not enabled - - if [ $SYNC_ENABLED = "true" ]; then echo "Sync enabled"; else echo "Sync disabled, stopping the job" && exit 0; fi - # Configure ssh, with the private key to push to the private repository - - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - ssh-keyscan "$GITLAB_URL" >> ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config' - # Install git and curl command - - apt install -y git + - apt-get update -yqq > /dev/null - apt install -y curl - # Install npm - - curl -sL https://deb.nodesource.com/setup_14.x | bash - - - apt install -y nodejs + - apt install -y jq script: - - git config --global user.email "$CI_EMAIL" && git config --global user.name "$CI_USER" - # We will work in another directory, to avoid git conflicts - - mkdir tmp - - cd tmp - # Find the branch name from tag name - - VERSION1=$(echo $CI_COMMIT_TAG| cut -d'.' -f 1) - - VERSION2=$(echo $CI_COMMIT_TAG| cut -d'.' -f 2) - - VERSION="${VERSION1}.${VERSION2}" - # Pull the private repository - - git init && git remote add origin $PRIVATE_REPOSITORY_URL_SSH - - git pull origin $VERSION - # Update and push build prod - - npm install - - npm run build-prod - - git status - - git add -f dist/ - - git status - - git commit -m "Build prod for tag ${CI_COMMIT_TAG}" - - git show-ref - - git push origin HEAD:$VERSION - - git status - # Do the tag on the private repo - - git tag $CI_COMMIT_TAG - - git status - - git push origin --tags - + - chmod +x ./ci/end_mr.sh + - ./ci/end_mr.sh -logs: +check_branch_releases: image: debian:10-slim - stage: logs - except: - - schedules - - tags - - master + stage: after_deploy + rules: + - if: '$CI_PIPELINE_SOURCE == "schedule" && $TAG_MODE == "minor"' before_script: - # Skip the logging if in pro (=> sync disabled) - - if [ $SYNC_ENABLED = "true" ]; then echo "Sync enabled"; else echo "Sync disabled, stopping the job" && exit 0; fi - - apt-get update -y + - apt-get update -yqq > /dev/null - apt install -y curl + - apt install -y jq + - apt install -y git script: - - | - if [[ $CI_COMMIT_MESSAGE == "FEAT"* ]]; then \ - ISSUE_ID=`echo $CI_COMMIT_MESSAGE | grep -o 'FEAT \#[0-9]*' | grep -o '[0-9]*'`; \ - echo "found FEAT !"; \ - else \ - if [[ $CI_COMMIT_MESSAGE == "FIX"* ]]; then \ - ISSUE_ID=`echo $CI_COMMIT_MESSAGE | grep -o 'FIX \#[0-9]*' | grep -o '[0-9]*'`; \ - echo "found FIX !"; \ - else \ - echo "no FEAT or FIX found :("; \ - exit 0; \ - fi; \ - fi - - echo $ISSUE_ID - - NOTE_MESSAGE="Commit ajouté sur la branche **$CI_COMMIT_REF_NAME** de **$CI_PROJECT_NAME**" - - COMMIT_URL="$CI_PROJECT_URL/commit/$CI_COMMIT_SHA" - - echo $NOTE_MESSAGE - - echo "$CI_COMMIT_MESSAGE" - - CI_COMMIT_MESSAGE=$(echo $CI_COMMIT_MESSAGE) # Remove the line returns - - echo "$CI_COMMIT_MESSAGE" - - echo $COMMIT_URL - - NOTE="$NOTE_MESSAGE \n $CI_COMMIT_MESSAGE \n $COMMIT_URL" - - echo "$NOTE" - - BODY="{\"issue\":{\"notes\":\"$NOTE\",\"private_notes\":false}}" - - echo "$BODY" - - curl -v -H 'Content-Type:application/json' -H "X-Redmine-API-Key:$REDMINE_API_KEY" -d "$BODY" -X PUT https://forge.maarch.org/issues/$ISSUE_ID.json + - chmod +x ./ci/check_releases.sh + - ./ci/check_releases.sh -new_branch: - image: debian:10-slim - stage: new_branch - only: - - branches +create_minor_tag: + image: php:8.1.14-cli + stage: deploy + rules: + - if: '$CI_PIPELINE_SOURCE == "schedule" && $TAG_MODE == "minor"' before_script: - # Install git and curl command - apt-get update -yqq > /dev/null + - apt install -y git - apt install -y curl - apt install -y jq + - chmod +x ./ci/generate_app_dependencies.sh + - ./ci/generate_app_dependencies.sh script: - - chmod +x ./ci/create_mr.sh - - ./ci/create_mr.sh + - chmod +x ./ci/new_minor_tag.sh + - ./ci/new_minor_tag.sh -new_tag: - image: debian:10-slim - stage: new_tag - only: - - tags +create_major_tag: + image: php:8.1.14-cli + stage: deploy + rules: + - if: '$CI_PIPELINE_SOURCE == "schedule" && $TAG_MODE == "major"' before_script: - # Install git and curl command - apt-get update -yqq > /dev/null - - 'which ssh-agent || ( apt-get install openssh-client -y )' - - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY_2" | tr -d '\r' | ssh-add - - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - ssh-keyscan "$GITLAB_URL" >> ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config' - apt install -y git - apt install -y curl - apt install -y jq + - chmod +x ./ci/generate_app_dependencies.sh + - ./ci/generate_app_dependencies.sh script: - - chmod +x ./ci/new_tag.sh - - ./ci/new_tag.sh - + - chmod +x ./ci/new_major_tag.sh + - ./ci/new_major_tag.sh diff --git a/ci/check_releases.sh b/ci/check_releases.sh new file mode 100644 index 0000000000000000000000000000000000000000..de25ed15f4b5c29f232865a490c57f6c1bfd2b4c --- /dev/null +++ b/ci/check_releases.sh @@ -0,0 +1,102 @@ +#!/bin/bash +TAG_BASE="2301" +EXIST=0 +for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches?search=2301_releases" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + EXIST=$((EXIST + 1)) +done + +if [ $EXIST == 1 ] +then + echo "2301_releases already exist, skipping ..." +else + echo "2301_releases branch does not exist, creating ..." + + # Create 2301_releases branche + echo "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches?branch=2301_releases&ref=main" + + curl --request POST --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches?branch=2301_releases&ref=main" + + # Create 2301_releases mr + BODY="{\"id\":\"$CI_PROJECT_ID\",\"source_branch\":\"2301_releases\",\"target_branch\":\"main\",\"title\":\"Next tag release\",\"description\":\"\",\"remove_source_branch\":\"true\",\"squash\":\"false\"}" + + curl -v -H "PRIVATE-TOKEN: $TOKEN_GITLAB" -H "Content-Type: application/json" -X POST -d "$BODY" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests" + + FIRST_TAG=0 + + for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?search=^$TAG_BASE" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + NAME=$(_jq '.name') + + IS_TMA=$(echo $NAME | grep -o '[.]*_TMA[.]*') + + if [[ -n $IS_TMA ]]; then + echo "TMA tag branch : $NAME ! Skipping..." + else + TAGS+=("$NAME") + fi + done + if [ ${#TAGS[@]} -eq 0 ]; then + FIRST_TAG=1 + LATEST_TAG="$TAG_BASE.0.0" + BRANCH_TAG_VERSION=$TAG_BASE + MAJOR_TAG_VERSION='0' + MINOR_TAG_VERSION='0' + NEXT_TAG="$TAG_BASE.0.0" + NEXT_NEXT_TAG="$TAG_BASE.0.1" + else + SORTED_TAGS=($(echo ${TAGS[*]} | tr " " "\n" | sort -Vr)) + LATEST_TAG=$(echo ${SORTED_TAGS[0]}) + + structures=$(echo $LATEST_TAG | tr "." "\n") + + IT=1 + for item in $structures; do + if [ $IT = 1 ]; then + BRANCH_TAG_VERSION=$item + fi + + if [ $IT = 2 ]; then + MAJOR_TAG_VERSION="$item" + fi + + if [ $IT = 3 ]; then + MINOR_TAG_VERSION=$item + fi + + IT=$((IT + 1)) + done + fi + if [ $FIRST_TAG == 0 ]; then + VERSION=$((MINOR_TAG_VERSION + 1)) + VERSION_NEXT=$((MINOR_TAG_VERSION + 2)) + NEXT_TAG="$BRANCH_TAG_VERSION.$MAJOR_TAG_VERSION.$VERSION" + NEXT_NEXT_TAG="$BRANCH_TAG_VERSION.$MAJOR_TAG_VERSION.$VERSION" + fi + # Update files version + git config --global user.email "$GITLAB_USER_EMAIL" && git config --global user.name "$GITLAB_USER_NAME" && git config core.fileMode false + + git remote set-url origin "https://gitlab-ci-token:${TOKEN_GITLAB}@${GITLAB_URL}/${CI_PROJECT_PATH}.git" + + git fetch + git branch -D $TAG_BASE"_releases" + git pull origin $TAG_BASE"_releases" + git checkout $TAG_BASE"_releases" + cp package.json tmp_package.json + + jq -r ".version |= \"$NEXT_NEXT_TAG\"" tmp_package.json >package.json + + rm tmp_package.json + + git add -f package.json + + git commit -m "Update next tag version files : $NEXT_NEXT_TAG" + + git push +fi + diff --git a/ci/commit_synchronization.sh b/ci/commit_synchronization.sh deleted file mode 100644 index 394dd31d72d63af6fd5afc7db74c6634b48209b4..0000000000000000000000000000000000000000 --- a/ci/commit_synchronization.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -# Synchronize commits to the private repository by merging commits in the public repository to the private one - -echo "Synchronizing changes in branch $CI_COMMIT_REF_NAME" - -git status - -git remote set-url origin $PRIVATE_REPOSITORY_URL_SSH -git config --global user.email "$CI_EMAIL" && git config --global user.name "$CI_USER" - -exists=$(git show-ref refs/heads/$CI_COMMIT_REF_NAME) -if [ -n "$exists" ]; then - git branch -D $CI_COMMIT_REF_NAME - echo "Created branch $CI_COMMIT_REF_NAME" -fi - -if [ -d ".git/rebase-apply" ]; then - rm -fr .git/rebase-apply - echo "Removed rebase lock file .git/rebase-apply" -fi - -echo "Attempt 1 with rebase" - -if ! git pull --rebase origin $CI_COMMIT_REF_NAME; then - echo "Rebase FAILED !" - echo "Attempt 2 by keeping changes from normal repository" - echo "/!\ This will override the changes in the private repository !" - - # /!\ theirs will keep the changes in the Pro repository ! ours will keep the changes in the normal one - if ! git pull -s recursive -X ours --no-edit origin $CI_COMMIT_REF_NAME; then - echo "Pull FAILED !" - echo "Attempt 3 by overriding the changes to the private repository" - echo "/!\ This will create a merge commit" - echo "/!\ Only overriding dist/, if another directory/file needs to be overridden, it should be added in this script" - - git fetch origin - git merge --no-commit --no-ff origin/$CI_COMMIT_REF_NAME - git reset -- dist/ - git status - git commit -m "Reset dist folder + merge commits" - fi -fi - -# Use this pull command if there are merge conflicts during rebase -# git pull -s recursive -X ours --no-edit origin $CI_COMMIT_REF_NAME -git checkout -b $CI_COMMIT_REF_NAME -echo "Pushing changes to private repository..." - -if ! git push --set-upstream origin $CI_COMMIT_REF_NAME; then - echo "FAILED to push changes" - exit 1 -fi - -echo "Changes pushed" diff --git a/ci/create_mr.sh b/ci/create_mr.sh index f47deeb849da53b9f268ee2dd3e518b5ccbd8707..59c61997f0eed488cc7bf6f08e49fc883d2120f5 100644 --- a/ci/create_mr.sh +++ b/ci/create_mr.sh @@ -27,14 +27,24 @@ do done -if [[ -z $TRACKER ]] || [[ -z $US ]] || [[ -z $BRANCH ]] +if [[ -z $TRACKER ]] || [[ -z $US ]] then - echo "Bad structure to find US ! => [TRACKER]/[US_ID]/[TARGET_BRANCH]" + echo "Bad structure to find US ! => [TRACKER]/[US_ID]" else echo $TRACKER echo $US - echo $BRANCH + + if [[ $TRACKER == "feat" ]]; then + TARGET_BRANCH="main"; + else + if [[ $TRACKER == "fix" ]]; then + TARGET_BRANCH="2301_releases"; + else + echo "no feat or fix found :("; + exit 0; + fi; + fi echo "GET https://forge.maarch.org/issues/$US.json" @@ -42,11 +52,17 @@ else SUBJECT=`cat issue_$US.json | jq -r '.issue.subject'` - BODY="{\"id\":\"$CI_PROJECT_ID\",\"source_branch\":\"$CI_COMMIT_REF_NAME\",\"target_branch\":\"$BRANCH\",\"title\":\"Draft: [$US] $SUBJECT\",\"description\":\"$SUBJECT\n=> https://forge.maarch.org/issues/$US\",\"remove_source_branch\":\"true\"}" + BODY="{\"id\":\"$CI_PROJECT_ID\",\"source_branch\":\"$CI_COMMIT_REF_NAME\",\"target_branch\":\"$TARGET_BRANCH\",\"title\":\"Draft: [$US] $SUBJECT\",\"description\":\"$SUBJECT\n=> https://forge.maarch.org/issues/$US\",\"remove_source_branch\":\"true\",\"squash\":\"false\"}" echo $BODY echo "POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests" - curl -v -H "PRIVATE-TOKEN: $TOKEN_GITLAB" -H "Content-Type: application/json" -X POST -d "$BODY" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests" -fi + curl -H "PRIVATE-TOKEN: $TOKEN_GITLAB" -H "Content-Type: application/json" -X POST -d "$BODY" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests" + + # Create comment on forge + COMMIT_URL="$CI_PROJECT_URL/commit/$CI_COMMIT_SHA" + NOTE="[**CREATION**] MR sur **$TARGET_BRANCH** (**$CI_COMMIT_REF_NAME**) par $CI_COMMIT_AUTHOR\n\n$COMMIT_URL" + BODY="{\"issue\":{\"notes\":\"$NOTE\",\"private_notes\":false}}" + curl -H 'Content-Type:application/json' -H "X-Redmine-API-Key:$REDMINE_API_KEY" -d "$BODY" -X PUT https://forge.maarch.org/issues/$US.json +fi \ No newline at end of file diff --git a/ci/end_mr.sh b/ci/end_mr.sh new file mode 100644 index 0000000000000000000000000000000000000000..cf7299844f400a1719daa48d61411cdcb53e0712 --- /dev/null +++ b/ci/end_mr.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +BRANCH=`echo $CI_COMMIT_MESSAGE | grep -oP "'(.*?)'" | head -1 | tr -d "'"` + +ISSUE_ID=`echo $BRANCH | grep -oP "[0-9]*" | head -1` + +IT=0 + +if [[ ! -z $ISSUE_ID ]] +then + + for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests?state=merged&in=source_branch&search=$ISSUE_ID" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + if [ $IT = 0 ]; then + URL=$(_jq '.web_url') + AUTHOR=$(_jq '.merge_user.name') + SOURCE_BRANCH=$(_jq '.source_branch') + TARGET_BRANCH=$(_jq '.target_branch') + + NOTE="[**CLOTURE**] MR sur **$TARGET_BRANCH** (**$SOURCE_BRANCH**) par $AUTHOR\n\n$URL" + fi + + IT=$((IT+1)) + done + + BODY="{\"issue\":{\"notes\":\"$NOTE\",\"private_notes\":false}}" + + echo $BODY + + curl -H 'Content-Type:application/json' -H "X-Redmine-API-Key:$REDMINE_API_KEY" -d "$BODY" -X PUT https://forge.maarch.org/issues/$ISSUE_ID.json +else + echo "NO US FOUND !" +fi diff --git a/ci/generate_app_dependencies.sh b/ci/generate_app_dependencies.sh new file mode 100644 index 0000000000000000000000000000000000000000..8d4da56342fd11534639f17dc94908a845c6b439 --- /dev/null +++ b/ci/generate_app_dependencies.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# We need to install dependencies only for Docker +[[ ! -e /.dockerenv ]] && exit 0 + +set -xe + +apt-get install -y libpq-dev libxml2-dev libxslt1-dev libpng-dev unoconv xpdf-utils imagemagick ghostscript wkhtmltopdf libzip-dev zip \ +&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \ +&& docker-php-ext-configure pdo_pgsql --with-pdo-pgsql \ +&& docker-php-ext-install pdo_pgsql pgsql \ +&& docker-php-ext-install xsl soap zip \ +&& docker-php-ext-install gd + +php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +php composer-setup.php +php -r "unlink('composer-setup.php');" +mv composer.phar /usr/local/bin/composer + +curl -sL https://deb.nodesource.com/setup_18.x | bash - > /dev/null +apt-get install -y nodejs +npm install -g n +n 18 +node -v +npm -v \ No newline at end of file diff --git a/ci/new_major_tag.sh b/ci/new_major_tag.sh new file mode 100644 index 0000000000000000000000000000000000000000..e9155037d502c2e5e5ade4b4969d4ca50662e3f5 --- /dev/null +++ b/ci/new_major_tag.sh @@ -0,0 +1,266 @@ +#!/bin/bash + +FIRST_TAG=0 + +TAGS=() + +RESPONSE=$(curl --write-out '%{url_effective} [%{response_code}]' --silent --output /dev/null --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?search=^$TAG_BASE") +RESPONSE_CODE=$(echo $RESPONSE | grep -o '\[[0-9]*\]$') + +if [ $RESPONSE_CODE != '[200]' ]; then + echo "Error ! $RESPONSE" + exit 1 +fi + +for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?search=^$TAG_BASE" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + NAME=$(_jq '.name') + + IS_TMA=$(echo $NAME | grep -o '[.]*_TMA[.]*') + + if [[ -n $IS_TMA ]]; then + echo "TMA tag branch : $NAME ! Skipping..." + else + TAGS+=("$NAME") + fi +done + +if [ ${#TAGS[@]} -eq 0 ]; then + echo "No Tags available, create de first tag !" + FIRST_TAG=1 + LATEST_TAG="$TAG_BASE.0.0" + BRANCH_TAG_VERSION=$TAG_BASE + MAJOR_TAG_VERSION='0' + MINOR_TAG_VERSION='0' + NEXT_TAG="$TAG_BASE.0.0" + NEXT_NEXT_TAG_MILESTONE="$BRANCH_TAG_VERSION.1.x" + +else + SORTED_TAGS=($(echo ${TAGS[*]} | tr " " "\n" | sort -Vr)) + LATEST_TAG=$(echo ${SORTED_TAGS[0]}) + + echo "Latest tag : $LATEST_TAG" + + structures=$(echo $LATEST_TAG | tr "." "\n") + + IT=1 + for item in $structures; do + if [ $IT = 1 ]; then + BRANCH_TAG_VERSION=$item + fi + + if [ $IT = 2 ]; then + MAJOR_TAG_VERSION="$item" + fi + + if [ $IT = 3 ]; then + MINOR_TAG_VERSION=$item + fi + + IT=$((IT + 1)) + done +fi + +echo "BRANCH : $BRANCH_TAG_VERSION" +echo "MAJOR TAG : $MAJOR_TAG_VERSION" +echo "MINOR TAG : $MINOR_TAG_VERSION" + +if [[ -z $BRANCH_TAG_VERSION ]] || [[ -z $MAJOR_TAG_VERSION ]] || [[ -z $MINOR_TAG_VERSION ]]; then + echo "Bad tag structure ! $LATEST_TAG" + exit 1 +fi + +if [ $FIRST_TAG == 0 ]; then + VERSION=$((MAJOR_TAG_VERSION + 1)) + VERSION_NEXT=$((MAJOR_TAG_VERSION + 2)) + NEXT_TAG="$BRANCH_TAG_VERSION.$VERSION.0" + NEXT_TAG_MILESTONE="$BRANCH_TAG_VERSION.$VERSION.x" + NEXT_NEXT_TAG="$BRANCH_TAG_VERSION.$VERSION_NEXT.0" + NEXT_NEXT_TAG_MILESTONE="$BRANCH_TAG_VERSION.$VERSION_NEXT.x" + NEXT_MINOR_TAG="$BRANCH_TAG_VERSION.$VERSION.1" + + echo "NEXT TAG : $NEXT_TAG" +fi + +if [ $FIRST_TAG == 1 ]; then + BODY="{\"id\":\"$CI_PROJECT_ID\",\"title\":\"$BRANCH_TAG_VERSION.0.1\"}" + + # CREATE FIRST MINOR MILESTONE + curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones + + chmod +x ./ci/check_releases.sh + ./ci/check_releases.sh +fi + +curl --request POST --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches?branch=tmp_$RELEASE_BRANCH&ref=$RELEASE_BRANCH" + +git config --global user.email "$GITLAB_USER_EMAIL" && git config --global user.name "$GITLAB_USER_NAME" && git config core.fileMode false +git remote set-url origin "https://gitlab-ci-token:${TOKEN_GITLAB}@${GITLAB_URL}/${CI_PROJECT_PATH}.git" +git fetch +git branch -D tmp_$RELEASE_BRANCH +git pull origin tmp_$RELEASE_BRANCH +git checkout tmp_$RELEASE_BRANCH + +composer install +npm run reload-packages +npm run build-prod +npm run reload-packages-prod + +git add -f dist/ +git add -f node_modules/ +git add -f vendor/ + +git commit -m "Add packages dependencies" + +git push + +## CREATE TAG +curl -w " => %{url_effective} [%{response_code}]" -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -X POST "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?tag_name=$NEXT_TAG&ref=tmp_$RELEASE_BRANCH" + +curl --request DELETE --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches/tmp_$RELEASE_BRANCH" + +## CREATE TAG MP PRO SIDE +curl --request POST --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/215/pipeline_schedules/18/play" + +if [ $FIRST_TAG == 0 ]; then + ## CLOSE MILESTONE + for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones?search=$NEXT_TAG_MILESTONE" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + ID=$(_jq '.id') + + echo $ID + + BODY="{\"id\":\"$ID\",\"state_event\":\"close\"}" + + curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X PUT https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones/$ID + + done +fi + +BODY="{\"id\":\"$CI_PROJECT_ID\",\"title\":\"$NEXT_NEXT_TAG_MILESTONE\"}" + +# CREATE NEXT TAG MILESTONE +curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones + +if [ $FIRST_TAG == 0 ]; then + # GENERATE RAW CHANGELOG + COMMIT_LOG_FILE="tmp.txt" + ISSUES_IDS_FILE="tmp2.txt" + SORTED_UNIQUE_ISSUES_IDS="tmp3.txt" + FINAL_LOG="tmp4.txt" + CONTENT="" + + echo "Set user git : $GITLAB_USER_NAME <$GITLAB_USER_EMAIL>" + + git config --global user.email "$GITLAB_USER_EMAIL" && git config --global user.name "$GITLAB_USER_NAME" && git config core.fileMode false + + git remote set-url origin "https://gitlab-ci-token:${TOKEN_GITLAB}@${GITLAB_URL}/${CI_PROJECT_PATH}.git" + + git fetch + git branch -D $RELEASE_BRANCH + git pull origin $RELEASE_BRANCH + git checkout $RELEASE_BRANCH + + TAGS_COMP="$BRANCH_TAG_VERSION.$MAJOR_TAG_VERSION.0..$NEXT_TAG" + + REF_UPDATED=$(git log $TAGS_COMP --pretty=format:'%s' --grep='Update referential' --all-match) + + git log $TAGS_COMP --pretty=format:'%s' --grep='feat' --grep='Merge' --all-match >$COMMIT_LOG_FILE + echo '' >>$COMMIT_LOG_FILE + + while IFS= read -r line; do + ISSUE_ID=$(echo $line | grep -o 'feat/[0-9]*' | grep -o '[0-9]*') + echo "$ISSUE_ID" >>$ISSUES_IDS_FILE + done <"$COMMIT_LOG_FILE" + + git log $TAGS_COMP --pretty=format:'%s' --grep='fix' --grep='Merge' --all-match >$COMMIT_LOG_FILE + echo '' >>$COMMIT_LOG_FILE + + while IFS= read -r line; do + ISSUE_ID=$(echo $line | grep -o 'fix/[0-9]*' | grep -o '[0-9]*') + echo "$ISSUE_ID" >>$ISSUES_IDS_FILE + done <"$COMMIT_LOG_FILE" + + sort -u $ISSUES_IDS_FILE >$SORTED_UNIQUE_ISSUES_IDS + + while IFS= read -r line; do + echo "==================" + echo $line + curl -H "X-Redmine-API-Key: ${REDMINE_API_KEY}" -H 'Content-Type: application/json' -X GET https://forge.maarch.org/issues/$line.json >issue_$line.json + # echo `cat issue_$line.json` + SUBJECT=$(cat issue_$line.json | jq -r '.issue.subject') + TRACKER=$(cat issue_$line.json | jq -r '.issue.tracker.name') + ID=$(cat issue_$line.json | jq -r '.issue.id') + echo "" + echo "ID : $ID" + echo "TRACKER : $TRACKER" + echo "SUBJECT : $SUBJECT" + echo "==================" + + if [ ! -z $ID ]; then + echo "* **$TRACKER [#$ID](https://forge.maarch.org/issues/$ID)** - $SUBJECT" >>$FINAL_LOG + fi + done <"$SORTED_UNIQUE_ISSUES_IDS" + + if [[ ! -z $REF_UPDATED ]]; then + echo "* **Fonctionnalité** - Mise à jour de la BAN 75" >>$FINAL_LOG + fi + + sort -u $FINAL_LOG >>changelog.txt + + while IFS= read -r line; do + CONTENT="$CONTENT\n$line" + done <"changelog.txt" + + echo $CONTENT + + # Update tag release + BODY="{\"description\":\"$CONTENT\",\"tag_name\":\"$NEXT_TAG\", \"milestones\": [\"$NEXT_TAG_MILESTONE\"]}" + + curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/releases + + mkdir -p ci/build/ + mv $COMMIT_LOG_FILE ci/build/ + mv $ISSUES_IDS_FILE ci/build/ + mv $SORTED_UNIQUE_ISSUES_IDS ci/build/ + mv $FINAL_LOG ci/build/ + + # Update files version from branche releases + git branch -D $TAG_BASE"_releases" + git pull origin $TAG_BASE"_releases" + git checkout $TAG_BASE"_releases" + cp package.json tmp_package.json + + jq -r ".version |= \"$NEXT_MINOR_TAG\"" tmp_package.json >package.json + + rm tmp_package.json + + git add -f package.json + + git commit -m "Update next tag version files (major tag released) : $NEXT_MINOR_TAG" + + git push + + BODY="{\"id\":\"$CI_PROJECT_ID\",\"title\":\"$NEXT_NEXT_TAG_MILESTONE\"}" + + # EDIT NEXT MINOR TAG MILESTONE + for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones?search=$BRANCH_TAG_VERSION.$MAJOR_TAG_VERSION&state=active" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + ID=$(_jq '.id') + + echo $ID + + BODY="{\"id\":\"$ID\",\"title\":\"$NEXT_MINOR_TAG\"}" + + curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X PUT https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones/$ID + done +fi diff --git a/ci/new_minor_tag.sh b/ci/new_minor_tag.sh new file mode 100644 index 0000000000000000000000000000000000000000..0a44a82802303d09883cc32ad8b6bcfe269e2fa1 --- /dev/null +++ b/ci/new_minor_tag.sh @@ -0,0 +1,230 @@ +#!/bin/bash + +FIRST_TAG=0 + +TAGS=() + +RESPONSE=$(curl --write-out '%{url_effective} [%{response_code}]' --silent --output /dev/null --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?search=^$TAG_BASE") +RESPONSE_CODE=$(echo $RESPONSE | grep -o '\[[0-9]*\]$') + +if [ $RESPONSE_CODE != '[200]' ]; then + echo "Error ! $RESPONSE" + exit 1 +fi + + +MR_ID=`echo $CI_OPEN_MERGE_REQUESTS | grep -oP "!(.)*" | tr -d "!"` +content=$(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests/$MR_ID") +STATUS=$(jq -r '.detailed_merge_status' <<<"$content") + +echo $STATUS + +if [ $STATUS != 'mergeable' ]; then + echo "2301_releases cannot be merge ! Tag Abort" + exit 1 +fi + +for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?search=^$TAG_BASE" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + NAME=$(_jq '.name') + + IS_TMA=$(echo $NAME | grep -o '[.]*_TMA[.]*') + + if [[ -n $IS_TMA ]]; then + echo "TMA tag branch : $NAME ! Skipping..." + else + TAGS+=("$NAME") + fi +done + +if [ ${#TAGS[@]} -eq 0 ]; then + echo "No Tags available, create de first tag !" + FIRST_TAG=1 + LATEST_TAG="$TAG_BASE.0.0" + BRANCH_TAG_VERSION=$TAG_BASE + MAJOR_TAG_VERSION='0' + MINOR_TAG_VERSION='0' + NEXT_TAG="$TAG_BASE.0.0" +else + SORTED_TAGS=($(echo ${TAGS[*]} | tr " " "\n" | sort -Vr)) + LATEST_TAG=$(echo ${SORTED_TAGS[0]}) + + echo "Latest tag : $LATEST_TAG" + + structures=$(echo $LATEST_TAG | tr "." "\n") + + IT=1 + for item in $structures; do + if [ $IT = 1 ]; then + BRANCH_TAG_VERSION=$item + fi + + if [ $IT = 2 ]; then + MAJOR_TAG_VERSION="$item" + fi + + if [ $IT = 3 ]; then + MINOR_TAG_VERSION=$item + fi + + IT=$((IT + 1)) + done +fi + +echo "BRANCH : $BRANCH_TAG_VERSION" +echo "MAJOR TAG : $MAJOR_TAG_VERSION" +echo "MINOR TAG : $MINOR_TAG_VERSION" + +if [[ -z $BRANCH_TAG_VERSION ]] || [[ -z $MAJOR_TAG_VERSION ]] || [[ -z $MINOR_TAG_VERSION ]]; then + echo "Bad tag structure ! $LATEST_TAG" + exit 1 +fi + +if [ $FIRST_TAG == 0 ]; then + VERSION=$((MINOR_TAG_VERSION + 1)) + VERSION_NEXT=$((MINOR_TAG_VERSION + 2)) + NEXT_TAG="$BRANCH_TAG_VERSION.$MAJOR_TAG_VERSION.$VERSION" + NEXT_NEXT_TAG="$BRANCH_TAG_VERSION.$MAJOR_TAG_VERSION.$VERSION_NEXT" + + echo "NEXT TAG : $NEXT_TAG" +fi + +curl --request POST --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches?branch=tmp_$RELEASE_BRANCH&ref=$RELEASE_BRANCH" + +git config --global user.email "$GITLAB_USER_EMAIL" && git config --global user.name "$GITLAB_USER_NAME" && git config core.fileMode false +git remote set-url origin "https://gitlab-ci-token:${TOKEN_GITLAB}@${GITLAB_URL}/${CI_PROJECT_PATH}.git" +git fetch +git branch -D tmp_$RELEASE_BRANCH +git pull origin tmp_$RELEASE_BRANCH +git checkout tmp_$RELEASE_BRANCH + +composer install +npm run reload-packages +npm run build-prod +npm run reload-packages-prod + +git add -f dist/ +git add -f node_modules/ +git add -f vendor/ + +git commit -m "Add packages dependencies" + +git push + +## CREATE TAG +curl -w " => %{url_effective} [%{response_code}]" -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -X POST "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags?tag_name=$NEXT_TAG&ref=tmp_$RELEASE_BRANCH" + +curl --request DELETE --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/branches/tmp_$RELEASE_BRANCH" + +## CREATE TAG MP PRO SIDE +curl --request POST --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/215/pipeline_schedules/18/play" + +if [ $FIRST_TAG == 0 ]; then + ## CLOSE MILESTONE + for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones?search=$NEXT_TAG" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + ID=$(_jq '.id') + + echo $ID + + BODY="{\"id\":\"$ID\",\"state_event\":\"close\"}" + + curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X PUT https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones/$ID + + done +fi + +BODY="{\"id\":\"$CI_PROJECT_ID\",\"title\":\"$NEXT_NEXT_TAG\"}" + +# CREATE NEXT TAG MILESTONE +curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones + +if [ $FIRST_TAG == 0 ]; then + # GENERATE RAW CHANGELOG + COMMIT_LOG_FILE="tmp.txt" + ISSUES_IDS_FILE="tmp2.txt" + SORTED_UNIQUE_ISSUES_IDS="tmp3.txt" + FINAL_LOG="tmp4.txt" + CONTENT="" + + git branch -D $RELEASE_BRANCH + git pull origin $RELEASE_BRANCH + git checkout $RELEASE_BRANCH + + TAGS_COMP="$LATEST_TAG..$NEXT_TAG" + + REF_UPDATED=$(git log $TAGS_COMP --pretty=format:'%s' --grep='Update referential' --all-match) + + git log $TAGS_COMP --pretty=format:'%s' --grep='feat' --grep='Merge' --all-match >$COMMIT_LOG_FILE + echo '' >>$COMMIT_LOG_FILE + + while IFS= read -r line; do + ISSUE_ID=$(echo $line | grep -o 'feat/[0-9]*' | grep -o '[0-9]*') + echo "$ISSUE_ID" >>$ISSUES_IDS_FILE + done <"$COMMIT_LOG_FILE" + + git log $TAGS_COMP --pretty=format:'%s' --grep='fix' --grep='Merge' --all-match >$COMMIT_LOG_FILE + echo '' >>$COMMIT_LOG_FILE + + while IFS= read -r line; do + ISSUE_ID=$(echo $line | grep -o 'fix/[0-9]*' | grep -o '[0-9]*') + echo "$ISSUE_ID" >>$ISSUES_IDS_FILE + done <"$COMMIT_LOG_FILE" + + sort -u $ISSUES_IDS_FILE >$SORTED_UNIQUE_ISSUES_IDS + + while IFS= read -r line; do + echo "==================" + echo $line + curl -H "X-Redmine-API-Key: ${REDMINE_API_KEY}" -H 'Content-Type: application/json' -X GET https://forge.maarch.org/issues/$line.json >issue_$line.json + # echo `cat issue_$line.json` + SUBJECT=$(cat issue_$line.json | jq -r '.issue.subject') + TRACKER=$(cat issue_$line.json | jq -r '.issue.tracker.name') + ID=$(cat issue_$line.json | jq -r '.issue.id') + echo "" + echo "ID : $ID" + echo "TRACKER : $TRACKER" + echo "SUBJECT : $SUBJECT" + echo "==================" + + if [ ! -z $ID ]; then + echo "* **$TRACKER [#$ID](https://forge.maarch.org/issues/$ID)** - $SUBJECT" >>$FINAL_LOG + fi + done <"$SORTED_UNIQUE_ISSUES_IDS" + + if [[ ! -z $REF_UPDATED ]]; then + echo "* **Fonctionnalité** - Mise à jour de la BAN 75" >>$FINAL_LOG + fi + + sort -u $FINAL_LOG >>changelog.txt + + while IFS= read -r line; do + CONTENT="$CONTENT\n$line" + done <"changelog.txt" + + echo $CONTENT + + # Update tag release + BODY="{\"description\":\"$CONTENT\",\"tag_name\":\"$NEXT_TAG\", \"milestones\": [\"$NEXT_TAG\"]}" + + curl -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/releases + + mkdir -p ci/build/ + mv $COMMIT_LOG_FILE ci/build/ + mv $ISSUES_IDS_FILE ci/build/ + mv $SORTED_UNIQUE_ISSUES_IDS ci/build/ + mv $FINAL_LOG ci/build/ +fi + +RESPONSE=$(curl --write-out '%{url_effective} [%{response_code}]' --silent --output /dev/null --header "PRIVATE-TOKEN: $TOKEN_GITLAB" -X PUT "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/merge_requests/$MR_ID/merge?squash=false") +RESPONSE_CODE=$(echo $RESPONSE | grep -o '\[[0-9]*\]$') +if [ $RESPONSE_CODE != '[200]' ]; then + echo "Error ! $RESPONSE" + exit 1 +fi diff --git a/ci/new_tag.sh b/ci/new_tag.sh deleted file mode 100644 index 11e88bcedfd2cc0fa90870a6a881486ff3f5f125..0000000000000000000000000000000000000000 --- a/ci/new_tag.sh +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/bash - -# EXCLUDE TMA BRANCH -IS_TMA=`echo $CI_COMMIT_TAG | grep -o '[.]*_TMA[.]*'` - -if [ -z $IS_TMA ]; then - - tag=$CI_COMMIT_TAG - - echo "tag:$tag" - - structures=$(echo $CI_COMMIT_TAG | tr "." "\n") - - IT=1 - for item in $structures - do - if [ $IT = 1 ]; then - major_version=$item - fi - - if [ $IT = 2 ]; then - major_version="$major_version.$item" - fi - - if [ $IT = 3 ]; then - current_num_tag=$item - fi - - IT=$((IT+1)) - done - - previous_num_tag=$((current_num_tag-1)) - next_num_tag=$((current_num_tag+1)) - - previous_tag="$major_version.$previous_num_tag" - next_tag="$major_version.$next_num_tag" - - echo "previoustag:$previous_tag" - - for row in $(curl --header "PRIVATE-TOKEN: $TOKEN_GITLAB" "https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones?search=$previous_tag" | jq -r '.[] | @base64'); do - _jq() { - echo ${row} | base64 --decode | jq -r ${1} - } - - ID=$(_jq '.id') - - echo $ID - - BODY="{\"id\":\"$ID\",\"state_event\":\"close\"}" - - curl -v -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X PUT https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones/$ID - - done - - BODY="{\"id\":\"$CI_PROJECT_ID\",\"title\":\"$next_tag\"}" - - # CREATE NEXT TAG MILESTONE - curl -v -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/milestones - - # GENERATE RAW CHANGELOG - file="tmp.txt" - file2="tmp2.txt" - file3="tmp3.txt" - file4="tmp4.txt" - - CONTENT="" - - cd ci - - mkdir tmp - - cd tmp - - echo "Set user git : $GITLAB_USER_NAME <$GITLAB_USER_EMAIL>" - - git config --global user.email "$GITLAB_USER_EMAIL" && git config --global user.name "$GITLAB_USER_NAME" - - git clone $REPOSITORY_URL_SSH -b $major_version . - - git fetch - - echo "git log $previous_tag..$CI_COMMIT_TAG --pretty=format:'%s' --grep='Update referential' --all-match"; - - REFUPDATED=`git log $previous_tag..$CI_COMMIT_TAG --pretty=format:'%s' --grep='Update referential' --all-match` - - echo "git log $previous_tag..$CI_COMMIT_TAG --pretty=format:'%s' --grep='FEAT' --all-match"; - - git log $previous_tag..$CI_COMMIT_TAG --pretty=format:'%s' --grep='FEAT' --all-match > tmp.txt - echo '' >> tmp.txt - - while IFS= read -r line - do - ISSUE_ID=`echo $line | grep -o 'FEAT #[0-9]*' | grep -o '[0-9]*'` - echo "$ISSUE_ID" >> tmp2.txt - done <"$file" - - echo "git log $previous_tag..$CI_COMMIT_TAG --pretty=format:'%s' --grep='FIX' --all-match"; - - git log $previous_tag..$CI_COMMIT_TAG --pretty=format:'%s' --grep='FIX' --all-match > tmp.txt - echo '' >> tmp.txt - - while IFS= read -r line - do - ISSUE_ID=`echo $line | grep -o 'FIX #[0-9]*' | grep -o '[0-9]*'` - echo "$ISSUE_ID" >> tmp2.txt - done <"$file" - - sort -u $file2 > tmp3.txt - - while IFS= read -r line - do - echo "==================" - echo $line - curl -H "X-Redmine-API-Key: ${REDMINE_API_KEY}" -H 'Content-Type: application/json' -X GET https://forge.maarch.org/issues/$line.json > issue_$line.json - # echo `cat issue_$line.json` - SUBJECT=`cat issue_$line.json | jq -r '.issue.subject'` - TRACKER=`cat issue_$line.json | jq -r '.issue.tracker.name'` - ID=`cat issue_$line.json | jq -r '.issue.id'` - echo "" - echo "ID : $ID" - echo "TRACKER : $TRACKER" - echo "SUBJECT : $SUBJECT" - echo "==================" - - if [ ! -z $ID ] - then - echo "* **$TRACKER [#$ID](https://forge.maarch.org/issues/$ID)** - $SUBJECT" >> tmp4.txt - fi - done <"$file3" - - if [[ ! -z $REFUPDATED ]]; then - echo "* **Fonctionnalité** - Mise à jour de la BAN 75" >> tmp4.txt - fi - - sort -u $file4 >> changelog.txt - - while IFS= read -r line - do - CONTENT="$CONTENT\n$line" - done <"changelog.txt" - - echo $CONTENT - - # Update tag release - BODY="{\"description\":\"$CONTENT\"}" - - curl -v -H 'Content-Type:application/json' -H "PRIVATE-TOKEN:$TOKEN_GITLAB" -d "$BODY" -X POST https://labs.maarch.org/api/v4/projects/$CI_PROJECT_ID/repository/tags/$CI_COMMIT_TAG/release - - - # NOTIFY TAG IN SLACK - curl -X POST --data-urlencode "payload={\"channel\": \"$CHANNEL_SLACK_NOTIFICATION\", \"username\": \"$USERNAME_SLACK_NOTIFICATION\", \"text\": \"Jalon mis à jour à la version $tag!\nVeuillez rédiger le <$CI_PROJECT_URL/tags/$tag/release/edit|changelog> et définir une date de sortie.\", \"icon_emoji\": \":cop:\"}" $URL_SLACK_NOTIFICATION - - # Update files version - cp package.json tmp_package.json - - jq -r ".version |= \"$next_tag\"" tmp_package.json > package.json - - rm tmp_package.json - - git add -f package.json - - # sed -i -e "s/$CI_COMMIT_TAG/$next_tag/g" sql/test.sql - - # git add -f sql/test.sql - - git commit -m "Update next tag version files : $next_tag" - - git push - -fi \ No newline at end of file