Add support for viewing pipeline run output
This commit is contained in:
@@ -22,6 +22,31 @@ query GetCloneCredentials {
|
||||
}
|
||||
}
|
||||
|
||||
query GetPipeline(
|
||||
$id: String!,
|
||||
) {
|
||||
Pipeline(
|
||||
id: $id,
|
||||
) {
|
||||
id,
|
||||
name,
|
||||
url,
|
||||
pollInterval,
|
||||
cloneCredential {
|
||||
id,
|
||||
name,
|
||||
type,
|
||||
},
|
||||
runs {
|
||||
id,
|
||||
inProgress,
|
||||
result,
|
||||
buildOutput,
|
||||
stdout,
|
||||
stderr,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation CreatePipeline(
|
||||
$name: String!,
|
||||
|
||||
@@ -3,16 +3,13 @@ module git.ohea.xyz/cursorius/tui
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/Khan/genqlient v0.5.0
|
||||
github.com/charmbracelet/bubbles v0.15.0
|
||||
github.com/charmbracelet/bubbletea v0.23.2
|
||||
github.com/charmbracelet/lipgloss v0.6.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/Khan/genqlient v0.5.0 // indirect
|
||||
github.com/agnivade/levenshtein v1.1.1 // indirect
|
||||
github.com/alexflint/go-arg v1.4.2 // indirect
|
||||
github.com/alexflint/go-scalar v1.0.0 // indirect
|
||||
github.com/atotto/clipboard v0.1.4 // indirect
|
||||
github.com/aymanbagabas/go-osc52 v1.2.1 // indirect
|
||||
github.com/containerd/console v1.0.3 // indirect
|
||||
@@ -27,12 +24,8 @@ require (
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/sahilm/fuzzy v0.1.0 // indirect
|
||||
github.com/vektah/gqlparser/v2 v2.4.5 // indirect
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/tools v0.1.10 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
@@ -4,12 +4,10 @@ github.com/Khan/genqlient v0.5.0 h1:TMZJ+tl/BpbmGyIBiXzKzUftDhw4ZWxQZ+1ydn0gyII=
|
||||
github.com/Khan/genqlient v0.5.0/go.mod h1:EpIvDVXYm01GP6AXzjA7dKriPTH6GmtpmvTAwUUqIX8=
|
||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
|
||||
github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
|
||||
github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=
|
||||
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
|
||||
github.com/alexflint/go-arg v1.4.2 h1:lDWZAXxpAnZUq4qwb86p/3rIJJ2Li81EoMbTMujhVa0=
|
||||
github.com/alexflint/go-arg v1.4.2/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM=
|
||||
github.com/alexflint/go-scalar v1.0.0 h1:NGupf1XV/Xb04wXskDFzS0KWOLH632W/EO4fAFi+A70=
|
||||
github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
|
||||
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
|
||||
@@ -31,6 +29,7 @@ github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkX
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
@@ -71,6 +70,7 @@ github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ
|
||||
github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc=
|
||||
github.com/muesli/termenv v0.14.0 h1:8x9NFfOe8lmIWK4pgy3IfVEy47f+ppe3tUqdPZG2Uy0=
|
||||
github.com/muesli/termenv v0.14.0/go.mod h1:kG/pF1E7fh949Xhe156crRUrHNyK221IuGO7Ez60Uc8=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
@@ -79,6 +79,7 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI=
|
||||
github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
|
||||
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
|
||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
@@ -86,6 +87,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||
github.com/vektah/gqlparser/v2 v2.4.0/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0=
|
||||
@@ -99,7 +101,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
@@ -138,12 +139,10 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200815165600-90abf76919f3/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
|
||||
golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
|
||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
@@ -151,6 +150,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -240,6 +240,112 @@ func (v *GetCloneCredentialsResponse) GetCloneCredentials() []*GetCloneCredentia
|
||||
return v.CloneCredentials
|
||||
}
|
||||
|
||||
// GetPipelinePipeline includes the requested fields of the GraphQL type Pipeline.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A pipeline for running ci jobs
|
||||
type GetPipelinePipeline struct {
|
||||
// The id of the pipeline.
|
||||
Id string `json:"id"`
|
||||
// The name of the pipeline.
|
||||
Name string `json:"name"`
|
||||
// The url of the pipeline.
|
||||
Url string `json:"url"`
|
||||
// The polling interval for the pipeline.
|
||||
PollInterval int `json:"pollInterval"`
|
||||
// The configured credential for cloning the pipeline source.
|
||||
CloneCredential *GetPipelinePipelineCloneCredential `json:"cloneCredential"`
|
||||
// The list of runs for the pipeline.
|
||||
Runs []GetPipelinePipelineRunsRun `json:"runs"`
|
||||
}
|
||||
|
||||
// GetId returns GetPipelinePipeline.Id, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipeline) GetId() string { return v.Id }
|
||||
|
||||
// GetName returns GetPipelinePipeline.Name, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipeline) GetName() string { return v.Name }
|
||||
|
||||
// GetUrl returns GetPipelinePipeline.Url, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipeline) GetUrl() string { return v.Url }
|
||||
|
||||
// GetPollInterval returns GetPipelinePipeline.PollInterval, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipeline) GetPollInterval() int { return v.PollInterval }
|
||||
|
||||
// GetCloneCredential returns GetPipelinePipeline.CloneCredential, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipeline) GetCloneCredential() *GetPipelinePipelineCloneCredential {
|
||||
return v.CloneCredential
|
||||
}
|
||||
|
||||
// GetRuns returns GetPipelinePipeline.Runs, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipeline) GetRuns() []GetPipelinePipelineRunsRun { return v.Runs }
|
||||
|
||||
// GetPipelinePipelineCloneCredential includes the requested fields of the GraphQL type CloneCredential.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A credential for authenticating with the pipeline source host.
|
||||
type GetPipelinePipelineCloneCredential struct {
|
||||
// The id of the credential.
|
||||
Id string `json:"id"`
|
||||
// The name of the credential.
|
||||
Name string `json:"name"`
|
||||
// The credential type.
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
// GetId returns GetPipelinePipelineCloneCredential.Id, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineCloneCredential) GetId() string { return v.Id }
|
||||
|
||||
// GetName returns GetPipelinePipelineCloneCredential.Name, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineCloneCredential) GetName() string { return v.Name }
|
||||
|
||||
// GetType returns GetPipelinePipelineCloneCredential.Type, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineCloneCredential) GetType() string { return v.Type }
|
||||
|
||||
// GetPipelinePipelineRunsRun includes the requested fields of the GraphQL type Run.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
// A pipeline run
|
||||
type GetPipelinePipelineRunsRun struct {
|
||||
// The id of the run.
|
||||
Id string `json:"id"`
|
||||
// The progress status of the run.
|
||||
InProgress *bool `json:"inProgress"`
|
||||
// The result of the run.
|
||||
Result *float64 `json:"result"`
|
||||
// Logs of the top level container build for the run.
|
||||
BuildOutput *string `json:"buildOutput"`
|
||||
// The stdout used to validate the run.
|
||||
Stdout *string `json:"stdout"`
|
||||
// The stderr used to validate the run.
|
||||
Stderr *string `json:"stderr"`
|
||||
}
|
||||
|
||||
// GetId returns GetPipelinePipelineRunsRun.Id, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineRunsRun) GetId() string { return v.Id }
|
||||
|
||||
// GetInProgress returns GetPipelinePipelineRunsRun.InProgress, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineRunsRun) GetInProgress() *bool { return v.InProgress }
|
||||
|
||||
// GetResult returns GetPipelinePipelineRunsRun.Result, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineRunsRun) GetResult() *float64 { return v.Result }
|
||||
|
||||
// GetBuildOutput returns GetPipelinePipelineRunsRun.BuildOutput, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineRunsRun) GetBuildOutput() *string { return v.BuildOutput }
|
||||
|
||||
// GetStdout returns GetPipelinePipelineRunsRun.Stdout, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineRunsRun) GetStdout() *string { return v.Stdout }
|
||||
|
||||
// GetStderr returns GetPipelinePipelineRunsRun.Stderr, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelinePipelineRunsRun) GetStderr() *string { return v.Stderr }
|
||||
|
||||
// GetPipelineResponse is returned by GetPipeline on success.
|
||||
type GetPipelineResponse struct {
|
||||
Pipeline *GetPipelinePipeline `json:"Pipeline"`
|
||||
}
|
||||
|
||||
// GetPipeline returns GetPipelineResponse.Pipeline, and is useful for accessing the field via an interface.
|
||||
func (v *GetPipelineResponse) GetPipeline() *GetPipelinePipeline { return v.Pipeline }
|
||||
|
||||
// GetPipelinesPipelinesPipeline includes the requested fields of the GraphQL type Pipeline.
|
||||
// The GraphQL type's documentation follows.
|
||||
//
|
||||
@@ -387,6 +493,14 @@ func (v *__CreateWebhookInput) GetWebhookType() string { return v.WebhookType }
|
||||
// GetPipelineId returns __CreateWebhookInput.PipelineId, and is useful for accessing the field via an interface.
|
||||
func (v *__CreateWebhookInput) GetPipelineId() string { return v.PipelineId }
|
||||
|
||||
// __GetPipelineInput is used internally by genqlient
|
||||
type __GetPipelineInput struct {
|
||||
Id string `json:"id"`
|
||||
}
|
||||
|
||||
// GetId returns __GetPipelineInput.Id, and is useful for accessing the field via an interface.
|
||||
func (v *__GetPipelineInput) GetId() string { return v.Id }
|
||||
|
||||
func CreateCloneCredential(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
@@ -610,6 +724,54 @@ query GetCloneCredentials {
|
||||
return &data, err
|
||||
}
|
||||
|
||||
func GetPipeline(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
id string,
|
||||
) (*GetPipelineResponse, error) {
|
||||
req := &graphql.Request{
|
||||
OpName: "GetPipeline",
|
||||
Query: `
|
||||
query GetPipeline ($id: String!) {
|
||||
Pipeline(id: $id) {
|
||||
id
|
||||
name
|
||||
url
|
||||
pollInterval
|
||||
cloneCredential {
|
||||
id
|
||||
name
|
||||
type
|
||||
}
|
||||
runs {
|
||||
id
|
||||
inProgress
|
||||
result
|
||||
buildOutput
|
||||
stdout
|
||||
stderr
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
Variables: &__GetPipelineInput{
|
||||
Id: id,
|
||||
},
|
||||
}
|
||||
var err error
|
||||
|
||||
var data GetPipelineResponse
|
||||
resp := &graphql.Response{Data: &data}
|
||||
|
||||
err = client.MakeRequest(
|
||||
ctx,
|
||||
req,
|
||||
resp,
|
||||
)
|
||||
|
||||
return &data, err
|
||||
}
|
||||
|
||||
func GetPipelines(
|
||||
ctx context.Context,
|
||||
client graphql.Client,
|
||||
|
||||
+72
-70
@@ -2,27 +2,63 @@ schema {
|
||||
query: Query
|
||||
mutation: Mutation
|
||||
}
|
||||
"A credential for authenticating with the pipeline source host."
|
||||
type CloneCredential {
|
||||
"The id of the credential."
|
||||
"A secret available for use inside of a pipeline."
|
||||
type Secret {
|
||||
"The id of the secret."
|
||||
id: String!
|
||||
"The name of the credential."
|
||||
"The name of the secret."
|
||||
name: String!
|
||||
"The secret for the credential."
|
||||
"The secret."
|
||||
secret: String!
|
||||
"The credential type."
|
||||
type: String!
|
||||
"The username to user with the credential."
|
||||
username: String!
|
||||
}
|
||||
"A webhook for triggering pipelines"
|
||||
type Webhook {
|
||||
"The id of the webhook."
|
||||
"A runner available for use inside of a pipeline."
|
||||
type Runner {
|
||||
"The id of the runner."
|
||||
id: String!
|
||||
"The secret used to validate the webhook."
|
||||
secret: String!
|
||||
"The format of the webhook."
|
||||
serverType: String!
|
||||
"The name of the runner."
|
||||
name: String!
|
||||
"The token."
|
||||
token: String!
|
||||
}
|
||||
""
|
||||
type Query {
|
||||
""
|
||||
CloneCredential(
|
||||
"The id of the requested credential."
|
||||
id: String!
|
||||
): CloneCredential
|
||||
""
|
||||
CloneCredentials: [CloneCredential]!
|
||||
""
|
||||
Pipeline(
|
||||
"The id of the requested pipeline."
|
||||
id: String!
|
||||
): Pipeline
|
||||
""
|
||||
Pipelines: [Pipeline]!
|
||||
""
|
||||
Runners: [Runner]!
|
||||
""
|
||||
Secrets: [Secret]!
|
||||
}
|
||||
"A pipeline for running ci jobs"
|
||||
type Pipeline {
|
||||
"The configured credential for cloning the pipeline source."
|
||||
cloneCredential: CloneCredential
|
||||
"The id of the pipeline."
|
||||
id: String!
|
||||
"The name of the pipeline."
|
||||
name: String!
|
||||
"The polling interval for the pipeline."
|
||||
pollInterval: Int!
|
||||
"The list of runs for the pipeline."
|
||||
runs: [Run!]!
|
||||
"The list of secrets for the pipeline."
|
||||
secrets: [Secret!]!
|
||||
"The url of the pipeline."
|
||||
url: String!
|
||||
"The list of webhooks for the pipeline."
|
||||
webhooks: [Webhook!]!
|
||||
}
|
||||
""
|
||||
type Mutation {
|
||||
@@ -89,66 +125,32 @@ type Mutation {
|
||||
pipelineId: String!
|
||||
): Pipeline
|
||||
}
|
||||
"A runner available for use inside of a pipeline."
|
||||
type Runner {
|
||||
"The id of the runner."
|
||||
"A webhook for triggering pipelines"
|
||||
type Webhook {
|
||||
"The id of the webhook."
|
||||
id: String!
|
||||
"The name of the runner."
|
||||
name: String!
|
||||
"The token."
|
||||
token: String!
|
||||
}
|
||||
"A pipeline for running ci jobs"
|
||||
type Pipeline {
|
||||
"The configured credential for cloning the pipeline source."
|
||||
cloneCredential: CloneCredential
|
||||
"The id of the pipeline."
|
||||
id: String!
|
||||
"The name of the pipeline."
|
||||
name: String!
|
||||
"The polling interval for the pipeline."
|
||||
pollInterval: Int!
|
||||
"The list of runs for the pipeline."
|
||||
runs: [Run!]!
|
||||
"The list of secrets for the pipeline."
|
||||
secrets: [Secret!]!
|
||||
"The url of the pipeline."
|
||||
url: String!
|
||||
"The list of webhooks for the pipeline."
|
||||
webhooks: [Webhook!]!
|
||||
}
|
||||
"A secret available for use inside of a pipeline."
|
||||
type Secret {
|
||||
"The id of the secret."
|
||||
id: String!
|
||||
"The name of the secret."
|
||||
name: String!
|
||||
"The secret."
|
||||
"The secret used to validate the webhook."
|
||||
secret: String!
|
||||
"The format of the webhook."
|
||||
serverType: String!
|
||||
}
|
||||
""
|
||||
type Query {
|
||||
""
|
||||
CloneCredential(
|
||||
"The id of the requested credential."
|
||||
id: String!
|
||||
): CloneCredential
|
||||
""
|
||||
CloneCredentials: [CloneCredential]!
|
||||
""
|
||||
Pipeline(
|
||||
"The id of the requested pipeline."
|
||||
id: String!
|
||||
): Pipeline
|
||||
""
|
||||
Pipelines: [Pipeline]!
|
||||
""
|
||||
Runners: [Runner]!
|
||||
""
|
||||
Secrets: [Secret]!
|
||||
"A credential for authenticating with the pipeline source host."
|
||||
type CloneCredential {
|
||||
"The id of the credential."
|
||||
id: String!
|
||||
"The name of the credential."
|
||||
name: String!
|
||||
"The secret for the credential."
|
||||
secret: String!
|
||||
"The credential type."
|
||||
type: String!
|
||||
"The username to user with the credential."
|
||||
username: String!
|
||||
}
|
||||
"A pipeline run"
|
||||
type Run {
|
||||
"Logs of the top level container build for the run."
|
||||
buildOutput: String
|
||||
"The id of the run."
|
||||
id: String!
|
||||
"The progress status of the run."
|
||||
|
||||
@@ -0,0 +1,537 @@
|
||||
[1mdiff --git a/genqlient.graphql b/genqlient.graphql[m
|
||||
[1mindex 12e2b80..5bf5e9a 100644[m
|
||||
[1m--- a/genqlient.graphql[m
|
||||
[1m+++ b/genqlient.graphql[m
|
||||
[36m@@ -22,6 +22,31 @@[m [mquery GetCloneCredentials {[m
|
||||
}[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32mquery GetPipeline([m
|
||||
[32m+[m[32m $id: String!,[m
|
||||
[32m+[m[32m) {[m
|
||||
[32m+[m[32m Pipeline([m
|
||||
[32m+[m[32m id: $id,[m
|
||||
[32m+[m[32m ) {[m
|
||||
[32m+[m[32m id,[m
|
||||
[32m+[m[32m name,[m
|
||||
[32m+[m[32m url,[m
|
||||
[32m+[m[32m pollInterval,[m
|
||||
[32m+[m[32m cloneCredential {[m
|
||||
[32m+[m[32m id,[m
|
||||
[32m+[m[32m name,[m
|
||||
[32m+[m[32m type,[m
|
||||
[32m+[m[32m },[m
|
||||
[32m+[m[32m runs {[m
|
||||
[32m+[m[32m id,[m
|
||||
[32m+[m[32m inProgress,[m
|
||||
[32m+[m[32m result,[m
|
||||
[32m+[m[32m buildOutput,[m
|
||||
[32m+[m[32m stdout,[m
|
||||
[32m+[m[32m stderr,[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m[32m}[m
|
||||
[m
|
||||
mutation CreatePipeline([m
|
||||
$name: String!,[m
|
||||
[1mdiff --git a/go.mod b/go.mod[m
|
||||
[1mindex a29c87c..4584f76 100644[m
|
||||
[1m--- a/go.mod[m
|
||||
[1m+++ b/go.mod[m
|
||||
[36m@@ -3,16 +3,13 @@[m [mmodule git.ohea.xyz/cursorius/tui[m
|
||||
go 1.20[m
|
||||
[m
|
||||
require ([m
|
||||
[32m+[m [32mgithub.com/Khan/genqlient v0.5.0[m
|
||||
github.com/charmbracelet/bubbles v0.15.0[m
|
||||
github.com/charmbracelet/bubbletea v0.23.2[m
|
||||
github.com/charmbracelet/lipgloss v0.6.0[m
|
||||
)[m
|
||||
[m
|
||||
require ([m
|
||||
[31m- github.com/Khan/genqlient v0.5.0 // indirect[m
|
||||
[31m- github.com/agnivade/levenshtein v1.1.1 // indirect[m
|
||||
[31m- github.com/alexflint/go-arg v1.4.2 // indirect[m
|
||||
[31m- github.com/alexflint/go-scalar v1.0.0 // indirect[m
|
||||
github.com/atotto/clipboard v0.1.4 // indirect[m
|
||||
github.com/aymanbagabas/go-osc52 v1.2.1 // indirect[m
|
||||
github.com/containerd/console v1.0.3 // indirect[m
|
||||
[36m@@ -27,12 +24,8 @@[m [mrequire ([m
|
||||
github.com/rivo/uniseg v0.2.0 // indirect[m
|
||||
github.com/sahilm/fuzzy v0.1.0 // indirect[m
|
||||
github.com/vektah/gqlparser/v2 v2.4.5 // indirect[m
|
||||
[31m- golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect[m
|
||||
golang.org/x/sync v0.1.0 // indirect[m
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect[m
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect[m
|
||||
golang.org/x/text v0.3.7 // indirect[m
|
||||
[31m- golang.org/x/tools v0.1.10 // indirect[m
|
||||
[31m- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect[m
|
||||
[31m- gopkg.in/yaml.v2 v2.4.0 // indirect[m
|
||||
)[m
|
||||
[1mdiff --git a/go.sum b/go.sum[m
|
||||
[1mindex 5c4ba8d..3c5c5da 100644[m
|
||||
[1m--- a/go.sum[m
|
||||
[1m+++ b/go.sum[m
|
||||
[36m@@ -4,12 +4,10 @@[m [mgithub.com/Khan/genqlient v0.5.0 h1:TMZJ+tl/BpbmGyIBiXzKzUftDhw4ZWxQZ+1ydn0gyII=[m
|
||||
github.com/Khan/genqlient v0.5.0/go.mod h1:EpIvDVXYm01GP6AXzjA7dKriPTH6GmtpmvTAwUUqIX8=[m
|
||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=[m
|
||||
github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=[m
|
||||
[31m-github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=[m
|
||||
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=[m
|
||||
[31m-github.com/alexflint/go-arg v1.4.2 h1:lDWZAXxpAnZUq4qwb86p/3rIJJ2Li81EoMbTMujhVa0=[m
|
||||
github.com/alexflint/go-arg v1.4.2/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM=[m
|
||||
[31m-github.com/alexflint/go-scalar v1.0.0 h1:NGupf1XV/Xb04wXskDFzS0KWOLH632W/EO4fAFi+A70=[m
|
||||
github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw=[m
|
||||
[32m+[m[32mgithub.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=[m
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=[m
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=[m
|
||||
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=[m
|
||||
[36m@@ -31,6 +29,7 @@[m [mgithub.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkX[m
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=[m
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=[m
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=[m
|
||||
[32m+[m[32mgithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=[m
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=[m
|
||||
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=[m
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=[m
|
||||
[36m@@ -71,6 +70,7 @@[m [mgithub.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ[m
|
||||
github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc=[m
|
||||
github.com/muesli/termenv v0.14.0 h1:8x9NFfOe8lmIWK4pgy3IfVEy47f+ppe3tUqdPZG2Uy0=[m
|
||||
github.com/muesli/termenv v0.14.0/go.mod h1:kG/pF1E7fh949Xhe156crRUrHNyK221IuGO7Ez60Uc8=[m
|
||||
[32m+[m[32mgithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=[m
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=[m
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=[m
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=[m
|
||||
[36m@@ -79,6 +79,7 @@[m [mgithub.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD[m
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=[m
|
||||
github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI=[m
|
||||
github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=[m
|
||||
[32m+[m[32mgithub.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=[m
|
||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=[m
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=[m
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=[m
|
||||
[36m@@ -86,6 +87,7 @@[m [mgithub.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+[m
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=[m
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=[m
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=[m
|
||||
[32m+[m[32mgithub.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=[m
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=[m
|
||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=[m
|
||||
github.com/vektah/gqlparser/v2 v2.4.0/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0=[m
|
||||
[36m@@ -99,7 +101,6 @@[m [mgolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh[m
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=[m
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=[m
|
||||
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=[m
|
||||
[31m-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=[m
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=[m
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=[m
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=[m
|
||||
[36m@@ -138,12 +139,10 @@[m [mgolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm[m
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=[m
|
||||
golang.org/x/tools v0.0.0-20200815165600-90abf76919f3/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=[m
|
||||
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=[m
|
||||
[31m-golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=[m
|
||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=[m
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=[m
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=[m
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=[m
|
||||
[31m-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=[m
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=[m
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=[m
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=[m
|
||||
[36m@@ -151,6 +150,6 @@[m [mgopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=[m
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=[m
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=[m
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=[m
|
||||
[31m-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=[m
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=[m
|
||||
[32m+[m[32mgopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=[m
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=[m
|
||||
[1mdiff --git a/queries/generated.go b/queries/generated.go[m
|
||||
[1mindex 31eb59c..8f2ad79 100644[m
|
||||
[1m--- a/queries/generated.go[m
|
||||
[1m+++ b/queries/generated.go[m
|
||||
[36m@@ -240,6 +240,112 @@[m [mfunc (v *GetCloneCredentialsResponse) GetCloneCredentials() []*GetCloneCredentia[m
|
||||
return v.CloneCredentials[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32m// GetPipelinePipeline includes the requested fields of the GraphQL type Pipeline.[m
|
||||
[32m+[m[32m// The GraphQL type's documentation follows.[m
|
||||
[32m+[m[32m//[m
|
||||
[32m+[m[32m// A pipeline for running ci jobs[m
|
||||
[32m+[m[32mtype GetPipelinePipeline struct {[m
|
||||
[32m+[m [32m// The id of the pipeline.[m
|
||||
[32m+[m [32mId string `json:"id"`[m
|
||||
[32m+[m [32m// The name of the pipeline.[m
|
||||
[32m+[m [32mName string `json:"name"`[m
|
||||
[32m+[m [32m// The url of the pipeline.[m
|
||||
[32m+[m [32mUrl string `json:"url"`[m
|
||||
[32m+[m [32m// The polling interval for the pipeline.[m
|
||||
[32m+[m [32mPollInterval int `json:"pollInterval"`[m
|
||||
[32m+[m [32m// The configured credential for cloning the pipeline source.[m
|
||||
[32m+[m [32mCloneCredential *GetPipelinePipelineCloneCredential `json:"cloneCredential"`[m
|
||||
[32m+[m [32m// The list of runs for the pipeline.[m
|
||||
[32m+[m [32mRuns []GetPipelinePipelineRunsRun `json:"runs"`[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetId returns GetPipelinePipeline.Id, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipeline) GetId() string { return v.Id }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetName returns GetPipelinePipeline.Name, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipeline) GetName() string { return v.Name }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetUrl returns GetPipelinePipeline.Url, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipeline) GetUrl() string { return v.Url }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetPollInterval returns GetPipelinePipeline.PollInterval, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipeline) GetPollInterval() int { return v.PollInterval }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetCloneCredential returns GetPipelinePipeline.CloneCredential, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipeline) GetCloneCredential() *GetPipelinePipelineCloneCredential {[m
|
||||
[32m+[m [32mreturn v.CloneCredential[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetRuns returns GetPipelinePipeline.Runs, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipeline) GetRuns() []GetPipelinePipelineRunsRun { return v.Runs }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetPipelinePipelineCloneCredential includes the requested fields of the GraphQL type CloneCredential.[m
|
||||
[32m+[m[32m// The GraphQL type's documentation follows.[m
|
||||
[32m+[m[32m//[m
|
||||
[32m+[m[32m// A credential for authenticating with the pipeline source host.[m
|
||||
[32m+[m[32mtype GetPipelinePipelineCloneCredential struct {[m
|
||||
[32m+[m [32m// The id of the credential.[m
|
||||
[32m+[m [32mId string `json:"id"`[m
|
||||
[32m+[m [32m// The name of the credential.[m
|
||||
[32m+[m [32mName string `json:"name"`[m
|
||||
[32m+[m [32m// The credential type.[m
|
||||
[32m+[m [32mType string `json:"type"`[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetId returns GetPipelinePipelineCloneCredential.Id, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineCloneCredential) GetId() string { return v.Id }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetName returns GetPipelinePipelineCloneCredential.Name, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineCloneCredential) GetName() string { return v.Name }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetType returns GetPipelinePipelineCloneCredential.Type, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineCloneCredential) GetType() string { return v.Type }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetPipelinePipelineRunsRun includes the requested fields of the GraphQL type Run.[m
|
||||
[32m+[m[32m// The GraphQL type's documentation follows.[m
|
||||
[32m+[m[32m//[m
|
||||
[32m+[m[32m// A pipeline run[m
|
||||
[32m+[m[32mtype GetPipelinePipelineRunsRun struct {[m
|
||||
[32m+[m [32m// The id of the run.[m
|
||||
[32m+[m [32mId string `json:"id"`[m
|
||||
[32m+[m [32m// The progress status of the run.[m
|
||||
[32m+[m [32mInProgress *bool `json:"inProgress"`[m
|
||||
[32m+[m [32m// The result of the run.[m
|
||||
[32m+[m [32mResult *float64 `json:"result"`[m
|
||||
[32m+[m [32m// Logs of the top level container build for the run.[m
|
||||
[32m+[m [32mBuildOutput *string `json:"buildOutput"`[m
|
||||
[32m+[m [32m// The stdout used to validate the run.[m
|
||||
[32m+[m [32mStdout *string `json:"stdout"`[m
|
||||
[32m+[m [32m// The stderr used to validate the run.[m
|
||||
[32m+[m [32mStderr *string `json:"stderr"`[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetId returns GetPipelinePipelineRunsRun.Id, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineRunsRun) GetId() string { return v.Id }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetInProgress returns GetPipelinePipelineRunsRun.InProgress, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineRunsRun) GetInProgress() *bool { return v.InProgress }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetResult returns GetPipelinePipelineRunsRun.Result, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineRunsRun) GetResult() *float64 { return v.Result }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetBuildOutput returns GetPipelinePipelineRunsRun.BuildOutput, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineRunsRun) GetBuildOutput() *string { return v.BuildOutput }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetStdout returns GetPipelinePipelineRunsRun.Stdout, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineRunsRun) GetStdout() *string { return v.Stdout }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetStderr returns GetPipelinePipelineRunsRun.Stderr, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelinePipelineRunsRun) GetStderr() *string { return v.Stderr }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetPipelineResponse is returned by GetPipeline on success.[m
|
||||
[32m+[m[32mtype GetPipelineResponse struct {[m
|
||||
[32m+[m [32mPipeline *GetPipelinePipeline `json:"Pipeline"`[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetPipeline returns GetPipelineResponse.Pipeline, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *GetPipelineResponse) GetPipeline() *GetPipelinePipeline { return v.Pipeline }[m
|
||||
[32m+[m
|
||||
// GetPipelinesPipelinesPipeline includes the requested fields of the GraphQL type Pipeline.[m
|
||||
// The GraphQL type's documentation follows.[m
|
||||
//[m
|
||||
[36m@@ -387,6 +493,14 @@[m [mfunc (v *__CreateWebhookInput) GetWebhookType() string { return v.WebhookType }[m
|
||||
// GetPipelineId returns __CreateWebhookInput.PipelineId, and is useful for accessing the field via an interface.[m
|
||||
func (v *__CreateWebhookInput) GetPipelineId() string { return v.PipelineId }[m
|
||||
[m
|
||||
[32m+[m[32m// __GetPipelineInput is used internally by genqlient[m
|
||||
[32m+[m[32mtype __GetPipelineInput struct {[m
|
||||
[32m+[m [32mId string `json:"id"`[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32m// GetId returns __GetPipelineInput.Id, and is useful for accessing the field via an interface.[m
|
||||
[32m+[m[32mfunc (v *__GetPipelineInput) GetId() string { return v.Id }[m
|
||||
[32m+[m
|
||||
func CreateCloneCredential([m
|
||||
ctx context.Context,[m
|
||||
client graphql.Client,[m
|
||||
[36m@@ -610,6 +724,54 @@[m [mquery GetCloneCredentials {[m
|
||||
return &data, err[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32mfunc GetPipeline([m
|
||||
[32m+[m [32mctx context.Context,[m
|
||||
[32m+[m [32mclient graphql.Client,[m
|
||||
[32m+[m [32mid string,[m
|
||||
[32m+[m[32m) (*GetPipelineResponse, error) {[m
|
||||
[32m+[m [32mreq := &graphql.Request{[m
|
||||
[32m+[m [32mOpName: "GetPipeline",[m
|
||||
[32m+[m [32mQuery: `[m
|
||||
[32m+[m[32mquery GetPipeline ($id: String!) {[m
|
||||
[32m+[m [32mPipeline(id: $id) {[m
|
||||
[32m+[m [32mid[m
|
||||
[32m+[m [32mname[m
|
||||
[32m+[m [32murl[m
|
||||
[32m+[m [32mpollInterval[m
|
||||
[32m+[m [32mcloneCredential {[m
|
||||
[32m+[m [32mid[m
|
||||
[32m+[m [32mname[m
|
||||
[32m+[m [32mtype[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m [32mruns {[m
|
||||
[32m+[m [32mid[m
|
||||
[32m+[m [32minProgress[m
|
||||
[32m+[m [32mresult[m
|
||||
[32m+[m [32mbuildOutput[m
|
||||
[32m+[m [32mstdout[m
|
||||
[32m+[m [32mstderr[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m[32m`,[m
|
||||
[32m+[m [32mVariables: &__GetPipelineInput{[m
|
||||
[32m+[m [32mId: id,[m
|
||||
[32m+[m [32m},[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m [32mvar err error[m
|
||||
[32m+[m
|
||||
[32m+[m [32mvar data GetPipelineResponse[m
|
||||
[32m+[m [32mresp := &graphql.Response{Data: &data}[m
|
||||
[32m+[m
|
||||
[32m+[m [32merr = client.MakeRequest([m
|
||||
[32m+[m [32mctx,[m
|
||||
[32m+[m [32mreq,[m
|
||||
[32m+[m [32mresp,[m
|
||||
[32m+[m [32m)[m
|
||||
[32m+[m
|
||||
[32m+[m [32mreturn &data, err[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
func GetPipelines([m
|
||||
ctx context.Context,[m
|
||||
client graphql.Client,[m
|
||||
[1mdiff --git a/schema.graphql b/schema.graphql[m
|
||||
[1mindex 493b8a8..3e53e4c 100644[m
|
||||
[1m--- a/schema.graphql[m
|
||||
[1m+++ b/schema.graphql[m
|
||||
[36m@@ -2,27 +2,63 @@[m [mschema {[m
|
||||
query: Query[m
|
||||
mutation: Mutation[m
|
||||
}[m
|
||||
[31m-"A credential for authenticating with the pipeline source host."[m
|
||||
[31m-type CloneCredential {[m
|
||||
[31m- "The id of the credential."[m
|
||||
[32m+[m[32m"A secret available for use inside of a pipeline."[m
|
||||
[32m+[m[32mtype Secret {[m
|
||||
[32m+[m[32m "The id of the secret."[m
|
||||
id: String![m
|
||||
[31m- "The name of the credential."[m
|
||||
[32m+[m[32m "The name of the secret."[m
|
||||
name: String![m
|
||||
[31m- "The secret for the credential."[m
|
||||
[32m+[m[32m "The secret."[m
|
||||
secret: String![m
|
||||
[31m- "The credential type."[m
|
||||
[31m- type: String![m
|
||||
[31m- "The username to user with the credential."[m
|
||||
[31m- username: String![m
|
||||
}[m
|
||||
[31m-"A webhook for triggering pipelines"[m
|
||||
[31m-type Webhook {[m
|
||||
[31m- "The id of the webhook."[m
|
||||
[32m+[m[32m"A runner available for use inside of a pipeline."[m
|
||||
[32m+[m[32mtype Runner {[m
|
||||
[32m+[m[32m "The id of the runner."[m
|
||||
id: String![m
|
||||
[31m- "The secret used to validate the webhook."[m
|
||||
[31m- secret: String![m
|
||||
[31m- "The format of the webhook."[m
|
||||
[31m- serverType: String![m
|
||||
[32m+[m[32m "The name of the runner."[m
|
||||
[32m+[m[32m name: String![m
|
||||
[32m+[m[32m "The token."[m
|
||||
[32m+[m[32m token: String![m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m[32m""[m
|
||||
[32m+[m[32mtype Query {[m
|
||||
[32m+[m[32m ""[m
|
||||
[32m+[m[32m CloneCredential([m
|
||||
[32m+[m[32m "The id of the requested credential."[m
|
||||
[32m+[m[32m id: String![m
|
||||
[32m+[m[32m ): CloneCredential[m
|
||||
[32m+[m[32m ""[m
|
||||
[32m+[m[32m CloneCredentials: [CloneCredential]![m
|
||||
[32m+[m[32m ""[m
|
||||
[32m+[m[32m Pipeline([m
|
||||
[32m+[m[32m "The id of the requested pipeline."[m
|
||||
[32m+[m[32m id: String![m
|
||||
[32m+[m[32m ): Pipeline[m
|
||||
[32m+[m[32m ""[m
|
||||
[32m+[m[32m Pipelines: [Pipeline]![m
|
||||
[32m+[m[32m ""[m
|
||||
[32m+[m[32m Runners: [Runner]![m
|
||||
[32m+[m[32m ""[m
|
||||
[32m+[m[32m Secrets: [Secret]![m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m[32m"A pipeline for running ci jobs"[m
|
||||
[32m+[m[32mtype Pipeline {[m
|
||||
[32m+[m[32m "The configured credential for cloning the pipeline source."[m
|
||||
[32m+[m[32m cloneCredential: CloneCredential[m
|
||||
[32m+[m[32m "The id of the pipeline."[m
|
||||
[32m+[m[32m id: String![m
|
||||
[32m+[m[32m "The name of the pipeline."[m
|
||||
[32m+[m[32m name: String![m
|
||||
[32m+[m[32m "The polling interval for the pipeline."[m
|
||||
[32m+[m[32m pollInterval: Int![m
|
||||
[32m+[m[32m "The list of runs for the pipeline."[m
|
||||
[32m+[m[32m runs: [Run!]![m
|
||||
[32m+[m[32m "The list of secrets for the pipeline."[m
|
||||
[32m+[m[32m secrets: [Secret!]![m
|
||||
[32m+[m[32m "The url of the pipeline."[m
|
||||
[32m+[m[32m url: String![m
|
||||
[32m+[m[32m "The list of webhooks for the pipeline."[m
|
||||
[32m+[m[32m webhooks: [Webhook!]![m
|
||||
}[m
|
||||
""[m
|
||||
type Mutation {[m
|
||||
[36m@@ -89,66 +125,32 @@[m [mtype Mutation {[m
|
||||
pipelineId: String![m
|
||||
): Pipeline[m
|
||||
}[m
|
||||
[31m-"A runner available for use inside of a pipeline."[m
|
||||
[31m-type Runner {[m
|
||||
[31m- "The id of the runner."[m
|
||||
[31m- id: String![m
|
||||
[31m- "The name of the runner."[m
|
||||
[31m- name: String![m
|
||||
[31m- "The token."[m
|
||||
[31m- token: String![m
|
||||
[31m-}[m
|
||||
[31m-"A pipeline for running ci jobs"[m
|
||||
[31m-type Pipeline {[m
|
||||
[31m- "The configured credential for cloning the pipeline source."[m
|
||||
[31m- cloneCredential: CloneCredential[m
|
||||
[31m- "The id of the pipeline."[m
|
||||
[32m+[m[32m"A webhook for triggering pipelines"[m
|
||||
[32m+[m[32mtype Webhook {[m
|
||||
[32m+[m[32m "The id of the webhook."[m
|
||||
id: String![m
|
||||
[31m- "The name of the pipeline."[m
|
||||
[31m- name: String![m
|
||||
[31m- "The polling interval for the pipeline."[m
|
||||
[31m- pollInterval: Int![m
|
||||
[31m- "The list of runs for the pipeline."[m
|
||||
[31m- runs: [Run!]![m
|
||||
[31m- "The list of secrets for the pipeline."[m
|
||||
[31m- secrets: [Secret!]![m
|
||||
[31m- "The url of the pipeline."[m
|
||||
[31m- url: String![m
|
||||
[31m- "The list of webhooks for the pipeline."[m
|
||||
[31m- webhooks: [Webhook!]![m
|
||||
[32m+[m[32m "The secret used to validate the webhook."[m
|
||||
[32m+[m[32m secret: String![m
|
||||
[32m+[m[32m "The format of the webhook."[m
|
||||
[32m+[m[32m serverType: String![m
|
||||
}[m
|
||||
[31m-"A secret available for use inside of a pipeline."[m
|
||||
[31m-type Secret {[m
|
||||
[31m- "The id of the secret."[m
|
||||
[32m+[m[32m"A credential for authenticating with the pipeline source host."[m
|
||||
[32m+[m[32mtype CloneCredential {[m
|
||||
[32m+[m[32m "The id of the credential."[m
|
||||
id: String![m
|
||||
[31m- "The name of the secret."[m
|
||||
[32m+[m[32m "The name of the credential."[m
|
||||
name: String![m
|
||||
[31m- "The secret."[m
|
||||
[32m+[m[32m "The secret for the credential."[m
|
||||
secret: String![m
|
||||
[31m-}[m
|
||||
[31m-""[m
|
||||
[31m-type Query {[m
|
||||
[31m- ""[m
|
||||
[31m- CloneCredential([m
|
||||
[31m- "The id of the requested credential."[m
|
||||
[31m- id: String![m
|
||||
[31m- ): CloneCredential[m
|
||||
[31m- ""[m
|
||||
[31m- CloneCredentials: [CloneCredential]![m
|
||||
[31m- ""[m
|
||||
[31m- Pipeline([m
|
||||
[31m- "The id of the requested pipeline."[m
|
||||
[31m- id: String![m
|
||||
[31m- ): Pipeline[m
|
||||
[31m- ""[m
|
||||
[31m- Pipelines: [Pipeline]![m
|
||||
[31m- ""[m
|
||||
[31m- Runners: [Runner]![m
|
||||
[31m- ""[m
|
||||
[31m- Secrets: [Secret]![m
|
||||
[32m+[m[32m "The credential type."[m
|
||||
[32m+[m[32m type: String![m
|
||||
[32m+[m[32m "The username to user with the credential."[m
|
||||
[32m+[m[32m username: String![m
|
||||
}[m
|
||||
"A pipeline run"[m
|
||||
type Run {[m
|
||||
[32m+[m[32m "Logs of the top level container build for the run."[m
|
||||
[32m+[m[32m buildOutput: String[m
|
||||
"The id of the run."[m
|
||||
id: String![m
|
||||
"The progress status of the run."[m
|
||||
[1mdiff --git a/widget/pipelineList.go b/widget/pipelineList.go[m
|
||||
[1mindex f38a92f..cd7aabf 100644[m
|
||||
[1m--- a/widget/pipelineList.go[m
|
||||
[1m+++ b/widget/pipelineList.go[m
|
||||
[36m@@ -42,16 +42,16 @@[m [mfunc (m pipelineWidgetList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {[m
|
||||
[m
|
||||
case "enter":[m
|
||||
if m.list.Index() < len(m.list.Items())-1 {[m
|
||||
[31m- //item := m.list.SelectedItem()[m
|
||||
[31m- //if item, ok := item.(pipelineListItem); ok {[m
|
||||
[31m- // return m, func() tea.Cmd {[m
|
||||
[31m- // view, err := createPipelineEditForm(client, item.id)[m
|
||||
[31m- // if err != nil {[m
|
||||
[31m- // return err[m
|
||||
[31m- // }[m
|
||||
[31m- // return pipelineWidgetScreenSwitch(view)[m
|
||||
[31m- // }[m
|
||||
[31m- //}[m
|
||||
[32m+[m [32mitem := m.list.SelectedItem()[m
|
||||
[32m+[m [32mif item, ok := item.(pipelineListItem); ok {[m
|
||||
[32m+[m [32mreturn m, func() tea.Msg {[m
|
||||
[32m+[m [32mview, err := createPipelineWidgetView(m.client, item.id)[m
|
||||
[32m+[m [32mif err != nil {[m
|
||||
[32m+[m [32mreturn err[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m [32mreturn pipelineWidgetScreenSwitch(view)[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m [32m}[m
|
||||
} else {[m
|
||||
return m, func() tea.Msg {[m
|
||||
view, err := createPipelineCreateForm(m.client, m.list.Width(), m.list.Height())[m
|
||||
+10
-10
@@ -42,16 +42,16 @@ func (m pipelineWidgetList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
|
||||
case "enter":
|
||||
if m.list.Index() < len(m.list.Items())-1 {
|
||||
//item := m.list.SelectedItem()
|
||||
//if item, ok := item.(pipelineListItem); ok {
|
||||
// return m, func() tea.Cmd {
|
||||
// view, err := createPipelineEditForm(client, item.id)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// return pipelineWidgetScreenSwitch(view)
|
||||
// }
|
||||
//}
|
||||
item := m.list.SelectedItem()
|
||||
if item, ok := item.(pipelineListItem); ok {
|
||||
return m, func() tea.Msg {
|
||||
view, err := createPipelineWidgetView(m.client, item.id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return pipelineWidgetScreenSwitch(view)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return m, func() tea.Msg {
|
||||
view, err := createPipelineCreateForm(m.client, m.list.Width(), m.list.Height())
|
||||
|
||||
@@ -0,0 +1,263 @@
|
||||
package widget
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"git.ohea.xyz/cursorius/tui/queries"
|
||||
|
||||
"github.com/Khan/genqlient/graphql"
|
||||
"github.com/charmbracelet/bubbles/list"
|
||||
"github.com/charmbracelet/bubbles/viewport"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
)
|
||||
|
||||
type pipelineWidgetViewPage int
|
||||
|
||||
const (
|
||||
topLevel pipelineWidgetViewPage = 0
|
||||
viewRun = 1
|
||||
viewRunBuildOutput = 2
|
||||
viewRunStdout = 3
|
||||
viewRunStderr = 4
|
||||
)
|
||||
|
||||
type pipelineWidgetView struct {
|
||||
client graphql.Client
|
||||
page pipelineWidgetViewPage
|
||||
pipeline queries.GetPipelinePipeline
|
||||
runsList list.Model
|
||||
viewRunSelector list.Model
|
||||
viewRunBuildOutputPager viewport.Model
|
||||
viewRunStdoutPager viewport.Model
|
||||
viewRunStderrPager viewport.Model
|
||||
}
|
||||
|
||||
func (m pipelineWidgetView) Init() tea.Cmd {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m pipelineWidgetView) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
switch msg := msg.(type) {
|
||||
case tea.WindowSizeMsg:
|
||||
m.runsList.SetWidth(msg.Width - 20)
|
||||
m.runsList.SetHeight(msg.Height - 20)
|
||||
case tea.KeyMsg:
|
||||
switch msg.String() {
|
||||
case "r":
|
||||
return m, func() tea.Msg {
|
||||
view, err := createPipelineWidgetView(m.client, m.pipeline.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return pipelineWidgetScreenSwitch(view)
|
||||
}
|
||||
case "backspace":
|
||||
switch m.page {
|
||||
case topLevel:
|
||||
return m, func() tea.Msg {
|
||||
view, err := createPipelineWidgetList(m.client)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return pipelineWidgetScreenSwitch(view)
|
||||
}
|
||||
case viewRun:
|
||||
m.page = topLevel
|
||||
case viewRunBuildOutput:
|
||||
m.page = viewRun
|
||||
case viewRunStderr:
|
||||
m.page = viewRun
|
||||
case viewRunStdout:
|
||||
m.page = viewRun
|
||||
}
|
||||
case "enter":
|
||||
switch m.page {
|
||||
case topLevel:
|
||||
run := m.pipeline.Runs[m.runsList.Index()]
|
||||
|
||||
content := []list.Item{
|
||||
pipelineWidgetViewRunsSelectorItem(fmt.Sprintf("ID: %v", run.Id)),
|
||||
}
|
||||
|
||||
if run.InProgress != nil {
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem(fmt.Sprintf("In Progress: %v", *run.InProgress)))
|
||||
} else {
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem("In Progress: null"))
|
||||
}
|
||||
if run.Result != nil {
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem(fmt.Sprintf("Result: %v", *run.Result)))
|
||||
} else {
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem("Result: null"))
|
||||
}
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem("View Build Output"))
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem("View Stdout"))
|
||||
content = append(content, pipelineWidgetViewRunsSelectorItem("View Stderr"))
|
||||
|
||||
runOutputList := list.New(content, pipelineWigetViewRunsSelectorItemDelegate{}, m.runsList.Width(), m.runsList.Height())
|
||||
runOutputList.SetShowStatusBar(false)
|
||||
runOutputList.Title = "View Run"
|
||||
runOutputList.DisableQuitKeybindings()
|
||||
|
||||
m.viewRunSelector = runOutputList
|
||||
|
||||
m.page = viewRun
|
||||
case viewRun:
|
||||
run := m.pipeline.Runs[m.runsList.Index()]
|
||||
switch m.viewRunSelector.Index() {
|
||||
case 3:
|
||||
if run.BuildOutput == nil {
|
||||
break
|
||||
}
|
||||
m.viewRunBuildOutputPager = viewport.New(m.runsList.Width(), m.runsList.Height())
|
||||
m.viewRunBuildOutputPager.SetContent(*run.BuildOutput)
|
||||
m.page = viewRunBuildOutput
|
||||
case 4:
|
||||
if run.Stdout == nil {
|
||||
break
|
||||
}
|
||||
m.viewRunStdoutPager = viewport.New(m.runsList.Width(), m.runsList.Height())
|
||||
m.viewRunStdoutPager.SetContent(*run.Stdout)
|
||||
|
||||
m.page = viewRunStdout
|
||||
case 5:
|
||||
if run.Stderr == nil {
|
||||
break
|
||||
}
|
||||
m.viewRunStderrPager = viewport.New(m.runsList.Width(), m.runsList.Height())
|
||||
m.viewRunStderrPager.SetContent(*run.Stderr)
|
||||
|
||||
m.page = viewRunStderr
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var cmd tea.Cmd
|
||||
switch m.page {
|
||||
case topLevel:
|
||||
m.runsList, cmd = m.runsList.Update(msg)
|
||||
case viewRun:
|
||||
m.viewRunSelector, cmd = m.viewRunSelector.Update(msg)
|
||||
case viewRunBuildOutput:
|
||||
m.viewRunBuildOutputPager, cmd = m.viewRunBuildOutputPager.Update(msg)
|
||||
case viewRunStdout:
|
||||
m.viewRunStdoutPager, cmd = m.viewRunStdoutPager.Update(msg)
|
||||
case viewRunStderr:
|
||||
m.viewRunStderrPager, cmd = m.viewRunStderrPager.Update(msg)
|
||||
}
|
||||
|
||||
return m, cmd
|
||||
}
|
||||
|
||||
func (m pipelineWidgetView) View() string {
|
||||
s := ""
|
||||
switch m.page {
|
||||
case topLevel:
|
||||
s += fmt.Sprintf("Pipeline: %v\n\n", m.pipeline.Name)
|
||||
s += fmt.Sprintf("Id: %v\n", m.pipeline.Id)
|
||||
s += fmt.Sprintf("Url: %v\n", m.pipeline.Url)
|
||||
s += fmt.Sprintf("Poll Interval: %v\n", m.pipeline.PollInterval)
|
||||
if m.pipeline.CloneCredential != nil {
|
||||
s += fmt.Sprintf("Clone Credential: %v (%v)\n\n", m.pipeline.CloneCredential.Name, m.pipeline.CloneCredential.Type)
|
||||
} else {
|
||||
s += fmt.Sprintf("Clone Credential: None\n\n")
|
||||
}
|
||||
s += m.runsList.View()
|
||||
case viewRun:
|
||||
s += m.viewRunSelector.View()
|
||||
case viewRunBuildOutput:
|
||||
s += m.viewRunBuildOutputPager.View()
|
||||
case viewRunStdout:
|
||||
s += m.viewRunStdoutPager.View()
|
||||
case viewRunStderr:
|
||||
s += m.viewRunStderrPager.View()
|
||||
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func createPipelineWidgetView(client graphql.Client, id string) (tea.Model, error) {
|
||||
|
||||
getPipelineResp, err := queries.GetPipeline(context.Background(), client, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if getPipelineResp.Pipeline == nil {
|
||||
return nil, fmt.Errorf("Server did not give us a pipeline")
|
||||
}
|
||||
|
||||
var content []list.Item
|
||||
|
||||
for _, run := range getPipelineResp.Pipeline.Runs {
|
||||
content = append(content, pipelineWidgetViewRunsItem{
|
||||
id: run.Id,
|
||||
})
|
||||
}
|
||||
|
||||
runsList := list.New(content, pipelineWigetViewRunsItemDelegate{}, 0, 0)
|
||||
runsList.SetShowStatusBar(false)
|
||||
runsList.Title = "Runs"
|
||||
|
||||
return pipelineWidgetView{
|
||||
client: client,
|
||||
page: topLevel,
|
||||
pipeline: *getPipelineResp.Pipeline,
|
||||
runsList: runsList,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type pipelineWidgetViewRunsItem struct {
|
||||
id string
|
||||
}
|
||||
|
||||
func (i pipelineWidgetViewRunsItem) FilterValue() string { return "" }
|
||||
|
||||
type pipelineWigetViewRunsItemDelegate struct{}
|
||||
|
||||
func (d pipelineWigetViewRunsItemDelegate) Height() int { return 1 }
|
||||
func (d pipelineWigetViewRunsItemDelegate) Spacing() int { return 0 }
|
||||
func (d pipelineWigetViewRunsItemDelegate) Update(msg tea.Msg, m *list.Model) tea.Cmd { return nil }
|
||||
func (d pipelineWigetViewRunsItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) {
|
||||
switch i := listItem.(type) {
|
||||
case pipelineWidgetViewRunsItem:
|
||||
fn := itemStyle.Render
|
||||
if index == m.Index() {
|
||||
fn = func(s string) string {
|
||||
return selectedItemStyle.Render("> " + s)
|
||||
}
|
||||
}
|
||||
|
||||
str := fn(i.id)
|
||||
fmt.Fprint(w, str)
|
||||
}
|
||||
}
|
||||
|
||||
type pipelineWidgetViewRunsSelectorItem string
|
||||
|
||||
func (i pipelineWidgetViewRunsSelectorItem) FilterValue() string { return "" }
|
||||
|
||||
type pipelineWigetViewRunsSelectorItemDelegate struct{}
|
||||
|
||||
func (d pipelineWigetViewRunsSelectorItemDelegate) Height() int { return 1 }
|
||||
func (d pipelineWigetViewRunsSelectorItemDelegate) Spacing() int { return 0 }
|
||||
func (d pipelineWigetViewRunsSelectorItemDelegate) Update(msg tea.Msg, m *list.Model) tea.Cmd {
|
||||
return nil
|
||||
}
|
||||
func (d pipelineWigetViewRunsSelectorItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) {
|
||||
switch i := listItem.(type) {
|
||||
case pipelineWidgetViewRunsSelectorItem:
|
||||
fn := itemStyle.Render
|
||||
if index == m.Index() {
|
||||
fn = func(s string) string {
|
||||
return selectedItemStyle.Render("> " + s)
|
||||
}
|
||||
}
|
||||
|
||||
str := fn(string(i))
|
||||
fmt.Fprint(w, str)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user