mirror of
https://github.com/rudrankriyam/App-Store-Connect-CLI.git
synced 2026-04-25 07:35:48 +03:00
[PR #751] [MERGED] Improve TestFlight agent UX across builds, notes, groups, and sync #763
Labels
No labels
bug
bug
documentation
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/App-Store-Connect-CLI#763
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/751
Author: @rudrankriyam
Created: 2/24/2026
Status: ✅ Merged
Merged: 2/24/2026
Merged by: @rudrankriyam
Base:
main← Head:fix/testflight-agent-ux📝 Commits (6)
97e8a3ffeat(testflight): streamline build and TestFlight targeting1af80dcfix(builds): align list marketing version and build number filtersd9d3a31test(testflight): add edge-case coverage for builds and sync workflows339f84ffix(builds): normalize app lookup and harden CLI validationc7e7902fix(builds): skip app lookup when using --next3ed7e6cfix(app-lookup): preserve legacy fuzzy resolution after exact matching📊 Changes
31 files changed (+3023 additions, -83 deletions)
View changed files
📝
cmd/exit_codes_test.go(+63 -0)📝
internal/asc/client_builds.go(+7 -4)📝
internal/asc/client_http_test.go(+66 -0)📝
internal/asc/client_options.go(+25 -3)📝
internal/asc/client_queries.go(+4 -3)📝
internal/asc/client_test.go(+20 -0)📝
internal/asc/output_builds.go(+2 -1)📝
internal/asc/output_test.go(+29 -2)📝
internal/cli/betabuildlocalizations/beta_build_localizations.go(+3 -0)📝
internal/cli/builds/build_test_notes.go(+42 -5)📝
internal/cli/builds/builds.go(+101 -3)📝
internal/cli/builds/builds_commands.go(+86 -4)➕
internal/cli/builds/builds_commands_test.go(+33 -0)➕
internal/cli/builds/builds_group_resolver_test.go(+107 -0)📝
internal/cli/builds/builds_latest.go(+14 -5)📝
internal/cli/builds/builds_latest_test.go(+19 -1)➕
internal/cli/cmdtest/beta_groups_add_testers_email_edge_test.go(+204 -0)➕
internal/cli/cmdtest/builds_flag_validation_test.go(+174 -0)➕
internal/cli/cmdtest/builds_latest_lookup_test.go(+87 -0)📝
internal/cli/cmdtest/builds_latest_output_test.go(+251 -37)...and 11 more files
📄 Description
Summary
--app/--bundle-idflag handling across build and testflight commands.docs/CI_CD.md, remove inline Local Validation and Security sections.Design Rationale
Why pre-release version lookup for
--versiononbuilds listThe ASC API's
filter[version]on/v1/buildsfilters by build number (CFBundleVersion), not marketing version (CFBundleShortVersionString). Since--versionshould mean marketing version for agent UX consistency withbuilds latest, we resolve the marketing version to pre-release version IDs first, then filter builds by those IDs viafilter[preReleaseVersion].--build-numbermaps directly tofilter[version].Alternatives considered:
filter[version]directly for--version: Rejected because it would filter by build number, contradicting the flag name andbuilds latestsemantics.Why
ResolveAppIDWithLookupfor bundle-ID / app-name resolutionAgents often know apps by bundle ID or name rather than numeric ASC ID. The lookup function tries bundle ID first, then app name, and fails clearly on ambiguity. It short-circuits immediately for numeric IDs (zero API calls).
Why
BuildDetailsalongsideBuildsin sync YAMLBuildspreserves backward compatibility (simple ID list for scripts).BuildDetailsenriches with metadata (build number, processing state, upload date) for agents and humans. Both are gated behind--include-builds.OpenAPI Cross-Check
filter[version]— confirmed onGET /v1/builds(line 27392 ofdocs/openapi/latest.json)filter[preReleaseVersion]— confirmed onGET /v1/builds(line 27526)filter[expired]— confirmed onGET /v1/builds(line 27406)filter[locale]on/v1/builds/{id}/betaBuildLocalizations— confirmed (line 113319)filter[app]onGET /v1/builds— confirmed (line 27435+)Test plan
make format— passesmake lint— passesASC_BYPASS_KEYCHAIN=1 make test— all tests pass--id+--buildconflict,--buildwithout--locale, invalid locale format, missing--tester/--email,--limitout of range--appexit code, conflicting--id+--buildexit code--version+--build-numbercmdtest verifies bothfilter[preReleaseVersion]andfilter[version]query paramsdocs/CI_CD.mdcontains all CI/CD provider examplesCONTRIBUTING.mdLocal Validation section is completeEdge Cases Tested
--versionwith no matching pre-release versions → emptydata:[]response--nextURL bypasses version filters--emailtester resolution: found, not found, multiple matches, deduplication with--tester--build+--localelocalization lookup: found, not found, multiple🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.