Docs: add instructions for publishing to JFrog's Artifactory (#14253)

## Summary

Add instructions for publishing to JFrog's Artifactory into
[documentation](https://docs.astral.sh/uv/guides/integration/alternative-indexes/).

Related issues:
https://github.com/astral-sh/uv/issues/9845
https://github.com/astral-sh/uv/issues/10193

## Test Plan

I ran the documentation locally and use npx prettier.

---------

Co-authored-by: Ondrej Profant <ondrej.profant@datamole.ai>
Co-authored-by: Zanie Blue <contact@zanie.dev>
This commit is contained in:
Ondrej Profant 2025-06-30 15:58:55 +02:00 committed by GitHub
parent 5cfabd7085
commit ae500c95d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -368,6 +368,68 @@ $ uv publish
Note this method is not preferable because uv cannot check if the package is already published
before uploading artifacts.
## Other package indexes
## JFrog Artifactory
uv is also known to work with JFrog's Artifactory.
uv can install packages from JFrog Artifactory, either by using a username and password or a JWT
token.
To use it, add the index to your project:
```toml title="pyproject.toml"
[[tool.uv.index]]
name = "private-registry"
url = "https://<organization>.jfrog.io/artifactory/api/pypi/<repository>/simple"
```
### Authenticate with username and password
```console
$ export UV_INDEX_PRIVATE_REGISTRY_USERNAME="<username>"
$ export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="<password>"
```
### Authenticate with JWT token
```console
$ export UV_INDEX_PRIVATE_REGISTRY_USERNAME=""
$ export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$JFROG_JWT_TOKEN"
```
!!! note
Replace `PRIVATE_REGISTRY` in the environment variable names with the actual index name defined in your `pyproject.toml`.
### Publishing packages to JFrog Artifactory
Add a `publish-url` to your index definition:
```toml title="pyproject.toml"
[[tool.uv.index]]
name = "private-registry"
url = "https://<organization>.jfrog.io/artifactory/api/pypi/<repository>/simple"
publish-url = "https://<organization>.jfrog.io/artifactory/api/pypi/<repository>"
```
!!! important
If you use `--token "$JFROG_TOKEN"` or `UV_PUBLISH_TOKEN` with JFrog, you will receive a
401 Unauthorized error as JFrog requires an empty username but uv passes `__token__` for as
the username when `--token` is used.
To authenticate, pass your token as the password and set the username to an empty string:
```console
$ uv publish --index <index_name> -u "" -p "$JFROG_TOKEN"
```
Alternatively, you can set environment variables:
```console
$ export UV_PUBLISH_USERNAME=""
$ export UV_PUBLISH_PASSWORD="$JFROG_TOKEN"
$ uv publish --index private-registry
```
!!! note
The publish environment variables (`UV_PUBLISH_USERNAME` and `UV_PUBLISH_PASSWORD`) do not include the index name.