Skip to content

Commit b9b9fa1

Browse files
feat: allow direct upload of spec/config to v0 builds api when merging/rebasing
1 parent 0db8f71 commit b9b9fa1

5 files changed

Lines changed: 142 additions & 19 deletions

File tree

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 22
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/stainless/stainless-v0-4dbed62ce27b115068721f69e83b644ca0b7922e5be12b6469c0c054a371a170.yml
3-
openapi_spec_hash: f4a68de1cb28c33de769c08f68f543ab
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/stainless/stainless-v0-21e9e0ca130a61ba2ba52d51980a6f4b726708fe8094b45045a8ac0ceb7e544c.yml
3+
openapi_spec_hash: 752810fe6848884333c1bcacf28bc777
44
config_hash: 63178ec4b1d2ea5636c8619cffcf129b

build.go

Lines changed: 81 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -898,27 +898,50 @@ func (r *BuildNewParams) UnmarshalJSON(data []byte) error {
898898
//
899899
// Use [param.IsOmitted] to confirm if a field is set.
900900
type BuildNewParamsRevisionUnion struct {
901-
OfString param.Opt[string] `json:",omitzero,inline"`
902-
OfFileInputMap map[string]shared.FileInputUnionParam `json:",omitzero,inline"`
901+
OfBuildNewsRevisionObject *BuildNewParamsRevisionObject `json:",omitzero,inline"`
902+
OfString param.Opt[string] `json:",omitzero,inline"`
903+
OfFileInputMap map[string]shared.FileInputUnionParam `json:",omitzero,inline"`
903904
paramUnion
904905
}
905906

906907
func (u BuildNewParamsRevisionUnion) MarshalJSON() ([]byte, error) {
907-
return param.MarshalUnion(u, u.OfString, u.OfFileInputMap)
908+
return param.MarshalUnion(u, u.OfBuildNewsRevisionObject, u.OfString, u.OfFileInputMap)
908909
}
909910
func (u *BuildNewParamsRevisionUnion) UnmarshalJSON(data []byte) error {
910911
return apijson.UnmarshalRoot(data, u)
911912
}
912913

913914
func (u *BuildNewParamsRevisionUnion) asAny() any {
914-
if !param.IsOmitted(u.OfString) {
915+
if !param.IsOmitted(u.OfBuildNewsRevisionObject) {
916+
return u.OfBuildNewsRevisionObject
917+
} else if !param.IsOmitted(u.OfString) {
915918
return &u.OfString.Value
916919
} else if !param.IsOmitted(u.OfFileInputMap) {
917920
return &u.OfFileInputMap
918921
}
919922
return nil
920923
}
921924

925+
// A merge command combined with explicit file contents. The files are committed to
926+
// the merge target (`base`) without performing an auto-merge.
927+
//
928+
// The properties Files, Merge are required.
929+
type BuildNewParamsRevisionObject struct {
930+
// File contents to commit directly
931+
Files map[string]shared.FileInputUnionParam `json:"files,omitzero" api:"required"`
932+
// A merge command in the format "base..head"
933+
Merge string `json:"merge" api:"required"`
934+
paramObj
935+
}
936+
937+
func (r BuildNewParamsRevisionObject) MarshalJSON() (data []byte, err error) {
938+
type shadow BuildNewParamsRevisionObject
939+
return param.MarshalObject(r, (*shadow)(&r))
940+
}
941+
func (r *BuildNewParamsRevisionObject) UnmarshalJSON(data []byte) error {
942+
return apijson.UnmarshalRoot(data, r)
943+
}
944+
922945
// Optional commit messages to use for each SDK when making a new commit. SDKs not
923946
// represented in this object will fallback to the optional `commit_message`
924947
// parameter, or will fallback further to the default commit message.
@@ -1052,27 +1075,50 @@ func (r *BuildCompareParamsBase) UnmarshalJSON(data []byte) error {
10521075
//
10531076
// Use [param.IsOmitted] to confirm if a field is set.
10541077
type BuildCompareParamsBaseRevisionUnion struct {
1055-
OfString param.Opt[string] `json:",omitzero,inline"`
1056-
OfFileInputMap map[string]shared.FileInputUnionParam `json:",omitzero,inline"`
1078+
OfBuildComparesBaseRevisionObject *BuildCompareParamsBaseRevisionObject `json:",omitzero,inline"`
1079+
OfString param.Opt[string] `json:",omitzero,inline"`
1080+
OfFileInputMap map[string]shared.FileInputUnionParam `json:",omitzero,inline"`
10571081
paramUnion
10581082
}
10591083

10601084
func (u BuildCompareParamsBaseRevisionUnion) MarshalJSON() ([]byte, error) {
1061-
return param.MarshalUnion(u, u.OfString, u.OfFileInputMap)
1085+
return param.MarshalUnion(u, u.OfBuildComparesBaseRevisionObject, u.OfString, u.OfFileInputMap)
10621086
}
10631087
func (u *BuildCompareParamsBaseRevisionUnion) UnmarshalJSON(data []byte) error {
10641088
return apijson.UnmarshalRoot(data, u)
10651089
}
10661090

10671091
func (u *BuildCompareParamsBaseRevisionUnion) asAny() any {
1068-
if !param.IsOmitted(u.OfString) {
1092+
if !param.IsOmitted(u.OfBuildComparesBaseRevisionObject) {
1093+
return u.OfBuildComparesBaseRevisionObject
1094+
} else if !param.IsOmitted(u.OfString) {
10691095
return &u.OfString.Value
10701096
} else if !param.IsOmitted(u.OfFileInputMap) {
10711097
return &u.OfFileInputMap
10721098
}
10731099
return nil
10741100
}
10751101

1102+
// A merge command combined with explicit file contents. The files are committed to
1103+
// the merge target (`base`) without performing an auto-merge.
1104+
//
1105+
// The properties Files, Merge are required.
1106+
type BuildCompareParamsBaseRevisionObject struct {
1107+
// File contents to commit directly
1108+
Files map[string]shared.FileInputUnionParam `json:"files,omitzero" api:"required"`
1109+
// A merge command in the format "base..head"
1110+
Merge string `json:"merge" api:"required"`
1111+
paramObj
1112+
}
1113+
1114+
func (r BuildCompareParamsBaseRevisionObject) MarshalJSON() (data []byte, err error) {
1115+
type shadow BuildCompareParamsBaseRevisionObject
1116+
return param.MarshalObject(r, (*shadow)(&r))
1117+
}
1118+
func (r *BuildCompareParamsBaseRevisionObject) UnmarshalJSON(data []byte) error {
1119+
return apijson.UnmarshalRoot(data, r)
1120+
}
1121+
10761122
// Parameters for the head build
10771123
//
10781124
// The properties Branch, Revision are required.
@@ -1099,23 +1145,46 @@ func (r *BuildCompareParamsHead) UnmarshalJSON(data []byte) error {
10991145
//
11001146
// Use [param.IsOmitted] to confirm if a field is set.
11011147
type BuildCompareParamsHeadRevisionUnion struct {
1102-
OfString param.Opt[string] `json:",omitzero,inline"`
1103-
OfFileInputMap map[string]shared.FileInputUnionParam `json:",omitzero,inline"`
1148+
OfBuildComparesHeadRevisionObject *BuildCompareParamsHeadRevisionObject `json:",omitzero,inline"`
1149+
OfString param.Opt[string] `json:",omitzero,inline"`
1150+
OfFileInputMap map[string]shared.FileInputUnionParam `json:",omitzero,inline"`
11041151
paramUnion
11051152
}
11061153

11071154
func (u BuildCompareParamsHeadRevisionUnion) MarshalJSON() ([]byte, error) {
1108-
return param.MarshalUnion(u, u.OfString, u.OfFileInputMap)
1155+
return param.MarshalUnion(u, u.OfBuildComparesHeadRevisionObject, u.OfString, u.OfFileInputMap)
11091156
}
11101157
func (u *BuildCompareParamsHeadRevisionUnion) UnmarshalJSON(data []byte) error {
11111158
return apijson.UnmarshalRoot(data, u)
11121159
}
11131160

11141161
func (u *BuildCompareParamsHeadRevisionUnion) asAny() any {
1115-
if !param.IsOmitted(u.OfString) {
1162+
if !param.IsOmitted(u.OfBuildComparesHeadRevisionObject) {
1163+
return u.OfBuildComparesHeadRevisionObject
1164+
} else if !param.IsOmitted(u.OfString) {
11161165
return &u.OfString.Value
11171166
} else if !param.IsOmitted(u.OfFileInputMap) {
11181167
return &u.OfFileInputMap
11191168
}
11201169
return nil
11211170
}
1171+
1172+
// A merge command combined with explicit file contents. The files are committed to
1173+
// the merge target (`base`) without performing an auto-merge.
1174+
//
1175+
// The properties Files, Merge are required.
1176+
type BuildCompareParamsHeadRevisionObject struct {
1177+
// File contents to commit directly
1178+
Files map[string]shared.FileInputUnionParam `json:"files,omitzero" api:"required"`
1179+
// A merge command in the format "base..head"
1180+
Merge string `json:"merge" api:"required"`
1181+
paramObj
1182+
}
1183+
1184+
func (r BuildCompareParamsHeadRevisionObject) MarshalJSON() (data []byte, err error) {
1185+
type shadow BuildCompareParamsHeadRevisionObject
1186+
return param.MarshalObject(r, (*shadow)(&r))
1187+
}
1188+
func (r *BuildCompareParamsHeadRevisionObject) UnmarshalJSON(data []byte) error {
1189+
return apijson.UnmarshalRoot(data, r)
1190+
}

build_test.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,16 @@ func TestBuildNewWithOptionalParams(t *testing.T) {
2929
_, err := client.Builds.New(context.TODO(), stainless.BuildNewParams{
3030
Project: stainless.String("project"),
3131
Revision: stainless.BuildNewParamsRevisionUnion{
32-
OfString: stainless.String("string"),
32+
OfBuildNewsRevisionObject: &stainless.BuildNewParamsRevisionObject{
33+
Files: map[string]shared.FileInputUnionParam{
34+
"foo": {
35+
OfFileInputContent: &shared.FileInputContentParam{
36+
Content: "content",
37+
},
38+
},
39+
},
40+
Merge: "merge",
41+
},
3342
},
3443
AllowEmpty: stainless.Bool(true),
3544
Branch: stainless.String("branch"),
@@ -129,14 +138,32 @@ func TestBuildCompareWithOptionalParams(t *testing.T) {
129138
Base: stainless.BuildCompareParamsBase{
130139
Branch: "branch",
131140
Revision: stainless.BuildCompareParamsBaseRevisionUnion{
132-
OfString: stainless.String("string"),
141+
OfBuildComparesBaseRevisionObject: &stainless.BuildCompareParamsBaseRevisionObject{
142+
Files: map[string]shared.FileInputUnionParam{
143+
"foo": {
144+
OfFileInputContent: &shared.FileInputContentParam{
145+
Content: "content",
146+
},
147+
},
148+
},
149+
Merge: "merge",
150+
},
133151
},
134152
CommitMessage: stainless.String("commit_message"),
135153
},
136154
Head: stainless.BuildCompareParamsHead{
137155
Branch: "branch",
138156
Revision: stainless.BuildCompareParamsHeadRevisionUnion{
139-
OfString: stainless.String("string"),
157+
OfBuildComparesHeadRevisionObject: &stainless.BuildCompareParamsHeadRevisionObject{
158+
Files: map[string]shared.FileInputUnionParam{
159+
"foo": {
160+
OfFileInputContent: &shared.FileInputContentParam{
161+
Content: "content",
162+
},
163+
},
164+
},
165+
Merge: "merge",
166+
},
140167
},
141168
CommitMessage: stainless.String("commit_message"),
142169
},

projectbranch.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/stainless-api/stainless-api-go/packages/pagination"
1818
"github.com/stainless-api/stainless-api-go/packages/param"
1919
"github.com/stainless-api/stainless-api-go/packages/respjson"
20+
"github.com/stainless-api/stainless-api-go/shared"
2021
)
2122

2223
// ProjectBranchService contains methods and other services that help with
@@ -137,6 +138,9 @@ func (r *ProjectBranchService) Delete(ctx context.Context, branch string, body P
137138
//
138139
// The branch is rebased onto the `base` branch or commit SHA, inheriting any
139140
// config and custom code changes.
141+
//
142+
// If `files` is provided, the auto-rebase is skipped: the branch is hard-reset to
143+
// `base` and the provided files are committed on top.
140144
func (r *ProjectBranchService) Rebase(ctx context.Context, branch string, params ProjectBranchRebaseParams, opts ...option.RequestOption) (res *ProjectBranch, err error) {
141145
opts = slices.Concat(r.Options, opts)
142146
precfg, err := requestconfig.PreRequestOptions(opts...)
@@ -449,9 +453,23 @@ type ProjectBranchRebaseParams struct {
449453
Project param.Opt[string] `path:"project,omitzero" api:"required" json:"-"`
450454
// The branch or commit SHA to rebase onto. Defaults to "main".
451455
Base param.Opt[string] `query:"base,omitzero" json:"-"`
456+
// Optional commit message to use when `files` is provided.
457+
CommitMessage param.Opt[string] `json:"commit_message,omitzero"`
458+
// File contents to commit directly on top of `base`. When provided, the
459+
// auto-rebase is skipped and the branch is hard-reset to `base` before the files
460+
// are committed.
461+
Files map[string]shared.FileInputUnionParam `json:"files,omitzero"`
452462
paramObj
453463
}
454464

465+
func (r ProjectBranchRebaseParams) MarshalJSON() (data []byte, err error) {
466+
type shadow ProjectBranchRebaseParams
467+
return param.MarshalObject(r, (*shadow)(&r))
468+
}
469+
func (r *ProjectBranchRebaseParams) UnmarshalJSON(data []byte) error {
470+
return apijson.UnmarshalRoot(data, r)
471+
}
472+
455473
// URLQuery serializes [ProjectBranchRebaseParams]'s query parameters as
456474
// `url.Values`.
457475
func (r ProjectBranchRebaseParams) URLQuery() (v url.Values, err error) {

projectbranch_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/stainless-api/stainless-api-go"
1212
"github.com/stainless-api/stainless-api-go/internal/testutil"
1313
"github.com/stainless-api/stainless-api-go/option"
14+
"github.com/stainless-api/stainless-api-go/shared"
1415
)
1516

1617
func TestProjectBranchNewWithOptionalParams(t *testing.T) {
@@ -138,8 +139,16 @@ func TestProjectBranchRebaseWithOptionalParams(t *testing.T) {
138139
context.TODO(),
139140
"branch",
140141
stainless.ProjectBranchRebaseParams{
141-
Project: stainless.String("project"),
142-
Base: stainless.String("base"),
142+
Project: stainless.String("project"),
143+
Base: stainless.String("base"),
144+
CommitMessage: stainless.String("commit_message"),
145+
Files: map[string]shared.FileInputUnionParam{
146+
"foo": {
147+
OfFileInputContent: &shared.FileInputContentParam{
148+
Content: "content",
149+
},
150+
},
151+
},
143152
},
144153
)
145154
if err != nil {

0 commit comments

Comments
 (0)