diff --git a/CHANGELOG.md b/CHANGELOG.md index a44be7f80a..a490584518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Fixes + +- Fixed a bug, introduced in version 3.0.0, where the `sentry-cli releases list` command ignored the `--project` option ([#3048](https://github.com/getsentry/sentry-cli/pull/3048)). The command now correctly can filter releases by a single project when supplied via `--project`. This change does not enable filtering by multiple projects, which has never been supported. + ## 3.0.1 ### Performance Improvements diff --git a/src/api/mod.rs b/src/api/mod.rs index d810137269..d9f0ea3998 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -542,10 +542,16 @@ impl AuthenticatedApi<'_> { /// Returns a list of releases for a given project. This is currently a /// capped list by what the server deems an acceptable default limit. - pub fn list_releases(&self, org: &str) -> ApiResult> { - let path = format!("/organizations/{}/releases/", PathArg(org)); - self.get(&path)? - .convert_rnf::>(ApiErrorKind::OrganizationNotFound) + pub fn list_releases(&self, org: &str, project: Option<&str>) -> ApiResult> { + if let Some(project) = project { + let path = format!("/projects/{}/{}/releases/", PathArg(org), PathArg(project)); + self.get(&path)? + .convert_rnf::>(ApiErrorKind::ProjectNotFound) + } else { + let path = format!("/organizations/{}/releases/", PathArg(org)); + self.get(&path)? + .convert_rnf::>(ApiErrorKind::OrganizationNotFound) + } } /// Looks up a release commits and returns it. If it does not exist `None` diff --git a/src/commands/releases/list.rs b/src/commands/releases/list.rs index a6abf0de82..3346ea2fb8 100644 --- a/src/commands/releases/list.rs +++ b/src/commands/releases/list.rs @@ -43,9 +43,10 @@ pub fn make_command(command: Command) -> Command { pub fn execute(matches: &ArgMatches) -> Result<()> { let config = Config::current(); let api = Api::current(); + let project = config.get_project(matches).ok(); let releases = api .authenticated()? - .list_releases(&config.get_org(matches)?)?; + .list_releases(&config.get_org(matches)?, project.as_deref())?; if matches.get_flag("raw") { let versions = releases diff --git a/tests/integration/releases/list.rs b/tests/integration/releases/list.rs index 893714c757..b2052b4be1 100644 --- a/tests/integration/releases/list.rs +++ b/tests/integration/releases/list.rs @@ -4,7 +4,7 @@ use crate::integration::{MockEndpointBuilder, TestManager}; fn displays_releases() { TestManager::new() .mock_endpoint( - MockEndpointBuilder::new("GET", "/api/0/organizations/wat-org/releases/") + MockEndpointBuilder::new("GET", "/api/0/projects/wat-org/wat-project/releases/") .with_response_file("releases/get-releases.json"), ) .register_trycmd_test("releases/releases-list.trycmd") @@ -15,7 +15,7 @@ fn displays_releases() { fn displays_releases_with_projects() { TestManager::new() .mock_endpoint( - MockEndpointBuilder::new("GET", "/api/0/organizations/wat-org/releases/") + MockEndpointBuilder::new("GET", "/api/0/projects/wat-org/wat-project/releases/") .with_response_file("releases/get-releases.json"), ) .register_trycmd_test("releases/releases-list-with-projects.trycmd") @@ -26,7 +26,7 @@ fn displays_releases_with_projects() { fn doesnt_fail_with_empty_response() { TestManager::new() .mock_endpoint( - MockEndpointBuilder::new("GET", "/api/0/organizations/wat-org/releases/") + MockEndpointBuilder::new("GET", "/api/0/projects/wat-org/wat-project/releases/") .with_response_body("[]"), ) .register_trycmd_test("releases/releases-list-empty.trycmd") @@ -37,7 +37,7 @@ fn doesnt_fail_with_empty_response() { fn can_override_org() { TestManager::new() .mock_endpoint( - MockEndpointBuilder::new("GET", "/api/0/organizations/whynot/releases/") + MockEndpointBuilder::new("GET", "/api/0/projects/whynot/wat-project/releases/") .with_response_file("releases/get-releases.json"), ) .register_trycmd_test("releases/releases-list-override-org.trycmd") @@ -48,7 +48,7 @@ fn can_override_org() { fn displays_releases_in_raw_mode() { TestManager::new() .mock_endpoint( - MockEndpointBuilder::new("GET", "/api/0/organizations/wat-org/releases/") + MockEndpointBuilder::new("GET", "/api/0/projects/wat-org/wat-project/releases/") .with_response_file("releases/get-releases.json"), ) .register_trycmd_test("releases/releases-list-raw.trycmd") @@ -59,7 +59,7 @@ fn displays_releases_in_raw_mode() { fn displays_releases_in_raw_mode_with_delimiter() { TestManager::new() .mock_endpoint( - MockEndpointBuilder::new("GET", "/api/0/organizations/wat-org/releases/") + MockEndpointBuilder::new("GET", "/api/0/projects/wat-org/wat-project/releases/") .with_response_file("releases/get-releases.json"), ) .register_trycmd_test("releases/releases-list-raw-delimiter.trycmd")