diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1f99e500845b784221e3a01bb33b59d1d8839ef7..bda5761d0d80f67fc004382159644faf962a3008 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -11,6 +11,7 @@ stages:
   - build
   # - test
   - publish
+  - publish-test
 
 variables:
   PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip-cache"
@@ -41,3 +42,12 @@ publish:
   rules:
     - if: $CI_COMMIT_TAG
     - if: $CI_PIPELINE_SOURCE == "release"
+
+publish-test:
+  stage: publish-test
+  script:
+    - TWINE_PASSWORD=${TEST_PYPI_TOKEN} TWINE_USERNAME=__token__ python3 -m twine upload --repository testpypi dist/*
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "main"'
+  dependencies:
+    - build