-
-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[error] * invalid-publisher
: valid token, but no corresponding publisher
#138
Comments
@joe733 you forgot to declare the secret containing a PyPI API token, in you repository settings (global, or environment-scoped). So the action got an empty password input which triggered the new OIDC flow for secretless uploads. This feature is in private beta now so you need to set the secret to disable it. https://github.com/python-validators/validators/actions/runs/4550595346#summary-12355045595 @woodruffw do you think we should add some title/pointer to the job summary to mention it's OIDC? Also explaining that to turn off the flow, one should pass in a token/password? |
@joe733 also, what's that |
@joe733 also, I see that you added a Also, @woodruffw — do we need to start pointing to the new public docs? |
@joe733 if you want to enroll in private beta, here's some pointers: https://docs.pypi.org/trusted-publishers/. Otherwise, follow the instructions for making a project-scoped token. |
Hi yes @webknjaz, I didn't know OIDC would be auto triggered if Notice: Attempting to perform OIDC credential exchange to retrieve a temporary short-lived API token for authentication against https://upload.pypi.org/legacy/
Error: OIDC exchange failure:
OIDC token retrieval failed: GitHub: missing or insufficient OIDC token permissions, the ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variable was unset
This generally indicates a workflow configuration error, such as insufficient
permissions. Make sure that your workflow has `id-token: write` configured
at the job level, e.g.:
```yaml
permissions:
id-token: write
```
Learn more at https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#adding-permissions-settings. Before the above notice another message could be given like: Warning: secrets.PYPI_API_TOKEN is empty or rejected.
... Or provide another option like: with:
oidc: false
password: ${{ secrets.PYPI_API_TOKEN }} # gets ignored if oidc is true I think the author @kvesteri currently uses conventional authentication. |
Yeah, that makes sense to me. I can do that in a bit.
Also makes sense to me! |
This change improves the error output produced within the OIDC token exchange script by adding a title and a link to the Warehouse documentation for trusted publishers. Ref #138.
@woodruffw thanks for the PR! I was thinking that we could also have a clearer indication of why the OIDC flow got triggered in the first place. Like "Not using token- or password-based authentication because the user-provided password is empty". Other branches show things like "Using a user-provided API token for authentication" but this specific one doesn't, which is the primary cause for confusion, I suppose. @joe733 suggested the following earlier:
Or course, we cannot say
Nope, the extra input idea was rejected to simplify the process for the end-users. Besides, we already have a clear indication for the OIDC opt-in which is an empty password + the
Likely, not many folks enrolled and have the feature flag for the private beta enabled. |
Makes sense to me, I can do that in a bit! |
Opened #142 with more exposition. |
Hey, unfortunately I'm getting the same error mentioned in the title of this issue when trying to use the trusted publisher feature. I've seen the discussion above from a couple month ago on this being a private feature for beta testers. However, it's now at the top of the README on |
That error indicates that you either haven't registered the publisher on PyPI's side, or that there may be a small typo in how you've registered it. Can you confirm that you performed the trusted publisher registration, and also take a screencap of the publisher as it appears on the "publishing" page on PyPI? That'll help us debug further 🙂 |
Thanks for the rapid response @woodruffw! I've actually solved it since my post 30 mins ago. I think the solution was to remove the optional 'environment' entry on the trusted publisher form on PyPI. I had previously named an environment in my GH repo containing PyPI secrets, which was a legacy from trying to set up publishing with API tokens. I had a theory that these secrets or the environment were somehow disrupting the authentication process, so I re-entered the trusted publisher form with the environment entry omitted and that solved it. Might be worth seeing if you can reproduce? |
Ah yep, that would do it -- if you specify an environment on the PyPI side, then the trusted publisher will only be authorized if the workflow actually runs in that environment. The behavior is as follows:
|
That makes sense, thanks for confirming @woodruffw :-) |
I also met this issue. Since using the environment is strong encouraged by PyPI, I think it's necessary to add this information to the doc and the |
I'm encountering a similar issue as @yozachar; nevertheless, I would suggest adding hints in such cases. I've noticed that the GitHub secret isn't empty in my situation |
@glide-the check #232, maybe that can help you |
@glide-the Yes, #232 should provide some context. In the future, it would be helpful if you could file a new issue with full details for this kind of problem -- it's difficult to triage "similar issues" without any additional context, especially since trusted publishing can fail in a few different but similar-looking ways. Thanks! |
|
From validators/actions/runs/4550595346/jobs/8023753623
What's wrong with
validators/.github/workflows/build.yml
?The text was updated successfully, but these errors were encountered: