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 Note this method is not preferable because uv cannot check if the package is already published
before uploading artifacts. 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.