diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 196f45238bb374ebd869a5e6c1fa4de75d69e28c..cd6010b8480c35d5058379e403ab7c6ca5261faa 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -26,9 +26,12 @@ variables:
   RELEASES_PATH: "$PROD_PATH/cassiopee-releases"
 
 before_script:
-  # load private key from GitLab CI variable, to deploy on Aubes server
+  # load private key from GitLab CI variable to deploy on Aubes server
   - eval $(ssh-agent -s)
   - ssh-add <(echo "$AUBES_B64_AUTHORIZED_SSH_PRIVATE_KEY" | base64 -d)
+  # load private key from GitLab CI variable to deploy on OVH server
+  - ssh-add <(echo "$OVH_B64_AUTHORIZED_SSH_PRIVATE_KEY" | base64 -d)
+  # disable console prompt for host checking
   - mkdir -p ~/.ssh
   - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
 
@@ -38,11 +41,6 @@ cache:
 
 jalhyd:
   stage: jalhyd
-  only:
-    - pushes
-    - tags
-    - schedules
-    - web
   script:
     - JALHYD_BRANCH=`cat jalhyd_branch`
     - echo "CI_COMMIT_REF_NAME - $CI_COMMIT_REF_NAME"
@@ -59,31 +57,12 @@ jalhyd:
 
 install:
   stage: install
-  only:
-    - pushes
-    - tags
-    - schedules
-    - web
   script:
     - rm -rf node_modules
     - npm ci --force --unsafe-perm
 
-test:
-  stage: test
-  only:
-    - tags
-    - schedules
-    - web
-  script:
-    - npm run e2e
-
 build:
   stage: build
-  only:
-    - pushes
-    - tags
-    - schedules
-    - web
   artifacts:
     expire_in: 10 min
     paths:
@@ -91,53 +70,9 @@ build:
   script:
     - npm run build -- --base-href=/cassiopee/$CI_COMMIT_REF_NAME/
 
-clean-stale-branches:
-  stage: clean-stale-branches
-  only:
-    - pushes
-    - tags
-    - web
-  script:
-    - ./scripts/remove-stale-branches.sh $DEV_LOGIN@$DEV_HOST $DEV_PATH
-
-deploy-dev:
-  stage: deploy-dev
-  only:
-    - pushes
-    - tags
-    - web
-  dependencies:
-    - build
-  script:
-    # Copie de la branche / du tag
-    - rsync --delete -a "dist/" "$DEV_LOGIN@$DEV_HOST:$DEV_PATH/$CI_COMMIT_REF_NAME"
-
-deploy-prod:
-  stage: deploy-prod
-  only:
-    variables:
-      - $CI_COMMIT_REF_NAME == "stable"
-  dependencies:
-    - build
-  script:
-    # Copie de la branche production
-    - rsync --delete -a "dist/" "$PROD_LOGIN@$PROD_HOST:$PROD_PATH/"
-    # Modification du dossier base href
-    - ssh $PROD_LOGIN@PROD_HOST "sed -i 's:/cassiopee/stable/:/:g' $PROD_PATH/index.html"
-
-releases-nightly:
-  stage: releases-nightly
-  only:
-    - schedules
-  dependencies: []
-  script:
-    - ./scripts/release-version.sh nightly $PROD_LOGIN $PROD_HOST $RELEASES_PATH
-
 releases-version:
   stage: releases-version
-  only:
-    variables:
-      - $CI_COMMIT_REF_NAME =~ /^[0-9]+\.[0-9]+\.[0-9]+$/ # version tag
   dependencies: []
   script:
+    - echo CI_COMMIT_REF_NAME $CI_COMMIT_REF_NAME
     - ./scripts/release-version.sh $CI_COMMIT_REF_NAME $PROD_LOGIN $PROD_HOST $RELEASES_PATH
