[GH-ISSUE #45] Add pre-release versions list/read commands #8

Closed
opened 2026-02-26 21:32:44 +03:00 by kerem · 3 comments
Owner

Originally created by @rudrankriyam on GitHub (Jan 23, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/45

Summary

Add commands to list/read TestFlight pre-release versions.

API endpoints

Query support

  • filter[app] (app ID)
  • filter[platform] (IOS, MAC_OS, TV_OS, VISION_OS)
  • filter[version] (version string)
  • limit, links.next, --paginate

CLI

  • asc pre-release-versions list --app "APP_ID" [--platform ...] [--version ...] [--limit ...] [--next ...] [--paginate]
  • asc pre-release-versions get --id "PR_ID"

Output

  • JSON minified default; --output table|markdown; --pretty for JSON.

Tests

  • internal/asc client query tests
  • cmd/commands_test.go for CLI parsing + output
Originally created by @rudrankriyam on GitHub (Jan 23, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/45 ## Summary Add commands to list/read TestFlight pre-release versions. ## API endpoints - `GET /v1/apps/{id}/preReleaseVersions` (list by app) — https://developer.apple.com/documentation/appstoreconnectapi/list_prerelease_versions - `GET /v1/preReleaseVersions` (list with filters) — https://developer.apple.com/documentation/appstoreconnectapi/list_prerelease_versions - `GET /v1/preReleaseVersions/{id}` (read) — https://developer.apple.com/documentation/appstoreconnectapi/read_prerelease_version_information ## Query support - `filter[app]` (app ID) - `filter[platform]` (IOS, MAC_OS, TV_OS, VISION_OS) - `filter[version]` (version string) - `limit`, `links.next`, `--paginate` ## CLI - `asc pre-release-versions list --app "APP_ID" [--platform ...] [--version ...] [--limit ...] [--next ...] [--paginate]` - `asc pre-release-versions get --id "PR_ID"` ## Output - JSON minified default; `--output table|markdown`; `--pretty` for JSON. ## Tests - `internal/asc` client query tests - `cmd/commands_test.go` for CLI parsing + output
kerem closed this issue 2026-02-26 21:32:45 +03:00
Author
Owner

@rudrankriyam commented on GitHub (Jan 23, 2026):

@cursor Please implement this issue.

Implementation Guide

1. Create cmd/prerelease.go

Create a new command group for pre-release versions:

// PreReleaseVersionsCommand returns the pre-release-versions command.
func PreReleaseVersionsCommand() *ffcli.Command {
    // Subcommands: list, get
}

2. Add Client Methods in internal/asc/client.go

// Types
type PreReleaseVersionsResponse struct {
    Data  []PreReleaseVersion `json:"data"`
    Links Links               `json:"links,omitempty"`
}

type PreReleaseVersion struct {
    Type       string                      `json:"type"`
    ID         string                      `json:"id"`
    Attributes PreReleaseVersionAttributes `json:"attributes"`
}

type PreReleaseVersionAttributes struct {
    Version  string `json:"version"`
    Platform string `json:"platform"`
}

// Methods
func (c *Client) GetPreReleaseVersions(ctx, appID string, opts...) (*PreReleaseVersionsResponse, error)
func (c *Client) GetPreReleaseVersion(ctx, id string) (*PreReleaseVersionResponse, error)

Use functional options pattern like BetaGroupsOption:

  • WithPreReleaseVersionsPlatform(platform string)
  • WithPreReleaseVersionsVersion(version string)
  • WithPreReleaseVersionsLimit(limit int)
  • WithPreReleaseVersionsNextURL(next string)

3. Register Command

Add PreReleaseVersionsCommand() to RootCommand.Subcommands in cmd/commands.go.

4. Flags

For list:

  • --app (required)
  • --platform (IOS, MAC_OS, TV_OS, VISION_OS)
  • --version (version string filter)
  • --limit, --next, --paginate
  • --output, --pretty

For get:

  • --id (required)
  • --output, --pretty

5. Testing

Unit tests in cmd/commands_test.go:

{"pre-release-versions list missing app", []string{"pre-release-versions", "list"}, ...}
{"pre-release-versions get missing id", []string{"pre-release-versions", "get"}, ...}

Client tests in internal/asc/client_http_test.go:

  • Test query building with platform filter
  • Test pagination

Live API test:

./asc pre-release-versions list --app 6747745091
./asc pre-release-versions list --app 6747745091 --platform IOS
./asc pre-release-versions list --app 6747745091 --output table

6. Output Formatters

Add table/markdown formatters following the pattern in client.go:

func printPreReleaseVersionsTable(resp *PreReleaseVersionsResponse) error
func printPreReleaseVersionsMarkdown(resp *PreReleaseVersionsResponse) error

Table columns: ID | Version | Platform

7. Code Standards

  • Validate platform values against allowed enum (IOS, MAC_OS, TV_OS, VISION_OS)
  • Use strings.TrimSpace() on all inputs
  • Follow existing ffcli patterns
  • Run make format && make lint && make test before committing
<!-- gh-comment-id:3792262001 --> @rudrankriyam commented on GitHub (Jan 23, 2026): @cursor Please implement this issue. ## Implementation Guide ### 1. Create `cmd/prerelease.go` Create a new command group for pre-release versions: ```go // PreReleaseVersionsCommand returns the pre-release-versions command. func PreReleaseVersionsCommand() *ffcli.Command { // Subcommands: list, get } ``` ### 2. Add Client Methods in `internal/asc/client.go` ```go // Types type PreReleaseVersionsResponse struct { Data []PreReleaseVersion `json:"data"` Links Links `json:"links,omitempty"` } type PreReleaseVersion struct { Type string `json:"type"` ID string `json:"id"` Attributes PreReleaseVersionAttributes `json:"attributes"` } type PreReleaseVersionAttributes struct { Version string `json:"version"` Platform string `json:"platform"` } // Methods func (c *Client) GetPreReleaseVersions(ctx, appID string, opts...) (*PreReleaseVersionsResponse, error) func (c *Client) GetPreReleaseVersion(ctx, id string) (*PreReleaseVersionResponse, error) ``` Use functional options pattern like `BetaGroupsOption`: - `WithPreReleaseVersionsPlatform(platform string)` - `WithPreReleaseVersionsVersion(version string)` - `WithPreReleaseVersionsLimit(limit int)` - `WithPreReleaseVersionsNextURL(next string)` ### 3. Register Command Add `PreReleaseVersionsCommand()` to `RootCommand.Subcommands` in `cmd/commands.go`. ### 4. Flags For `list`: - `--app` (required) - `--platform` (IOS, MAC_OS, TV_OS, VISION_OS) - `--version` (version string filter) - `--limit`, `--next`, `--paginate` - `--output`, `--pretty` For `get`: - `--id` (required) - `--output`, `--pretty` ### 5. Testing **Unit tests** in `cmd/commands_test.go`: ```go {"pre-release-versions list missing app", []string{"pre-release-versions", "list"}, ...} {"pre-release-versions get missing id", []string{"pre-release-versions", "get"}, ...} ``` **Client tests** in `internal/asc/client_http_test.go`: - Test query building with platform filter - Test pagination **Live API test**: ```bash ./asc pre-release-versions list --app 6747745091 ./asc pre-release-versions list --app 6747745091 --platform IOS ./asc pre-release-versions list --app 6747745091 --output table ``` ### 6. Output Formatters Add table/markdown formatters following the pattern in `client.go`: ```go func printPreReleaseVersionsTable(resp *PreReleaseVersionsResponse) error func printPreReleaseVersionsMarkdown(resp *PreReleaseVersionsResponse) error ``` Table columns: `ID | Version | Platform` ### 7. Code Standards - Validate platform values against allowed enum (IOS, MAC_OS, TV_OS, VISION_OS) - Use `strings.TrimSpace()` on all inputs - Follow existing `ffcli` patterns - Run `make format && make lint && make test` before committing
Author
Owner

@cursor[bot] commented on GitHub (Jan 23, 2026):

Summary:

  • Added pre-release versions client types/options, list/get methods, pagination support, and table/markdown formatters.
  • Implemented asc pre-release-versions command group with list/get subcommands, flag validation, and output wiring.
  • Added client HTTP/query tests plus CLI validation tests.

Tests:

  • make format
  • make lint
  • make test

Notes:

  • make format initially failed due to missing gofumpt; installed mvdan.cc/gofumpt@latest and reran.

View PR
Open in Cursor Open in Web

<!-- gh-comment-id:3792262287 --> @cursor[bot] commented on GitHub (Jan 23, 2026): Summary: - Added pre-release versions client types/options, list/get methods, pagination support, and table/markdown formatters. - Implemented `asc pre-release-versions` command group with list/get subcommands, flag validation, and output wiring. - Added client HTTP/query tests plus CLI validation tests. Tests: - `make format` - `make lint` - `make test` Notes: - `make format` initially failed due to missing `gofumpt`; installed `mvdan.cc/gofumpt@latest` and reran. <a href="https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/59"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/view-pr-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/view-pr-light.svg"><img alt="View PR" src="https://cursor.com/view-pr-light.svg"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-9ce3b526-4e86-4918-86e3-c5ae34999e78"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a href="https://cursor.com/agents?id=bc-9ce3b526-4e86-4918-86e3-c5ae34999e78"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web" src="https://cursor.com/open-in-web.svg"></picture></a>
Author
Owner

@rudrankriyam commented on GitHub (Jan 23, 2026):

Implemented in PR #59 - pre-release-versions list and get commands.

<!-- gh-comment-id:3792501456 --> @rudrankriyam commented on GitHub (Jan 23, 2026): Implemented in PR #59 - pre-release-versions list and get commands.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#8
No description provided.