diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bbfc4ff64070f03bf0368b0b0f58da4ad8e8b8ea..93144acb510def4f3f30cf90b8990178d231b09a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,3 +55,22 @@ bump-python-deps:
 
   script:
     - devops python-deps requirements.txt
+
+deploy-pypi:
+  stage: release
+  image: python:3.10
+
+  only:
+    - tags
+
+  variables:
+    TWINE_USERNAME: gitlab-ci-token
+    TWINE_PASSWORD: ${CI_JOB_TOKEN}
+    TWINE_REPOSITORY_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi
+
+  before_script:
+    - pip install twine
+
+  script:
+    - python setup.py sdist bdist_wheel
+    - twine upload --repository-url ${TWINE_REPOSITORY_URL} dist/*