diff --git a/scripts/deploy-version.sh b/scripts/deploy-version.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e2d41a42b6804c9d2800b028bcfee4a022e5edb9
--- /dev/null
+++ b/scripts/deploy-version.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# deploie l'appli sur le serveur $3 (user $2/mot de passe $5) dans le dossier $4 et met à jour le fichier index.html
+# si la version est "stable"
+
+if (( $# < 4 || $# > 5 )); then
+    echo "usage: $0 <version> <login> <server> <path> [<password>]"
+    exit 1
+fi
+
+VERSION="$1"
+LOGIN="$2"
+HOST="$3"
+DIR="$4"
+PASS="$5"
+
+echo "$(basename $0): deploying version $VERSION in $LOGIN@$HOST:$DIR"
+
+if [[ $VERSION == "stable" ]]; then
+  # Copie de la branche production
+  rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" dist/ ${LOGIN}@${HOST}:${DIR}/
+
+  # Modification du dossier base href
+  echo "updating index.html"
+  ssh $LOGIN@$HOST "sed -i 's:/cassiopee/stable/:/:g' $DIR/index.html"
+else
+  # Copie de la branche / du tag
+  rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" "dist/" "$LOGIN@$HOST:$DIR/$VERSION"
+fi
diff --git a/scripts/release-version.sh b/scripts/release-version.sh
index c17a7d311a02e2fa66d4095f7230c2e8a2181ea4..140147c1eb0d81206e7de23326c66981d5c6e5a7 100755
--- a/scripts/release-version.sh
+++ b/scripts/release-version.sh
@@ -1,10 +1,12 @@
-#!/bin/bash
+#!/bin/bash -xv
 
 # Fabrique les exécutables electron/cordova pour une version de Cassiopée $1, les
 # distribue sur le serveur $2@$3 dans le dossier $4, et met à jour le fichier releases.json
 # et les liens symboliques si la version n'est pas nightly
 
-if [ "$#" -lt 4 ]; then
+echo "args $@"
+
+if (( $# < 4 )); then
     echo "usage: $0 <X.Y.Z|nightly> <login> <server> <releases dir>"
     exit 1
 fi
@@ -24,7 +26,7 @@ if [[ $VERSION == "nightly" ]]; then
   update_latest=0
 fi
 
-echo "deploy-version.sh: building release for version $VERSION, deploying in $HOST_LOGIN:$RELEASES_DIR"
+echo "release-version.sh: building release for version $VERSION, deploying in $HOST_LOGIN:$RELEASES_DIR"
 
 # build releases
 npm run release-all
@@ -59,7 +61,17 @@ if (( $update_latest )); then
 fi
 
 # copy releases to public web directory
-scp "release/Cassiopée Setup $VERSION.exe" "release/fr.irstea.cassiopee_${VERSION}_amd64.deb" "release/cassiopee-$VERSION.apk" "release/Cassiopée-${VERSION}-mac.zip" "$HOST_LOGIN:$RELEASES_DIR/"
+ssh $HOST_LOGIN mkdir -p $RELEASES_DIR
+if [[ $VERSION == nightly ]]; then
+  find release -name "fr.irstea.cassiopee_*.deb" -exec scp "{}" $HOST_LOGIN:$RELEASES_DIR/linux-nightly.deb \;
+  find release -name "Cassio*Setup*.exe" -exec scp "{}" $HOST_LOGIN:$RELEASES_DIR/windows-nightly.exe \;
+  find release -name "Cassio*-mac.zip" -exec scp "{}" $HOST_LOGIN:$RELEASES_DIR/macos-nightly.zip \;
+  find release -name "cassiopee-*.apk" -exec scp "{}" $HOST_LOGIN:$RELEASES_DIR/android-nightly.apk \;
+else
+  ls -al
+  ls -al release
+  scp "release/Cassiopée Setup $VERSION.exe" "release/fr.irstea.cassiopee_${VERSION}_amd64.deb" "release/cassiopee-$VERSION.apk" "release/Cassiopée-${VERSION}-mac.zip" "$HOST_LOGIN:$RELEASES_DIR/"
+fi
 
 # symlink "latest" version for each platform