-
Notifications
You must be signed in to change notification settings - Fork 20
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
Improve error messaging on bad Pants version #156
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -11,7 +11,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from dataclasses import dataclass | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from pathlib import Path | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from subprocess import CalledProcessError | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from typing import Callable, Iterator | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from typing import Any, Callable, Dict, Iterator, List | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from xml.etree import ElementTree | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import tomlkit | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -43,6 +43,10 @@ def pants_find_links_option(self, pants_version_selected: Version) -> str: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return f"--python-repos-{option_name}={operator}['{self.find_links}']" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class TagNotFoundError(Exception): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pass | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def determine_find_links( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ptex: Ptex, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pants_version: str, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -117,12 +121,22 @@ def determine_tag_version( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
github_api_url = ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f"https://api.github.com/repos/pantsbuild/pants/git/refs/tags/{urllib.parse.quote(tag)}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
github_releases_url = "https://github.com/pantsbuild/pants/releases" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So we're actually about to switch to a GitHub Release-based approach for any version >=2. If you're able to sit a smidge, this code might look different when we make that switch. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let me know when that happens and I can revisit. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for waiting! The switch has happened now. For version strings that look new (after For those new ones, Pants is then downloaded from GitHub directly, with some error handling about it not existing (but feel free to fine-tune if you have ideas!), in scie-pants/tools/src/scie_pants/install_pants.py Lines 88 to 116 in 91477f6
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
headers = ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{"Authorization": f"Bearer {github_api_bearer_token}"} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if github_api_bearer_token | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
github_api_tag_url = ptex.fetch_json(github_api_url, **headers)["object"]["url"] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
github_api_response: Dict[str, Any] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
github_api_response = ptex.fetch_json(github_api_url, **headers) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# If the response is not a dict, it typically means multiple matches were found, which | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# means the supplied tag is not an exact match against any tag | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if not isinstance(github_api_response, dict): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
raise TagNotFoundError(f"Could not find Pants tag {tag} in {github_releases_url}") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except CalledProcessError as e: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
raise TagNotFoundError(f"Could not find Pants tag {tag} in {github_releases_url}: {e}") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
github_api_tag_url = github_api_response["object"]["url"] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
commit_sha = ptex.fetch_json(github_api_tag_url, **headers)["object"]["sha"] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return determine_find_links( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I worry that this does no longer make the same assertion about the sub process' exit code as before for all the unrelated tests using this method now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would adding a separate assertion to those call sites make sense? It seems natural for a macro that inspects stderr contents to tolerate nonzero exit codes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As of #296, callers of
assert_stderr_output
can indicate whether the command should either succeed or fail (and both are checked).