Skip to content

Commit 95daaf3

Browse files
committed
feat: add package versions list command
Add list support for alternative distribution package versions and update README examples and CLI validation tests.
1 parent 24ff537 commit 95daaf3

File tree

4 files changed

+101
-0
lines changed

4 files changed

+101
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ asc alternative-distribution keys app --app "APP_ID"
402402
# Create and fetch packages and versions
403403
asc alternative-distribution packages create --app-store-version-id "APP_STORE_VERSION_ID"
404404
asc alternative-distribution packages get --package-id "PACKAGE_ID"
405+
asc alternative-distribution packages versions list --package-id "PACKAGE_ID"
405406
asc alternative-distribution packages versions get --version-id "VERSION_ID"
406407
asc alternative-distribution packages versions deltas --version-id "VERSION_ID"
407408
asc alternative-distribution packages versions variants --version-id "VERSION_ID"

internal/cli/alternativedistribution/alternative_distribution_package_versions.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ func AlternativeDistributionPackageVersionsCommand() *ffcli.Command {
2323
LongHelp: `Manage alternative distribution package versions.
2424
2525
Examples:
26+
asc alternative-distribution packages versions list --package-id "PACKAGE_ID"
2627
asc alternative-distribution packages versions get --version-id "VERSION_ID"
2728
asc alternative-distribution packages versions deltas --version-id "VERSION_ID"
2829
asc alternative-distribution packages versions variants --version-id "VERSION_ID"`,
2930
FlagSet: fs,
3031
UsageFunc: DefaultUsageFunc,
3132
Subcommands: []*ffcli.Command{
33+
AlternativeDistributionPackageVersionsListCommand(),
3234
AlternativeDistributionPackageVersionsGetCommand(),
3335
AlternativeDistributionPackageVersionsDeltasCommand(),
3436
AlternativeDistributionPackageVersionsVariantsCommand(),
@@ -39,6 +41,81 @@ Examples:
3941
}
4042
}
4143

