From 9d381d92a7813802dfa29590f83ba3aafbc4ff61 Mon Sep 17 00:00:00 2001 From: halaya Date: Fri, 17 Oct 2025 13:37:17 +0100 Subject: [PATCH] Update CreateFB script --- git-workflow/createFB.sh | 251 +++++++++++++++++++++------------------ 1 file changed, 138 insertions(+), 113 deletions(-) diff --git a/git-workflow/createFB.sh b/git-workflow/createFB.sh index 1daa1b7..06aaf2a 100755 --- a/git-workflow/createFB.sh +++ b/git-workflow/createFB.sh @@ -4,16 +4,20 @@ # Function to display the help message show_help() { - printf "\e[1;33m %s\e[m\n" "Usage: $0 [-p] FBRANCH ORIGIN_BRANCH ISSUE" + printf "\e[1;33m%s\e[m\n" "Usage: $0 [-p] FBRANCH ORIGIN_BRANCH PROJECT_VERSION DEPMGT_VERSION ISSUE" echo echo "Options:" - echo " -p Execute the script with the 'p' option for activate the Push" + echo " -p Execute the script with the 'p' option to activate push" echo " -h Display this help message" echo echo "Arguments:" - echo " FBRANCH Name of Feature Branch " - echo " ORIGIN_BRANCH Branch: develop-meed or develop " - echo " ISSUE TASK_ID " + echo " FBRANCH Name of Feature Branch" + echo " ORIGIN_BRANCH Branch to base the feature branch on (develop-meed or develop-exo or develop (Default)):" + echo " - For Meeds repos: develop-meed or develop-exo or develop (Default)" + echo " - For eXo Platform repos: ignored, develop is always used, regardless of origin_branch" + echo " PROJECT_VERSION Current project version (e.g. 7.2.x)" + echo " DEPMGT_VERSION Dependency management version (e.g. 25.x)" + echo " ISSUE Task or ticket ID" echo } @@ -28,43 +32,37 @@ while getopts "ph" opt; do exit 0 ;; \?) - printf "\e[1;31m %s\e[m\n" "Invalid option: -$OPTARG" >&2 + printf "\e[1;31m%s\e[m\n" "Invalid option: -$OPTARG" >&2 show_help exit 1 ;; esac done -# Shift the processed options out of the way +# Shift processed options shift $((OPTIND-1)) -# Check if the correct number of positional arguments are provided -if [ $# -ne 3 ]; then - printf "\e[1;31m %s\e[m\n" "Error: Exactly three arguments are required." +# Check arguments count +if [ $# -ne 5 ]; then + printf "\e[1;31m%s\e[m\n" "Error: Exactly five arguments are required." show_help exit 1 fi - +# Assign positional arguments FBRANCH=$1 -ISSUE=$3 -ORIGIN_BRANCH=$2 # develop-meed or develop -DEFAULT_BRANCH=develop -TARGET_BRANCH=feature/$FBRANCH -ORIGIN_VERSION=7.0.x-SNAPSHOT -TARGET_VERSION=7.0.x-$FBRANCH-SNAPSHOT -MEEDS_DISTRIB="" # '-exo'or '-meed' or '' -MEEDS_ORIGIN_VERSION=7.0.x${MEEDS_DISTRIB}-SNAPSHOT +ORIGIN_BRANCH=$2 # develop-meed or develop-exo or develop +PROJECT_VERSION=$3 +DEPMGT_VERSION=$4 +ISSUE=$5 -#Meeds -# Maven DEPMGT -DEPMGT_ORIGIN_VERSION=23.x${MEEDS_DISTRIB}-SNAPSHOT -DEPMGT_TARGET_VERSION=23.x-$FBRANCH-SNAPSHOT +# Define defaults +DEFAULT_BRANCH="develop" +TARGET_BRANCH="feature/$FBRANCH" +TARGET_VERSION="${PROJECT_VERSION}-${FBRANCH}-SNAPSHOT" +DEPMGT_TARGET_VERSION="${DEPMGT_VERSION}-${FBRANCH}-SNAPSHOT" +MEEDS_DISTRIB="" # '-exo', '-meed', or '' -#Exoplatform -# Maven eXo DEPMGT -DEPMGT_EXO_ORIGIN_VERSION=23.x${MEEDS_DISTRIB}-SNAPSHOT -DEPMGT_EXO_TARGET_VERSION=23.x-$FBRANCH-SNAPSHOT SCRIPTDIR=$( cd $(dirname "$0") @@ -101,7 +99,7 @@ function repoCleanup() { pushd ${repo_name} git remote update --prune git reset --hard HEAD - [ ! -z "{ORIGIN_BRANCH:-}" ] && git checkout $ORIGIN_BRANCH || git checkout $DEFAULT_BRANCH + [ -n "${ORIGIN_BRANCH:-}" ] && git checkout "$ORIGIN_BRANCH" || git checkout "$DEFAULT_BRANCH" git reset --hard HEAD git pull printf "\e[1;33m# %s\e[m\n" "Testing if ${TARGET_BRANCH} branch doesn't already exists and reuse it ($repo_name) ..." @@ -129,11 +127,11 @@ function replaceProjectVersion() { Meeds-io) case $repo_name in maven-depmgt-pom) $SCRIPTDIR/../replaceInFile.sh "$DEPMGT_ORIGIN_VERSION" "$DEPMGT_TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" ;; - *) $SCRIPTDIR/../replaceInFile.sh "$MEEDS_ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" ;; + *) $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" ;; esac ;; exoplatform) case $repo_name in - maven-exo-depmgt-pom) $SCRIPTDIR/../replaceInFile.sh "$DEPMGT_EXO_ORIGIN_VERSION" "$DEPMGT_EXO_TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" ;; + maven-exo-depmgt-pom) $SCRIPTDIR/../replaceInFile.sh "$DEPMGT_ORIGIN_VERSION" "$DEPMGT_TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" ;; *) $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" ;; esac ;; esac @@ -143,21 +141,22 @@ function replaceProjectDeps() { printf "\e[1;33m# %s\e[m\n" "Modifying dependencies versions in the project POMs ($repo_name) ..." #Meeds - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$DEPMGT_ORIGIN_VERSION" "$DEPMGT_TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$DEPMGT_ORIGIN_VERSION" "$DEPMGT_TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" #eXoplatform + $SCRIPTDIR/../replaceInFile.sh "$DEPMGT_EXO_ORIGIN_VERSION" "$DEPMGT_EXO_TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" } @@ -165,43 +164,48 @@ function replaceProjectAddons() { printf "\e[1;33m# %s\e[m\n" "Modifying add-ons versions in the packaging project POMs ($repo_name) ..." #Meeds - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "addon.meeds.gamification-twitter.version>$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" #eXoplatform $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" - $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + $SCRIPTDIR/../replaceInFile.sh "$ORIGIN_VERSION" "$TARGET_VERSION" "pom.xml -not -wholename \"*/target/*\"" + } function createFB() { @@ -213,8 +217,25 @@ function createFB() { printf "\e[1;32m# %s\e[m\n" "=====================================================================" repoCleanup ${repo_name} ${organization} - - replaceProjectVersion ${repo_name} ${organization} + + if [[ "$ORIGIN_BRANCH" == "develop-exo" && "$organization" == "Meeds-io" ]]; then + MEEDS_DISTRIB="-exo" + ORIGIN_VERSION="${PROJECT_VERSION}${MEEDS_DISTRIB}-SNAPSHOT" + # Meeds - Maven DEPMGT + DEPMGT_ORIGIN_VERSION="${DEPMGT_VERSION}${MEEDS_DISTRIB}-SNAPSHOT" + elif [[ "$ORIGIN_BRANCH" == "develop-meed" && "$organization" == "Meeds-io" ]]; then + MEEDS_DISTRIB="-meed" + ORIGIN_VERSION="${PROJECT_VERSION}${MEEDS_DISTRIB}-SNAPSHOT" + # eXo Platform - Maven DEPMGT + DEPMGT_ORIGIN_VERSION="${DEPMGT_VERSION}${MEEDS_DISTRIB}-SNAPSHOT" + else + ORIGIN_BRANCH="$DEFAULT_BRANCH" + ORIGIN_VERSION="${PROJECT_VERSION}-SNAPSHOT" + # eXo Platform - Maven DEPMGT + DEPMGT_ORIGIN_VERSION="${DEPMGT_VERSION}-SNAPSHOT" + fi + + replaceProjectVersion ${repo_name} ${organization} replaceProjectDeps ${repo_name} replaceProjectAddons ${repo_name} @@ -245,63 +266,67 @@ echo "SWF_FB_REPOS : ${SWF_FB_REPOS}" echo "===================================" #Meeds Projects -createFB maven-depmgt-pom Meeds-io -createFB gatein-wci Meeds-io -createFB kernel Meeds-io -createFB core Meeds-io -createFB ws Meeds-io -createFB gatein-pc Meeds-io -createFB gatein-sso Meeds-io -createFB gatein-portal Meeds-io -createFB platform-ui Meeds-io -createFB commons Meeds-io -createFB social Meeds-io -createFB layout Meeds-io -createFB gamification Meeds-io -createFB kudos Meeds-io -createFB perk-store Meeds-io -createFB wallet Meeds-io -createFB push-notifications Meeds-io -createFB app-center Meeds-io -createFB analytics Meeds-io -createFB notes Meeds-io -createFB content Meeds-io -createFB poll Meeds-io -createFB task Meeds-io -createFB gamification-github Meeds-io -createFB gamification-twitter Meeds-io -createFB gamification-evm Meeds-io -createFB addons-manager Meeds-io -createFB deeds-tenant Meeds-io -createFB meeds Meeds-io + createFB maven-depmgt-pom Meeds-io + createFB gatein-wci Meeds-io + createFB kernel Meeds-io + createFB core Meeds-io + createFB ws Meeds-io + createFB portlet-container Meeds-io + createFB gatein-sso Meeds-io + createFB portal Meeds-io + createFB platform-ui Meeds-io + createFB commons Meeds-io + createFB social Meeds-io + createFB layout Meeds-io + createFB gamification Meeds-io + createFB kudos Meeds-io + createFB perk-store Meeds-io + createFB wallet Meeds-io + createFB push-notifications Meeds-io + createFB app-center Meeds-io + createFB analytics Meeds-io + createFB notes Meeds-io + createFB content Meeds-io + createFB poll Meeds-io + createFB task Meeds-io + createFB gamification-github Meeds-io + createFB gamification-twitter Meeds-io + createFB gamification-evm Meeds-io + createFB gamification-crowdin Meeds-io + createFB pwa Meeds-io + createFB ide Meeds-io + createFB matrix Meeds-io + createFB addons-manager Meeds-io + createFB deeds-tenant Meeds-io + createFB meeds Meeds-io -# # Explatform projects -createFB maven-exo-depmgt-pom exoplatform -createFB commons-exo exoplatform -createFB jcr exoplatform -createFB ecms exoplatform -createFB mail-integration exoplatform -createFB cloud-drive-connectors exoplatform -createFB dlp exoplatform -createFB agenda exoplatform -createFB agenda-connectors exoplatform -createFB chat-application exoplatform -createFB digital-workplace exoplatform -createFB layout-management exoplatform -createFB onlyoffice exoplatform -createFB saml2-addon exoplatform -createFB web-conferencing exoplatform -createFB jitsi-call exoplatform -createFB jitsi exoplatform -createFB multifactor-authentication exoplatform -createFB automatic-translation exoplatform -createFB documents exoplatform -createFB processes exoplatform -createFB data-upgrade exoplatform -createFB anti-bruteforce exoplatform -createFB anti-malware exoplatform -createFB external-visio-connector exoplatform -createFB platform-private-distributions exoplatform + # # Explatform projects + createFB maven-exo-depmgt-pom exoplatform + createFB commons-exo exoplatform + createFB jcr exoplatform + createFB ecms exoplatform + createFB mail-integration exoplatform + createFB email-connector exoplatform + createFB cloud-drive-connectors exoplatform + createFB dlp exoplatform + createFB agenda exoplatform + createFB agenda-connectors exoplatform + createFB chat-application exoplatform + createFB digital-workplace exoplatform + createFB onlyoffice exoplatform + createFB saml2-addon exoplatform + createFB web-conferencing exoplatform + createFB jitsi-call exoplatform + createFB jitsi exoplatform + createFB multifactor-authentication exoplatform + createFB automatic-translation exoplatform + createFB documents exoplatform + createFB processes exoplatform + createFB data-upgrade exoplatform + createFB anti-bruteforce exoplatform + createFB anti-malware exoplatform + createFB external-visio-connector exoplatform + createFB platform-private-distributions exoplatform popd echo