diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 54486107e4743463a086c5a0c1c7642d44cfa5e9..fe76e8b12c7df04399cfbb32f302120e99c75575 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,14 +1,27 @@
   image: docker.io/labrobotica/labrobotica:latest
 
+  variables:
+    GIT_SUBMODULE_STRATEGY: recursive
+    FROM_RDEPENDS_CI: "false"
+    TAG_VERSION: $CI_COMMIT_TAG
+    PACKAGE_NAME: "package"
+
   stages:
-    - rdepends
+    - build
+    - update_package
+    - update_reverse_dependencies
 
-  test_dep:
-    stage: rdepends
+##### definitions #####
+  .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
-      - apt update || apt -y install ca-certificates && apt update
       - |+
         for ((i=1;i<${#DEP[@]};i+=3))
         do
@@ -18,4 +31,188 @@
           else
             apt -y install ${DEP[${i}]};
           fi
-        done
\ No newline at end of file
+        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
+
+###################
+      
+  build-package-tag:
+    stage: build
+    <<: *build_package
+
+
+  update-repo-tag:
+    stage: update_package
+    <<: *update_repo_tag
+
+
+  modify-rdepends-ci:
+    stage: update_reverse_dependencies
+    <<: *modify_rdepends_ci
+
+
+  cleanup-branch-on-failure2:
+    stage: update_reverse_dependencies
+    <<: *cleanup_branch_on_failure2
+
+
+  trigger-rdepends-ci:
+    stage: update_reverse_dependencies
+    <<: *trigger_rdepends_ci
+
+
+  cleanup-branch:
+    stage: update_reverse_dependencies
+    <<: *cleanup_branch
+
+  cleanup-branch-on-failure:
+    stage: update_reverse_dependencies
+    <<: *cleanup_branch_on_failure
+
+
+  generate-new-tag:
+    stage: update_reverse_dependencies
+    <<: *generate_new_tag
+
+  build-package-rdep:
+    stage: update_reverse_dependencies
+    <<: *build_package_rdep
+
+
+  update-repo-rdep:
+    stage: update_reverse_dependencies
+    <<: *update_repo_rdep
\ No newline at end of file