diff --git a/packaging-ci.yml b/packaging-ci.yml
index f85535ef0f6d5ef8141148e4ec08666ad3603379..a2dd0ee1b24722a77465617a560e8b10826fb19a 100644
--- a/packaging-ci.yml
+++ b/packaging-ci.yml
@@ -1,5 +1,156 @@
-default:
-  before_script:
-    - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
-    - gem install bundler --no-document
-    - bundle install --jobs $(nproc)  "${FLAGS[@]}"
+ .build_package: &build_package
+    script:
+      #- git submodule sync --recursive
+      #- git submodule update --init --recursive
+      - apt update || apt -y install ca-certificates && apt update
+      ##Install dependencies
+      #- apt -y install iri-dep1-dev iri-dep2-dev
+      # Read dependencies from CMakeLists.txt
+      - DEP=( $(grep -P '[^#]\s+SET\(CPACK_DEBIAN_PACKAGE_DEPENDS\s+"' CMakeLists.txt) )
+      - declare -a DEP
+      - |+
+        for ((i=1;i<${#DEP[@]};i+=3))
+        do
+          if [ ${i} -eq 1 ]
+          then 
+            apt -y install ${DEP[${i}]:1};
+          else
+            apt -y install ${DEP[${i}]};
+          fi
+        done
+- mkdir -pv build
+      - cd build
+      - cmake -DCMAKE_BUILD_TYPE=RELEASE -DCPACK_PACKAGE_VERSION=$TAG_VERSION ..
+      - make package -j $(nproc)
+    artifacts:
+      paths:
+        - build/*.deb
+      expire_in: 2 weeks
+
+  .update_repo: &update_repo
+    script:
+      - cd build
+      - "scp -i /root/.ssh/iriLabKeyNopwd -r *$PACKAGE_NAME*.deb irilabo@labrepo.iri.upc.edu:packages/"
+      - "ssh irilabo@labrepo.iri.upc.edu -i /root/.ssh/iriLabKeyNopwd -tt /home/irilabo/repo_scripts/update_repo.sh $PACKAGE_NAME $(lsb_release -cs)"
+
+  .cleanup: &cleanup
+    # delete .rdepends_ci/rdepends_ci.yml, merge to master and delete branch
+    - git config user.email labrobotica@iri.upc.edu
+    - git config user.name labrobotica
+    - git branch -D update_rdepends || echo "Update_depends branch already deleted"
+    - git push origin --delete update_rdepends || echo "Update_depends branch already deleted"
+
+  .build_package_tag: &build_package_tag
+    rules:
+      - if: $FROM_RDEPENDS_CI == "false" && $CI_COMMIT_TAG =~ /\d+\.[^a-zA-Z_\s]*\d+/ && $GITLAB_USER_NAME != "rdepends_token"
+    <<: *build_package
+
+  .update_repo_tag: &update_repo_tag
+    rules:
+      - if: $FROM_RDEPENDS_CI == "false" && $CI_COMMIT_TAG =~ /\d+\.[^a-zA-Z_\s]*\d+/ && $GITLAB_USER_NAME != "rdepends_token"
+    <<: *update_repo
+
+  .modify_rdepends_ci: &modify_rdepends_ci
+    rules:
+      - if: $FROM_RDEPENDS_CI == "false" && $CI_COMMIT_TAG =~ /\d+\.[^a-zA-Z_\s]*\d+/ && $GITLAB_USER_NAME != "rdepends_token"
+    script:
+      # Modify child pipeline
+      - apt update || apt -y install ca-certificates && apt update
+      - "scp -i /root/.ssh/iriLabKeyNopwd irilabo@labrepo.iri.upc.edu:repo_scripts/reverse_dependency.sh ."
+      - ./reverse_dependency.sh $PACKAGE_NAME
+
+      # get path
+      - PROJ=( $(apt-cache show iri-$PACKAGE_NAME-dev | grep Homepage) )
+      - declare -a PROJ
+      - if [ ${#PROJ[@]} -eq 2 ]
+      - then
+      -   PROJECT_STRING=${PROJ[1]#https://gitlab.iri.upc.edu/}
+      - else
+      -   echo "No homepage found for iri-$PACKAGE_NAME-dev"
+      -   exit 1
+      - fi
+
+      # git configuration & push
+
+      - git config user.email labrobotica@iri.upc.edu
+      - git config user.name labrobotica
+      - if git checkout -b update_rdepends ; then
+      -   echo "Branch update_rdepends ok."
+      - else
+      -   git branch -D update_rdepends
+      -   git checkout -b update_rdepends
+      -   echo "Re-created branch update_rdepends ok."
+      - fi
+      - git add .rdepends_ci/rdepends_ci.yml
+      - git commit -m "Updated rdepends_ci.yml"
+      - git remote set-url --push origin https://rdepends_token:$ACCESS_TOKEN@gitlab.iri.upc.edu/${PROJECT_STRING}.git || echo "Origin already exists"
+      - git remote show origin
+      - git push --set-upstream origin update_rdepends
+
+  .cleanup_branch_on_failure2: &cleanup_branch_on_failure2
+    rules:
+      - if: $FROM_RDEPENDS_CI == "false" && $CI_COMMIT_TAG =~ /\d+\.[^a-zA-Z_\s]*\d+/ && $GITLAB_USER_NAME != "rdepends_token"
+        when: on_failure
+    script:
+      - *cleanup
+    needs: [modify-rdepends-ci]
+
+  .trigger_rdepends_ci: &trigger_rdepends_ci
+    rules:
+      - if: $CI_COMMIT_BRANCH == "update_rdepends"
+    trigger:
+      include: .rdepends_ci/rdepends_ci.yml
+      strategy: depend
+
+  .cleanup_branch: &cleanup_branch
+    rules:
+      - if: $CI_COMMIT_BRANCH == "update_rdepends"
+    script:
+      - *cleanup
+    needs: [trigger-rdepends-ci]
+
+  .cleanup_branch_on_failure: &cleanup_branch_on_failure
+    rules:
+      - if: $CI_COMMIT_BRANCH == "update_rdepends"
+        when: on_failure
+    script:
+      - *cleanup
+    needs: [trigger-rdepends-ci]
+
+  .generate_new_tag: &generate_new_tag
+    rules:
+      - if: $FROM_RDEPENDS_CI == "true"
+    script:
+    
+      # get path
+      - PROJ=( $(apt-cache show iri-$PACKAGE_NAME-dev | grep Homepage) )
+      - declare -a PROJ
+      - if [ ${#PROJ[@]} -eq 2 ]
+      - then
+      -   PROJECT_STRING=${PROJ[1]#https://gitlab.iri.upc.edu/}
+      - else
+      -   echo "No homepage found for iri-$PACKAGE_NAME-dev"
+      -   exit 1
+      - fi
+      
+      # git configuration & tag
+
+      - git config user.email labrobotica@iri.upc.edu
+      - git config user.name labrobotica
+      - git tag -a $TAG_VERSION -m "New tag by reverse dependency pipeline"
+      - git remote set-url --push origin https://rdepends_token:$ACCESS_TOKEN@gitlab.iri.upc.edu/${PROJECT_STRING}.git || echo "Origin already exists"
+      - git remote show origin
+      - git push origin $TAG_VERSION
+
+  .build_package_rdep: &build_package_rdep
+    rules:
+      - if: $FROM_RDEPENDS_CI == "true"
+    needs: [generate-new-tag]
+    <<: *build_package
+
+  .update_repo_rdep: &update_repo_rdep
+    rules:
+      - if: $FROM_RDEPENDS_CI == "true"
+    needs: [build-package-rdep]
+    <<: *update_repo
+