Skip to content

Commit cc39651

Browse files
authored
Merge pull request #53 from stainless-api/release-please--branches--main--changes--next
release: 0.1.0-alpha.45
2 parents 71431c6 + f3c6f16 commit cc39651

File tree

17 files changed

+246
-67
lines changed

17 files changed

+246
-67
lines changed

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.1.0-alpha.44"
2+
".": "0.1.0-alpha.45"
33
}

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# Changelog
22

3+
## 0.1.0-alpha.45 (2025-10-02)
4+
5+
Full Changelog: [v0.1.0-alpha.44...v0.1.0-alpha.45](https://github.com/stainless-api/stainless-api-cli/compare/v0.1.0-alpha.44...v0.1.0-alpha.45)
6+
7+
### Features
8+
9+
* added `--output-filter` flag and `--error-format` flag to support better visualization options ([2768e5b](https://github.com/stainless-api/stainless-api-cli/commit/2768e5b0255ae79e44ed54f583c4809f19801afe))
10+
* better support for positional arguments ([799d88f](https://github.com/stainless-api/stainless-api-cli/commit/799d88f441c5d1d5dca82a5590fceefdc1823f42))
11+
12+
13+
### Chores
14+
15+
* **internal:** codegen related update ([2f9d764](https://github.com/stainless-api/stainless-api-cli/commit/2f9d764f660458d0e84e11adea9f1d418e8f1013))
16+
* **internal:** codegen related update ([c7df1a7](https://github.com/stainless-api/stainless-api-cli/commit/c7df1a7401a51fe9657ca9fa7f1aff2d37f60851))
17+
318
## 0.1.0-alpha.44 (2025-09-22)
419

520
Full Changelog: [v0.1.0-alpha.43...v0.1.0-alpha.44](https://github.com/stainless-api/stainless-api-cli/compare/v0.1.0-alpha.43...v0.1.0-alpha.44)

cmd/stl/main.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/stainless-api/stainless-api-cli/pkg/cmd"
1313
"github.com/stainless-api/stainless-api-go"
14+
"github.com/tidwall/gjson"
1415
)
1516

1617
func main() {
@@ -19,8 +20,9 @@ func main() {
1920
var apierr *stainless.Error
2021
if errors.As(err, &apierr) {
2122
fmt.Fprintf(os.Stderr, "%s %q: %d %s\n", apierr.Request.Method, apierr.Request.URL, apierr.Response.StatusCode, http.StatusText(apierr.Response.StatusCode))
22-
format := app.String("format")
23-
show_err := cmd.ShowJSON("Error", apierr.RawJSON(), format)
23+
format := app.String("format-error")
24+
json := gjson.Parse(apierr.RawJSON())
25+
show_err := cmd.ShowJSON("Error", json, format, app.String("transform-error"))
2426
if show_err != nil {
2527
// Just print the original error:
2628
fmt.Fprintf(os.Stderr, "%s\n", err.Error())

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/stainless-api/stainless-api-cli
22

3-
go 1.24.0
3+
go 1.24.4
44

55
toolchain go1.24.7
66

@@ -20,8 +20,8 @@ require (
2020
github.com/tidwall/gjson v1.18.0
2121
github.com/tidwall/pretty v1.2.1
2222
github.com/tidwall/sjson v1.2.5
23-
github.com/urfave/cli-docs/v3 v3.0.0-alpha6
24-
github.com/urfave/cli/v3 v3.3.2
23+
github.com/urfave/cli-docs/v3 v3.1.0
24+
github.com/urfave/cli/v3 v3.4.1
2525
golang.org/x/term v0.35.0
2626
)
2727

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,10 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
113113
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
114114
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
115115
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
116-
github.com/urfave/cli-docs/v3 v3.0.0-alpha6 h1:w/l/N0xw1rO/aHRIGXJ0lDwwYFOzilup1qGvIytP3BI=
117-
github.com/urfave/cli-docs/v3 v3.0.0-alpha6/go.mod h1:p7Z4lg8FSTrPB9GTaNyTrK3ygffHZcK3w0cU2VE+mzU=
118-
github.com/urfave/cli/v3 v3.3.2 h1:BYFVnhhZ8RqT38DxEYVFPPmGFTEf7tJwySTXsVRrS/o=
119-
github.com/urfave/cli/v3 v3.3.2/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
116+
github.com/urfave/cli-docs/v3 v3.1.0 h1:Sa5xm19IpE5gpm6tZzXdfjdFxn67PnEsE4dpXF7vsKw=
117+
github.com/urfave/cli-docs/v3 v3.1.0/go.mod h1:59d+5Hz1h6GSGJ10cvcEkbIe3j233t4XDqI72UIx7to=
118+
github.com/urfave/cli/v3 v3.4.1 h1:1M9UOCy5bLmGnuu1yn3t3CB4rG79Rtoxuv1sPhnm6qM=
119+
github.com/urfave/cli/v3 v3.4.1/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
120120
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
121121
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
122122
github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=

pkg/cmd/build.go

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,10 @@ var buildsCompare = cli.Command{
438438

439439
func handleBuildsCreate(ctx context.Context, cmd *cli.Command) error {
440440
cc := getAPICommandContext(cmd)
441+
unusedArgs := cmd.Args().Slice()
442+
if len(unusedArgs) > 0 {
443+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
444+
}
441445

442446
// Handle file flags by reading files and mutating JSON body
443447
if err := applyFileFlag(cmd, "openapi-spec", "revision.openapi\\.yml.content"); err != nil {
@@ -459,7 +463,7 @@ func handleBuildsCreate(ctx context.Context, cmd *cli.Command) error {
459463
if err != nil {
460464
return err
461465
}
462-
466+
463467
buildGroup.Property("build_id", res.ID)
464468

465469
if cmd.Bool("wait") {
@@ -483,12 +487,22 @@ func handleBuildsCreate(ctx context.Context, cmd *cli.Command) error {
483487
}
484488
}
485489

490+
data := gjson.Parse(string(res.RawJSON()))
486491
format := cmd.Root().String("format")
487-
return ShowJSON("builds create", res.RawJSON(), format)
492+
transform := cmd.Root().String("transform")
493+
return ShowJSON("builds create", data, format, transform)
488494
}
489495

490496
func handleBuildsRetrieve(ctx context.Context, cmd *cli.Command) error {
491497
cc := getAPICommandContext(cmd)
498+
unusedArgs := cmd.Args().Slice()
499+
if !cmd.IsSet("build-id") && len(unusedArgs) > 0 {
500+
cmd.Set("build-id", unusedArgs[0])
501+
unusedArgs = unusedArgs[1:]
502+
}
503+
if len(unusedArgs) > 0 {
504+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
505+
}
492506
var res []byte
493507
_, err := cc.client.Builds.Get(
494508
context.TODO(),
@@ -500,8 +514,10 @@ func handleBuildsRetrieve(ctx context.Context, cmd *cli.Command) error {
500514
return err
501515
}
502516

517+
json := gjson.Parse(string(res))
503518
format := cmd.Root().String("format")
504-
return ShowJSON("builds retrieve", string(res), format)
519+
transform := cmd.Root().String("transform")
520+
return ShowJSON("builds retrieve", json, format, transform)
505521
}
506522

507523
// pullBuildOutputs pulls the outputs for a completed build
@@ -775,6 +791,10 @@ func pullOutput(output, url, ref, targetDir string, targetGroup *Group) error {
775791

776792
func handleBuildsList(ctx context.Context, cmd *cli.Command) error {
777793
cc := getAPICommandContext(cmd)
794+
unusedArgs := cmd.Args().Slice()
795+
if len(unusedArgs) > 0 {
796+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
797+
}
778798
params := stainless.BuildListParams{}
779799
var res []byte
780800
_, err := cc.client.Builds.List(
@@ -787,12 +807,18 @@ func handleBuildsList(ctx context.Context, cmd *cli.Command) error {
787807
return err
788808
}
789809

810+
json := gjson.Parse(string(res))
790811
format := cmd.Root().String("format")
791-
return ShowJSON("builds list", string(res), format)
812+
transform := cmd.Root().String("transform")
813+
return ShowJSON("builds list", json, format, transform)
792814
}
793815

794816
func handleBuildsCompare(ctx context.Context, cmd *cli.Command) error {
795817
cc := getAPICommandContext(cmd)
818+
unusedArgs := cmd.Args().Slice()
819+
if len(unusedArgs) > 0 {
820+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
821+
}
796822
params := stainless.BuildCompareParams{}
797823
var res []byte
798824
_, err := cc.client.Builds.Compare(
@@ -805,6 +831,8 @@ func handleBuildsCompare(ctx context.Context, cmd *cli.Command) error {
805831
return err
806832
}
807833

834+
json := gjson.Parse(string(res))
808835
format := cmd.Root().String("format")
809-
return ShowJSON("builds compare", string(res), format)
836+
transform := cmd.Root().String("transform")
837+
return ShowJSON("builds compare", json, format, transform)
810838
}

pkg/cmd/builddiagnostic.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ package cmd
44

55
import (
66
"context"
7+
"fmt"
78

89
"github.com/stainless-api/stainless-api-cli/pkg/jsonflag"
910
"github.com/stainless-api/stainless-api-go"
1011
"github.com/stainless-api/stainless-api-go/option"
12+
"github.com/tidwall/gjson"
1113
"github.com/urfave/cli/v3"
1214
)
1315

@@ -60,6 +62,14 @@ var buildsDiagnosticsList = cli.Command{
6062

6163
func handleBuildsDiagnosticsList(ctx context.Context, cmd *cli.Command) error {
6264
cc := getAPICommandContext(cmd)
65+
unusedArgs := cmd.Args().Slice()
66+
if !cmd.IsSet("build-id") && len(unusedArgs) > 0 {
67+
cmd.Set("build-id", unusedArgs[0])
68+
unusedArgs = unusedArgs[1:]
69+
}
70+
if len(unusedArgs) > 0 {
71+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
72+
}
6373
params := stainless.BuildDiagnosticListParams{}
6474
var res []byte
6575
_, err := cc.client.Builds.Diagnostics.List(
@@ -73,6 +83,8 @@ func handleBuildsDiagnosticsList(ctx context.Context, cmd *cli.Command) error {
7383
return err
7484
}
7585

86+
json := gjson.Parse(string(res))
7687
format := cmd.Root().String("format")
77-
return ShowJSON("builds:diagnostics list", string(res), format)
88+
transform := cmd.Root().String("transform")
89+
return ShowJSON("builds:diagnostics list", json, format, transform)
7890
}

pkg/cmd/buildtargetoutput.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/stainless-api/stainless-api-cli/pkg/jsonflag"
1010
"github.com/stainless-api/stainless-api-go"
1111
"github.com/stainless-api/stainless-api-go/option"
12+
"github.com/tidwall/gjson"
1213
"github.com/urfave/cli/v3"
1314
)
1415

@@ -62,6 +63,10 @@ var buildsTargetOutputsRetrieve = cli.Command{
6263

6364
func handleBuildsTargetOutputsRetrieve(ctx context.Context, cmd *cli.Command) error {
6465
cc := getAPICommandContext(cmd)
66+
unusedArgs := cmd.Args().Slice()
67+
if len(unusedArgs) > 0 {
68+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
69+
}
6570

6671
buildID := cmd.String("build-id")
6772
if buildID == "" {
@@ -75,17 +80,21 @@ func handleBuildsTargetOutputsRetrieve(ctx context.Context, cmd *cli.Command) er
7580
params := stainless.BuildTargetOutputGetParams{
7681
BuildID: buildID,
7782
}
83+
var resBytes []byte
7884
res, err := cc.client.Builds.TargetOutputs.Get(
7985
context.TODO(),
8086
params,
8187
option.WithMiddleware(cc.AsMiddleware()),
88+
option.WithResponseBodyInto(&resBytes),
8289
)
8390
if err != nil {
8491
return err
8592
}
8693

94+
json := gjson.Parse(string(resBytes))
8795
format := cmd.Root().String("format")
88-
if err := ShowJSON("builds:target_outputs retrieve", res.RawJSON(), format); err != nil {
96+
transform := cmd.Root().String("transform")
97+
if err := ShowJSON("builds:target_outputs retrieve", json, format, transform); err != nil {
8998
return err
9099
}
91100

pkg/cmd/cmd.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,34 @@ stl builds create --branch <branch>`,
4343
},
4444
&cli.StringFlag{
4545
Name: "format",
46-
Usage: "The format for data output (one of: " + strings.Join(OutputFormats[:], ", ") + ")",
46+
Usage: "The format for displaying response data (one of: " + strings.Join(OutputFormats, ", ") + ")",
4747
Value: "auto",
4848
Validator: func(format string) error {
49-
if !slices.Contains(OutputFormats[:], strings.ToLower(format)) {
50-
return fmt.Errorf("format must be one of: %s", strings.Join(OutputFormats[:], ", "))
49+
if !slices.Contains(OutputFormats, strings.ToLower(format)) {
50+
return fmt.Errorf("format must be one of: %s", strings.Join(OutputFormats, ", "))
5151
}
5252
return nil
5353
},
5454
},
55+
&cli.StringFlag{
56+
Name: "format-error",
57+
Usage: "The format for displaying error data (one of: " + strings.Join(OutputFormats, ", ") + ")",
58+
Value: "auto",
59+
Validator: func(format string) error {
60+
if !slices.Contains(OutputFormats, strings.ToLower(format)) {
61+
return fmt.Errorf("format must be one of: %s", strings.Join(OutputFormats, ", "))
62+
}
63+
return nil
64+
},
65+
},
66+
&cli.StringFlag{
67+
Name: "transform",
68+
Usage: "The GJSON transformation for data output.",
69+
},
70+
&cli.StringFlag{
71+
Name: "transform-error",
72+
Usage: "The GJSON transformation for errors.",
73+
},
5574
&cli.StringFlag{
5675
Name: "environment",
5776
Usage: "Set the environment for API requests",

pkg/cmd/org.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ package cmd
44

55
import (
66
"context"
7+
"fmt"
78

89
"github.com/stainless-api/stainless-api-go/option"
10+
"github.com/tidwall/gjson"
911
"github.com/urfave/cli/v3"
1012
)
1113

@@ -31,6 +33,14 @@ var orgsList = cli.Command{
3133

3234
func handleOrgsRetrieve(ctx context.Context, cmd *cli.Command) error {
3335
cc := getAPICommandContext(cmd)
36+
unusedArgs := cmd.Args().Slice()
37+
if !cmd.IsSet("org") && len(unusedArgs) > 0 {
38+
cmd.Set("org", unusedArgs[0])
39+
unusedArgs = unusedArgs[1:]
40+
}
41+
if len(unusedArgs) > 0 {
42+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
43+
}
3444
var res []byte
3545
_, err := cc.client.Orgs.Get(
3646
context.TODO(),
@@ -42,12 +52,18 @@ func handleOrgsRetrieve(ctx context.Context, cmd *cli.Command) error {
4252
return err
4353
}
4454

55+
json := gjson.Parse(string(res))
4556
format := cmd.Root().String("format")
46-
return ShowJSON("orgs retrieve", string(res), format)
57+
transform := cmd.Root().String("transform")
58+
return ShowJSON("orgs retrieve", json, format, transform)
4759
}
4860

4961
func handleOrgsList(ctx context.Context, cmd *cli.Command) error {
5062
cc := getAPICommandContext(cmd)
63+
unusedArgs := cmd.Args().Slice()
64+
if len(unusedArgs) > 0 {
65+
return fmt.Errorf("Unexpected extra arguments: %v", unusedArgs)
66+
}
5167
var res []byte
5268
_, err := cc.client.Orgs.List(
5369
context.TODO(),
@@ -58,6 +74,8 @@ func handleOrgsList(ctx context.Context, cmd *cli.Command) error {
5874
return err
5975
}
6076

77+
json := gjson.Parse(string(res))
6178
format := cmd.Root().String("format")
62-
return ShowJSON("orgs list", string(res), format)
79+
transform := cmd.Root().String("transform")
80+
return ShowJSON("orgs list", json, format, transform)
6381
}

0 commit comments

Comments
 (0)