diff --git a/scripts/env-global.sh b/scripts/env-global.sh
index 3365d8015162d72f466530c6644bc35dc006a92f..9064c6b27e11c257f57593e460c589ef906a3f7d 100755
--- a/scripts/env-global.sh
+++ b/scripts/env-global.sh
@@ -25,16 +25,18 @@ NODEJS_VERSION=16
 IONIC_CLI_VERSION=6.20.9
 
 ANDROID_NDK_VERSION=21.0.6113669 # Should be compatible with 'cordova-sqlite-storage' plugin
-ANDROID_SDK_VERSION=30.0.3
+ANDROID_SDK_VERSION=32.0.0
 ANDROID_SDK_CLI_VERSION=8512546 # See https://developer.android.com/studio#command-tools
-#ANDROID_HOME="${HOME}/Android"
 ANDROID_SDK_ROOT="${HOME}/Android/Sdk"
 ANDROID_ALTERNATIVE_SDK_ROOT=/usr/lib/android-sdk
 ANDROID_SDK_CLI_ROOT=${ANDROID_SDK_ROOT}/cmdline-tools/${ANDROID_SDK_CLI_VERSION}
+ANDROID_BUILD_TOOLS_ROOT="${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_VERSION}"
 ANDROID_OUTPUT_APK_PREFIX=app
 ANDROID_OUTPUT_APK=${PROJECT_DIR}/platforms/android/${ANDROID_OUTPUT_APK_PREFIX}/build/outputs/apk
 ANDROID_OUTPUT_APK_DEBUG=${ANDROID_OUTPUT_APK}/debug
 ANDROID_OUTPUT_APK_RELEASE=${ANDROID_OUTPUT_APK}/release
+ANDROID_OUTPUT_MIN_SDK_VERSION=22 # Used by release-android-sign.sh
+ANDROID_OUTPUT_MAX_SDK_VERSION=34 # Used by release-android-sign.sh
 
 DIST_WEB=${PROJECT_DIR}/dist/web/build
 DIST_ANDROID=${PROJECT_DIR}/dist/android
@@ -73,7 +75,7 @@ if test -d "${JAVA_HOME}"; then
   else
     JAVA_MAJOR_VERSION=$(echo ${JAVA_VERSION} | awk '{split($0, array, ".")} END{print array[1]}')
     JAVA_MINOR_VERSION=$(echo ${JAVA_VERSION} | awk '{split($0, array, ".")} END{print array[2]}')
-    if ! test "${JAVA_MAJOR_VERSION}" == "11" || ! test "${JAVA_MINOR_VERSION}" == "0"; then
+    if ! test "${JAVA_MAJOR_VERSION}" -eq "11" || ! test "${JAVA_MINOR_VERSION}" -eq "0"; then
       echo "ERROR: Require a Java SDK in version 11, but found ${JAVA_VERSION}. You can override your default JAVA_HOME in '.local/env.sh'."
     fi
   fi
@@ -118,14 +120,20 @@ else
     echo "nvm (Node version manager) not found (directory ${NVM_DIR} not found). Please install, and retry"
 fi
 
+# Checking if some global dependencies are missing
+GLOBAL_TOOLS="yarn ionic cordova cordova-res native-run web-ext"
+MISSING_GLOBAL_TOOLS=
+for GLOBAL_TOOL in ${GLOBAL_TOOLS}
+do
+  GLOBAL_TOOL_PATH=$(which ${GLOBAL_TOOL})
+  if test -z "${GLOBAL_TOOL_PATH}"; then
+    echo "- Missing global dependency: ${GLOBAL_TOOL}"
+    MISSING_GLOBAL_TOOLS="${GLOBAL_TOOL} ${MISSING_GLOBAL_TOOLS}"
+  fi
+done
+
 # Install global dependencies
-YARN_PATH=`which yarn`
-IONIC_PATH=`which ionic`
-CORDOVA_PATH=`which cordova`
-CORDOVA_RES_PATH=`which cordova-res`
-NATIVE_RUN_PATH=`which native-run`
-WEB_EXT_PATH=`which web-ext`
-if test -z "${YARN_PATH}" || test -z "${IONIC_PATH}" || test -z "${CORDOVA_PATH}" || test -z "${CORDOVA_RES_PATH}" || test -z "${NATIVE_RUN_PATH}" || test -z "${WEB_EXT_PATH}"; then
+if ! test -z "${MISSING_GLOBAL_TOOLS}"; then
   echo "Installing global dependencies..."
   npm install -g yarn cordova cordova-res @ionic/cli@$IONIC_CLI_VERSION web-ext native-run
   if ! test $? == 0; then
@@ -139,15 +147,15 @@ fi
 
 # Install project dependencies
 if ! test -d "${PROJECT_DIR}/node_modules"; then
-    echo "Installing project dependencies..."
-    cd "${PROJECT_DIR}"
+    echo "--- Installing project dependencies..."
+    cd ${PROJECT_DIR}
     yarn install
 fi
 
 # Install platform Android
 if ! test -d "${PROJECT_DIR}/platforms/android"; then
-  echo "Installing platform Android..."
-  cd "${PROJECT_DIR}"
+  echo "-- Installing platform Android..."
+  cd ${PROJECT_DIR}
   ionic cordova platform add android
   if ! test $? == 0; then
     echo "ERROR: Unable to install Android platform. Will not be able to build Android artifacts!"
@@ -156,9 +164,9 @@ if ! test -d "${PROJECT_DIR}/platforms/android"; then
 fi
 
 if ! test -d "${PROJECT_DIR}/dist/desktop"; then
-  #echo "Installing project submodules..."
-  #cd "${PROJECT_DIR}"
-  #git submodule init && git submodule sync && git submodule update --remote --merge
+  echo "-- Checkout submodules (dist/desktop) ..."
+  cd "${PROJECT_DIR}"
+  git submodule init && git submodule sync && git submodule update --remote --merge
   if ! test $? == 0; then
     echo "ERROR: Unable to sync git submodule. Will not be able to build desktop artifacts!"
     #exit 1
diff --git a/scripts/release-android-sign.sh b/scripts/release-android-sign.sh
index 06c37ee971965128424fbe2ccf88a7365a8bd1e4..41be37a31a4644ba741c6566c00aa050e86fb86c 100755
--- a/scripts/release-android-sign.sh
+++ b/scripts/release-android-sign.sh
@@ -13,48 +13,64 @@ KEY_ALIAS=Cesium
 KEYSTORE_PWD=
 
 # Preparing Android environment
-source ${PROJECT_DIR}/scripts/env-android.sh
+. ${PROJECT_DIR}/scripts/env-android.sh
 [[ $? -ne 0 ]] && exit 1
 
-APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/app-release-unsigned.apk
-APK_SIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/app-release.apk
-
+APK_SIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk
+APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-unsigned.apk
+APK_FILE_ALTERNATIVE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release.apk
 
 cd ${PROJECT_DIR}
 
-# Sign files
-echo "Signing APK file..."
-if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
-  echo "APK file not found: ${APK_UNSIGNED_FILE}"
-  exit 1
-fi
+# Checking files
+echo "Checking keystore file..."
 if [[ ! -f "${KEYSTORE_FILE}" ]]; then
   echo "Keystore file not found: ${KEYSTORE_FILE}"
   exit 1
 fi
 
-# Remove previous version
+echo "Checking APK file..."
+if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
+  # Check in an alternative path (e.g. Android default signed file)
+  if [[ ! -f "${APK_FILE_ALTERNATIVE}" ]]; then
+    echo "APK file not found: ${APK_UNSIGNED_FILE}"
+    exit 1
+  fi
+  APK_UNSIGNED_FILE=${APK_FILE_ALTERNATIVE}
+fi
+
+# Remove previous version (only if unsigned exists)
 if [[ -f "${APK_SIGNED_FILE}" ]]; then
   echo "Delete previous signed APK file: ${APK_SIGNED_FILE}"
-  rm -f ${APK_SIGNED_FILE}
+  rm -f ${APK_SIGNED_FILE}*
 fi
 
-echo "Executing jarsigner..."
-jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${KEYSTORE_FILE} ${APK_UNSIGNED_FILE} Cesium
-[[ $? -ne 0 ]] && exit 1
-echo "Executing jarsigner [OK]"
+#echo "Executing jarsigner..."
+#jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -storepass ${KEYSTORE_PWD} -keystore ${KEYSTORE_FILE} ${APK_UNSIGNED_FILE} ${KEY_ALIAS}
+#[[ $? -ne 0 ]] && exit 1
+#echo "Executing jarsigner [OK]"
 
-BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_VERSION}/"
-cd ${BUILD_TOOLS_DIR}
+cd ${ANDROID_BUILD_TOOLS_ROOT}
+[[ $? -ne 0 ]] && exit 1
 
 echo "Executing zipalign..."
 ./zipalign -v 4 ${APK_UNSIGNED_FILE} ${APK_SIGNED_FILE}
 [[ $? -ne 0 ]] && exit 1
 echo "Executing zipalign [OK]"
 
+echo "Executing apksigner..."
+./apksigner sign --ks ${KEYSTORE_FILE} --ks-pass "pass:${KEYSTORE_PWD}" --ks-key-alias ${KEY_ALIAS} \
+  --min-sdk-version ${ANDROID_OUTPUT_MIN_SDK_VERSION} \
+  --max-sdk-version ${ANDROID_OUTPUT_MAX_SDK_VERSION} \
+  ${APK_SIGNED_FILE}
+
+[[ $? -ne 0 ]] && exit 1
+echo "Executing apksigner [OK]"
+
 echo "Verify APK signature..."
-./apksigner verify ${APK_SIGNED_FILE}
+./apksigner verify --verbose --print-certs ${APK_SIGNED_FILE}
 [[ $? -ne 0 ]] && exit 1
 echo "Verify APK signature [OK]"
 
 echo "Successfully generated signed APK at: ${APK_SIGNED_FILE}"
+exit 0
diff --git a/scripts/release-android.sh b/scripts/release-android.sh
index 54e72d272afc9b9a05b1fac55f45b3b0c77eaa88..d6ae2c9ca1402c6344383a0b296dda674a2fd68c 100755
--- a/scripts/release-android.sh
+++ b/scripts/release-android.sh
@@ -16,21 +16,28 @@ KEY_PWD=
 source ${PROJECT_DIR}/scripts/env-android.sh
 [[ $? -ne 0 ]] && exit 1
 
-APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/app-release-unsigned.apk
+APK_SIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk
+APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-unsigned.apk
 
-cd ${PROJECT_DIR}
+echo "--- Cleaning previous Android APK ..."
+if [[ -f "${APK_SIGNED_FILE}" ]]; then
+  rm -f ${APK_SIGNED_FILE}*
+fi;
+if [[ -f "${APK_UNSIGNED_FILE}" ]]; then
+  rm -f ${APK_UNSIGNED_FILE}
+fi;
+echo "--- Cleaning previous Android APK [OK]"
+echo ""
 
 # Run the build
-echo "Running cordova build..."
-ionic cordova build android --warning-mode=none --color --prod --release
+echo "--- Building Cordova App..."
+echo ""
+yarn run build:android
 [[ $? -ne 0 ]] && exit 1
 
-
-if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
-  echo "APK file not found at: ${APK_UNSIGNED_FILE}"
-  exit 1
-fi
+echo "--- Building Cordova App [OK]"
 
 # Sign APK file
-. ./script/release-android-sign.sh
+cd ${PROJECT_DIR}/scripts
+./release-android-sign.sh
 [[ $? -ne 0 ]] && exit 1
diff --git a/scripts/release-to-github.sh b/scripts/release-to-github.sh
index 16fa1d61f9f4adcee4468bd98fb6a68de0e9d439..ad137cf51d9cf26054419c236f48d073963484f8 100755
--- a/scripts/release-to-github.sh
+++ b/scripts/release-to-github.sh
@@ -20,21 +20,26 @@ then
 fi
 
 ### Get version to release
-current=$(grep -P "version\": \"\d+.\d+.\d+(-?\w*)" package.json | grep -m 1 -oP "\d+.\d+.\d+(-?\w*)")
+current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[0-9]+)?" package.json | grep -oP "\d+.\d+.\d+(-\w+[0-9]+)?")
 if [[ "_$current" == "_" ]]; then
-  echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
-  exit 1;
+  echo " - Make sure the file 'package.json' exists and is readable."
+  echo " - Check version format is: x.y.z (x and y should be an integer)"
+  exit 1
 fi
 echo "Sending v$current extension to Github..."
 
 ###  get auth token
-GITHUB_TOKEN=$(cat ~/.config/${PROJECT_NAME}/.github)
-if [[ "_$GITHUB_TOKEN" != "_" ]]; then
-    GITHUT_AUTH="Authorization: token $GITHUB_TOKEN"
+if [[ "_${GITHUB_TOKEN}" == "_" ]]; then
+  # Get it from user config dir
+  GITHUB_TOKEN=$(cat ~/.config/${PROJECT_NAME}/.github)
+fi
+if [[ "_${GITHUB_TOKEN}" != "_" ]]; then
+    GITHUT_AUTH="Authorization: token ${GITHUB_TOKEN}"
 else
     echo "ERROR: Unable to find github authentication token file: "
     echo " - You can create such a token at https://github.com/settings/tokens > 'Generate a new token'."