44+
// AlternativeDistributionPackageVersionsListCommand returns the package versions list subcommand.
45+
func AlternativeDistributionPackageVersionsListCommand() *ffcli.Command {
46+
fs := flag.NewFlagSet("list", flag.ExitOnError)
47+
48+
packageID := fs.String("package-id", "", "Alternative distribution package ID")
49+
limit := fs.Int("limit", 0, "Maximum results per page (1-200)")
50+
next := fs.String("next", "", "Fetch next page using a links.next URL")
51+
paginate := fs.Bool("paginate", false, "Automatically fetch all pages (aggregate results)")
52+
output := fs.String("output", "json", "Output format: json (default), table, markdown")
53+
pretty := fs.Bool("pretty", false, "Pretty-print JSON output")
54+
55+
return &ffcli.Command{
56+
Name: "list",
57+
ShortUsage: "asc alternative-distribution packages versions list --package-id \"PACKAGE_ID\" [flags]",
58+
ShortHelp: "List alternative distribution package versions.",
59+
LongHelp: `List alternative distribution package versions.
60+
61+
Examples:
62+
asc alternative-distribution packages versions list --package-id "PACKAGE_ID"
63+
asc alternative-distribution packages versions list --package-id "PACKAGE_ID" --paginate`,
64+
FlagSet: fs,
65+
UsageFunc: DefaultUsageFunc,
66+
Exec: func(ctx context.Context, args []string) error {
67+
trimmedID := strings.TrimSpace(*packageID)
68+
if trimmedID == "" {
69+
fmt.Fprintln(os.Stderr, "Error: --package-id is required")
70+
return flag.ErrHelp
71+
}
72+
if *limit != 0 && (*limit < 1 || *limit > alternativeDistributionMaxLimit) {
73+
return fmt.Errorf("alternative-distribution packages versions list: --limit must be between 1 and %d", alternativeDistributionMaxLimit)
74+
}
75+
if err := validateNextURL(*next); err != nil {
76+
return fmt.Errorf("alternative-distribution packages versions list: %w", err)
77+
}
78+
79+
client, err := getASCClient()
80+
if err != nil {
81+
return fmt.Errorf("alternative-distribution packages versions list: %w", err)
82+
}
83+
84+
requestCtx, cancel := contextWithTimeout(ctx)
85+
defer cancel()
86+
87+
opts := []asc.AlternativeDistributionPackageVersionsOption{
88+
asc.WithAlternativeDistributionPackageVersionsLimit(*limit),
89+
asc.WithAlternativeDistributionPackageVersionsNextURL(*next),
90+
}
91+
92+
if *paginate {
93+
paginateOpts := append(opts, asc.WithAlternativeDistributionPackageVersionsLimit(alternativeDistributionMaxLimit))
94+
firstPage, err := client.GetAlternativeDistributionPackageVersions(requestCtx, trimmedID, paginateOpts...)
95+
if err != nil {
96+
return fmt.Errorf("alternative-distribution packages versions list: failed to fetch: %w", err)
97+
}
98+
99+
resp, err := asc.PaginateAll(requestCtx, firstPage, func(ctx context.Context, nextURL string) (asc.PaginatedResponse, error) {
100+
return client.GetAlternativeDistributionPackageVersions(ctx, trimmedID, asc.WithAlternativeDistributionPackageVersionsNextURL(nextURL))
101+
})
102+
if err != nil {
103+
return fmt.Errorf("alternative-distribution packages versions list: %w", err)
104+
}
105+
106+
return printOutput(resp, *output, *pretty)
107+
}
108+
109+
resp, err := client.GetAlternativeDistributionPackageVersions(requestCtx, trimmedID, opts...)
110+
if err != nil {
111+
return fmt.Errorf("alternative-distribution packages versions list: failed to fetch: %w", err)
112+
}
113+
114+
return printOutput(resp, *output, *pretty)
115+
},
116+
}
117+
}
118+
42119
// AlternativeDistributionPackageVersionsGetCommand returns the package versions get subcommand.
43120
func AlternativeDistributionPackageVersionsGetCommand() *ffcli.Command {
44121
fs := flag.NewFlagSet("get", flag.ExitOnError)

internal/cli/alternativedistribution/alternative_distribution_packages.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Examples:
2424
asc alternative-distribution packages get --package-id "PACKAGE_ID"
2525
asc alternative-distribution packages create --app-store-version-id "APP_STORE_VERSION_ID"
2626
asc alternative-distribution packages app-store-version --app-store-version-id "APP_STORE_VERSION_ID"
27+
asc alternative-distribution packages versions list --package-id "PACKAGE_ID"
2728
asc alternative-distribution packages versions get --version-id "VERSION_ID"
2829
asc alternative-distribution packages versions deltas --version-id "VERSION_ID"
2930
asc alternative-distribution packages versions variants --version-id "VERSION_ID"

internal/cli/alternativedistribution/alternative_distribution_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,17 @@ func TestAlternativeDistributionPackageVersionsGetCommand_MissingID(t *testing.T
219219
}
220220
}
221221

222+
func TestAlternativeDistributionPackageVersionsListCommand_MissingID(t *testing.T) {
223+
cmd := AlternativeDistributionPackageVersionsListCommand()
224+
if err := cmd.FlagSet.Parse([]string{}); err != nil {
225+
t.Fatalf("failed to parse flags: %v", err)
226+
}
227+
228+
if err := cmd.Exec(context.Background(), []string{}); err != flag.ErrHelp {
229+
t.Fatalf("expected flag.ErrHelp when --package-id is missing, got %v", err)
230+
}
231+
}
232+
222233
func TestAlternativeDistributionPackageVersionsDeltasCommand_MissingID(t *testing.T) {
223234
cmd := AlternativeDistributionPackageVersionsDeltasCommand()
224235
if err := cmd.FlagSet.Parse([]string{}); err != nil {
@@ -251,3 +262,14 @@ func TestAlternativeDistributionPackageVersionsDeltasCommand_InvalidLimit(t *tes
251262
t.Fatalf("expected validation error for invalid --limit, got %v", err)
252263
}
253264
}
265+
266+
func TestAlternativeDistributionPackageVersionsListCommand_InvalidLimit(t *testing.T) {
267+
cmd := AlternativeDistributionPackageVersionsListCommand()
268+
if err := cmd.FlagSet.Parse([]string{"--package-id", "PACKAGE_ID", "--limit", "1000"}); err != nil {
269+
t.Fatalf("failed to parse flags: %v", err)
270+
}
271+
272+
if err := cmd.Exec(context.Background(), []string{}); err == nil || err == flag.ErrHelp {
273+
t.Fatalf("expected validation error for invalid --limit, got %v", err)
274+
}
275+
}

0 commit comments

Comments
 (0)