diff --git a/package/src/test.rs b/package/src/test.rs index a73ccdb..08c4f51 100644 --- a/package/src/test.rs +++ b/package/src/test.rs @@ -129,6 +129,7 @@ pub(crate) fn run_integration_tests( test_ignore_empty_pants_version_pants_sha(scie_pants_scie); test_pants_from_pex_version(scie_pants_scie); + test_pants_from_bad_pex_version(scie_pants_scie); let clone_root = create_tempdir()?; test_use_in_repo_with_pants_script(scie_pants_scie, &clone_root); @@ -460,6 +461,36 @@ fn test_pants_from_pex_version(scie_pants_scie: &Path) { ); } +fn test_pants_from_bad_pex_version(scie_pants_scie: &Path) { + integration_test!( + "Verify the output of scie-pants is user-friendly if they provide an invalid pants version" + ); + + let tmpdir = create_tempdir().unwrap(); + + let pants_release = "2.18"; + let pants_toml_content = format!( + r#" + [GLOBAL] + pants_version = "{pants_release}" + "# + ); + let pants_toml = tmpdir.path().join("pants.toml"); + write_file(&pants_toml, false, pants_toml_content).unwrap(); + + let err = execute( + Command::new(scie_pants_scie) + .arg("-V") + .current_dir(&tmpdir) + .stderr(Stdio::piped()), + ) + .unwrap_err(); + + let error_text = err.to_string(); + assert!(error_text.contains("Wasn't able to fetch the Pants PEX at")); + assert!(error_text.contains("Pants version format not recognized. Please add `.` to the end of the version. For example: `2.18` -> `2.18.0`")); +} + fn test_use_in_repo_with_pants_script(scie_pants_scie: &Path, clone_root: &TempDir) { integration_test!("Verify scie-pants can be used as `pants` in a repo with the `pants` script"); // This verifies a fix for https://github.com/pantsbuild/scie-pants/issues/28. diff --git a/tools/src/scie_pants/install_pants.py b/tools/src/scie_pants/install_pants.py index cd4f0ad..4846b11 100644 --- a/tools/src/scie_pants/install_pants.py +++ b/tools/src/scie_pants/install_pants.py @@ -105,8 +105,14 @@ def install_pants_from_pex( try: ptex.fetch_to_fp(pex_url, pants_pex.file) except subprocess.CalledProcessError as e: + # if there's only one dot in version, specifically suggest adding the `.patch`) + suggestion = ( + "Pants version format not recognized. Please add `.` to the end of the version. For example: `2.18` -> `2.18.0`.\n\n" + if version.base_version.count(".") < 2 + else "" + ) fatal( - f"Wasn't able to fetch the Pants PEX at {pex_url}.\n\n" + f"Wasn't able to fetch the Pants PEX at {pex_url}.\n\n{suggestion}" "Check to see if the URL is reachable (i.e. GitHub isn't down) and if" f" {pex_name} asset exists within the release." " If the asset doesn't exist it may be that this platform isn't yet supported."