diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 026a75bfc6885ac3ec2d6fe903d5b76ed255ad28..d3e4d42cb0f44711d6172900248372f6fe5e05bf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -56,10 +56,15 @@ release:
   stage: release
   when: manual
   variables:
-    TWINE_USERNAME: gitlab-ci-token
-    TWINE_PASSWORD: $CI_JOB_TOKEN
+    TWINE_USERNAME: gitlab-ci-token  # GitLab's default token username for PyPI
+    TWINE_PASSWORD: $TWINE_PASSWORD  # Personal access token with `write_package_registry` scope
   tags:
     - x86
     - python
   script:
-    - bash make_openapi_client.sh
\ No newline at end of file
+    - pip install --upgrade pip
+    - pip install build twine
+    - python setup.py sdist bdist_wheel
+    - twine upload \
+        --repository-url https://gitlab.psi.ch/api/v4/projects/2206/packages/pypi \
+        dist/*
\ No newline at end of file