Unable to publish to Azure Artifacts
See original GitHub issue- I am on the latest Poetry version.
- I have searched the issues of this repo and believe that this is not a duplicate.
- If an exception occurs when executing a command, I executed it again in debug mode (
-vvv
option).
- OS version and name: Windows 10
- Poetry version: 1.0.9
- Link of a Gist with the contents of your pyproject.toml file: Sorry private repo 👍
Issue
I am trying to publish a python package to my companies Azure DevOps Artifacts. I have built the package using poetry. A run the following at the command line:
❯ poetry --version
Poetry version 1.0.9
❯ poetry config repositories.azure https://pkgs.dev.azure.com/.../pypi/upload
❯ poetry install
Installing dependencies from lock file
No dependencies to install or update
- Installing pyia (0.1.0)
❯ poetry build
Building pyia (0.1.0)
- Building sdist
- Built pyia-0.1.0.tar.gz
- Building wheel
- Built pyia-0.1.0-py3-none-any.whl
❯ poetry publish -r azure --username <> --password <> -vvv
Publishing pyia (0.1.0) to azure
- Uploading pyia-0.1.0-py3-none-any.whl 0%
- Uploading pyia-0.1.0-py3-none-any.whl 100%
- Uploading pyia-0.1.0-py3-none-any.whl 100%
[UploadError]
HTTP Error 401: Unauthorized
Traceback (most recent call last):
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\clikit\console_application.py", line 131, in run
status_code = command.handle(parsed_args, io)
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\clikit\api\command\command.py", line 120, in handle
status_code = self._do_handle(args, io)
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\clikit\api\command\command.py", line 171, in _do_handle
return getattr(handler, handler_method)(args, io, self)
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\cleo\commands\command.py", line 92, in wrap_handle
return self.handle()
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\poetry\console\commands\publish.py", line 81, in handle
client_cert,
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\poetry\masonry\publishing\publisher.py", line 92, in publish
client_cert=resolved_client_cert,
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\poetry\masonry\publishing\uploader.py", line 110, in upload
self._upload(session, url)
File "C:\Users\sedwardes\Miniconda3\envs\ia_py\lib\site-packages\poetry\masonry\publishing\uploader.py", line 205, in _upload
raise UploadError(e)
I have used Poetry to publish to public repos before. But not Azure or private repos. I have a hunch there may be an issue with Azure Artifacts keyring. The Azure documentation suggests to use twine, and you authenticate with the Azure keyring.
Lastly I tried to copy the code from https://www.nuomiphp.com/eplan/en/104789.html, but I was met with the same error when following this template.
Any ideas on how to publish to Azure Artifacts?
Issue Analytics
- State:
- Created 3 years ago
- Comments:7 (2 by maintainers)
Top Results From Across the Web
Cannot publish an npm package to Azure Artifacts
I'm following the instructions here and can't publish my package. I was able to do it before. Azure DevOpsAzure DevOps. Pinned.
Read more >Unable to publish in Azure artifact using gradle publish
I am currently using gradle publish to be able to ublish the jar into Azure Artifact. I have followed the instructions as:
Read more >Publishing of Artifacts - Microsoft Community Hub
Hi, I'm building and publishing the artifacts to artifact repository in Azure devops by running the pipeline. I again ran the pipeline without...
Read more >Not found PathtoPublish: C:\DynamicsSDK\VSOAgent\_work\2 ...
Publishing build artifacts failed with an error: Not found PathtoPublish: C:\DynamicsSDK\VSOAgent\_work\2\a\Logs ... Hi everyone,. I am trying to run a pipeline ...
Read more >NPM publish to Azure Artifacts fails | Rick van den Bosch .NET
We found out pretty quickly that it was an authentication issue. Because of this we thought that the npm publish task of Azure...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
poetry publish
works when used along with personal access token of Azure Artifacts.Note: When using personal access token,
username
is not required and can be anythingThen, finally, you can upload to Artifacts using the
publish
commandHi, original developer of
artifacts-keyring
and occasionalkeyring
contributor here 👋In short, artifacts-keyring wraps up a separate tool that is able to use locally cached Azure DevOps credentials (or pop up a login window) to get a temporary access token to Azure Artifacts. This token isn’t tied to the user’s username, but comes with the username. To support this in
keyring
, we added the get_credential API.It looks like Poetry is currently only using the
get_password
API (here), which requires a known username.get_credential
may accept a username (it’s optional), and returns an object that provides both username and password to use.If the version of
keyring
you find hasget_credential
, that’s the only one you need to call - backends that don’t support it will automatically use the result fromget_password
. However, if you don’t have a username, you can still callget_credential
with the index URL to have it generate a valid credential. (It looks like Poetry currently creates its own entry names, which won’t work with theartifacts-keyring
backend - we need at least thehttps://dev.azure.com/<name>
part of the URL, and fail quickly for any query that doesn’t match this.)There should be no harm in deferring the
get_credential
call until a 401 has been received, and it’s fine to pass the target URL with an always empty username (to avoid looking up any stored credentials). There ought not be a need to specifically search for the presence of thekeyring
backend.