diff --git a/scripts/ci/jobs/release.yml b/scripts/ci/jobs/release.yml
index 81bba47813ab17c3aa4593e76b5384b931ff3b44..bb2581ec1cadac5b05bbfda649bef5ebb556f50e 100644
--- a/scripts/ci/jobs/release.yml
+++ b/scripts/ci/jobs/release.yml
@@ -9,3 +9,24 @@ release:
   release:
     tag_name: "$CI_COMMIT_TAG"
     description: "Created using the GitLab release-cli."
+
+publish wheels:
+  stage: release
+  needs: ["build wheels linux", "build wheels mac", "build wheels win"]
+  tags: [envinf, shell]
+  rules:
+    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+      variables:
+        PYPI_PASSWORD: "${TEST_PYPI_TOKEN}"
+        PYPI_REPO: testpypi
+    - if: $CI_COMMIT_TAG
+      variables:
+        PYPI_PASSWORD: "${PYPI_TOKEN}"
+        PYPI_REPO: pypi
+  script:
+    - >
+      pipx run twine upload
+      --repository ${PYPI_REPO}
+      --username __token__
+      --password ${PYPI_PASSWORD}
+      wheelhouse/*