diff --git a/templates/npm_projects.gitlab-ci.yml b/templates/npm_projects.gitlab-ci.yml
index 919d0cb298717f2ce4196634c6ec3b85153c0d12..031022d0153a1292fd55138e0b608e0a9400cc0a 100644
--- a/templates/npm_projects.gitlab-ci.yml
+++ b/templates/npm_projects.gitlab-ci.yml
@@ -56,7 +56,7 @@ variables:
     when: always
     expire_in: 1 week
 
-.npm_test_template:
+.npm_process_built_package_tarball:
   extends: .npm_based_job_base
   variables:
     # Path pointing the source directory containing a package.json file - it can be overrided by derived job
@@ -64,11 +64,22 @@ variables:
     # Path to the built package tarball - it should be overrided by derived job
     PACKAGE_TGZ_PATH: ""
 
-  script:
+  before_script:
+    - !reference [.npm_based_job_base, before_script]
     - echo -e "\e[0Ksection_start:$(date +%s):package_tgz_unpack[collapsed=true]\r\e[0KAttempting to unpack ${PACKAGE_TGZ_PATH}"
     - cd "${CI_PROJECT_DIR}"
     - tar -xf "${PACKAGE_TGZ_PATH}" -C "${SOURCE_DIR}" --strip-components=1
     - echo -e "\e[0Ksection_end:$(date +%s):package_tgz_unpack\r\e[0K"
+
+.npm_test_template:
+  extends: .npm_process_built_package_tarball
+  variables:
+    # Path pointing the source directory containing a package.json file - it can be overrided by derived job
+    SOURCE_DIR: "${CI_PROJECT_DIR}"
+    # Path to the built package tarball - it should be overrided by derived job
+    PACKAGE_TGZ_PATH: ""
+
+  script:
     - echo -e "\e[0Ksection_start:$(date +%s):testing[collapsed=false]\r\e[0KAttempting to start tests..."
     - cd "${SOURCE_DIR}"
     - npm run test
@@ -88,7 +99,7 @@ variables:
 # Base definition for NPM package publishing job.
 # The derived job, should have in its dependencies a final job performing a npm-build (derived from `.npm_build_template`)
 .npm_deploy_package_template:
-  extends: .npm_based_job_base
+  extends: .npm_process_built_package_tarball
   variables:
     # The directory containing sources to be built - it can be overrided by derived job
     SOURCE_DIR: "${CI_PROJECT_DIR}"
@@ -100,10 +111,32 @@ variables:
     NPM_PUBLISH_TOKEN: "${CI_JOB_TOKEN}"
 
   script:
-    - echo -e "\e[0Ksection_start:$(date +%s):package_tgz_unpack[collapsed=true]\r\e[0KAttempting to unpack ${PACKAGE_TGZ_PATH}"
-    - cd "${CI_PROJECT_DIR}"
-    - tar -xf "${PACKAGE_TGZ_PATH}" -C "${SOURCE_DIR}" --strip-components=1
-    - echo -e "\e[0Ksection_end:$(date +%s):package_tgz_unpack\r\e[0K"
     - echo -e "\e[0Ksection_start:$(date +%s):publishing[collapsed=false]\r\e[0KAttempting to publish a package..."
     - /home/emscripten/scripts/npm_publish.sh "${SOURCE_DIR}" "${NPM_REGISTRY_URL}" "${NPM_PACKAGE_SCOPE}" "${NPM_PUBLISH_TOKEN}"
-    - echo -e "\e[0Ksection_end:$(date +%s):publishing\r\e[0K"
+    - echo -e "\e[0Ksection_end:$(date +%s):publishing\r\e[0KDone"
+
+# Base definition for NPM package publishing job to the registry.npmjs.org.
+# The derived job, should have in its dependencies a final job performing a npm-build (derived from `.npm_build_template`)
+.registry_npmjs_org_deploy_package_template:
+  extends: .npm_process_built_package_tarball
+  variables:
+    # The directory containing sources to be built - it can be overrided by derived job
+    SOURCE_DIR: "${CI_PROJECT_DIR}"
+    # Target package name - it should be overrided by derived job
+    NPM_PACKAGE_NAME: ""
+    # Path to the built package tarball - it should be overrided by derived job
+    PACKAGE_TGZ_PATH: ""
+    # registry.npmjs.org authentication token - it should be overrided by derived job
+    NPM_PUBLISH_TOKEN: ""
+
+  script:
+   # project version info must be regenerated accoring to correct target registry, package scope and name
+    - "/home/emscripten/scripts/npm_generate_version.sh" "${SOURCE_DIR}" "registry.npmjs.org/" "@hiveio" "${NPM_PACKAGE_NAME}"
+    - echo -e "\e[0Ksection_start:$(date +%s):publishing[collapsed=false]\r\e[0KAttempting to publish a package to registry.npmjs.org..."
+    - /home/emscripten/scripts/npm_publish.sh "${SOURCE_DIR}" "registry.npmjs.org/" "@hiveio" "${NPM_PUBLISH_TOKEN}"
+    - echo -e "\e[0Ksection_end:$(date +%s):publishing\r\e[0KDone"
+
+  rules:
+    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
+      when: manual
+      allow_failure: true