-    echo " - Then copy the token and paste it in the file '~/.config/${PROJECT_NAME}/.github' using a valid token."
+    echo " - [if CI] Add a pipeline variable named 'GITHUB_TOKEN';"
+    echo " - [else] Or copy/paste the token into the file '~/.config/${PROJECT_NAME}/.github'."
     exit 1
 fi
 
@@ -90,9 +95,10 @@ else
   echo "Release not exists yet on github."
 fi
 
-### Create the release
-result=$(curl -H ''"$GITHUT_AUTH"'' -s $REPO_API_URL/releases -d '{"tag_name": "v'"$current"'","target_commitish": "master","name": "'"$current"'","body": "'"$description"'","draft": false,"prerelease": '"$prerelease"'}')
-#echo "DEBUG - $result"
+echo "Creating new release..."
+echo " - tag: v$current"
+echo " - description: $description"
+result=$(curl -X POST -H ''"$GITHUT_AUTH"'' -s $REPO_API_URL/releases -d '{"tag_name": "v'"$current"'","target_commitish": "master","name": "'"$current"'","body": "'"$description"'","draft": false,"prerelease": '"$prerelease"'}')
 upload_url=$(echo "$result" | grep -P "\"upload_url\": \"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
 if [[ "_$upload_url" = "_" ]]; then
   echo "Failed to create new release for repo $REPO."
@@ -101,8 +107,8 @@ if [[ "_$upload_url" = "_" ]]; then
   exit 1
 fi
 
-### Send files
-echo "Uploading artifacts to ${upload_url} ..."
+### Sending files
+echo "Uploading files to ${upload_url} ..."
 
 # Upload web file
 WEB_BASENAME="${PROJECT_NAME}-v$current-web.zip"
@@ -111,9 +117,12 @@ if [[ -f "${WEB_FILE}" ]]; then
   result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/zip' -T "${WEB_FILE}" "${upload_url}?name=${WEB_BASENAME}")
   browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
   WEB_SHA256=$(cd ${DIST_WEB} && sha256sum "${WEB_BASENAME}")
-  echo " - ${browser_download_url}  | Checksum: ${WEB_SHA256}"
+  echo " - ${browser_download_url}  | SHA256 Checksum: ${WEB_SHA256}"
+  echo "${WEB_SHA256}  ${WEB_BASENAME}" > "${WEB_FILE}.sha256"
+  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${WEB_FILE}.sha256" "${upload_url}?name=${WEB_BASENAME}.sha256")
 else
-  echo " - ERROR: Web artifact (ZIP) not found! Skipping."
+  echo " - ERROR: Web release (ZIP) not found! Skipping."
+  missing_file=true
 fi
 
 # Upload web extension (ZIP) file
@@ -124,8 +133,11 @@ if [[ -f "${WEB_EXT_ZIP_FILE}" ]]; then
   browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
   WEB_EXT_ZIP_SHA256=$(cd ${DIST_WEB} && sha256sum "${WEB_EXT_ZIP_BASENAME}")
   echo " - ${browser_download_url}  | Checksum: ${WEB_EXT_ZIP_SHA256}"
+  echo "${WEB_EXT_ZIP_SHA256}  ${WEB_EXT_ZIP_BASENAME}" > "${WEB_EXT_ZIP_FILE}.sha256"
+  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${WEB_EXT_ZIP_FILE}.sha256" "${upload_url}?name=${WEB_EXT_ZIP_BASENAME}.sha256")
 else
   echo " - ERROR: Web extension artifact (ZIP) not found! Skipping."
+  missing_file=true
 fi
 
 # Upload web extension (XPI) file
@@ -136,8 +148,11 @@ if [[ -f "${WEB_EXT_XPI_FILE}" ]]; then
   browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
   WEB_EXT_XPI_SHA256=$(cd ${DIST_WEB} && sha256sum "${WEB_EXT_XPI_BASENAME}")
   echo " - ${browser_download_url}  | Checksum: ${WEB_EXT_XPI_SHA256}"
+  echo "${WEB_EXT_XPI_SHA256}  ${WEB_EXT_XPI_BASENAME}" > "${WEB_EXT_XPI_BASENAME}.sha256"
+  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${WEB_EXT_XPI_FILE}.sha256" "${upload_url}?name=${WEB_EXT_XPI_BASENAME}.sha256")
 else
   echo " - ERROR: Web signed extension artifact (XPI) not found! Skipping."
+  missing_file=true
 fi
 
 # Upload Android APK file
@@ -147,19 +162,22 @@ if [[ -f "${APK_FILE}" ]]; then
   result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/vnd.android.package-archive' -T "${APK_FILE}" "${upload_url}?name=${APK_BASENAME}")
   browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
   APK_SHA256=$(cd ${DIST_ANDROID} && sha256sum "${APK_BASENAME}")
-  echo " - ${browser_download_url}  | Checksum: ${APK_SHA256}"
+  echo " - ${browser_download_url}  | SHA256 Checksum: ${APK_SHA256}"
+  echo "${APK_SHA256}  ${APK_BASENAME}" > "${APK_FILE}.sha256"
+  result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${APK_FILE}.sha256" "${upload_url}?name=${APK_BASENAME}.sha256")
 else
-  echo "- ERROR: Android artifact (APK) not found! Skipping."
+  echo "- ERROR: Android release (APK) not found! Skipping."
+  missing_file=true
 fi
 
-# Upload sha256 file (checksum)
-SHA_BASENAME=${PROJECT_NAME}-v$current.sha256
-SHA_FILE=${PROJECT_DIR}/dist/${SHA_BASENAME}
-echo "${WEB_SHA256}" > ${SHA_FILE}
-echo "${WEB_EXT_ZIP_SHA256}" >> ${SHA_FILE}
-echo "${APK_SHA256}" >> ${SHA_FILE}
-echo "${WEB_EXT_XPI_SHA256}" >> ${SHA_FILE}
-result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${SHA_FILE}" "${upload_url}?name=${SHA_BASENAME}")
-
-### Success message
-echo "Successfully uploaded files to: ${REPO_PUBLIC_URL}/releases/tag/v${current}"
+if [[ ${missing_file} == true ]]; then
+  echo "-------------------------------------------"
+  echo "ERROR: missing some artifacts (see logs)"
+  echo " -> Release url: ${REPO_PUBLIC_URL}/releases/tag/${version}"
+  exit 1
+else
+  echo "-------------------------------------------"
+  echo "Successfully uploading files !"
+  echo " -> Release url: ${REPO_PUBLIC_URL}/releases/tag/${version}"
+  exit 0
+fi
diff --git a/scripts/release.sh b/scripts/release.sh
index 4244ae6defbde8e19685713504697526b1951b7e..05d96adf3f947f9759307f075df6fbbce1f2231e 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -92,33 +92,16 @@ rm -rf ${PROJECT_DIR}/dist/*.sha256
 echo "----------------------------------"
 echo "- Building Android artifact..."
 echo "----------------------------------"
-mkdir -p ${DIST_ANDROID} || exit 1
-rm -rf ${DIST_ANDROID}/*.apk || exit 1
-rm -rf ${ANDROID_OUTPUT_APK_RELEASE}/*.apk || exit 1
-. scripts/build-android.sh --release
+cd ${PROJECT_DIR} || exit 1
+. scripts/release-android.sh
 [[ $? -ne 0 ]] && exit 1
 
-APK_RELEASE_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release.apk"
-APK_RELEASE_UNSIGNED_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release-unsigned.apk"
-if [[ ! -f "${APK_RELEASE_FILE}" ]]; then
-  if [[ ! -f "${APK_RELEASE_UNSIGNED_FILE}" ]]; then
-    echo "ERROR: Missing android artifact at ${APK_RELEASE_FILE}"
-    exit 1
-  else
-    . scripts/release-android-sign.sh
-    [[ $? -ne 0 ]] && exit 1
-  fi
-fi
-mkdir -p ${DIST_ANDROID} || exit 1
-cp ${APK_RELEASE_FILE} "${DIST_ANDROID}/${PROJECT_NAME}-v$2-android.apk" || exit 1
-
-
 echo "----------------------------------"
 echo "- Building web and extension artifacts..."
 echo "----------------------------------"
-cd ${PROJECT_DIR} || exit 1
 
-# Gnerate config (only once, to keep same config if web and web-extension artifacts)
+# Generate config (only once, to keep same config if web and web-extension artifacts)
+cd ${PROJECT_DIR} || exit 1
 gulp config --env default
 
 # Run web build