GitLab Package Registry

Ihr könnt eure Verteilungspakete auch in der Paketregistrierung eures GitLab-Projekts veröffentlichen. Folgende Bedingungen müssen hierfür jedoch erfüllt sein:

  • Ihr müsst euch bei der Paketregistrierung authentifizieren.

  • Eure Versionsangabe muss gültig sein.

  • Das Paket muss kleiner als 5 GB sein und description darf höchstens 4000 Zeichen lang sein.

  • Das Paket wurde noch nicht in der Paketregistrierung veröffentlicht. Der Versuch, die gleiche Version eines Pakets zu veröffentlichen, liefert 400 Bad Request zurück.

Anschließend könnt ihr sowohl mit pip als auch mit uv das Paket nutzen.

Authentifizierung

Zur Authentifizierung an der GitLab Package Registry könnt ihr eine der folgenden Methoden verwenden:

.gitlab-ci.yml
variables:
  UV_VERSION: 0.5
  PYTHON_VERSION: 3.12
  BASE_LAYER: bookworm-slim
  UV_PUBLISH_USERNAME: <personal_access_token_name>
  UV_PUBLISH_PASSWORD: <personal_access_token>
.gitlab-ci.yml
variables:
  UV_VERSION: 0.5
  PYTHON_VERSION: 3.12
  BASE_LAYER: bookworm-slim
  UV_PUBLISH_USERNAME: <deploy_token_username>
  UV_PUBLISH_PASSWORD: <deploy_token>
.gitlab-ci.yml
variables:
  UV_VERSION: 0.5
  PYTHON_VERSION: 3.12
  BASE_LAYER: bookworm-slim
  UV_PUBLISH_USERNAME: <gitlab-ci-token>
  UV_PUBLISH_PASSWORD: $CI_JOB_TOKEN

Authentifizierung für eine Gruppe

Verwendet statt der PROJECT_ID die GROUP_URL.

Veröffentlichen des Verteilungspakets

Nun könnt ihr euer Paket auf GitLab veröffentlichen mit:

.gitlab-ci.yml

stages:
  - publish

uv:
  stage: publish
  image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-$BASE_LAYER
  script:
    - uv build
    - uv publish --publish-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*

Tipp

Ggf. könnt ihr mit RUST_LOG=uv=trace weitere Informationen zu den Authentifizierungsversuchen erhalten, also z.B. mit RUST_LOG=uv=trace uv --verbose publish --publish-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*.

Siehe auch

In GitLab CI/CD erhaltet ihr weitere Ninweise zur Konfiguration der .gitlab-ci.yml-Datei.

Installieren des Pakets

Ihr könnt die neueste Version eures Pakets installieren z.B. mit

$ uv add -i https://{NAME}:{PERSONAL_ACCESS_TOKEN}@ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi/simple --no-deps {PACKAGE_NAME}

… oder von der Gruppenebene aus mit

$ uv add -i https://{NAME}:{PERSONAL_ACCESS_TOKEN}@ce.cusy.io/api/v4/groups/{GROUP_ID}/-/packages/pypi/simple --no-deps {PACKAGE_NAME}

… oder in der pyproject.toml-Datei mit:

pyproject.toml
[tool.uv]
extra-index-url = ["https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi/simple {PACKAGE_NAME}"]