diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 19327fe5d69027acf77d329f7f31b605b8cd6865..ebfba05d83096da5f76267924112724d2d152b97 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,17 +2,15 @@ stages:
     - build_and_tests
     - fmt
     - clippy
+    - publish_crate
+    - publish_doc
     - package
     - prerelease
-    - publish
-    
-before_script:
-    - export PATH="$HOME/.cargo/bin:$PATH"
+    - release
 
 variables:
   CARGO_HOME: $CI_PROJECT_DIR/cargo
 
-
 .rust_stable_env: &rust_stable_env
   tags:
     - redshift-rs-stable
@@ -83,7 +81,36 @@ clippy:
     - cargo install --force clippy --verbose
   script:
     - cargo clippy --all -- -D warnings --verbose
-  allow_failure: true  
+  allow_failure: true
+
+publish:crate:
+  <<: *rust_stable_env
+  stage: publish_crate
+  script:
+    - IFS='/' read -r first a <<< "$CI_COMMIT_TAG"
+    - cd $first
+    - cargo login $DUNITER_CRATES_TOKEN
+    - cargo publish
+  only:
+    - tags
+  allow_failure: true
+  when: manual
+
+pages:
+  <<: *rust_stable_env
+  stage: publish_doc
+  script:
+    - cargo doc
+    - mv target/doc public
+    - ls public
+  artifacts:
+    untracked: true
+    paths:
+      - public
+  allow_failure: true
+  when: manual
+  only:
+    - dev
 
 package:test:linux-x64:
   <<: *rust_stable_env
@@ -116,8 +143,8 @@ package:prod:linux-x64:
       - work/bin/
     expire_in: 2 weeks
   only:
-      - dev
-      - tags
+    - tags
+  when: manual
 
 .release_jobs: &release_jobs
   image: tensorflow/tensorflow:latest-py3
@@ -126,7 +153,6 @@ package:prod:linux-x64:
   script:
     - python3 .gitlab/releaser
   only:
-    - dev
     - tags
 
 prerelease:
@@ -136,41 +162,11 @@ prerelease:
     RELEASE_BIN_DIR: work/bin/
     SOURCE_EXT: '["tar.gz", "zip"]'
 
-publish:release:
+release:
   <<: *release_jobs
-  stage: publish
+  stage: release
   variables:
     RELEASE_BIN_DIR: work/bin/
     WIKI_RELEASE: Releases
   allow_failure: false
-  when: manual
-
-publish:crate:
-  <<: *rust_stable_env
-  stage: publish
-  script:
-    - IFS='/' read -r first a <<< "$CI_COMMIT_TAG"
-    - cd $first
-    - cargo login $DUNITER_CRATES_TOKEN
-    - cargo publish
-  only:
-    - publish-crate
-    - tags
-  allow_failure: false
-  when: manual
-
-pages:
-  <<: *rust_stable_env
-  stage: publish
-  script:
-    - cargo doc
-    - mv target/doc public
-    - ls public
-  artifacts:
-    untracked: true
-    paths:
-      - public
-  allow_failure: true
-  when: manual
-  only:
-    - dev
\ No newline at end of file
+  when: manual
\ No newline at end of file