From 175e9c21a7385fbf6e1d702dce855c575dc647bb Mon Sep 17 00:00:00 2001 From: Garrett Date: Fri, 15 Apr 2022 21:01:04 +0000 Subject: [PATCH 01/24] feat: experiment: generate typescript types from codersdk structs --- coderts/generate.go | 104 +++++++++++++++++++++++++++ coderts/types.ts | 172 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 276 insertions(+) create mode 100644 coderts/generate.go create mode 100644 coderts/types.ts diff --git a/coderts/generate.go b/coderts/generate.go new file mode 100644 index 0000000000000..96c229f6444e8 --- /dev/null +++ b/coderts/generate.go @@ -0,0 +1,104 @@ +package main + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "log" + "os" + "path/filepath" + "strings" + + "golang.org/x/xerrors" +) + +const ( + baseDir = "./codersdk" +) + +func main() { + err := run() + if err != nil { + log.Fatal(err) + } +} + +func run() error { + fset := token.NewFileSet() + entries, err := os.ReadDir(baseDir) + if err != nil { + return err + } + + for _, entry := range entries { + goFile, err := parser.ParseFile(fset, filepath.Join(baseDir, entry.Name()), nil, 0) + if err != nil { + return err + } + + for _, node := range goFile.Decls { + switch node.(type) { + + case *ast.GenDecl: + genDecl := node.(*ast.GenDecl) + for _, spec := range genDecl.Specs { + switch spec.(type) { + case *ast.TypeSpec: + typeSpec := spec.(*ast.TypeSpec) + s, err := writeStruct(typeSpec) + if err != nil { + continue + } + + fmt.Printf(s) + } + } + } + } + } + + return nil +} + +func writeStruct(typeSpec *ast.TypeSpec) (string, error) { + s := fmt.Sprintf("export interface %s {\n", typeSpec.Name.Name) + jsonFields := 0 + switch typeSpec.Type.(type) { + case *ast.StructType: + structType := typeSpec.Type.(*ast.StructType) + for _, field := range structType.Fields.List { + i, ok := field.Type.(*ast.Ident) + if !ok { + continue + } + fieldType := i.Name + fieldName := "" + if field.Tag != nil && field.Tag.Value != "" { + for _, pair := range strings.Split(field.Tag.Value, " ") { + if strings.HasPrefix(pair, "`json:\"") { + fieldName = strings.TrimPrefix(pair, "`json:\"") + fieldName = strings.Split(fieldName, ",")[0] + fieldName = strings.TrimSuffix(fieldName, "`") + fieldName = strings.TrimSuffix(fieldName, "\"") + break + } + } + } + if fieldName == "" { + break + } + + s = fmt.Sprintf("%s %s: %s\n", s, fieldName, fieldType) + jsonFields++ + } + default: + return "", xerrors.New("not struct") + } + + if jsonFields == 0 { + return "", xerrors.New("no json fields") + } + + return fmt.Sprintf("%s}\n\n", s), nil +} diff --git a/coderts/types.ts b/coderts/types.ts new file mode 100644 index 0000000000000..1a537c71c0467 --- /dev/null +++ b/coderts/types.ts @@ -0,0 +1,172 @@ +export interface BuildInfoResponse { + external_url: string + version: string +} + +export interface UploadResponse { + hash: string +} + +export interface GitSSHKey { + public_key: string +} + +export interface AgentGitSSHKey { + private_key: string +} + +export interface Organization { + name: string +} + +export interface CreateTemplateVersionRequest { + storage_source: string +} + +export interface CreateTemplateRequest { + name: string +} + +export interface CreateParameterRequest { + name: string + source_value: string +} + +export interface ProvisionerJob { + error: string + status: ProvisionerJobStatus +} + +export interface ProvisionerJobLog { + stage: string + output: string +} + +export interface Template { + name: string + workspace_owner_count: uint32 +} + +export interface TemplateVersion { + name: string + job: ProvisionerJob +} + +export interface User { + email: string + username: string + name: string +} + +export interface CreateFirstUserRequest { + email: string + username: string + password: string + organization: string +} + +export interface CreateUserRequest { + email: string + username: string + password: string +} + +export interface UpdateUserProfileRequest { + email: string + username: string +} + +export interface LoginWithPasswordRequest { + email: string + password: string +} + +export interface LoginWithPasswordResponse { + session_token: string +} + +export interface GenerateAPIKeyResponse { + key: string +} + +export interface CreateOrganizationRequest { + name: string +} + +export interface CreateWorkspaceRequest { + name: string +} + +export interface GoogleInstanceIdentityToken { + json_web_token: string +} + +export interface AWSInstanceIdentityToken { + signature: string + document: string +} + +export interface WorkspaceAgentAuthenticateResponse { + session_token: string +} + +export interface WorkspaceBuild { + name: string + job: ProvisionerJob +} + +export interface WorkspaceResource { + type: string + name: string +} + +export interface WorkspaceAgent { + status: WorkspaceAgentStatus + name: string + instance_id: string + architecture: string + operating_system: string + startup_script: string +} + +export interface WorkspaceAgentResourceMetadata { + memory_total: uint64 + disk_total: uint64 + cpu_cores: uint64 + cpu_model: string + cpu_mhz: float64 +} + +export interface WorkspaceAgentInstanceMetadata { + jail_orchestrator: string + operating_system: string + platform: string + platform_family: string + kernel_version: string + kernel_architecture: string + cloud: string + jail: string + vnc: bool +} + +export interface Workspace { + template_name: string + latest_build: WorkspaceBuild + outdated: bool + name: string + autostart_schedule: string + autostop_schedule: string +} + +export interface CreateWorkspaceBuildRequest { + dry_run: bool +} + +export interface UpdateWorkspaceAutostartRequest { + schedule: string +} + +export interface UpdateWorkspaceAutostopRequest { + schedule: string +} + From 670e7b7b2e1b3767c1bf350dcc1a6c95a46dba07 Mon Sep 17 00:00:00 2001 From: Garrett Date: Fri, 15 Apr 2022 21:08:16 +0000 Subject: [PATCH 02/24] Add support for bool and number --- coderts/generate.go | 7 +++++++ coderts/types.ts | 16 ++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/coderts/generate.go b/coderts/generate.go index 96c229f6444e8..0f695e4ec5299 100644 --- a/coderts/generate.go +++ b/coderts/generate.go @@ -73,6 +73,13 @@ func writeStruct(typeSpec *ast.TypeSpec) (string, error) { continue } fieldType := i.Name + switch fieldType { + case "bool": + fieldType = "boolean" + case "uint64", "uint32", "float64": + fieldType = "number" + } + fieldName := "" if field.Tag != nil && field.Tag.Value != "" { for _, pair := range strings.Split(field.Tag.Value, " ") { diff --git a/coderts/types.ts b/coderts/types.ts index 1a537c71c0467..03b229e865163 100644 --- a/coderts/types.ts +++ b/coderts/types.ts @@ -44,7 +44,7 @@ export interface ProvisionerJobLog { export interface Template { name: string - workspace_owner_count: uint32 + workspace_owner_count: number } export interface TemplateVersion { @@ -130,11 +130,11 @@ export interface WorkspaceAgent { } export interface WorkspaceAgentResourceMetadata { - memory_total: uint64 - disk_total: uint64 - cpu_cores: uint64 + memory_total: number + disk_total: number + cpu_cores: number cpu_model: string - cpu_mhz: float64 + cpu_mhz: number } export interface WorkspaceAgentInstanceMetadata { @@ -146,20 +146,20 @@ export interface WorkspaceAgentInstanceMetadata { kernel_architecture: string cloud: string jail: string - vnc: bool + vnc: boolean } export interface Workspace { template_name: string latest_build: WorkspaceBuild - outdated: bool + outdated: boolean name: string autostart_schedule: string autostop_schedule: string } export interface CreateWorkspaceBuildRequest { - dry_run: bool + dry_run: boolean } export interface UpdateWorkspaceAutostartRequest { From 1a04052aec4cc749bae84ca7022ab8ce15e4d8d3 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 20:47:21 +0000 Subject: [PATCH 03/24] generate missing types --- coderts/generate.go | 129 +++++++++++++++++++++++++++++++++----------- coderts/types.ts | 37 +++++++++++++ go.mod | 2 + go.sum | 4 ++ 4 files changed, 142 insertions(+), 30 deletions(-) diff --git a/coderts/generate.go b/coderts/generate.go index 0f695e4ec5299..90bb03e763ade 100644 --- a/coderts/generate.go +++ b/coderts/generate.go @@ -25,6 +25,7 @@ func main() { } func run() error { + var astFiles []*ast.File fset := token.NewFileSet() entries, err := os.ReadDir(baseDir) if err != nil { @@ -37,21 +38,34 @@ func run() error { return err } - for _, node := range goFile.Decls { - switch node.(type) { + astFiles = append(astFiles, goFile) + } + for _, astFile := range astFiles { + for _, node := range astFile.Decls { + switch node.(type) { case *ast.GenDecl: genDecl := node.(*ast.GenDecl) for _, spec := range genDecl.Specs { switch spec.(type) { case *ast.TypeSpec: typeSpec := spec.(*ast.TypeSpec) - s, err := writeStruct(typeSpec) + s, err := handleTypeSpec(typeSpec) + if err != nil { + break + } + + fmt.Printf(s) + break + case *ast.ValueSpec: + valueSpec := spec.(*ast.ValueSpec) + s, err := handleValueSpec(valueSpec) if err != nil { - continue + break } fmt.Printf(s) + break } } } @@ -61,51 +75,106 @@ func run() error { return nil } -func writeStruct(typeSpec *ast.TypeSpec) (string, error) { - s := fmt.Sprintf("export interface %s {\n", typeSpec.Name.Name) +func handleTypeSpec(typeSpec *ast.TypeSpec) (string, error) { jsonFields := 0 + s := "" switch typeSpec.Type.(type) { case *ast.StructType: + s = fmt.Sprintf("export interface %s {\n", typeSpec.Name.Name) structType := typeSpec.Type.(*ast.StructType) for _, field := range structType.Fields.List { i, ok := field.Type.(*ast.Ident) if !ok { continue } - fieldType := i.Name - switch fieldType { - case "bool": - fieldType = "boolean" - case "uint64", "uint32", "float64": - fieldType = "number" + fieldType, err := toTsType(i) + if err != nil { + continue } - fieldName := "" - if field.Tag != nil && field.Tag.Value != "" { - for _, pair := range strings.Split(field.Tag.Value, " ") { - if strings.HasPrefix(pair, "`json:\"") { - fieldName = strings.TrimPrefix(pair, "`json:\"") - fieldName = strings.Split(fieldName, ",")[0] - fieldName = strings.TrimSuffix(fieldName, "`") - fieldName = strings.TrimSuffix(fieldName, "\"") - break - } - } - } - if fieldName == "" { - break + fieldName, err := toJSONField(field) + if err != nil { + continue } s = fmt.Sprintf("%s %s: %s\n", s, fieldName, fieldType) jsonFields++ } + + if jsonFields == 0 { + return "", xerrors.New("no json fields") + } + + return fmt.Sprintf("%s}\n\n", s), nil + case *ast.Ident: + ident := typeSpec.Type.(*ast.Ident) + + return fmt.Sprintf("type %s = %s\n\n", typeSpec.Name.Name, ident.Name), nil default: - return "", xerrors.New("not struct") + return "", xerrors.New("not struct or alias") } +} + +func handleValueSpec(valueSpec *ast.ValueSpec) (string, error) { + valueDecl := "" + valueName := "" + valueType := "" + valueValue := "" + for _, name := range valueSpec.Names { + if name.Obj != nil && name.Obj.Kind == ast.Con { + valueDecl = "const" + valueName = name.Name + break + } + } + + i, ok := valueSpec.Type.(*ast.Ident) + if !ok { + return "", xerrors.New("failed to cast type") + } + valueType = i.Name - if jsonFields == 0 { - return "", xerrors.New("no json fields") + for _, value := range valueSpec.Values { + bl, ok := value.(*ast.BasicLit) + if !ok { + return "", xerrors.New("failed to cast value") + } + valueValue = bl.Value + break + } + + return fmt.Sprintf("%s %s: %s = %s\n\n", valueDecl, valueName, valueType, valueValue), nil +} + +func toTsType(e ast.Expr) (string, error) { + i, ok := e.(*ast.Ident) + if !ok { + return "", xerrors.New("not ident") + } + fieldType := i.Name + switch fieldType { + case "bool": + return "boolean", nil + case "uint64", "uint32", "float64": + return "number", nil + } + + return fieldType, nil +} + +func toJSONField(field *ast.Field) (string, error) { + if field.Tag != nil && field.Tag.Value != "" { + fieldName := strings.Trim(field.Tag.Value, "`") + for _, pair := range strings.Split(fieldName, " ") { + if strings.Contains(pair, `json:`) { + fieldName := strings.TrimPrefix(pair, `json:`) + fieldName = strings.Trim(fieldName, `"`) + fieldName = strings.Split(fieldName, ",")[0] + + return fieldName, nil + } + } } - return fmt.Sprintf("%s}\n\n", s), nil + return "", xerrors.New("no json tag") } diff --git a/coderts/types.ts b/coderts/types.ts index 03b229e865163..450508abdd73b 100644 --- a/coderts/types.ts +++ b/coderts/types.ts @@ -27,11 +27,40 @@ export interface CreateTemplateRequest { name: string } +type ParameterScope = string + +const ParameterOrganization: ParameterScope = "organization" + +const ParameterTemplate: ParameterScope = "template" + +const ParameterUser: ParameterScope = "user" + +const ParameterWorkspace: ParameterScope = "workspace" + +export interface Parameter { + scope: ParameterScope + name: string +} + export interface CreateParameterRequest { name: string source_value: string } +type ProvisionerJobStatus = string + +const ProvisionerJobPending: ProvisionerJobStatus = "pending" + +const ProvisionerJobRunning: ProvisionerJobStatus = "running" + +const ProvisionerJobSucceeded: ProvisionerJobStatus = "succeeded" + +const ProvisionerJobCanceling: ProvisionerJobStatus = "canceling" + +const ProvisionerJobCanceled: ProvisionerJobStatus = "canceled" + +const ProvisionerJobFailed: ProvisionerJobStatus = "failed" + export interface ProvisionerJob { error: string status: ProvisionerJobStatus @@ -115,6 +144,14 @@ export interface WorkspaceBuild { job: ProvisionerJob } +type WorkspaceAgentStatus = string + +const WorkspaceAgentConnecting: WorkspaceAgentStatus = "connecting" + +const WorkspaceAgentConnected: WorkspaceAgentStatus = "connected" + +const WorkspaceAgentDisconnected: WorkspaceAgentStatus = "disconnected" + export interface WorkspaceResource { type: string name: string diff --git a/go.mod b/go.mod index fee0628557fa4..1329a54811f7e 100644 --- a/go.mod +++ b/go.mod @@ -213,6 +213,8 @@ require ( github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect github.com/tinylib/msgp v1.1.2 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect + github.com/tkrajina/go-reflector v0.5.5 // indirect + github.com/tkrajina/typescriptify-golang-structs v0.1.7 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect diff --git a/go.sum b/go.sum index 685d3ead2998b..3da25ee0e38e6 100644 --- a/go.sum +++ b/go.sum @@ -1607,6 +1607,10 @@ github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= +github.com/tkrajina/go-reflector v0.5.5 h1:gwoQFNye30Kk7NrExj8zm3zFtrGPqOkzFMLuQZg1DtQ= +github.com/tkrajina/go-reflector v0.5.5/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/tkrajina/typescriptify-golang-structs v0.1.7 h1:72jmiT/brlgtCPpwu4X0HkhMeUMtx8+xDiTMS93rFqY= +github.com/tkrajina/typescriptify-golang-structs v0.1.7/go.mod h1:sjU00nti/PMEOZb07KljFlR+lJ+RotsC0GBQMv9EKls= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= From e25d5afce303109d2aba9a5838d1ba8c61d022a9 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 21:10:43 +0000 Subject: [PATCH 04/24] Add optional fields --- coderts/generate.go | 47 +++++++++++++++++++++++++++++++-------------- coderts/types.ts | 1 + 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/coderts/generate.go b/coderts/generate.go index 90bb03e763ade..4ac039eab1235 100644 --- a/coderts/generate.go +++ b/coderts/generate.go @@ -83,21 +83,34 @@ func handleTypeSpec(typeSpec *ast.TypeSpec) (string, error) { s = fmt.Sprintf("export interface %s {\n", typeSpec.Name.Name) structType := typeSpec.Type.(*ast.StructType) for _, field := range structType.Fields.List { - i, ok := field.Type.(*ast.Ident) - if !ok { + var i *ast.Ident + optional := "" + switch field.Type.(type) { + case *ast.Ident: + i = field.Type.(*ast.Ident) + case *ast.StarExpr: + var ok bool + se := field.Type.(*ast.StarExpr) + i, ok = se.X.(*ast.Ident) + if !ok { + continue + } + optional = "?" + default: continue } - fieldType, err := toTsType(i) - if err != nil { + + fieldType := toTsType(i) + if fieldType == "" { continue } fieldName, err := toJSONField(field) - if err != nil { + if err != nil || fieldType == "" { continue } - s = fmt.Sprintf("%s %s: %s\n", s, fieldName, fieldType) + s = fmt.Sprintf("%s %s%s: %s\n", s, fieldName, optional, fieldType) jsonFields++ } @@ -146,20 +159,26 @@ func handleValueSpec(valueSpec *ast.ValueSpec) (string, error) { return fmt.Sprintf("%s %s: %s = %s\n\n", valueDecl, valueName, valueType, valueValue), nil } -func toTsType(e ast.Expr) (string, error) { - i, ok := e.(*ast.Ident) - if !ok { - return "", xerrors.New("not ident") +func toTsType(e ast.Expr) string { + fieldType := "" + switch e.(type) { + case *ast.Ident: + i := e.(*ast.Ident) + fieldType = i.Name + case *ast.StarExpr: + se := e.(*ast.StarExpr) + i := se.X.(*ast.Ident) + fieldType = i.Name } - fieldType := i.Name + switch fieldType { case "bool": - return "boolean", nil + return "boolean" case "uint64", "uint32", "float64": - return "number", nil + return "number" } - return fieldType, nil + return fieldType } func toJSONField(field *ast.Field) (string, error) { diff --git a/coderts/types.ts b/coderts/types.ts index 450508abdd73b..14d407b150027 100644 --- a/coderts/types.ts +++ b/coderts/types.ts @@ -103,6 +103,7 @@ export interface CreateUserRequest { export interface UpdateUserProfileRequest { email: string username: string + name?: string } export interface LoginWithPasswordRequest { From 7f930182557fea719bdc95c1ceadc41b05f9e3ac Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 21:21:49 +0000 Subject: [PATCH 05/24] Add to make gen --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c4025bcb16b8c..3208360138fd1 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,10 @@ coderd/database/generate: fmt/sql coderd/database/dump.sql $(wildcard coderd/dat coderd/database/generate.sh .PHONY: coderd/database/generate +coderts/generate: coderts/types.ts + go run coderts/generate.go > coderts/types.ts +.PHONY: coderts/generate + fmt/prettier: @echo "--- prettier" # Avoid writing files in CI to reduce file write activity @@ -48,7 +52,7 @@ fmt/terraform: $(wildcard *.tf) fmt: fmt/prettier fmt/sql fmt/terraform .PHONY: fmt -gen: coderd/database/generate peerbroker/proto provisionersdk/proto provisionerd/proto +gen: coderd/database/generate peerbroker/proto provisionersdk/proto provisionerd/proto coderts/generate .PHONY: gen install: bin From 23e36fcec67a5592eb09bf5557bdff7137be6719 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 21:40:41 +0000 Subject: [PATCH 06/24] make lint --- coderts/generate.go | 103 +++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 58 deletions(-) diff --git a/coderts/generate.go b/coderts/generate.go index 4ac039eab1235..b74fd2aded9e1 100644 --- a/coderts/generate.go +++ b/coderts/generate.go @@ -25,48 +25,43 @@ func main() { } func run() error { - var astFiles []*ast.File fset := token.NewFileSet() entries, err := os.ReadDir(baseDir) if err != nil { - return err + return xerrors.Errorf("reading dir %s: %w", baseDir, err) } + // loop each file in directory for _, entry := range entries { - goFile, err := parser.ParseFile(fset, filepath.Join(baseDir, entry.Name()), nil, 0) + astFile, err := parser.ParseFile(fset, filepath.Join(baseDir, entry.Name()), nil, 0) if err != nil { - return err + return xerrors.Errorf("parsing file %s: %w", filepath.Join(baseDir, entry.Name()), err) } - astFiles = append(astFiles, goFile) - } - - for _, astFile := range astFiles { + // loop each declaration in file for _, node := range astFile.Decls { - switch node.(type) { - case *ast.GenDecl: - genDecl := node.(*ast.GenDecl) - for _, spec := range genDecl.Specs { - switch spec.(type) { - case *ast.TypeSpec: - typeSpec := spec.(*ast.TypeSpec) - s, err := handleTypeSpec(typeSpec) - if err != nil { - break - } - - fmt.Printf(s) + genDecl, ok := node.(*ast.GenDecl) + if !ok { + continue + } + for _, spec := range genDecl.Specs { + switch s := spec.(type) { + // TypeSpec case for structs and type alias + case *ast.TypeSpec: + out, err := handleTypeSpec(s) + if err != nil { break - case *ast.ValueSpec: - valueSpec := spec.(*ast.ValueSpec) - s, err := handleValueSpec(valueSpec) - if err != nil { - break - } - - fmt.Printf(s) + } + + _, _ = fmt.Printf(out) + // ValueSpec case for const "enums" + case *ast.ValueSpec: + out, err := handleValueSpec(s) + if err != nil { break } + + _, _ = fmt.Printf(out) } } } @@ -78,29 +73,17 @@ func run() error { func handleTypeSpec(typeSpec *ast.TypeSpec) (string, error) { jsonFields := 0 s := "" - switch typeSpec.Type.(type) { + switch t := typeSpec.Type.(type) { + // Struct declaration case *ast.StructType: s = fmt.Sprintf("export interface %s {\n", typeSpec.Name.Name) - structType := typeSpec.Type.(*ast.StructType) - for _, field := range structType.Fields.List { - var i *ast.Ident - optional := "" - switch field.Type.(type) { - case *ast.Ident: - i = field.Type.(*ast.Ident) - case *ast.StarExpr: - var ok bool - se := field.Type.(*ast.StarExpr) - i, ok = se.X.(*ast.Ident) - if !ok { - continue - } - optional = "?" - default: + for _, field := range t.Fields.List { + i, optional, err := getIdent(field.Type) + if err != nil { continue } - fieldType := toTsType(i) + fieldType := toTsType(i.Name) if fieldType == "" { continue } @@ -114,15 +97,15 @@ func handleTypeSpec(typeSpec *ast.TypeSpec) (string, error) { jsonFields++ } + // Do not print struct if it has no json fields if jsonFields == 0 { return "", xerrors.New("no json fields") } return fmt.Sprintf("%s}\n\n", s), nil + // Type alias declaration case *ast.Ident: - ident := typeSpec.Type.(*ast.Ident) - - return fmt.Sprintf("type %s = %s\n\n", typeSpec.Name.Name, ident.Name), nil + return fmt.Sprintf("type %s = %s\n\n", typeSpec.Name.Name, t.Name), nil default: return "", xerrors.New("not struct or alias") } @@ -159,18 +142,22 @@ func handleValueSpec(valueSpec *ast.ValueSpec) (string, error) { return fmt.Sprintf("%s %s: %s = %s\n\n", valueDecl, valueName, valueType, valueValue), nil } -func toTsType(e ast.Expr) string { - fieldType := "" - switch e.(type) { +func getIdent(e ast.Expr) (*ast.Ident, string, error) { + switch t := e.(type) { case *ast.Ident: - i := e.(*ast.Ident) - fieldType = i.Name + return t, "", nil case *ast.StarExpr: - se := e.(*ast.StarExpr) - i := se.X.(*ast.Ident) - fieldType = i.Name + i, ok := t.X.(*ast.Ident) + if !ok { + return nil, "", xerrors.New("failed to cast star expr to indent") + } + return i, "?", nil + default: + return nil, "", xerrors.New("unknown expr type") } +} +func toTsType(fieldType string) string { switch fieldType { case "bool": return "boolean" From 1db1432857d041f214f2f635348cb4e2afd211f3 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 21:42:22 +0000 Subject: [PATCH 07/24] remove gomod changes --- go.mod | 2 -- go.sum | 4 ---- 2 files changed, 6 deletions(-) diff --git a/go.mod b/go.mod index 1329a54811f7e..fee0628557fa4 100644 --- a/go.mod +++ b/go.mod @@ -213,8 +213,6 @@ require ( github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect github.com/tinylib/msgp v1.1.2 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect - github.com/tkrajina/go-reflector v0.5.5 // indirect - github.com/tkrajina/typescriptify-golang-structs v0.1.7 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect diff --git a/go.sum b/go.sum index 3da25ee0e38e6..685d3ead2998b 100644 --- a/go.sum +++ b/go.sum @@ -1607,10 +1607,6 @@ github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= -github.com/tkrajina/go-reflector v0.5.5 h1:gwoQFNye30Kk7NrExj8zm3zFtrGPqOkzFMLuQZg1DtQ= -github.com/tkrajina/go-reflector v0.5.5/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= -github.com/tkrajina/typescriptify-golang-structs v0.1.7 h1:72jmiT/brlgtCPpwu4X0HkhMeUMtx8+xDiTMS93rFqY= -github.com/tkrajina/typescriptify-golang-structs v0.1.7/go.mod h1:sjU00nti/PMEOZb07KljFlR+lJ+RotsC0GBQMv9EKls= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= From c430a2dc4b7722c101632d031e1f4c06b4e1ed30 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 22:05:43 +0000 Subject: [PATCH 08/24] Add code line docs --- coderts/generate.go | 17 +++++++-------- coderts/types.ts | 50 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 8 deletions(-) diff --git a/coderts/generate.go b/coderts/generate.go index b74fd2aded9e1..e2f09955af686 100644 --- a/coderts/generate.go +++ b/coderts/generate.go @@ -45,10 +45,11 @@ func run() error { continue } for _, spec := range genDecl.Specs { + pos := fset.Position(spec.Pos()) switch s := spec.(type) { // TypeSpec case for structs and type alias case *ast.TypeSpec: - out, err := handleTypeSpec(s) + out, err := handleTypeSpec(s, pos) if err != nil { break } @@ -56,7 +57,7 @@ func run() error { _, _ = fmt.Printf(out) // ValueSpec case for const "enums" case *ast.ValueSpec: - out, err := handleValueSpec(s) + out, err := handleValueSpec(s, pos) if err != nil { break } @@ -70,13 +71,13 @@ func run() error { return nil } -func handleTypeSpec(typeSpec *ast.TypeSpec) (string, error) { +func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position) (string, error) { jsonFields := 0 - s := "" + s := fmt.Sprintf("// From %s.\n", pos.String()) switch t := typeSpec.Type.(type) { // Struct declaration case *ast.StructType: - s = fmt.Sprintf("export interface %s {\n", typeSpec.Name.Name) + s = fmt.Sprintf("%sexport interface %s {\n", s, typeSpec.Name.Name) for _, field := range t.Fields.List { i, optional, err := getIdent(field.Type) if err != nil { @@ -105,13 +106,13 @@ func handleTypeSpec(typeSpec *ast.TypeSpec) (string, error) { return fmt.Sprintf("%s}\n\n", s), nil // Type alias declaration case *ast.Ident: - return fmt.Sprintf("type %s = %s\n\n", typeSpec.Name.Name, t.Name), nil + return fmt.Sprintf("%stype %s = %s\n\n", s, typeSpec.Name.Name, t.Name), nil default: return "", xerrors.New("not struct or alias") } } -func handleValueSpec(valueSpec *ast.ValueSpec) (string, error) { +func handleValueSpec(valueSpec *ast.ValueSpec, pos token.Position) (string, error) { valueDecl := "" valueName := "" valueType := "" @@ -139,7 +140,7 @@ func handleValueSpec(valueSpec *ast.ValueSpec) (string, error) { break } - return fmt.Sprintf("%s %s: %s = %s\n\n", valueDecl, valueName, valueType, valueValue), nil + return fmt.Sprintf("// From %s.\n%s %s: %s = %s\n\n", pos.String(), valueDecl, valueName, valueType, valueValue), nil } func getIdent(e ast.Expr) (*ast.Ident, string, error) { diff --git a/coderts/types.ts b/coderts/types.ts index 14d407b150027..1352825929d9e 100644 --- a/coderts/types.ts +++ b/coderts/types.ts @@ -1,92 +1,119 @@ +// From codersdk/buildinfo.go:10:6. export interface BuildInfoResponse { external_url: string version: string } +// From codersdk/files.go:16:6. export interface UploadResponse { hash: string } +// From codersdk/gitsshkey.go:14:6. export interface GitSSHKey { public_key: string } +// From codersdk/gitsshkey.go:21:6. export interface AgentGitSSHKey { private_key: string } +// From codersdk/organizations.go:17:6. export interface Organization { name: string } +// From codersdk/organizations.go:25:6. export interface CreateTemplateVersionRequest { storage_source: string } +// From codersdk/organizations.go:38:6. export interface CreateTemplateRequest { name: string } +// From codersdk/parameters.go:16:6. type ParameterScope = string +// From codersdk/parameters.go:19:2. const ParameterOrganization: ParameterScope = "organization" +// From codersdk/parameters.go:20:2. const ParameterTemplate: ParameterScope = "template" +// From codersdk/parameters.go:21:2. const ParameterUser: ParameterScope = "user" +// From codersdk/parameters.go:22:2. const ParameterWorkspace: ParameterScope = "workspace" +// From codersdk/parameters.go:26:6. export interface Parameter { scope: ParameterScope name: string } +// From codersdk/parameters.go:38:6. export interface CreateParameterRequest { name: string source_value: string } +// From codersdk/provisionerdaemons.go:26:6. type ProvisionerJobStatus = string +// From codersdk/provisionerdaemons.go:29:2. const ProvisionerJobPending: ProvisionerJobStatus = "pending" +// From codersdk/provisionerdaemons.go:30:2. const ProvisionerJobRunning: ProvisionerJobStatus = "running" +// From codersdk/provisionerdaemons.go:31:2. const ProvisionerJobSucceeded: ProvisionerJobStatus = "succeeded" +// From codersdk/provisionerdaemons.go:32:2. const ProvisionerJobCanceling: ProvisionerJobStatus = "canceling" +// From codersdk/provisionerdaemons.go:33:2. const ProvisionerJobCanceled: ProvisionerJobStatus = "canceled" +// From codersdk/provisionerdaemons.go:34:2. const ProvisionerJobFailed: ProvisionerJobStatus = "failed" +// From codersdk/provisionerdaemons.go:37:6. export interface ProvisionerJob { error: string status: ProvisionerJobStatus } +// From codersdk/provisionerdaemons.go:47:6. export interface ProvisionerJobLog { stage: string output: string } +// From codersdk/templates.go:17:6. export interface Template { name: string workspace_owner_count: number } +// From codersdk/templateversions.go:17:6. export interface TemplateVersion { name: string job: ProvisionerJob } +// From codersdk/users.go:17:6. export interface User { email: string username: string name: string } +// From codersdk/users.go:25:6. export interface CreateFirstUserRequest { email: string username: string @@ -94,70 +121,87 @@ export interface CreateFirstUserRequest { organization: string } +// From codersdk/users.go:38:6. export interface CreateUserRequest { email: string username: string password: string } +// From codersdk/users.go:45:6. export interface UpdateUserProfileRequest { email: string username: string name?: string } +// From codersdk/users.go:52:6. export interface LoginWithPasswordRequest { email: string password: string } +// From codersdk/users.go:58:6. export interface LoginWithPasswordResponse { session_token: string } +// From codersdk/users.go:63:6. export interface GenerateAPIKeyResponse { key: string } +// From codersdk/users.go:67:6. export interface CreateOrganizationRequest { name: string } +// From codersdk/users.go:72:6. export interface CreateWorkspaceRequest { name: string } +// From codersdk/workspaceagents.go:26:6. export interface GoogleInstanceIdentityToken { json_web_token: string } +// From codersdk/workspaceagents.go:30:6. export interface AWSInstanceIdentityToken { signature: string document: string } +// From codersdk/workspaceagents.go:37:6. export interface WorkspaceAgentAuthenticateResponse { session_token: string } +// From codersdk/workspacebuilds.go:17:6. export interface WorkspaceBuild { name: string job: ProvisionerJob } +// From codersdk/workspaceresources.go:15:6. type WorkspaceAgentStatus = string +// From codersdk/workspaceresources.go:18:2. const WorkspaceAgentConnecting: WorkspaceAgentStatus = "connecting" +// From codersdk/workspaceresources.go:19:2. const WorkspaceAgentConnected: WorkspaceAgentStatus = "connected" +// From codersdk/workspaceresources.go:20:2. const WorkspaceAgentDisconnected: WorkspaceAgentStatus = "disconnected" +// From codersdk/workspaceresources.go:23:6. export interface WorkspaceResource { type: string name: string } +// From codersdk/workspaceresources.go:33:6. export interface WorkspaceAgent { status: WorkspaceAgentStatus name: string @@ -167,6 +211,7 @@ export interface WorkspaceAgent { startup_script: string } +// From codersdk/workspaceresources.go:50:6. export interface WorkspaceAgentResourceMetadata { memory_total: number disk_total: number @@ -175,6 +220,7 @@ export interface WorkspaceAgentResourceMetadata { cpu_mhz: number } +// From codersdk/workspaceresources.go:58:6. export interface WorkspaceAgentInstanceMetadata { jail_orchestrator: string operating_system: string @@ -187,6 +233,7 @@ export interface WorkspaceAgentInstanceMetadata { vnc: boolean } +// From codersdk/workspaces.go:18:6. export interface Workspace { template_name: string latest_build: WorkspaceBuild @@ -196,14 +243,17 @@ export interface Workspace { autostop_schedule: string } +// From codersdk/workspaces.go:33:6. export interface CreateWorkspaceBuildRequest { dry_run: boolean } +// From codersdk/workspaces.go:94:6. export interface UpdateWorkspaceAutostartRequest { schedule: string } +// From codersdk/workspaces.go:114:6. export interface UpdateWorkspaceAutostopRequest { schedule: string } From a511f6ad91db1ad9d3be6cc093cab33e92287ff4 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 22:15:50 +0000 Subject: [PATCH 09/24] Cleanup error handle --- coderts/generate.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/coderts/generate.go b/coderts/generate.go index e2f09955af686..4be70d6c4e340 100644 --- a/coderts/generate.go +++ b/coderts/generate.go @@ -89,8 +89,8 @@ func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position) (string, error) continue } - fieldName, err := toJSONField(field) - if err != nil || fieldType == "" { + fieldName := toJSONField(field) + if fieldType == "" { continue } @@ -169,7 +169,7 @@ func toTsType(fieldType string) string { return fieldType } -func toJSONField(field *ast.Field) (string, error) { +func toJSONField(field *ast.Field) string { if field.Tag != nil && field.Tag.Value != "" { fieldName := strings.Trim(field.Tag.Value, "`") for _, pair := range strings.Split(fieldName, " ") { @@ -178,10 +178,10 @@ func toJSONField(field *ast.Field) (string, error) { fieldName = strings.Trim(fieldName, `"`) fieldName = strings.Split(fieldName, ",")[0] - return fieldName, nil + return fieldName } } } - return "", xerrors.New("no json tag") + return "" } From e31f2afa00138f90664f95b8377efd04e9cf8d27 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 22:21:26 +0000 Subject: [PATCH 10/24] move to scripts --- Makefile | 2 +- coderts/generate.go => scripts/coderts/main.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename coderts/generate.go => scripts/coderts/main.go (99%) diff --git a/Makefile b/Makefile index 3208360138fd1..c8c3bb70a1f73 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ coderd/database/generate: fmt/sql coderd/database/dump.sql $(wildcard coderd/dat .PHONY: coderd/database/generate coderts/generate: coderts/types.ts - go run coderts/generate.go > coderts/types.ts + go run scripts/coderts/main.go > coderts/types.ts .PHONY: coderts/generate fmt/prettier: diff --git a/coderts/generate.go b/scripts/coderts/main.go similarity index 99% rename from coderts/generate.go rename to scripts/coderts/main.go index 4be70d6c4e340..c070f29ed8833 100644 --- a/coderts/generate.go +++ b/scripts/coderts/main.go @@ -90,7 +90,7 @@ func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position) (string, error) } fieldName := toJSONField(field) - if fieldType == "" { + if fieldName == "" { continue } From b5c2f27716226396d67321a61d35b454e42711d3 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 22:51:40 +0000 Subject: [PATCH 11/24] overwrite types.ts --- Makefile | 7 +- coderts/types.ts | 260 ------------------------------------- scripts/coderts/main.go | 187 --------------------------- site/package.json | 1 + site/src/api/types.ts | 275 +++++++++++++++++++++++++++++++--------- 5 files changed, 220 insertions(+), 510 deletions(-) delete mode 100644 coderts/types.ts delete mode 100644 scripts/coderts/main.go diff --git a/Makefile b/Makefile index c8c3bb70a1f73..a76de5d3ff988 100644 --- a/Makefile +++ b/Makefile @@ -19,8 +19,9 @@ coderd/database/generate: fmt/sql coderd/database/dump.sql $(wildcard coderd/dat coderd/database/generate.sh .PHONY: coderd/database/generate -coderts/generate: coderts/types.ts - go run scripts/coderts/main.go > coderts/types.ts +apitypings/generate: site/src/api/types.ts + go run scripts/apitypings/main.go > site/src/api/types.ts + cd site && yarn run format:types .PHONY: coderts/generate fmt/prettier: @@ -52,7 +53,7 @@ fmt/terraform: $(wildcard *.tf) fmt: fmt/prettier fmt/sql fmt/terraform .PHONY: fmt -gen: coderd/database/generate peerbroker/proto provisionersdk/proto provisionerd/proto coderts/generate +gen: coderd/database/generate peerbroker/proto provisionersdk/proto provisionerd/proto apitypings/generate .PHONY: gen install: bin diff --git a/coderts/types.ts b/coderts/types.ts deleted file mode 100644 index 1352825929d9e..0000000000000 --- a/coderts/types.ts +++ /dev/null @@ -1,260 +0,0 @@ -// From codersdk/buildinfo.go:10:6. -export interface BuildInfoResponse { - external_url: string - version: string -} - -// From codersdk/files.go:16:6. -export interface UploadResponse { - hash: string -} - -// From codersdk/gitsshkey.go:14:6. -export interface GitSSHKey { - public_key: string -} - -// From codersdk/gitsshkey.go:21:6. -export interface AgentGitSSHKey { - private_key: string -} - -// From codersdk/organizations.go:17:6. -export interface Organization { - name: string -} - -// From codersdk/organizations.go:25:6. -export interface CreateTemplateVersionRequest { - storage_source: string -} - -// From codersdk/organizations.go:38:6. -export interface CreateTemplateRequest { - name: string -} - -// From codersdk/parameters.go:16:6. -type ParameterScope = string - -// From codersdk/parameters.go:19:2. -const ParameterOrganization: ParameterScope = "organization" - -// From codersdk/parameters.go:20:2. -const ParameterTemplate: ParameterScope = "template" - -// From codersdk/parameters.go:21:2. -const ParameterUser: ParameterScope = "user" - -// From codersdk/parameters.go:22:2. -const ParameterWorkspace: ParameterScope = "workspace" - -// From codersdk/parameters.go:26:6. -export interface Parameter { - scope: ParameterScope - name: string -} - -// From codersdk/parameters.go:38:6. -export interface CreateParameterRequest { - name: string - source_value: string -} - -// From codersdk/provisionerdaemons.go:26:6. -type ProvisionerJobStatus = string - -// From codersdk/provisionerdaemons.go:29:2. -const ProvisionerJobPending: ProvisionerJobStatus = "pending" - -// From codersdk/provisionerdaemons.go:30:2. -const ProvisionerJobRunning: ProvisionerJobStatus = "running" - -// From codersdk/provisionerdaemons.go:31:2. -const ProvisionerJobSucceeded: ProvisionerJobStatus = "succeeded" - -// From codersdk/provisionerdaemons.go:32:2. -const ProvisionerJobCanceling: ProvisionerJobStatus = "canceling" - -// From codersdk/provisionerdaemons.go:33:2. -const ProvisionerJobCanceled: ProvisionerJobStatus = "canceled" - -// From codersdk/provisionerdaemons.go:34:2. -const ProvisionerJobFailed: ProvisionerJobStatus = "failed" - -// From codersdk/provisionerdaemons.go:37:6. -export interface ProvisionerJob { - error: string - status: ProvisionerJobStatus -} - -// From codersdk/provisionerdaemons.go:47:6. -export interface ProvisionerJobLog { - stage: string - output: string -} - -// From codersdk/templates.go:17:6. -export interface Template { - name: string - workspace_owner_count: number -} - -// From codersdk/templateversions.go:17:6. -export interface TemplateVersion { - name: string - job: ProvisionerJob -} - -// From codersdk/users.go:17:6. -export interface User { - email: string - username: string - name: string -} - -// From codersdk/users.go:25:6. -export interface CreateFirstUserRequest { - email: string - username: string - password: string - organization: string -} - -// From codersdk/users.go:38:6. -export interface CreateUserRequest { - email: string - username: string - password: string -} - -// From codersdk/users.go:45:6. -export interface UpdateUserProfileRequest { - email: string - username: string - name?: string -} - -// From codersdk/users.go:52:6. -export interface LoginWithPasswordRequest { - email: string - password: string -} - -// From codersdk/users.go:58:6. -export interface LoginWithPasswordResponse { - session_token: string -} - -// From codersdk/users.go:63:6. -export interface GenerateAPIKeyResponse { - key: string -} - -// From codersdk/users.go:67:6. -export interface CreateOrganizationRequest { - name: string -} - -// From codersdk/users.go:72:6. -export interface CreateWorkspaceRequest { - name: string -} - -// From codersdk/workspaceagents.go:26:6. -export interface GoogleInstanceIdentityToken { - json_web_token: string -} - -// From codersdk/workspaceagents.go:30:6. -export interface AWSInstanceIdentityToken { - signature: string - document: string -} - -// From codersdk/workspaceagents.go:37:6. -export interface WorkspaceAgentAuthenticateResponse { - session_token: string -} - -// From codersdk/workspacebuilds.go:17:6. -export interface WorkspaceBuild { - name: string - job: ProvisionerJob -} - -// From codersdk/workspaceresources.go:15:6. -type WorkspaceAgentStatus = string - -// From codersdk/workspaceresources.go:18:2. -const WorkspaceAgentConnecting: WorkspaceAgentStatus = "connecting" - -// From codersdk/workspaceresources.go:19:2. -const WorkspaceAgentConnected: WorkspaceAgentStatus = "connected" - -// From codersdk/workspaceresources.go:20:2. -const WorkspaceAgentDisconnected: WorkspaceAgentStatus = "disconnected" - -// From codersdk/workspaceresources.go:23:6. -export interface WorkspaceResource { - type: string - name: string -} - -// From codersdk/workspaceresources.go:33:6. -export interface WorkspaceAgent { - status: WorkspaceAgentStatus - name: string - instance_id: string - architecture: string - operating_system: string - startup_script: string -} - -// From codersdk/workspaceresources.go:50:6. -export interface WorkspaceAgentResourceMetadata { - memory_total: number - disk_total: number - cpu_cores: number - cpu_model: string - cpu_mhz: number -} - -// From codersdk/workspaceresources.go:58:6. -export interface WorkspaceAgentInstanceMetadata { - jail_orchestrator: string - operating_system: string - platform: string - platform_family: string - kernel_version: string - kernel_architecture: string - cloud: string - jail: string - vnc: boolean -} - -// From codersdk/workspaces.go:18:6. -export interface Workspace { - template_name: string - latest_build: WorkspaceBuild - outdated: boolean - name: string - autostart_schedule: string - autostop_schedule: string -} - -// From codersdk/workspaces.go:33:6. -export interface CreateWorkspaceBuildRequest { - dry_run: boolean -} - -// From codersdk/workspaces.go:94:6. -export interface UpdateWorkspaceAutostartRequest { - schedule: string -} - -// From codersdk/workspaces.go:114:6. -export interface UpdateWorkspaceAutostopRequest { - schedule: string -} - diff --git a/scripts/coderts/main.go b/scripts/coderts/main.go deleted file mode 100644 index c070f29ed8833..0000000000000 --- a/scripts/coderts/main.go +++ /dev/null @@ -1,187 +0,0 @@ -package main - -import ( - "fmt" - "go/ast" - "go/parser" - "go/token" - "log" - "os" - "path/filepath" - "strings" - - "golang.org/x/xerrors" -) - -const ( - baseDir = "./codersdk" -) - -func main() { - err := run() - if err != nil { - log.Fatal(err) - } -} - -func run() error { - fset := token.NewFileSet() - entries, err := os.ReadDir(baseDir) - if err != nil { - return xerrors.Errorf("reading dir %s: %w", baseDir, err) - } - - // loop each file in directory - for _, entry := range entries { - astFile, err := parser.ParseFile(fset, filepath.Join(baseDir, entry.Name()), nil, 0) - if err != nil { - return xerrors.Errorf("parsing file %s: %w", filepath.Join(baseDir, entry.Name()), err) - } - - // loop each declaration in file - for _, node := range astFile.Decls { - genDecl, ok := node.(*ast.GenDecl) - if !ok { - continue - } - for _, spec := range genDecl.Specs { - pos := fset.Position(spec.Pos()) - switch s := spec.(type) { - // TypeSpec case for structs and type alias - case *ast.TypeSpec: - out, err := handleTypeSpec(s, pos) - if err != nil { - break - } - - _, _ = fmt.Printf(out) - // ValueSpec case for const "enums" - case *ast.ValueSpec: - out, err := handleValueSpec(s, pos) - if err != nil { - break - } - - _, _ = fmt.Printf(out) - } - } - } - } - - return nil -} - -func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position) (string, error) { - jsonFields := 0 - s := fmt.Sprintf("// From %s.\n", pos.String()) - switch t := typeSpec.Type.(type) { - // Struct declaration - case *ast.StructType: - s = fmt.Sprintf("%sexport interface %s {\n", s, typeSpec.Name.Name) - for _, field := range t.Fields.List { - i, optional, err := getIdent(field.Type) - if err != nil { - continue - } - - fieldType := toTsType(i.Name) - if fieldType == "" { - continue - } - - fieldName := toJSONField(field) - if fieldName == "" { - continue - } - - s = fmt.Sprintf("%s %s%s: %s\n", s, fieldName, optional, fieldType) - jsonFields++ - } - - // Do not print struct if it has no json fields - if jsonFields == 0 { - return "", xerrors.New("no json fields") - } - - return fmt.Sprintf("%s}\n\n", s), nil - // Type alias declaration - case *ast.Ident: - return fmt.Sprintf("%stype %s = %s\n\n", s, typeSpec.Name.Name, t.Name), nil - default: - return "", xerrors.New("not struct or alias") - } -} - -func handleValueSpec(valueSpec *ast.ValueSpec, pos token.Position) (string, error) { - valueDecl := "" - valueName := "" - valueType := "" - valueValue := "" - for _, name := range valueSpec.Names { - if name.Obj != nil && name.Obj.Kind == ast.Con { - valueDecl = "const" - valueName = name.Name - break - } - } - - i, ok := valueSpec.Type.(*ast.Ident) - if !ok { - return "", xerrors.New("failed to cast type") - } - valueType = i.Name - - for _, value := range valueSpec.Values { - bl, ok := value.(*ast.BasicLit) - if !ok { - return "", xerrors.New("failed to cast value") - } - valueValue = bl.Value - break - } - - return fmt.Sprintf("// From %s.\n%s %s: %s = %s\n\n", pos.String(), valueDecl, valueName, valueType, valueValue), nil -} - -func getIdent(e ast.Expr) (*ast.Ident, string, error) { - switch t := e.(type) { - case *ast.Ident: - return t, "", nil - case *ast.StarExpr: - i, ok := t.X.(*ast.Ident) - if !ok { - return nil, "", xerrors.New("failed to cast star expr to indent") - } - return i, "?", nil - default: - return nil, "", xerrors.New("unknown expr type") - } -} - -func toTsType(fieldType string) string { - switch fieldType { - case "bool": - return "boolean" - case "uint64", "uint32", "float64": - return "number" - } - - return fieldType -} - -func toJSONField(field *ast.Field) string { - if field.Tag != nil && field.Tag.Value != "" { - fieldName := strings.Trim(field.Tag.Value, "`") - for _, pair := range strings.Split(fieldName, " ") { - if strings.Contains(pair, `json:`) { - fieldName := strings.TrimPrefix(pair, `json:`) - fieldName = strings.Trim(fieldName, `"`) - fieldName = strings.Split(fieldName, ",")[0] - - return fieldName - } - } - } - - return "" -} diff --git a/site/package.json b/site/package.json index 73732708f83b6..7fcee9fb9b4c5 100644 --- a/site/package.json +++ b/site/package.json @@ -10,6 +10,7 @@ "chromatic": "chromatic", "dev": "webpack-dev-server --config=webpack.dev.ts", "format:check": "prettier --check '**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'", + "format:types": "prettier --write 'src/api/types.ts'", "format:write": "prettier --write '**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'", "lint": "jest --selectProjects lint", "lint:fix": "FIX=true yarn lint", diff --git a/site/src/api/types.ts b/site/src/api/types.ts index 7b95a64743174..3ebc0e468bb8a 100644 --- a/site/src/api/types.ts +++ b/site/src/api/types.ts @@ -1,104 +1,259 @@ -/** - * `BuildInfoResponse` must be kept in sync with the go struct in buildinfo.go. - */ +// From codersdk/buildinfo.go:10:6. export interface BuildInfoResponse { external_url: string version: string } -export interface LoginResponse { - session_token: string +// From codersdk/files.go:16:6. +export interface UploadResponse { + hash: string +} + +// From codersdk/gitsshkey.go:14:6. +export interface GitSSHKey { + public_key: string } -export interface UserResponse { - readonly id: string - readonly username: string - readonly email: string - readonly created_at: string - readonly name: string +// From codersdk/gitsshkey.go:21:6. +export interface AgentGitSSHKey { + private_key: string } -/** - * `Organization` must be kept in sync with the go struct in organizations.go - */ +// From codersdk/organizations.go:17:6. export interface Organization { - id: string name: string - created_at: string - updated_at: string } -export interface Provisioner { - id: string +// From codersdk/organizations.go:25:6. +export interface CreateTemplateVersionRequest { + storage_source: string +} + +// From codersdk/organizations.go:38:6. +export interface CreateTemplateRequest { name: string } -// This must be kept in sync with the `Template` struct in the back-end +// From codersdk/parameters.go:16:6. +type ParameterScope = string + +// From codersdk/parameters.go:19:2. +const ParameterOrganization: ParameterScope = "organization" + +// From codersdk/parameters.go:20:2. +const ParameterTemplate: ParameterScope = "template" + +// From codersdk/parameters.go:21:2. +const ParameterUser: ParameterScope = "user" + +// From codersdk/parameters.go:22:2. +const ParameterWorkspace: ParameterScope = "workspace" + +// From codersdk/parameters.go:26:6. +export interface Parameter { + scope: ParameterScope + name: string +} + +// From codersdk/parameters.go:38:6. +export interface CreateParameterRequest { + name: string + source_value: string +} + +// From codersdk/provisionerdaemons.go:26:6. +type ProvisionerJobStatus = string + +// From codersdk/provisionerdaemons.go:29:2. +const ProvisionerJobPending: ProvisionerJobStatus = "pending" + +// From codersdk/provisionerdaemons.go:30:2. +const ProvisionerJobRunning: ProvisionerJobStatus = "running" + +// From codersdk/provisionerdaemons.go:31:2. +const ProvisionerJobSucceeded: ProvisionerJobStatus = "succeeded" + +// From codersdk/provisionerdaemons.go:32:2. +const ProvisionerJobCanceling: ProvisionerJobStatus = "canceling" + +// From codersdk/provisionerdaemons.go:33:2. +const ProvisionerJobCanceled: ProvisionerJobStatus = "canceled" + +// From codersdk/provisionerdaemons.go:34:2. +const ProvisionerJobFailed: ProvisionerJobStatus = "failed" + +// From codersdk/provisionerdaemons.go:37:6. +export interface ProvisionerJob { + error: string + status: ProvisionerJobStatus +} + +// From codersdk/provisionerdaemons.go:47:6. +export interface ProvisionerJobLog { + stage: string + output: string +} + +// From codersdk/templates.go:17:6. export interface Template { - id: string - created_at: string - updated_at: string - organization_id: string name: string - provisioner: string - active_version_id: string + workspace_owner_count: number } -export interface CreateTemplateRequest { +// From codersdk/templateversions.go:17:6. +export interface TemplateVersion { + name: string + job: ProvisionerJob +} + +// From codersdk/users.go:17:6. +export interface User { + email: string + username: string + name: string +} + +// From codersdk/users.go:25:6. +export interface CreateFirstUserRequest { + email: string + username: string + password: string + organization: string +} + +// From codersdk/users.go:38:6. +export interface CreateUserRequest { + email: string + username: string + password: string +} + +// From codersdk/users.go:45:6. +export interface UpdateUserProfileRequest { + email: string + username: string + name?: string +} + +// From codersdk/users.go:52:6. +export interface LoginWithPasswordRequest { + email: string + password: string +} + +// From codersdk/users.go:58:6. +export interface LoginWithPasswordResponse { + session_token: string +} + +// From codersdk/users.go:63:6. +export interface GenerateAPIKeyResponse { + key: string +} + +// From codersdk/users.go:67:6. +export interface CreateOrganizationRequest { name: string - organizationId: string - provisioner: string } +// From codersdk/users.go:72:6. export interface CreateWorkspaceRequest { name: string - template_id: string } -/** - * @remarks Keep in sync with codersdk/workspaces.go - */ -export interface Workspace { - id: string - created_at: string - updated_at: string - owner_id: string - template_id: string +// From codersdk/workspaceagents.go:26:6. +export interface GoogleInstanceIdentityToken { + json_web_token: string +} + +// From codersdk/workspaceagents.go:30:6. +export interface AWSInstanceIdentityToken { + signature: string + document: string +} + +// From codersdk/workspaceagents.go:37:6. +export interface WorkspaceAgentAuthenticateResponse { + session_token: string +} + +// From codersdk/workspacebuilds.go:17:6. +export interface WorkspaceBuild { name: string - autostart_schedule: string - autostop_schedule: string + job: ProvisionerJob } -export interface APIKeyResponse { - key: string +// From codersdk/workspaceresources.go:15:6. +type WorkspaceAgentStatus = string + +// From codersdk/workspaceresources.go:18:2. +const WorkspaceAgentConnecting: WorkspaceAgentStatus = "connecting" + +// From codersdk/workspaceresources.go:19:2. +const WorkspaceAgentConnected: WorkspaceAgentStatus = "connected" + +// From codersdk/workspaceresources.go:20:2. +const WorkspaceAgentDisconnected: WorkspaceAgentStatus = "disconnected" + +// From codersdk/workspaceresources.go:23:6. +export interface WorkspaceResource { + type: string + name: string } -export interface UserAgent { - readonly browser: string - readonly device: string - readonly ip_address: string - readonly os: string +// From codersdk/workspaceresources.go:33:6. +export interface WorkspaceAgent { + status: WorkspaceAgentStatus + name: string + instance_id: string + architecture: string + operating_system: string + startup_script: string } -export interface Pager { - total: number +// From codersdk/workspaceresources.go:50:6. +export interface WorkspaceAgentResourceMetadata { + memory_total: number + disk_total: number + cpu_cores: number + cpu_model: string + cpu_mhz: number } -export interface PagedUsers { - page: UserResponse[] - pager: Pager +// From codersdk/workspaceresources.go:58:6. +export interface WorkspaceAgentInstanceMetadata { + jail_orchestrator: string + operating_system: string + platform: string + platform_family: string + kernel_version: string + kernel_architecture: string + cloud: string + jail: string + vnc: boolean } -export interface WorkspaceAutostartRequest { - schedule: string +// From codersdk/workspaces.go:18:6. +export interface Workspace { + template_name: string + latest_build: WorkspaceBuild + outdated: boolean + name: string + autostart_schedule: string + autostop_schedule: string +} + +// From codersdk/workspaces.go:33:6. +export interface CreateWorkspaceBuildRequest { + dry_run: boolean } -export interface WorkspaceAutostopRequest { +// From codersdk/workspaces.go:94:6. +export interface UpdateWorkspaceAutostartRequest { schedule: string } -export interface UpdateProfileRequest { - readonly username: string - readonly email: string - readonly name: string +// From codersdk/workspaces.go:114:6. +export interface UpdateWorkspaceAutostopRequest { + schedule: string } From 733a17ed49e3c96c2df5221454d1a5f4671956c8 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:15:51 +0000 Subject: [PATCH 12/24] Generate better enums --- site/src/api/types.ts | 57 +++++++------------------------------------ 1 file changed, 9 insertions(+), 48 deletions(-) diff --git a/site/src/api/types.ts b/site/src/api/types.ts index 3ebc0e468bb8a..e7f817e0d1b96 100644 --- a/site/src/api/types.ts +++ b/site/src/api/types.ts @@ -34,21 +34,6 @@ export interface CreateTemplateRequest { name: string } -// From codersdk/parameters.go:16:6. -type ParameterScope = string - -// From codersdk/parameters.go:19:2. -const ParameterOrganization: ParameterScope = "organization" - -// From codersdk/parameters.go:20:2. -const ParameterTemplate: ParameterScope = "template" - -// From codersdk/parameters.go:21:2. -const ParameterUser: ParameterScope = "user" - -// From codersdk/parameters.go:22:2. -const ParameterWorkspace: ParameterScope = "workspace" - // From codersdk/parameters.go:26:6. export interface Parameter { scope: ParameterScope @@ -61,27 +46,6 @@ export interface CreateParameterRequest { source_value: string } -// From codersdk/provisionerdaemons.go:26:6. -type ProvisionerJobStatus = string - -// From codersdk/provisionerdaemons.go:29:2. -const ProvisionerJobPending: ProvisionerJobStatus = "pending" - -// From codersdk/provisionerdaemons.go:30:2. -const ProvisionerJobRunning: ProvisionerJobStatus = "running" - -// From codersdk/provisionerdaemons.go:31:2. -const ProvisionerJobSucceeded: ProvisionerJobStatus = "succeeded" - -// From codersdk/provisionerdaemons.go:32:2. -const ProvisionerJobCanceling: ProvisionerJobStatus = "canceling" - -// From codersdk/provisionerdaemons.go:33:2. -const ProvisionerJobCanceled: ProvisionerJobStatus = "canceled" - -// From codersdk/provisionerdaemons.go:34:2. -const ProvisionerJobFailed: ProvisionerJobStatus = "failed" - // From codersdk/provisionerdaemons.go:37:6. export interface ProvisionerJob { error: string @@ -183,18 +147,6 @@ export interface WorkspaceBuild { job: ProvisionerJob } -// From codersdk/workspaceresources.go:15:6. -type WorkspaceAgentStatus = string - -// From codersdk/workspaceresources.go:18:2. -const WorkspaceAgentConnecting: WorkspaceAgentStatus = "connecting" - -// From codersdk/workspaceresources.go:19:2. -const WorkspaceAgentConnected: WorkspaceAgentStatus = "connected" - -// From codersdk/workspaceresources.go:20:2. -const WorkspaceAgentDisconnected: WorkspaceAgentStatus = "disconnected" - // From codersdk/workspaceresources.go:23:6. export interface WorkspaceResource { type: string @@ -257,3 +209,12 @@ export interface UpdateWorkspaceAutostartRequest { export interface UpdateWorkspaceAutostopRequest { schedule: string } + +// From codersdk/provisionerdaemons.go:26:6. +type ProvisionerJobStatus = "pending" | "running" | "succeeded" | "canceling" | "canceled" | "failed" + +// From codersdk/workspaceresources.go:15:6. +type WorkspaceAgentStatus = "connecting" | "connected" | "disconnected" + +// From codersdk/parameters.go:16:6. +type ParameterScope = "organization" | "template" | "user" | "workspace" From 3b11dc3af1dacf4ef2b5ffa6ece6ae46c0080a3a Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:24:56 +0000 Subject: [PATCH 13/24] generate separate file --- Makefile | 2 +- scripts/apitypings/main.go | 197 ++++++++++++++++++ site/src/api/index.test.ts | 8 +- site/src/api/index.ts | 12 +- site/src/api/types-generated.ts | 234 +++++++++++++++++++++ site/src/api/types.ts | 236 ++++++---------------- site/src/test_helpers/entities.ts | 6 +- site/src/xServices/auth/authXService.ts | 8 +- site/src/xServices/users/usersXService.ts | 2 +- 9 files changed, 510 insertions(+), 195 deletions(-) create mode 100644 scripts/apitypings/main.go create mode 100644 site/src/api/types-generated.ts diff --git a/Makefile b/Makefile index a76de5d3ff988..525f7937ddcca 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ coderd/database/generate: fmt/sql coderd/database/dump.sql $(wildcard coderd/dat .PHONY: coderd/database/generate apitypings/generate: site/src/api/types.ts - go run scripts/apitypings/main.go > site/src/api/types.ts + go run scripts/apitypings/main.go > site/src/api/types-generated.ts cd site && yarn run format:types .PHONY: coderts/generate diff --git a/scripts/apitypings/main.go b/scripts/apitypings/main.go new file mode 100644 index 0000000000000..11f0f5a48f8ee --- /dev/null +++ b/scripts/apitypings/main.go @@ -0,0 +1,197 @@ +package main + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "log" + "os" + "path/filepath" + "strings" + + "golang.org/x/xerrors" +) + +const ( + baseDir = "./codersdk" +) + +func main() { + err := run() + if err != nil { + log.Fatal(err) + } +} + +func run() error { + var ( + astFiles []*ast.File + enums = make(map[string]string) + ) + fset := token.NewFileSet() + entries, err := os.ReadDir(baseDir) + if err != nil { + return xerrors.Errorf("reading dir %s: %w", baseDir, err) + } + + // loop each file in directory + for _, entry := range entries { + astFile, err := parser.ParseFile(fset, filepath.Join(baseDir, entry.Name()), nil, 0) + if err != nil { + return xerrors.Errorf("parsing file %s: %w", filepath.Join(baseDir, entry.Name()), err) + } + + astFiles = append(astFiles, astFile) + } + + loopSpecs(astFiles, func(spec ast.Spec) { + pos := fset.Position(spec.Pos()) + switch s := spec.(type) { + // TypeSpec case for structs and type alias + case *ast.TypeSpec: + out, err := handleTypeSpec(s, pos, enums) + if err != nil { + break + } + + _, _ = fmt.Printf(out) + } + }) + + loopSpecs(astFiles, func(spec ast.Spec) { + switch s := spec.(type) { + // ValueSpec case for const "enums" + case *ast.ValueSpec: + handleValueSpec(s, enums) + } + }) + + for _, v := range enums { + _, _ = fmt.Printf("%s\n", v) + } + + return nil +} + +func loopSpecs(astFiles []*ast.File, fn func(spec ast.Spec)) { + for _, astFile := range astFiles { + // loop each declaration in file + for _, node := range astFile.Decls { + genDecl, ok := node.(*ast.GenDecl) + if !ok { + continue + } + for _, spec := range genDecl.Specs { + fn(spec) + } + } + } +} + +func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position, enums map[string]string) (string, error) { + jsonFields := 0 + s := fmt.Sprintf("// From %s.\n", pos.String()) + switch t := typeSpec.Type.(type) { + // Struct declaration + case *ast.StructType: + s = fmt.Sprintf("%sexport interface %s {\n", s, typeSpec.Name.Name) + for _, field := range t.Fields.List { + i, optional, err := getIdent(field.Type) + if err != nil { + continue + } + + fieldType := toTsType(i.Name) + if fieldType == "" { + continue + } + + fieldName := toJSONField(field) + if fieldName == "" { + continue + } + + s = fmt.Sprintf("%s %s%s: %s\n", s, fieldName, optional, fieldType) + jsonFields++ + } + + // Do not print struct if it has no json fields + if jsonFields == 0 { + return "", xerrors.New("no json fields") + } + + return fmt.Sprintf("%s}\n\n", s), nil + // Type alias declaration + case *ast.Ident: + // save type declaration to map of types + // later we come back and add union types to this declaration + enums[typeSpec.Name.Name] = fmt.Sprintf("%stype %s = \n", s, typeSpec.Name.Name) + return "", xerrors.New("enums are not printed at this stage") + default: + return "", xerrors.New("not struct or alias") + } +} + +func handleValueSpec(valueSpec *ast.ValueSpec, enums map[string]string) { + valueValue := "" + i, ok := valueSpec.Type.(*ast.Ident) + if !ok { + return + } + valueType := i.Name + + for _, value := range valueSpec.Values { + bl, ok := value.(*ast.BasicLit) + if !ok { + return + } + valueValue = bl.Value + break + } + + enums[valueType] = fmt.Sprintf("%s | %s\n", enums[valueType], valueValue) +} + +func getIdent(e ast.Expr) (*ast.Ident, string, error) { + switch t := e.(type) { + case *ast.Ident: + return t, "", nil + case *ast.StarExpr: + i, ok := t.X.(*ast.Ident) + if !ok { + return nil, "", xerrors.New("failed to cast star expr to indent") + } + return i, "?", nil + default: + return nil, "", xerrors.New("unknown expr type") + } +} + +func toTsType(fieldType string) string { + switch fieldType { + case "bool": + return "boolean" + case "uint64", "uint32", "float64": + return "number" + } + + return fieldType +} + +func toJSONField(field *ast.Field) string { + if field.Tag != nil && field.Tag.Value != "" { + fieldName := strings.Trim(field.Tag.Value, "`") + for _, pair := range strings.Split(fieldName, " ") { + if strings.Contains(pair, `json:`) { + fieldName := strings.TrimPrefix(pair, `json:`) + fieldName = strings.Trim(fieldName, `"`) + fieldName = strings.Split(fieldName, ",")[0] + + return fieldName + } + } + } + + return "" +} diff --git a/site/src/api/index.test.ts b/site/src/api/index.test.ts index c29be8728d544..6fa194890a2c9 100644 --- a/site/src/api/index.test.ts +++ b/site/src/api/index.test.ts @@ -1,6 +1,6 @@ import axios from "axios" import { getApiKey, login, logout } from "." -import { APIKeyResponse, LoginResponse } from "./types" +import { GenerateAPIKeyResponse, LoginWithPasswordResponse } from "./types" // Mock the axios module so that no real network requests are made, but rather // we swap in a resolved or rejected value @@ -10,9 +10,9 @@ jest.mock("axios") describe("api.ts", () => { describe("login", () => { - it("should return LoginResponse", async () => { + it("should return LoginWithPasswordResponse", async () => { // given - const loginResponse: LoginResponse = { + const loginResponse: LoginWithPasswordResponse = { session_token: "abc_123_test", } const axiosMockPost = jest.fn().mockImplementationOnce(() => { @@ -87,7 +87,7 @@ describe("api.ts", () => { describe("getApiKey", () => { it("should return APIKeyResponse", async () => { // given - const apiKeyResponse: APIKeyResponse = { + const apiKeyResponse: GenerateAPIKeyResponse = { key: "abc_123_test", } const axiosMockPost = jest.fn().mockImplementationOnce(() => { diff --git a/site/src/api/index.ts b/site/src/api/index.ts index 7d2b664f357fa..8f1c69d24aae3 100644 --- a/site/src/api/index.ts +++ b/site/src/api/index.ts @@ -43,13 +43,13 @@ export namespace Workspace { } } -export const login = async (email: string, password: string): Promise => { +export const login = async (email: string, password: string): Promise => { const payload = JSON.stringify({ email, password, }) - const response = await axios.post("/api/v2/users/login", payload, { + const response = await axios.post("/api/v2/users/login", payload, { headers: { ...CONTENT_TYPE_JSON }, }) @@ -60,8 +60,8 @@ export const logout = async (): Promise => { await axios.post("/api/v2/users/logout") } -export const getUser = async (): Promise => { - const response = await axios.get("/api/v2/users/me") +export const getUser = async (): Promise => { + const response = await axios.get("/api/v2/users/me") return response.data } @@ -71,7 +71,7 @@ export const getApiKey = async (): Promise => { } export const getUsers = async (): Promise => { - // const response = await axios.get("/api/v2/users") + // const response = await axios.get("/api/v2/users") // return response.data return Promise.resolve({ page: [MockUser, MockUser2], @@ -104,7 +104,7 @@ export const putWorkspaceAutostop = async ( }) } -export const updateProfile = async (userId: string, data: Types.UpdateProfileRequest): Promise => { +export const updateProfile = async (userId: string, data: Types.UpdateProfileRequest): Promise => { const response = await axios.put(`/api/v2/users/${userId}/profile`, data) return response.data } diff --git a/site/src/api/types-generated.ts b/site/src/api/types-generated.ts new file mode 100644 index 0000000000000..8fab37f72a7bb --- /dev/null +++ b/site/src/api/types-generated.ts @@ -0,0 +1,234 @@ +// From codersdk/buildinfo.go:10:6. +export interface BuildInfoResponse { + external_url: string + version: string +} + +// From codersdk/files.go:16:6. +export interface UploadResponse { + hash: string +} + +// From codersdk/gitsshkey.go:14:6. +export interface GitSSHKey { + public_key: string +} + +// From codersdk/gitsshkey.go:21:6. +export interface AgentGitSSHKey { + private_key: string +} + +// From codersdk/organizations.go:17:6. +export interface Organization { + name: string +} + +// From codersdk/organizations.go:25:6. +export interface CreateTemplateVersionRequest { + storage_source: string +} + +// From codersdk/organizations.go:38:6. +export interface CreateTemplateRequest { + name: string +} + +// From codersdk/parameters.go:26:6. +export interface Parameter { + scope: ParameterScope + name: string +} + +// From codersdk/parameters.go:38:6. +export interface CreateParameterRequest { + name: string + source_value: string +} + +// From codersdk/provisionerdaemons.go:37:6. +export interface ProvisionerJob { + error: string + status: ProvisionerJobStatus +} + +// From codersdk/provisionerdaemons.go:47:6. +export interface ProvisionerJobLog { + stage: string + output: string +} + +// From codersdk/templates.go:17:6. +export interface Template { + name: string + workspace_owner_count: number +} + +// From codersdk/templateversions.go:17:6. +export interface TemplateVersion { + name: string + job: ProvisionerJob +} + +// From codersdk/users.go:17:6. +export interface User { + email: string + username: string + name: string +} + +// From codersdk/users.go:25:6. +export interface CreateFirstUserRequest { + email: string + username: string + password: string + organization: string +} + +// From codersdk/users.go:38:6. +export interface CreateUserRequest { + email: string + username: string + password: string +} + +// From codersdk/users.go:45:6. +export interface UpdateUserProfileRequest { + email: string + username: string + name?: string +} + +// From codersdk/users.go:52:6. +export interface LoginWithPasswordRequest { + email: string + password: string +} + +// From codersdk/users.go:58:6. +export interface LoginWithPasswordResponse { + session_token: string +} + +// From codersdk/users.go:63:6. +export interface GenerateAPIKeyResponse { + key: string +} + +// From codersdk/users.go:67:6. +export interface CreateOrganizationRequest { + name: string +} + +// From codersdk/users.go:72:6. +export interface CreateWorkspaceRequest { + name: string +} + +// From codersdk/workspaceagents.go:26:6. +export interface GoogleInstanceIdentityToken { + json_web_token: string +} + +// From codersdk/workspaceagents.go:30:6. +export interface AWSInstanceIdentityToken { + signature: string + document: string +} + +// From codersdk/workspaceagents.go:37:6. +export interface WorkspaceAgentAuthenticateResponse { + session_token: string +} + +// From codersdk/workspacebuilds.go:17:6. +export interface WorkspaceBuild { + name: string + job: ProvisionerJob +} + +// From codersdk/workspaceresources.go:23:6. +export interface WorkspaceResource { + type: string + name: string +} + +// From codersdk/workspaceresources.go:33:6. +export interface WorkspaceAgent { + status: WorkspaceAgentStatus + name: string + instance_id: string + architecture: string + operating_system: string + startup_script: string +} + +// From codersdk/workspaceresources.go:50:6. +export interface WorkspaceAgentResourceMetadata { + memory_total: number + disk_total: number + cpu_cores: number + cpu_model: string + cpu_mhz: number +} + +// From codersdk/workspaceresources.go:58:6. +export interface WorkspaceAgentInstanceMetadata { + jail_orchestrator: string + operating_system: string + platform: string + platform_family: string + kernel_version: string + kernel_architecture: string + cloud: string + jail: string + vnc: boolean +} + +// From codersdk/workspaces.go:18:6. +export interface Workspace { + template_name: string + latest_build: WorkspaceBuild + outdated: boolean + name: string + autostart_schedule: string + autostop_schedule: string +} + +// From codersdk/workspaces.go:33:6. +export interface CreateWorkspaceBuildRequest { + dry_run: boolean +} + +// From codersdk/workspaces.go:94:6. +export interface UpdateWorkspaceAutostartRequest { + schedule: string +} + +// From codersdk/workspaces.go:114:6. +export interface UpdateWorkspaceAutostopRequest { + schedule: string +} + +// From codersdk/workspaceresources.go:15:6. +type WorkspaceAgentStatus = + | "connecting" + | "connected" + | "disconnected" + +// From codersdk/parameters.go:16:6. +type ParameterScope = + | "organization" + | "template" + | "user" + | "workspace" + +// From codersdk/provisionerdaemons.go:26:6. +type ProvisionerJobStatus = + | "pending" + | "running" + | "succeeded" + | "canceling" + | "canceled" + | "failed" + diff --git a/site/src/api/types.ts b/site/src/api/types.ts index e7f817e0d1b96..7b95a64743174 100644 --- a/site/src/api/types.ts +++ b/site/src/api/types.ts @@ -1,220 +1,104 @@ -// From codersdk/buildinfo.go:10:6. +/** + * `BuildInfoResponse` must be kept in sync with the go struct in buildinfo.go. + */ export interface BuildInfoResponse { external_url: string version: string } -// From codersdk/files.go:16:6. -export interface UploadResponse { - hash: string -} - -// From codersdk/gitsshkey.go:14:6. -export interface GitSSHKey { - public_key: string +export interface LoginResponse { + session_token: string } -// From codersdk/gitsshkey.go:21:6. -export interface AgentGitSSHKey { - private_key: string +export interface UserResponse { + readonly id: string + readonly username: string + readonly email: string + readonly created_at: string + readonly name: string } -// From codersdk/organizations.go:17:6. +/** + * `Organization` must be kept in sync with the go struct in organizations.go + */ export interface Organization { + id: string name: string + created_at: string + updated_at: string } -// From codersdk/organizations.go:25:6. -export interface CreateTemplateVersionRequest { - storage_source: string -} - -// From codersdk/organizations.go:38:6. -export interface CreateTemplateRequest { - name: string -} - -// From codersdk/parameters.go:26:6. -export interface Parameter { - scope: ParameterScope - name: string -} - -// From codersdk/parameters.go:38:6. -export interface CreateParameterRequest { +export interface Provisioner { + id: string name: string - source_value: string -} - -// From codersdk/provisionerdaemons.go:37:6. -export interface ProvisionerJob { - error: string - status: ProvisionerJobStatus -} - -// From codersdk/provisionerdaemons.go:47:6. -export interface ProvisionerJobLog { - stage: string - output: string } -// From codersdk/templates.go:17:6. +// This must be kept in sync with the `Template` struct in the back-end export interface Template { + id: string + created_at: string + updated_at: string + organization_id: string name: string - workspace_owner_count: number + provisioner: string + active_version_id: string } -// From codersdk/templateversions.go:17:6. -export interface TemplateVersion { - name: string - job: ProvisionerJob -} - -// From codersdk/users.go:17:6. -export interface User { - email: string - username: string - name: string -} - -// From codersdk/users.go:25:6. -export interface CreateFirstUserRequest { - email: string - username: string - password: string - organization: string -} - -// From codersdk/users.go:38:6. -export interface CreateUserRequest { - email: string - username: string - password: string -} - -// From codersdk/users.go:45:6. -export interface UpdateUserProfileRequest { - email: string - username: string - name?: string -} - -// From codersdk/users.go:52:6. -export interface LoginWithPasswordRequest { - email: string - password: string -} - -// From codersdk/users.go:58:6. -export interface LoginWithPasswordResponse { - session_token: string -} - -// From codersdk/users.go:63:6. -export interface GenerateAPIKeyResponse { - key: string -} - -// From codersdk/users.go:67:6. -export interface CreateOrganizationRequest { +export interface CreateTemplateRequest { name: string + organizationId: string + provisioner: string } -// From codersdk/users.go:72:6. export interface CreateWorkspaceRequest { name: string + template_id: string } -// From codersdk/workspaceagents.go:26:6. -export interface GoogleInstanceIdentityToken { - json_web_token: string -} - -// From codersdk/workspaceagents.go:30:6. -export interface AWSInstanceIdentityToken { - signature: string - document: string -} - -// From codersdk/workspaceagents.go:37:6. -export interface WorkspaceAgentAuthenticateResponse { - session_token: string -} - -// From codersdk/workspacebuilds.go:17:6. -export interface WorkspaceBuild { - name: string - job: ProvisionerJob -} - -// From codersdk/workspaceresources.go:23:6. -export interface WorkspaceResource { - type: string +/** + * @remarks Keep in sync with codersdk/workspaces.go + */ +export interface Workspace { + id: string + created_at: string + updated_at: string + owner_id: string + template_id: string name: string + autostart_schedule: string + autostop_schedule: string } -// From codersdk/workspaceresources.go:33:6. -export interface WorkspaceAgent { - status: WorkspaceAgentStatus - name: string - instance_id: string - architecture: string - operating_system: string - startup_script: string +export interface APIKeyResponse { + key: string } -// From codersdk/workspaceresources.go:50:6. -export interface WorkspaceAgentResourceMetadata { - memory_total: number - disk_total: number - cpu_cores: number - cpu_model: string - cpu_mhz: number +export interface UserAgent { + readonly browser: string + readonly device: string + readonly ip_address: string + readonly os: string } -// From codersdk/workspaceresources.go:58:6. -export interface WorkspaceAgentInstanceMetadata { - jail_orchestrator: string - operating_system: string - platform: string - platform_family: string - kernel_version: string - kernel_architecture: string - cloud: string - jail: string - vnc: boolean +export interface Pager { + total: number } -// From codersdk/workspaces.go:18:6. -export interface Workspace { - template_name: string - latest_build: WorkspaceBuild - outdated: boolean - name: string - autostart_schedule: string - autostop_schedule: string -} - -// From codersdk/workspaces.go:33:6. -export interface CreateWorkspaceBuildRequest { - dry_run: boolean +export interface PagedUsers { + page: UserResponse[] + pager: Pager } -// From codersdk/workspaces.go:94:6. -export interface UpdateWorkspaceAutostartRequest { +export interface WorkspaceAutostartRequest { schedule: string } -// From codersdk/workspaces.go:114:6. -export interface UpdateWorkspaceAutostopRequest { +export interface WorkspaceAutostopRequest { schedule: string } -// From codersdk/provisionerdaemons.go:26:6. -type ProvisionerJobStatus = "pending" | "running" | "succeeded" | "canceling" | "canceled" | "failed" - -// From codersdk/workspaceresources.go:15:6. -type WorkspaceAgentStatus = "connecting" | "connected" | "disconnected" - -// From codersdk/parameters.go:16:6. -type ParameterScope = "organization" | "template" | "user" | "workspace" +export interface UpdateProfileRequest { + readonly username: string + readonly email: string + readonly name: string +} diff --git a/site/src/test_helpers/entities.ts b/site/src/test_helpers/entities.ts index a531c830710a1..b54a7efcda7f2 100644 --- a/site/src/test_helpers/entities.ts +++ b/site/src/test_helpers/entities.ts @@ -5,7 +5,7 @@ import { Provisioner, Template, UserAgent, - UserResponse, + User, Workspace, WorkspaceAutostartRequest, } from "../api/types" @@ -19,7 +19,7 @@ export const MockBuildInfo: BuildInfoResponse = { version: "v99.999.9999+c9cdf14", } -export const MockUser: UserResponse = { +export const MockUser: User = { name: "Test User", id: "test-user", username: "TestUser", @@ -27,7 +27,7 @@ export const MockUser: UserResponse = { created_at: "", } -export const MockUser2: UserResponse = { +export const MockUser2: User = { id: "test-user-2", name: "Test User 2", username: "TestUser2", diff --git a/site/src/xServices/auth/authXService.ts b/site/src/xServices/auth/authXService.ts index 4dddf9f901ab0..04a982ad79d87 100644 --- a/site/src/xServices/auth/authXService.ts +++ b/site/src/xServices/auth/authXService.ts @@ -10,7 +10,7 @@ export interface AuthContext { getUserError?: Error | unknown authError?: Error | unknown updateProfileError?: Error | unknown - me?: Types.UserResponse + me?: Types.User } export type AuthEvent = @@ -29,13 +29,13 @@ export const authMachine = events: {} as AuthEvent, services: {} as { getMe: { - data: Types.UserResponse + data: Types.User } signIn: { - data: Types.LoginResponse + data: Types.LoginWithPasswordResponse } updateProfile: { - data: Types.UserResponse + data: Types.User } }, }, diff --git a/site/src/xServices/users/usersXService.ts b/site/src/xServices/users/usersXService.ts index d02c98b84bd35..56904d6e2c4c8 100644 --- a/site/src/xServices/users/usersXService.ts +++ b/site/src/xServices/users/usersXService.ts @@ -3,7 +3,7 @@ import * as API from "../../api" import * as Types from "../../api/types" export interface UsersContext { - users: Types.UserResponse[] + users: Types.User[] pager?: Types.Pager getUsersError?: Error | unknown } From 4e651422bb70ef929240ad4f6f99db0ef1d72dcc Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:26:29 +0000 Subject: [PATCH 14/24] revert changes to other files --- site/src/api/index.test.ts | 8 ++++---- site/src/api/index.ts | 12 ++++++------ site/src/test_helpers/entities.ts | 6 +++--- site/src/xServices/auth/authXService.ts | 8 ++++---- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/site/src/api/index.test.ts b/site/src/api/index.test.ts index 6fa194890a2c9..c29be8728d544 100644 --- a/site/src/api/index.test.ts +++ b/site/src/api/index.test.ts @@ -1,6 +1,6 @@ import axios from "axios" import { getApiKey, login, logout } from "." -import { GenerateAPIKeyResponse, LoginWithPasswordResponse } from "./types" +import { APIKeyResponse, LoginResponse } from "./types" // Mock the axios module so that no real network requests are made, but rather // we swap in a resolved or rejected value @@ -10,9 +10,9 @@ jest.mock("axios") describe("api.ts", () => { describe("login", () => { - it("should return LoginWithPasswordResponse", async () => { + it("should return LoginResponse", async () => { // given - const loginResponse: LoginWithPasswordResponse = { + const loginResponse: LoginResponse = { session_token: "abc_123_test", } const axiosMockPost = jest.fn().mockImplementationOnce(() => { @@ -87,7 +87,7 @@ describe("api.ts", () => { describe("getApiKey", () => { it("should return APIKeyResponse", async () => { // given - const apiKeyResponse: GenerateAPIKeyResponse = { + const apiKeyResponse: APIKeyResponse = { key: "abc_123_test", } const axiosMockPost = jest.fn().mockImplementationOnce(() => { diff --git a/site/src/api/index.ts b/site/src/api/index.ts index 8f1c69d24aae3..7d2b664f357fa 100644 --- a/site/src/api/index.ts +++ b/site/src/api/index.ts @@ -43,13 +43,13 @@ export namespace Workspace { } } -export const login = async (email: string, password: string): Promise => { +export const login = async (email: string, password: string): Promise => { const payload = JSON.stringify({ email, password, }) - const response = await axios.post("/api/v2/users/login", payload, { + const response = await axios.post("/api/v2/users/login", payload, { headers: { ...CONTENT_TYPE_JSON }, }) @@ -60,8 +60,8 @@ export const logout = async (): Promise => { await axios.post("/api/v2/users/logout") } -export const getUser = async (): Promise => { - const response = await axios.get("/api/v2/users/me") +export const getUser = async (): Promise => { + const response = await axios.get("/api/v2/users/me") return response.data } @@ -71,7 +71,7 @@ export const getApiKey = async (): Promise => { } export const getUsers = async (): Promise => { - // const response = await axios.get("/api/v2/users") + // const response = await axios.get("/api/v2/users") // return response.data return Promise.resolve({ page: [MockUser, MockUser2], @@ -104,7 +104,7 @@ export const putWorkspaceAutostop = async ( }) } -export const updateProfile = async (userId: string, data: Types.UpdateProfileRequest): Promise => { +export const updateProfile = async (userId: string, data: Types.UpdateProfileRequest): Promise => { const response = await axios.put(`/api/v2/users/${userId}/profile`, data) return response.data } diff --git a/site/src/test_helpers/entities.ts b/site/src/test_helpers/entities.ts index b54a7efcda7f2..a531c830710a1 100644 --- a/site/src/test_helpers/entities.ts +++ b/site/src/test_helpers/entities.ts @@ -5,7 +5,7 @@ import { Provisioner, Template, UserAgent, - User, + UserResponse, Workspace, WorkspaceAutostartRequest, } from "../api/types" @@ -19,7 +19,7 @@ export const MockBuildInfo: BuildInfoResponse = { version: "v99.999.9999+c9cdf14", } -export const MockUser: User = { +export const MockUser: UserResponse = { name: "Test User", id: "test-user", username: "TestUser", @@ -27,7 +27,7 @@ export const MockUser: User = { created_at: "", } -export const MockUser2: User = { +export const MockUser2: UserResponse = { id: "test-user-2", name: "Test User 2", username: "TestUser2", diff --git a/site/src/xServices/auth/authXService.ts b/site/src/xServices/auth/authXService.ts index 04a982ad79d87..4dddf9f901ab0 100644 --- a/site/src/xServices/auth/authXService.ts +++ b/site/src/xServices/auth/authXService.ts @@ -10,7 +10,7 @@ export interface AuthContext { getUserError?: Error | unknown authError?: Error | unknown updateProfileError?: Error | unknown - me?: Types.User + me?: Types.UserResponse } export type AuthEvent = @@ -29,13 +29,13 @@ export const authMachine = events: {} as AuthEvent, services: {} as { getMe: { - data: Types.User + data: Types.UserResponse } signIn: { - data: Types.LoginWithPasswordResponse + data: Types.LoginResponse } updateProfile: { - data: Types.User + data: Types.UserResponse } }, }, From 3ddbf426612dfe2e9bea85d16796a6684e67f853 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:26:59 +0000 Subject: [PATCH 15/24] another --- site/src/xServices/users/usersXService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/xServices/users/usersXService.ts b/site/src/xServices/users/usersXService.ts index 56904d6e2c4c8..d02c98b84bd35 100644 --- a/site/src/xServices/users/usersXService.ts +++ b/site/src/xServices/users/usersXService.ts @@ -3,7 +3,7 @@ import * as API from "../../api" import * as Types from "../../api/types" export interface UsersContext { - users: Types.User[] + users: Types.UserResponse[] pager?: Types.Pager getUsersError?: Error | unknown } From 4d97ec485301be6e17555e9356d61bdd41f543e9 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:27:56 +0000 Subject: [PATCH 16/24] space --- site/src/api/types-generated.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/site/src/api/types-generated.ts b/site/src/api/types-generated.ts index 8fab37f72a7bb..f25745365bfc8 100644 --- a/site/src/api/types-generated.ts +++ b/site/src/api/types-generated.ts @@ -210,12 +210,6 @@ export interface UpdateWorkspaceAutostopRequest { schedule: string } -// From codersdk/workspaceresources.go:15:6. -type WorkspaceAgentStatus = - | "connecting" - | "connected" - | "disconnected" - // From codersdk/parameters.go:16:6. type ParameterScope = | "organization" @@ -232,3 +226,9 @@ type ProvisionerJobStatus = | "canceled" | "failed" +// From codersdk/workspaceresources.go:15:6. +type WorkspaceAgentStatus = + | "connecting" + | "connected" + | "disconnected" + From fdedb035c7c37ea3de59780991db79a99e8f3d0b Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:31:47 +0000 Subject: [PATCH 17/24] fix --- scripts/apitypings/main.go | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/scripts/apitypings/main.go b/scripts/apitypings/main.go index 11f0f5a48f8ee..0a1b34c5c952e 100644 --- a/scripts/apitypings/main.go +++ b/scripts/apitypings/main.go @@ -45,28 +45,31 @@ func run() error { astFiles = append(astFiles, astFile) } + // TypeSpec case for structs and type alias loopSpecs(astFiles, func(spec ast.Spec) { pos := fset.Position(spec.Pos()) - switch s := spec.(type) { - // TypeSpec case for structs and type alias - case *ast.TypeSpec: - out, err := handleTypeSpec(s, pos, enums) - if err != nil { - break - } - - _, _ = fmt.Printf(out) + s, ok := spec.(*ast.TypeSpec) + if !ok { + return } + out, err := handleTypeSpec(s, pos, enums) + if err != nil { + return + } + + _, _ = fmt.Printf(out) }) + // ValueSpec case for loading type alias values into the enum map loopSpecs(astFiles, func(spec ast.Spec) { - switch s := spec.(type) { - // ValueSpec case for const "enums" - case *ast.ValueSpec: - handleValueSpec(s, enums) + s, ok := spec.(*ast.ValueSpec) + if !ok { + return } + handleValueSpec(s, enums) }) + // write each type alias declaration with possible values for _, v := range enums { _, _ = fmt.Printf("%s\n", v) } From a1f5044dccafa8d7d600bd744670dec6d73f90eb Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:35:10 +0000 Subject: [PATCH 18/24] Add readonly flags --- coderd/database/querier.go | 4 +- coderd/database/queries.sql.go | 167 +++++++++++++++----------------- scripts/apitypings/main.go | 4 +- site/src/api/types-generated.ts | 158 +++++++++++++++--------------- 4 files changed, 161 insertions(+), 172 deletions(-) diff --git a/coderd/database/querier.go b/coderd/database/querier.go index d993a5ab31075..0b18860b98439 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -8,7 +8,7 @@ import ( "github.com/google/uuid" ) -type querier interface { +type Querier interface { AcquireProvisionerJob(ctx context.Context, arg AcquireProvisionerJobParams) (ProvisionerJob, error) DeleteGitSSHKey(ctx context.Context, userID uuid.UUID) error DeleteParameterValueByID(ctx context.Context, id uuid.UUID) error @@ -90,4 +90,4 @@ type querier interface { UpdateWorkspaceDeletedByID(ctx context.Context, arg UpdateWorkspaceDeletedByIDParams) error } -var _ querier = (*sqlQuerier)(nil) +var _ Querier = (*Queries)(nil) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 49fb4dc759fa2..8db0d469038dd 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -2,17 +2,6 @@ package database -import ( - "context" - "database/sql" - "encoding/json" - "time" - - "github.com/google/uuid" - "github.com/lib/pq" - "github.com/tabbed/pqtype" -) - const getAPIKeyByID = `-- name: GetAPIKeyByID :one SELECT id, hashed_secret, user_id, application, name, last_used, expires_at, created_at, updated_at, login_type, oidc_access_token, oidc_refresh_token, oidc_id_token, oidc_expiry, devurl_token @@ -24,7 +13,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetAPIKeyByID(ctx context.Context, id string) (APIKey, error) { +func (q *Queries) GetAPIKeyByID(ctx context.Context, id string) (APIKey, error) { row := q.db.QueryRowContext(ctx, getAPIKeyByID, id) var i APIKey err := row.Scan( @@ -104,7 +93,7 @@ type InsertAPIKeyParams struct { DevurlToken bool `db:"devurl_token" json:"devurl_token"` } -func (q *sqlQuerier) InsertAPIKey(ctx context.Context, arg InsertAPIKeyParams) (APIKey, error) { +func (q *Queries) InsertAPIKey(ctx context.Context, arg InsertAPIKeyParams) (APIKey, error) { row := q.db.QueryRowContext(ctx, insertAPIKey, arg.ID, arg.HashedSecret, @@ -165,7 +154,7 @@ type UpdateAPIKeyByIDParams struct { OIDCExpiry time.Time `db:"oidc_expiry" json:"oidc_expiry"` } -func (q *sqlQuerier) UpdateAPIKeyByID(ctx context.Context, arg UpdateAPIKeyByIDParams) error { +func (q *Queries) UpdateAPIKeyByID(ctx context.Context, arg UpdateAPIKeyByIDParams) error { _, err := q.db.ExecContext(ctx, updateAPIKeyByID, arg.ID, arg.LastUsed, @@ -188,7 +177,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetFileByHash(ctx context.Context, hash string) (File, error) { +func (q *Queries) GetFileByHash(ctx context.Context, hash string) (File, error) { row := q.db.QueryRowContext(ctx, getFileByHash, hash) var i File err := row.Scan( @@ -216,7 +205,7 @@ type InsertFileParams struct { Data []byte `db:"data" json:"data"` } -func (q *sqlQuerier) InsertFile(ctx context.Context, arg InsertFileParams) (File, error) { +func (q *Queries) InsertFile(ctx context.Context, arg InsertFileParams) (File, error) { row := q.db.QueryRowContext(ctx, insertFile, arg.Hash, arg.CreatedAt, @@ -242,7 +231,7 @@ WHERE user_id = $1 ` -func (q *sqlQuerier) DeleteGitSSHKey(ctx context.Context, userID uuid.UUID) error { +func (q *Queries) DeleteGitSSHKey(ctx context.Context, userID uuid.UUID) error { _, err := q.db.ExecContext(ctx, deleteGitSSHKey, userID) return err } @@ -256,7 +245,7 @@ WHERE user_id = $1 ` -func (q *sqlQuerier) GetGitSSHKey(ctx context.Context, userID uuid.UUID) (GitSSHKey, error) { +func (q *Queries) GetGitSSHKey(ctx context.Context, userID uuid.UUID) (GitSSHKey, error) { row := q.db.QueryRowContext(ctx, getGitSSHKey, userID) var i GitSSHKey err := row.Scan( @@ -290,7 +279,7 @@ type InsertGitSSHKeyParams struct { PublicKey string `db:"public_key" json:"public_key"` } -func (q *sqlQuerier) InsertGitSSHKey(ctx context.Context, arg InsertGitSSHKeyParams) (GitSSHKey, error) { +func (q *Queries) InsertGitSSHKey(ctx context.Context, arg InsertGitSSHKeyParams) (GitSSHKey, error) { row := q.db.QueryRowContext(ctx, insertGitSSHKey, arg.UserID, arg.CreatedAt, @@ -327,7 +316,7 @@ type UpdateGitSSHKeyParams struct { PublicKey string `db:"public_key" json:"public_key"` } -func (q *sqlQuerier) UpdateGitSSHKey(ctx context.Context, arg UpdateGitSSHKeyParams) error { +func (q *Queries) UpdateGitSSHKey(ctx context.Context, arg UpdateGitSSHKeyParams) error { _, err := q.db.ExecContext(ctx, updateGitSSHKey, arg.UserID, arg.UpdatedAt, @@ -354,7 +343,7 @@ type GetOrganizationMemberByUserIDParams struct { UserID uuid.UUID `db:"user_id" json:"user_id"` } -func (q *sqlQuerier) GetOrganizationMemberByUserID(ctx context.Context, arg GetOrganizationMemberByUserIDParams) (OrganizationMember, error) { +func (q *Queries) GetOrganizationMemberByUserID(ctx context.Context, arg GetOrganizationMemberByUserIDParams) (OrganizationMember, error) { row := q.db.QueryRowContext(ctx, getOrganizationMemberByUserID, arg.OrganizationID, arg.UserID) var i OrganizationMember err := row.Scan( @@ -388,7 +377,7 @@ type InsertOrganizationMemberParams struct { Roles []string `db:"roles" json:"roles"` } -func (q *sqlQuerier) InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error) { +func (q *Queries) InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error) { row := q.db.QueryRowContext(ctx, insertOrganizationMember, arg.OrganizationID, arg.UserID, @@ -416,7 +405,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) GetOrganizationByID(ctx context.Context, id uuid.UUID) (Organization, error) { +func (q *Queries) GetOrganizationByID(ctx context.Context, id uuid.UUID) (Organization, error) { row := q.db.QueryRowContext(ctx, getOrganizationByID, id) var i Organization err := row.Scan( @@ -440,7 +429,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetOrganizationByName(ctx context.Context, name string) (Organization, error) { +func (q *Queries) GetOrganizationByName(ctx context.Context, name string) (Organization, error) { row := q.db.QueryRowContext(ctx, getOrganizationByName, name) var i Organization err := row.Scan( @@ -469,7 +458,7 @@ WHERE ) ` -func (q *sqlQuerier) GetOrganizationsByUserID(ctx context.Context, userID uuid.UUID) ([]Organization, error) { +func (q *Queries) GetOrganizationsByUserID(ctx context.Context, userID uuid.UUID) ([]Organization, error) { rows, err := q.db.QueryContext(ctx, getOrganizationsByUserID, userID) if err != nil { return nil, err @@ -513,7 +502,7 @@ type InsertOrganizationParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *sqlQuerier) InsertOrganization(ctx context.Context, arg InsertOrganizationParams) (Organization, error) { +func (q *Queries) InsertOrganization(ctx context.Context, arg InsertOrganizationParams) (Organization, error) { row := q.db.QueryRowContext(ctx, insertOrganization, arg.ID, arg.Name, @@ -541,7 +530,7 @@ WHERE job_id = $1 ` -func (q *sqlQuerier) GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUID) ([]ParameterSchema, error) { +func (q *Queries) GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUID) ([]ParameterSchema, error) { rows, err := q.db.QueryContext(ctx, getParameterSchemasByJobID, jobID) if err != nil { return nil, err @@ -641,7 +630,7 @@ type InsertParameterSchemaParams struct { ValidationValueType string `db:"validation_value_type" json:"validation_value_type"` } -func (q *sqlQuerier) InsertParameterSchema(ctx context.Context, arg InsertParameterSchemaParams) (ParameterSchema, error) { +func (q *Queries) InsertParameterSchema(ctx context.Context, arg InsertParameterSchemaParams) (ParameterSchema, error) { row := q.db.QueryRowContext(ctx, insertParameterSchema, arg.ID, arg.CreatedAt, @@ -689,7 +678,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) DeleteParameterValueByID(ctx context.Context, id uuid.UUID) error { +func (q *Queries) DeleteParameterValueByID(ctx context.Context, id uuid.UUID) error { _, err := q.db.ExecContext(ctx, deleteParameterValueByID, id) return err } @@ -713,7 +702,7 @@ type GetParameterValueByScopeAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) GetParameterValueByScopeAndName(ctx context.Context, arg GetParameterValueByScopeAndNameParams) (ParameterValue, error) { +func (q *Queries) GetParameterValueByScopeAndName(ctx context.Context, arg GetParameterValueByScopeAndNameParams) (ParameterValue, error) { row := q.db.QueryRowContext(ctx, getParameterValueByScopeAndName, arg.Scope, arg.ScopeID, arg.Name) var i ParameterValue err := row.Scan( @@ -745,7 +734,7 @@ type GetParameterValuesByScopeParams struct { ScopeID uuid.UUID `db:"scope_id" json:"scope_id"` } -func (q *sqlQuerier) GetParameterValuesByScope(ctx context.Context, arg GetParameterValuesByScopeParams) ([]ParameterValue, error) { +func (q *Queries) GetParameterValuesByScope(ctx context.Context, arg GetParameterValuesByScopeParams) ([]ParameterValue, error) { rows, err := q.db.QueryContext(ctx, getParameterValuesByScope, arg.Scope, arg.ScopeID) if err != nil { return nil, err @@ -807,7 +796,7 @@ type InsertParameterValueParams struct { DestinationScheme ParameterDestinationScheme `db:"destination_scheme" json:"destination_scheme"` } -func (q *sqlQuerier) InsertParameterValue(ctx context.Context, arg InsertParameterValueParams) (ParameterValue, error) { +func (q *Queries) InsertParameterValue(ctx context.Context, arg InsertParameterValueParams) (ParameterValue, error) { row := q.db.QueryRowContext(ctx, insertParameterValue, arg.ID, arg.Name, @@ -843,7 +832,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) GetProvisionerDaemonByID(ctx context.Context, id uuid.UUID) (ProvisionerDaemon, error) { +func (q *Queries) GetProvisionerDaemonByID(ctx context.Context, id uuid.UUID) (ProvisionerDaemon, error) { row := q.db.QueryRowContext(ctx, getProvisionerDaemonByID, id) var i ProvisionerDaemon err := row.Scan( @@ -864,7 +853,7 @@ FROM provisioner_daemons ` -func (q *sqlQuerier) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) { +func (q *Queries) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) { rows, err := q.db.QueryContext(ctx, getProvisionerDaemons) if err != nil { return nil, err @@ -915,7 +904,7 @@ type InsertProvisionerDaemonParams struct { Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` } -func (q *sqlQuerier) InsertProvisionerDaemon(ctx context.Context, arg InsertProvisionerDaemonParams) (ProvisionerDaemon, error) { +func (q *Queries) InsertProvisionerDaemon(ctx context.Context, arg InsertProvisionerDaemonParams) (ProvisionerDaemon, error) { row := q.db.QueryRowContext(ctx, insertProvisionerDaemon, arg.ID, arg.CreatedAt, @@ -951,7 +940,7 @@ type UpdateProvisionerDaemonByIDParams struct { Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` } -func (q *sqlQuerier) UpdateProvisionerDaemonByID(ctx context.Context, arg UpdateProvisionerDaemonByIDParams) error { +func (q *Queries) UpdateProvisionerDaemonByID(ctx context.Context, arg UpdateProvisionerDaemonByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerDaemonByID, arg.ID, arg.UpdatedAt, pq.Array(arg.Provisioners)) return err } @@ -977,7 +966,7 @@ type GetProvisionerLogsByIDBetweenParams struct { CreatedBefore time.Time `db:"created_before" json:"created_before"` } -func (q *sqlQuerier) GetProvisionerLogsByIDBetween(ctx context.Context, arg GetProvisionerLogsByIDBetweenParams) ([]ProvisionerJobLog, error) { +func (q *Queries) GetProvisionerLogsByIDBetween(ctx context.Context, arg GetProvisionerLogsByIDBetweenParams) ([]ProvisionerJobLog, error) { rows, err := q.db.QueryContext(ctx, getProvisionerLogsByIDBetween, arg.JobID, arg.CreatedAfter, arg.CreatedBefore) if err != nil { return nil, err @@ -1031,7 +1020,7 @@ type InsertProvisionerJobLogsParams struct { Output []string `db:"output" json:"output"` } -func (q *sqlQuerier) InsertProvisionerJobLogs(ctx context.Context, arg InsertProvisionerJobLogsParams) ([]ProvisionerJobLog, error) { +func (q *Queries) InsertProvisionerJobLogs(ctx context.Context, arg InsertProvisionerJobLogsParams) ([]ProvisionerJobLog, error) { rows, err := q.db.QueryContext(ctx, insertProvisionerJobLogs, pq.Array(arg.ID), arg.JobID, @@ -1109,7 +1098,7 @@ type AcquireProvisionerJobParams struct { // SKIP LOCKED is used to jump over locked rows. This prevents // multiple provisioners from acquiring the same jobs. See: // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-FOR-UPDATE-SHARE -func (q *sqlQuerier) AcquireProvisionerJob(ctx context.Context, arg AcquireProvisionerJobParams) (ProvisionerJob, error) { +func (q *Queries) AcquireProvisionerJob(ctx context.Context, arg AcquireProvisionerJobParams) (ProvisionerJob, error) { row := q.db.QueryRowContext(ctx, acquireProvisionerJob, arg.StartedAt, arg.WorkerID, pq.Array(arg.Types)) var i ProvisionerJob err := row.Scan( @@ -1141,7 +1130,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (ProvisionerJob, error) { +func (q *Queries) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (ProvisionerJob, error) { row := q.db.QueryRowContext(ctx, getProvisionerJobByID, id) var i ProvisionerJob err := row.Scan( @@ -1173,7 +1162,7 @@ WHERE id = ANY($1 :: uuid [ ]) ` -func (q *sqlQuerier) GetProvisionerJobsByIDs(ctx context.Context, ids []uuid.UUID) ([]ProvisionerJob, error) { +func (q *Queries) GetProvisionerJobsByIDs(ctx context.Context, ids []uuid.UUID) ([]ProvisionerJob, error) { rows, err := q.db.QueryContext(ctx, getProvisionerJobsByIDs, pq.Array(ids)) if err != nil { return nil, err @@ -1243,7 +1232,7 @@ type InsertProvisionerJobParams struct { Input json.RawMessage `db:"input" json:"input"` } -func (q *sqlQuerier) InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error) { +func (q *Queries) InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error) { row := q.db.QueryRowContext(ctx, insertProvisionerJob, arg.ID, arg.CreatedAt, @@ -1291,7 +1280,7 @@ type UpdateProvisionerJobByIDParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *sqlQuerier) UpdateProvisionerJobByID(ctx context.Context, arg UpdateProvisionerJobByIDParams) error { +func (q *Queries) UpdateProvisionerJobByID(ctx context.Context, arg UpdateProvisionerJobByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerJobByID, arg.ID, arg.UpdatedAt) return err } @@ -1310,7 +1299,7 @@ type UpdateProvisionerJobWithCancelByIDParams struct { CanceledAt sql.NullTime `db:"canceled_at" json:"canceled_at"` } -func (q *sqlQuerier) UpdateProvisionerJobWithCancelByID(ctx context.Context, arg UpdateProvisionerJobWithCancelByIDParams) error { +func (q *Queries) UpdateProvisionerJobWithCancelByID(ctx context.Context, arg UpdateProvisionerJobWithCancelByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerJobWithCancelByID, arg.ID, arg.CanceledAt) return err } @@ -1333,7 +1322,7 @@ type UpdateProvisionerJobWithCompleteByIDParams struct { Error sql.NullString `db:"error" json:"error"` } -func (q *sqlQuerier) UpdateProvisionerJobWithCompleteByID(ctx context.Context, arg UpdateProvisionerJobWithCompleteByIDParams) error { +func (q *Queries) UpdateProvisionerJobWithCompleteByID(ctx context.Context, arg UpdateProvisionerJobWithCompleteByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerJobWithCompleteByID, arg.ID, arg.UpdatedAt, @@ -1354,7 +1343,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetTemplateByID(ctx context.Context, id uuid.UUID) (Template, error) { +func (q *Queries) GetTemplateByID(ctx context.Context, id uuid.UUID) (Template, error) { row := q.db.QueryRowContext(ctx, getTemplateByID, id) var i Template err := row.Scan( @@ -1389,7 +1378,7 @@ type GetTemplateByOrganizationAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) GetTemplateByOrganizationAndName(ctx context.Context, arg GetTemplateByOrganizationAndNameParams) (Template, error) { +func (q *Queries) GetTemplateByOrganizationAndName(ctx context.Context, arg GetTemplateByOrganizationAndNameParams) (Template, error) { row := q.db.QueryRowContext(ctx, getTemplateByOrganizationAndName, arg.OrganizationID, arg.Deleted, arg.Name) var i Template err := row.Scan( @@ -1414,7 +1403,7 @@ WHERE id = ANY($1 :: uuid [ ]) ` -func (q *sqlQuerier) GetTemplatesByIDs(ctx context.Context, ids []uuid.UUID) ([]Template, error) { +func (q *Queries) GetTemplatesByIDs(ctx context.Context, ids []uuid.UUID) ([]Template, error) { rows, err := q.db.QueryContext(ctx, getTemplatesByIDs, pq.Array(ids)) if err != nil { return nil, err @@ -1461,7 +1450,7 @@ type GetTemplatesByOrganizationParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *sqlQuerier) GetTemplatesByOrganization(ctx context.Context, arg GetTemplatesByOrganizationParams) ([]Template, error) { +func (q *Queries) GetTemplatesByOrganization(ctx context.Context, arg GetTemplatesByOrganizationParams) ([]Template, error) { rows, err := q.db.QueryContext(ctx, getTemplatesByOrganization, arg.OrganizationID, arg.Deleted) if err != nil { return nil, err @@ -1518,7 +1507,7 @@ type InsertTemplateParams struct { ActiveVersionID uuid.UUID `db:"active_version_id" json:"active_version_id"` } -func (q *sqlQuerier) InsertTemplate(ctx context.Context, arg InsertTemplateParams) (Template, error) { +func (q *Queries) InsertTemplate(ctx context.Context, arg InsertTemplateParams) (Template, error) { row := q.db.QueryRowContext(ctx, insertTemplate, arg.ID, arg.CreatedAt, @@ -1556,7 +1545,7 @@ type UpdateTemplateActiveVersionByIDParams struct { ActiveVersionID uuid.UUID `db:"active_version_id" json:"active_version_id"` } -func (q *sqlQuerier) UpdateTemplateActiveVersionByID(ctx context.Context, arg UpdateTemplateActiveVersionByIDParams) error { +func (q *Queries) UpdateTemplateActiveVersionByID(ctx context.Context, arg UpdateTemplateActiveVersionByIDParams) error { _, err := q.db.ExecContext(ctx, updateTemplateActiveVersionByID, arg.ID, arg.ActiveVersionID) return err } @@ -1575,7 +1564,7 @@ type UpdateTemplateDeletedByIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *sqlQuerier) UpdateTemplateDeletedByID(ctx context.Context, arg UpdateTemplateDeletedByIDParams) error { +func (q *Queries) UpdateTemplateDeletedByID(ctx context.Context, arg UpdateTemplateDeletedByIDParams) error { _, err := q.db.ExecContext(ctx, updateTemplateDeletedByID, arg.ID, arg.Deleted) return err } @@ -1589,7 +1578,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) GetTemplateVersionByID(ctx context.Context, id uuid.UUID) (TemplateVersion, error) { +func (q *Queries) GetTemplateVersionByID(ctx context.Context, id uuid.UUID) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, getTemplateVersionByID, id) var i TemplateVersion err := row.Scan( @@ -1614,7 +1603,7 @@ WHERE job_id = $1 ` -func (q *sqlQuerier) GetTemplateVersionByJobID(ctx context.Context, jobID uuid.UUID) (TemplateVersion, error) { +func (q *Queries) GetTemplateVersionByJobID(ctx context.Context, jobID uuid.UUID) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, getTemplateVersionByJobID, jobID) var i TemplateVersion err := row.Scan( @@ -1645,7 +1634,7 @@ type GetTemplateVersionByTemplateIDAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) GetTemplateVersionByTemplateIDAndName(ctx context.Context, arg GetTemplateVersionByTemplateIDAndNameParams) (TemplateVersion, error) { +func (q *Queries) GetTemplateVersionByTemplateIDAndName(ctx context.Context, arg GetTemplateVersionByTemplateIDAndNameParams) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, getTemplateVersionByTemplateIDAndName, arg.TemplateID, arg.Name) var i TemplateVersion err := row.Scan( @@ -1670,7 +1659,7 @@ WHERE template_id = $1 :: uuid ` -func (q *sqlQuerier) GetTemplateVersionsByTemplateID(ctx context.Context, dollar_1 uuid.UUID) ([]TemplateVersion, error) { +func (q *Queries) GetTemplateVersionsByTemplateID(ctx context.Context, dollar_1 uuid.UUID) ([]TemplateVersion, error) { rows, err := q.db.QueryContext(ctx, getTemplateVersionsByTemplateID, dollar_1) if err != nil { return nil, err @@ -1729,7 +1718,7 @@ type InsertTemplateVersionParams struct { JobID uuid.UUID `db:"job_id" json:"job_id"` } -func (q *sqlQuerier) InsertTemplateVersion(ctx context.Context, arg InsertTemplateVersionParams) (TemplateVersion, error) { +func (q *Queries) InsertTemplateVersion(ctx context.Context, arg InsertTemplateVersionParams) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, insertTemplateVersion, arg.ID, arg.TemplateID, @@ -1770,7 +1759,7 @@ type UpdateTemplateVersionByIDParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *sqlQuerier) UpdateTemplateVersionByID(ctx context.Context, arg UpdateTemplateVersionByIDParams) error { +func (q *Queries) UpdateTemplateVersionByID(ctx context.Context, arg UpdateTemplateVersionByIDParams) error { _, err := q.db.ExecContext(ctx, updateTemplateVersionByID, arg.ID, arg.TemplateID, arg.UpdatedAt) return err } @@ -1792,7 +1781,7 @@ type GetUserByEmailOrUsernameParams struct { Email string `db:"email" json:"email"` } -func (q *sqlQuerier) GetUserByEmailOrUsername(ctx context.Context, arg GetUserByEmailOrUsernameParams) (User, error) { +func (q *Queries) GetUserByEmailOrUsername(ctx context.Context, arg GetUserByEmailOrUsernameParams) (User, error) { row := q.db.QueryRowContext(ctx, getUserByEmailOrUsername, arg.Username, arg.Email) var i User err := row.Scan( @@ -1820,7 +1809,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetUserByID(ctx context.Context, id uuid.UUID) (User, error) { +func (q *Queries) GetUserByID(ctx context.Context, id uuid.UUID) (User, error) { row := q.db.QueryRowContext(ctx, getUserByID, id) var i User err := row.Scan( @@ -1844,7 +1833,7 @@ FROM users ` -func (q *sqlQuerier) GetUserCount(ctx context.Context) (int64, error) { +func (q *Queries) GetUserCount(ctx context.Context) (int64, error) { row := q.db.QueryRowContext(ctx, getUserCount) var count int64 err := row.Scan(&count) @@ -1919,7 +1908,7 @@ type InsertUserParams struct { Username string `db:"username" json:"username"` } -func (q *sqlQuerier) InsertUser(ctx context.Context, arg InsertUserParams) (User, error) { +func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) (User, error) { row := q.db.QueryRowContext(ctx, insertUser, arg.ID, arg.Email, @@ -1965,7 +1954,7 @@ type UpdateUserProfileParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *sqlQuerier) UpdateUserProfile(ctx context.Context, arg UpdateUserProfileParams) (User, error) { +func (q *Queries) UpdateUserProfile(ctx context.Context, arg UpdateUserProfileParams) (User, error) { row := q.db.QueryRowContext(ctx, updateUserProfile, arg.ID, arg.Email, @@ -1999,7 +1988,7 @@ ORDER BY created_at DESC ` -func (q *sqlQuerier) GetWorkspaceAgentByAuthToken(ctx context.Context, authToken uuid.UUID) (WorkspaceAgent, error) { +func (q *Queries) GetWorkspaceAgentByAuthToken(ctx context.Context, authToken uuid.UUID) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, getWorkspaceAgentByAuthToken, authToken) var i WorkspaceAgent err := row.Scan( @@ -2032,7 +2021,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (WorkspaceAgent, error) { +func (q *Queries) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, getWorkspaceAgentByID, id) var i WorkspaceAgent err := row.Scan( @@ -2067,7 +2056,7 @@ ORDER BY created_at DESC ` -func (q *sqlQuerier) GetWorkspaceAgentByInstanceID(ctx context.Context, authInstanceID string) (WorkspaceAgent, error) { +func (q *Queries) GetWorkspaceAgentByInstanceID(ctx context.Context, authInstanceID string) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, getWorkspaceAgentByInstanceID, authInstanceID) var i WorkspaceAgent err := row.Scan( @@ -2100,7 +2089,7 @@ WHERE resource_id = ANY($1 :: uuid [ ]) ` -func (q *sqlQuerier) GetWorkspaceAgentsByResourceIDs(ctx context.Context, ids []uuid.UUID) ([]WorkspaceAgent, error) { +func (q *Queries) GetWorkspaceAgentsByResourceIDs(ctx context.Context, ids []uuid.UUID) ([]WorkspaceAgent, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceAgentsByResourceIDs, pq.Array(ids)) if err != nil { return nil, err @@ -2177,7 +2166,7 @@ type InsertWorkspaceAgentParams struct { ResourceMetadata pqtype.NullRawMessage `db:"resource_metadata" json:"resource_metadata"` } -func (q *sqlQuerier) InsertWorkspaceAgent(ctx context.Context, arg InsertWorkspaceAgentParams) (WorkspaceAgent, error) { +func (q *Queries) InsertWorkspaceAgent(ctx context.Context, arg InsertWorkspaceAgentParams) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, insertWorkspaceAgent, arg.ID, arg.CreatedAt, @@ -2233,7 +2222,7 @@ type UpdateWorkspaceAgentConnectionByIDParams struct { DisconnectedAt sql.NullTime `db:"disconnected_at" json:"disconnected_at"` } -func (q *sqlQuerier) UpdateWorkspaceAgentConnectionByID(ctx context.Context, arg UpdateWorkspaceAgentConnectionByIDParams) error { +func (q *Queries) UpdateWorkspaceAgentConnectionByID(ctx context.Context, arg UpdateWorkspaceAgentConnectionByIDParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceAgentConnectionByID, arg.ID, arg.FirstConnectedAt, @@ -2254,7 +2243,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) { +func (q *Queries) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByID, id) var i WorkspaceBuild err := row.Scan( @@ -2285,7 +2274,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) { +func (q *Queries) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByJobID, jobID) var i WorkspaceBuild err := row.Scan( @@ -2314,7 +2303,7 @@ WHERE workspace_id = $1 ` -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) ([]WorkspaceBuild, error) { +func (q *Queries) GetWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) ([]WorkspaceBuild, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceBuildByWorkspaceID, workspaceID) if err != nil { return nil, err @@ -2365,7 +2354,7 @@ type GetWorkspaceBuildByWorkspaceIDAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndNameParams) (WorkspaceBuild, error) { +func (q *Queries) GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndNameParams) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDAndName, arg.WorkspaceID, arg.Name) var i WorkspaceBuild err := row.Scan( @@ -2397,7 +2386,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDWithoutAfter(ctx context.Context, workspaceID uuid.UUID) (WorkspaceBuild, error) { +func (q *Queries) GetWorkspaceBuildByWorkspaceIDWithoutAfter(ctx context.Context, workspaceID uuid.UUID) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDWithoutAfter, workspaceID) var i WorkspaceBuild err := row.Scan( @@ -2427,7 +2416,7 @@ WHERE AND after_id IS NULL ` -func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceIDsWithoutAfter(ctx context.Context, ids []uuid.UUID) ([]WorkspaceBuild, error) { +func (q *Queries) GetWorkspaceBuildsByWorkspaceIDsWithoutAfter(ctx context.Context, ids []uuid.UUID) ([]WorkspaceBuild, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceBuildsByWorkspaceIDsWithoutAfter, pq.Array(ids)) if err != nil { return nil, err @@ -2496,7 +2485,7 @@ type InsertWorkspaceBuildParams struct { ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"` } -func (q *sqlQuerier) InsertWorkspaceBuild(ctx context.Context, arg InsertWorkspaceBuildParams) (WorkspaceBuild, error) { +func (q *Queries) InsertWorkspaceBuild(ctx context.Context, arg InsertWorkspaceBuildParams) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, insertWorkspaceBuild, arg.ID, arg.CreatedAt, @@ -2546,7 +2535,7 @@ type UpdateWorkspaceBuildByIDParams struct { ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"` } -func (q *sqlQuerier) UpdateWorkspaceBuildByID(ctx context.Context, arg UpdateWorkspaceBuildByIDParams) error { +func (q *Queries) UpdateWorkspaceBuildByID(ctx context.Context, arg UpdateWorkspaceBuildByIDParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceBuildByID, arg.ID, arg.UpdatedAt, @@ -2565,7 +2554,7 @@ WHERE id = $1 ` -func (q *sqlQuerier) GetWorkspaceResourceByID(ctx context.Context, id uuid.UUID) (WorkspaceResource, error) { +func (q *Queries) GetWorkspaceResourceByID(ctx context.Context, id uuid.UUID) (WorkspaceResource, error) { row := q.db.QueryRowContext(ctx, getWorkspaceResourceByID, id) var i WorkspaceResource err := row.Scan( @@ -2588,7 +2577,7 @@ WHERE job_id = $1 ` -func (q *sqlQuerier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]WorkspaceResource, error) { +func (q *Queries) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]WorkspaceResource, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceResourcesByJobID, jobID) if err != nil { return nil, err @@ -2634,7 +2623,7 @@ type InsertWorkspaceResourceParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) InsertWorkspaceResource(ctx context.Context, arg InsertWorkspaceResourceParams) (WorkspaceResource, error) { +func (q *Queries) InsertWorkspaceResource(ctx context.Context, arg InsertWorkspaceResourceParams) (WorkspaceResource, error) { row := q.db.QueryRowContext(ctx, insertWorkspaceResource, arg.ID, arg.CreatedAt, @@ -2666,7 +2655,7 @@ LIMIT 1 ` -func (q *sqlQuerier) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) { +func (q *Queries) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) { row := q.db.QueryRowContext(ctx, getWorkspaceByID, id) var i Workspace err := row.Scan( @@ -2700,7 +2689,7 @@ type GetWorkspaceByUserIDAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) GetWorkspaceByUserIDAndName(ctx context.Context, arg GetWorkspaceByUserIDAndNameParams) (Workspace, error) { +func (q *Queries) GetWorkspaceByUserIDAndName(ctx context.Context, arg GetWorkspaceByUserIDAndNameParams) (Workspace, error) { row := q.db.QueryRowContext(ctx, getWorkspaceByUserIDAndName, arg.OwnerID, arg.Deleted, arg.Name) var i Workspace err := row.Scan( @@ -2735,7 +2724,7 @@ type GetWorkspaceOwnerCountsByTemplateIDsRow struct { Count int64 `db:"count" json:"count"` } -func (q *sqlQuerier) GetWorkspaceOwnerCountsByTemplateIDs(ctx context.Context, ids []uuid.UUID) ([]GetWorkspaceOwnerCountsByTemplateIDsRow, error) { +func (q *Queries) GetWorkspaceOwnerCountsByTemplateIDs(ctx context.Context, ids []uuid.UUID) ([]GetWorkspaceOwnerCountsByTemplateIDsRow, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceOwnerCountsByTemplateIDs, pq.Array(ids)) if err != nil { return nil, err @@ -2773,7 +2762,7 @@ type GetWorkspacesByTemplateIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *sqlQuerier) GetWorkspacesByTemplateID(ctx context.Context, arg GetWorkspacesByTemplateIDParams) ([]Workspace, error) { +func (q *Queries) GetWorkspacesByTemplateID(ctx context.Context, arg GetWorkspacesByTemplateIDParams) ([]Workspace, error) { rows, err := q.db.QueryContext(ctx, getWorkspacesByTemplateID, arg.TemplateID, arg.Deleted) if err != nil { return nil, err @@ -2821,7 +2810,7 @@ type GetWorkspacesByUserIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *sqlQuerier) GetWorkspacesByUserID(ctx context.Context, arg GetWorkspacesByUserIDParams) ([]Workspace, error) { +func (q *Queries) GetWorkspacesByUserID(ctx context.Context, arg GetWorkspacesByUserIDParams) ([]Workspace, error) { rows, err := q.db.QueryContext(ctx, getWorkspacesByUserID, arg.OwnerID, arg.Deleted) if err != nil { return nil, err @@ -2877,7 +2866,7 @@ type InsertWorkspaceParams struct { Name string `db:"name" json:"name"` } -func (q *sqlQuerier) InsertWorkspace(ctx context.Context, arg InsertWorkspaceParams) (Workspace, error) { +func (q *Queries) InsertWorkspace(ctx context.Context, arg InsertWorkspaceParams) (Workspace, error) { row := q.db.QueryRowContext(ctx, insertWorkspace, arg.ID, arg.CreatedAt, @@ -2915,7 +2904,7 @@ type UpdateWorkspaceAutostartParams struct { AutostartSchedule sql.NullString `db:"autostart_schedule" json:"autostart_schedule"` } -func (q *sqlQuerier) UpdateWorkspaceAutostart(ctx context.Context, arg UpdateWorkspaceAutostartParams) error { +func (q *Queries) UpdateWorkspaceAutostart(ctx context.Context, arg UpdateWorkspaceAutostartParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceAutostart, arg.ID, arg.AutostartSchedule) return err } @@ -2934,7 +2923,7 @@ type UpdateWorkspaceAutostopParams struct { AutostopSchedule sql.NullString `db:"autostop_schedule" json:"autostop_schedule"` } -func (q *sqlQuerier) UpdateWorkspaceAutostop(ctx context.Context, arg UpdateWorkspaceAutostopParams) error { +func (q *Queries) UpdateWorkspaceAutostop(ctx context.Context, arg UpdateWorkspaceAutostopParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceAutostop, arg.ID, arg.AutostopSchedule) return err } @@ -2953,7 +2942,7 @@ type UpdateWorkspaceDeletedByIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *sqlQuerier) UpdateWorkspaceDeletedByID(ctx context.Context, arg UpdateWorkspaceDeletedByIDParams) error { +func (q *Queries) UpdateWorkspaceDeletedByID(ctx context.Context, arg UpdateWorkspaceDeletedByIDParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceDeletedByID, arg.ID, arg.Deleted) return err } diff --git a/scripts/apitypings/main.go b/scripts/apitypings/main.go index 0a1b34c5c952e..c6d575c08ca94 100644 --- a/scripts/apitypings/main.go +++ b/scripts/apitypings/main.go @@ -115,7 +115,7 @@ func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position, enums map[string continue } - s = fmt.Sprintf("%s %s%s: %s\n", s, fieldName, optional, fieldType) + s = fmt.Sprintf("%s readonly %s%s: %s\n", s, fieldName, optional, fieldType) jsonFields++ } @@ -129,7 +129,7 @@ func handleTypeSpec(typeSpec *ast.TypeSpec, pos token.Position, enums map[string case *ast.Ident: // save type declaration to map of types // later we come back and add union types to this declaration - enums[typeSpec.Name.Name] = fmt.Sprintf("%stype %s = \n", s, typeSpec.Name.Name) + enums[typeSpec.Name.Name] = fmt.Sprintf("%sexport type %s = \n", s, typeSpec.Name.Name) return "", xerrors.New("enums are not printed at this stage") default: return "", xerrors.New("not struct or alias") diff --git a/site/src/api/types-generated.ts b/site/src/api/types-generated.ts index f25745365bfc8..ef5fcf2680cf9 100644 --- a/site/src/api/types-generated.ts +++ b/site/src/api/types-generated.ts @@ -1,224 +1,224 @@ // From codersdk/buildinfo.go:10:6. export interface BuildInfoResponse { - external_url: string - version: string + readonly external_url: string + readonly version: string } // From codersdk/files.go:16:6. export interface UploadResponse { - hash: string + readonly hash: string } // From codersdk/gitsshkey.go:14:6. export interface GitSSHKey { - public_key: string + readonly public_key: string } // From codersdk/gitsshkey.go:21:6. export interface AgentGitSSHKey { - private_key: string + readonly private_key: string } // From codersdk/organizations.go:17:6. export interface Organization { - name: string + readonly name: string } // From codersdk/organizations.go:25:6. export interface CreateTemplateVersionRequest { - storage_source: string + readonly storage_source: string } // From codersdk/organizations.go:38:6. export interface CreateTemplateRequest { - name: string + readonly name: string } // From codersdk/parameters.go:26:6. export interface Parameter { - scope: ParameterScope - name: string + readonly scope: ParameterScope + readonly name: string } // From codersdk/parameters.go:38:6. export interface CreateParameterRequest { - name: string - source_value: string + readonly name: string + readonly source_value: string } // From codersdk/provisionerdaemons.go:37:6. export interface ProvisionerJob { - error: string - status: ProvisionerJobStatus + readonly error: string + readonly status: ProvisionerJobStatus } // From codersdk/provisionerdaemons.go:47:6. export interface ProvisionerJobLog { - stage: string - output: string + readonly stage: string + readonly output: string } // From codersdk/templates.go:17:6. export interface Template { - name: string - workspace_owner_count: number + readonly name: string + readonly workspace_owner_count: number } // From codersdk/templateversions.go:17:6. export interface TemplateVersion { - name: string - job: ProvisionerJob + readonly name: string + readonly job: ProvisionerJob } // From codersdk/users.go:17:6. export interface User { - email: string - username: string - name: string + readonly email: string + readonly username: string + readonly name: string } // From codersdk/users.go:25:6. export interface CreateFirstUserRequest { - email: string - username: string - password: string - organization: string + readonly email: string + readonly username: string + readonly password: string + readonly organization: string } // From codersdk/users.go:38:6. export interface CreateUserRequest { - email: string - username: string - password: string + readonly email: string + readonly username: string + readonly password: string } // From codersdk/users.go:45:6. export interface UpdateUserProfileRequest { - email: string - username: string - name?: string + readonly email: string + readonly username: string + readonly name?: string } // From codersdk/users.go:52:6. export interface LoginWithPasswordRequest { - email: string - password: string + readonly email: string + readonly password: string } // From codersdk/users.go:58:6. export interface LoginWithPasswordResponse { - session_token: string + readonly session_token: string } // From codersdk/users.go:63:6. export interface GenerateAPIKeyResponse { - key: string + readonly key: string } // From codersdk/users.go:67:6. export interface CreateOrganizationRequest { - name: string + readonly name: string } // From codersdk/users.go:72:6. export interface CreateWorkspaceRequest { - name: string + readonly name: string } // From codersdk/workspaceagents.go:26:6. export interface GoogleInstanceIdentityToken { - json_web_token: string + readonly json_web_token: string } // From codersdk/workspaceagents.go:30:6. export interface AWSInstanceIdentityToken { - signature: string - document: string + readonly signature: string + readonly document: string } // From codersdk/workspaceagents.go:37:6. export interface WorkspaceAgentAuthenticateResponse { - session_token: string + readonly session_token: string } // From codersdk/workspacebuilds.go:17:6. export interface WorkspaceBuild { - name: string - job: ProvisionerJob + readonly name: string + readonly job: ProvisionerJob } // From codersdk/workspaceresources.go:23:6. export interface WorkspaceResource { - type: string - name: string + readonly type: string + readonly name: string } // From codersdk/workspaceresources.go:33:6. export interface WorkspaceAgent { - status: WorkspaceAgentStatus - name: string - instance_id: string - architecture: string - operating_system: string - startup_script: string + readonly status: WorkspaceAgentStatus + readonly name: string + readonly instance_id: string + readonly architecture: string + readonly operating_system: string + readonly startup_script: string } // From codersdk/workspaceresources.go:50:6. export interface WorkspaceAgentResourceMetadata { - memory_total: number - disk_total: number - cpu_cores: number - cpu_model: string - cpu_mhz: number + readonly memory_total: number + readonly disk_total: number + readonly cpu_cores: number + readonly cpu_model: string + readonly cpu_mhz: number } // From codersdk/workspaceresources.go:58:6. export interface WorkspaceAgentInstanceMetadata { - jail_orchestrator: string - operating_system: string - platform: string - platform_family: string - kernel_version: string - kernel_architecture: string - cloud: string - jail: string - vnc: boolean + readonly jail_orchestrator: string + readonly operating_system: string + readonly platform: string + readonly platform_family: string + readonly kernel_version: string + readonly kernel_architecture: string + readonly cloud: string + readonly jail: string + readonly vnc: boolean } // From codersdk/workspaces.go:18:6. export interface Workspace { - template_name: string - latest_build: WorkspaceBuild - outdated: boolean - name: string - autostart_schedule: string - autostop_schedule: string + readonly template_name: string + readonly latest_build: WorkspaceBuild + readonly outdated: boolean + readonly name: string + readonly autostart_schedule: string + readonly autostop_schedule: string } // From codersdk/workspaces.go:33:6. export interface CreateWorkspaceBuildRequest { - dry_run: boolean + readonly dry_run: boolean } // From codersdk/workspaces.go:94:6. export interface UpdateWorkspaceAutostartRequest { - schedule: string + readonly schedule: string } // From codersdk/workspaces.go:114:6. export interface UpdateWorkspaceAutostopRequest { - schedule: string + readonly schedule: string } // From codersdk/parameters.go:16:6. -type ParameterScope = +export type ParameterScope = | "organization" | "template" | "user" | "workspace" // From codersdk/provisionerdaemons.go:26:6. -type ProvisionerJobStatus = +export type ProvisionerJobStatus = | "pending" | "running" | "succeeded" @@ -227,7 +227,7 @@ type ProvisionerJobStatus = | "failed" // From codersdk/workspaceresources.go:15:6. -type WorkspaceAgentStatus = +export type WorkspaceAgentStatus = | "connecting" | "connected" | "disconnected" From 0bc5e2b11c2105b685b1a59f71a4509a4b45dd49 Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:39:18 +0000 Subject: [PATCH 19/24] fix make gen --- coderd/database/querier.go | 4 +- coderd/database/queries.sql.go | 167 ++++++++++++++++++--------------- 2 files changed, 91 insertions(+), 80 deletions(-) diff --git a/coderd/database/querier.go b/coderd/database/querier.go index 0b18860b98439..d993a5ab31075 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -8,7 +8,7 @@ import ( "github.com/google/uuid" ) -type Querier interface { +type querier interface { AcquireProvisionerJob(ctx context.Context, arg AcquireProvisionerJobParams) (ProvisionerJob, error) DeleteGitSSHKey(ctx context.Context, userID uuid.UUID) error DeleteParameterValueByID(ctx context.Context, id uuid.UUID) error @@ -90,4 +90,4 @@ type Querier interface { UpdateWorkspaceDeletedByID(ctx context.Context, arg UpdateWorkspaceDeletedByIDParams) error } -var _ Querier = (*Queries)(nil) +var _ querier = (*sqlQuerier)(nil) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 8db0d469038dd..49fb4dc759fa2 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -2,6 +2,17 @@ package database +import ( + "context" + "database/sql" + "encoding/json" + "time" + + "github.com/google/uuid" + "github.com/lib/pq" + "github.com/tabbed/pqtype" +) + const getAPIKeyByID = `-- name: GetAPIKeyByID :one SELECT id, hashed_secret, user_id, application, name, last_used, expires_at, created_at, updated_at, login_type, oidc_access_token, oidc_refresh_token, oidc_id_token, oidc_expiry, devurl_token @@ -13,7 +24,7 @@ LIMIT 1 ` -func (q *Queries) GetAPIKeyByID(ctx context.Context, id string) (APIKey, error) { +func (q *sqlQuerier) GetAPIKeyByID(ctx context.Context, id string) (APIKey, error) { row := q.db.QueryRowContext(ctx, getAPIKeyByID, id) var i APIKey err := row.Scan( @@ -93,7 +104,7 @@ type InsertAPIKeyParams struct { DevurlToken bool `db:"devurl_token" json:"devurl_token"` } -func (q *Queries) InsertAPIKey(ctx context.Context, arg InsertAPIKeyParams) (APIKey, error) { +func (q *sqlQuerier) InsertAPIKey(ctx context.Context, arg InsertAPIKeyParams) (APIKey, error) { row := q.db.QueryRowContext(ctx, insertAPIKey, arg.ID, arg.HashedSecret, @@ -154,7 +165,7 @@ type UpdateAPIKeyByIDParams struct { OIDCExpiry time.Time `db:"oidc_expiry" json:"oidc_expiry"` } -func (q *Queries) UpdateAPIKeyByID(ctx context.Context, arg UpdateAPIKeyByIDParams) error { +func (q *sqlQuerier) UpdateAPIKeyByID(ctx context.Context, arg UpdateAPIKeyByIDParams) error { _, err := q.db.ExecContext(ctx, updateAPIKeyByID, arg.ID, arg.LastUsed, @@ -177,7 +188,7 @@ LIMIT 1 ` -func (q *Queries) GetFileByHash(ctx context.Context, hash string) (File, error) { +func (q *sqlQuerier) GetFileByHash(ctx context.Context, hash string) (File, error) { row := q.db.QueryRowContext(ctx, getFileByHash, hash) var i File err := row.Scan( @@ -205,7 +216,7 @@ type InsertFileParams struct { Data []byte `db:"data" json:"data"` } -func (q *Queries) InsertFile(ctx context.Context, arg InsertFileParams) (File, error) { +func (q *sqlQuerier) InsertFile(ctx context.Context, arg InsertFileParams) (File, error) { row := q.db.QueryRowContext(ctx, insertFile, arg.Hash, arg.CreatedAt, @@ -231,7 +242,7 @@ WHERE user_id = $1 ` -func (q *Queries) DeleteGitSSHKey(ctx context.Context, userID uuid.UUID) error { +func (q *sqlQuerier) DeleteGitSSHKey(ctx context.Context, userID uuid.UUID) error { _, err := q.db.ExecContext(ctx, deleteGitSSHKey, userID) return err } @@ -245,7 +256,7 @@ WHERE user_id = $1 ` -func (q *Queries) GetGitSSHKey(ctx context.Context, userID uuid.UUID) (GitSSHKey, error) { +func (q *sqlQuerier) GetGitSSHKey(ctx context.Context, userID uuid.UUID) (GitSSHKey, error) { row := q.db.QueryRowContext(ctx, getGitSSHKey, userID) var i GitSSHKey err := row.Scan( @@ -279,7 +290,7 @@ type InsertGitSSHKeyParams struct { PublicKey string `db:"public_key" json:"public_key"` } -func (q *Queries) InsertGitSSHKey(ctx context.Context, arg InsertGitSSHKeyParams) (GitSSHKey, error) { +func (q *sqlQuerier) InsertGitSSHKey(ctx context.Context, arg InsertGitSSHKeyParams) (GitSSHKey, error) { row := q.db.QueryRowContext(ctx, insertGitSSHKey, arg.UserID, arg.CreatedAt, @@ -316,7 +327,7 @@ type UpdateGitSSHKeyParams struct { PublicKey string `db:"public_key" json:"public_key"` } -func (q *Queries) UpdateGitSSHKey(ctx context.Context, arg UpdateGitSSHKeyParams) error { +func (q *sqlQuerier) UpdateGitSSHKey(ctx context.Context, arg UpdateGitSSHKeyParams) error { _, err := q.db.ExecContext(ctx, updateGitSSHKey, arg.UserID, arg.UpdatedAt, @@ -343,7 +354,7 @@ type GetOrganizationMemberByUserIDParams struct { UserID uuid.UUID `db:"user_id" json:"user_id"` } -func (q *Queries) GetOrganizationMemberByUserID(ctx context.Context, arg GetOrganizationMemberByUserIDParams) (OrganizationMember, error) { +func (q *sqlQuerier) GetOrganizationMemberByUserID(ctx context.Context, arg GetOrganizationMemberByUserIDParams) (OrganizationMember, error) { row := q.db.QueryRowContext(ctx, getOrganizationMemberByUserID, arg.OrganizationID, arg.UserID) var i OrganizationMember err := row.Scan( @@ -377,7 +388,7 @@ type InsertOrganizationMemberParams struct { Roles []string `db:"roles" json:"roles"` } -func (q *Queries) InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error) { +func (q *sqlQuerier) InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error) { row := q.db.QueryRowContext(ctx, insertOrganizationMember, arg.OrganizationID, arg.UserID, @@ -405,7 +416,7 @@ WHERE id = $1 ` -func (q *Queries) GetOrganizationByID(ctx context.Context, id uuid.UUID) (Organization, error) { +func (q *sqlQuerier) GetOrganizationByID(ctx context.Context, id uuid.UUID) (Organization, error) { row := q.db.QueryRowContext(ctx, getOrganizationByID, id) var i Organization err := row.Scan( @@ -429,7 +440,7 @@ LIMIT 1 ` -func (q *Queries) GetOrganizationByName(ctx context.Context, name string) (Organization, error) { +func (q *sqlQuerier) GetOrganizationByName(ctx context.Context, name string) (Organization, error) { row := q.db.QueryRowContext(ctx, getOrganizationByName, name) var i Organization err := row.Scan( @@ -458,7 +469,7 @@ WHERE ) ` -func (q *Queries) GetOrganizationsByUserID(ctx context.Context, userID uuid.UUID) ([]Organization, error) { +func (q *sqlQuerier) GetOrganizationsByUserID(ctx context.Context, userID uuid.UUID) ([]Organization, error) { rows, err := q.db.QueryContext(ctx, getOrganizationsByUserID, userID) if err != nil { return nil, err @@ -502,7 +513,7 @@ type InsertOrganizationParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *Queries) InsertOrganization(ctx context.Context, arg InsertOrganizationParams) (Organization, error) { +func (q *sqlQuerier) InsertOrganization(ctx context.Context, arg InsertOrganizationParams) (Organization, error) { row := q.db.QueryRowContext(ctx, insertOrganization, arg.ID, arg.Name, @@ -530,7 +541,7 @@ WHERE job_id = $1 ` -func (q *Queries) GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUID) ([]ParameterSchema, error) { +func (q *sqlQuerier) GetParameterSchemasByJobID(ctx context.Context, jobID uuid.UUID) ([]ParameterSchema, error) { rows, err := q.db.QueryContext(ctx, getParameterSchemasByJobID, jobID) if err != nil { return nil, err @@ -630,7 +641,7 @@ type InsertParameterSchemaParams struct { ValidationValueType string `db:"validation_value_type" json:"validation_value_type"` } -func (q *Queries) InsertParameterSchema(ctx context.Context, arg InsertParameterSchemaParams) (ParameterSchema, error) { +func (q *sqlQuerier) InsertParameterSchema(ctx context.Context, arg InsertParameterSchemaParams) (ParameterSchema, error) { row := q.db.QueryRowContext(ctx, insertParameterSchema, arg.ID, arg.CreatedAt, @@ -678,7 +689,7 @@ WHERE id = $1 ` -func (q *Queries) DeleteParameterValueByID(ctx context.Context, id uuid.UUID) error { +func (q *sqlQuerier) DeleteParameterValueByID(ctx context.Context, id uuid.UUID) error { _, err := q.db.ExecContext(ctx, deleteParameterValueByID, id) return err } @@ -702,7 +713,7 @@ type GetParameterValueByScopeAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) GetParameterValueByScopeAndName(ctx context.Context, arg GetParameterValueByScopeAndNameParams) (ParameterValue, error) { +func (q *sqlQuerier) GetParameterValueByScopeAndName(ctx context.Context, arg GetParameterValueByScopeAndNameParams) (ParameterValue, error) { row := q.db.QueryRowContext(ctx, getParameterValueByScopeAndName, arg.Scope, arg.ScopeID, arg.Name) var i ParameterValue err := row.Scan( @@ -734,7 +745,7 @@ type GetParameterValuesByScopeParams struct { ScopeID uuid.UUID `db:"scope_id" json:"scope_id"` } -func (q *Queries) GetParameterValuesByScope(ctx context.Context, arg GetParameterValuesByScopeParams) ([]ParameterValue, error) { +func (q *sqlQuerier) GetParameterValuesByScope(ctx context.Context, arg GetParameterValuesByScopeParams) ([]ParameterValue, error) { rows, err := q.db.QueryContext(ctx, getParameterValuesByScope, arg.Scope, arg.ScopeID) if err != nil { return nil, err @@ -796,7 +807,7 @@ type InsertParameterValueParams struct { DestinationScheme ParameterDestinationScheme `db:"destination_scheme" json:"destination_scheme"` } -func (q *Queries) InsertParameterValue(ctx context.Context, arg InsertParameterValueParams) (ParameterValue, error) { +func (q *sqlQuerier) InsertParameterValue(ctx context.Context, arg InsertParameterValueParams) (ParameterValue, error) { row := q.db.QueryRowContext(ctx, insertParameterValue, arg.ID, arg.Name, @@ -832,7 +843,7 @@ WHERE id = $1 ` -func (q *Queries) GetProvisionerDaemonByID(ctx context.Context, id uuid.UUID) (ProvisionerDaemon, error) { +func (q *sqlQuerier) GetProvisionerDaemonByID(ctx context.Context, id uuid.UUID) (ProvisionerDaemon, error) { row := q.db.QueryRowContext(ctx, getProvisionerDaemonByID, id) var i ProvisionerDaemon err := row.Scan( @@ -853,7 +864,7 @@ FROM provisioner_daemons ` -func (q *Queries) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) { +func (q *sqlQuerier) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) { rows, err := q.db.QueryContext(ctx, getProvisionerDaemons) if err != nil { return nil, err @@ -904,7 +915,7 @@ type InsertProvisionerDaemonParams struct { Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` } -func (q *Queries) InsertProvisionerDaemon(ctx context.Context, arg InsertProvisionerDaemonParams) (ProvisionerDaemon, error) { +func (q *sqlQuerier) InsertProvisionerDaemon(ctx context.Context, arg InsertProvisionerDaemonParams) (ProvisionerDaemon, error) { row := q.db.QueryRowContext(ctx, insertProvisionerDaemon, arg.ID, arg.CreatedAt, @@ -940,7 +951,7 @@ type UpdateProvisionerDaemonByIDParams struct { Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` } -func (q *Queries) UpdateProvisionerDaemonByID(ctx context.Context, arg UpdateProvisionerDaemonByIDParams) error { +func (q *sqlQuerier) UpdateProvisionerDaemonByID(ctx context.Context, arg UpdateProvisionerDaemonByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerDaemonByID, arg.ID, arg.UpdatedAt, pq.Array(arg.Provisioners)) return err } @@ -966,7 +977,7 @@ type GetProvisionerLogsByIDBetweenParams struct { CreatedBefore time.Time `db:"created_before" json:"created_before"` } -func (q *Queries) GetProvisionerLogsByIDBetween(ctx context.Context, arg GetProvisionerLogsByIDBetweenParams) ([]ProvisionerJobLog, error) { +func (q *sqlQuerier) GetProvisionerLogsByIDBetween(ctx context.Context, arg GetProvisionerLogsByIDBetweenParams) ([]ProvisionerJobLog, error) { rows, err := q.db.QueryContext(ctx, getProvisionerLogsByIDBetween, arg.JobID, arg.CreatedAfter, arg.CreatedBefore) if err != nil { return nil, err @@ -1020,7 +1031,7 @@ type InsertProvisionerJobLogsParams struct { Output []string `db:"output" json:"output"` } -func (q *Queries) InsertProvisionerJobLogs(ctx context.Context, arg InsertProvisionerJobLogsParams) ([]ProvisionerJobLog, error) { +func (q *sqlQuerier) InsertProvisionerJobLogs(ctx context.Context, arg InsertProvisionerJobLogsParams) ([]ProvisionerJobLog, error) { rows, err := q.db.QueryContext(ctx, insertProvisionerJobLogs, pq.Array(arg.ID), arg.JobID, @@ -1098,7 +1109,7 @@ type AcquireProvisionerJobParams struct { // SKIP LOCKED is used to jump over locked rows. This prevents // multiple provisioners from acquiring the same jobs. See: // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-FOR-UPDATE-SHARE -func (q *Queries) AcquireProvisionerJob(ctx context.Context, arg AcquireProvisionerJobParams) (ProvisionerJob, error) { +func (q *sqlQuerier) AcquireProvisionerJob(ctx context.Context, arg AcquireProvisionerJobParams) (ProvisionerJob, error) { row := q.db.QueryRowContext(ctx, acquireProvisionerJob, arg.StartedAt, arg.WorkerID, pq.Array(arg.Types)) var i ProvisionerJob err := row.Scan( @@ -1130,7 +1141,7 @@ WHERE id = $1 ` -func (q *Queries) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (ProvisionerJob, error) { +func (q *sqlQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (ProvisionerJob, error) { row := q.db.QueryRowContext(ctx, getProvisionerJobByID, id) var i ProvisionerJob err := row.Scan( @@ -1162,7 +1173,7 @@ WHERE id = ANY($1 :: uuid [ ]) ` -func (q *Queries) GetProvisionerJobsByIDs(ctx context.Context, ids []uuid.UUID) ([]ProvisionerJob, error) { +func (q *sqlQuerier) GetProvisionerJobsByIDs(ctx context.Context, ids []uuid.UUID) ([]ProvisionerJob, error) { rows, err := q.db.QueryContext(ctx, getProvisionerJobsByIDs, pq.Array(ids)) if err != nil { return nil, err @@ -1232,7 +1243,7 @@ type InsertProvisionerJobParams struct { Input json.RawMessage `db:"input" json:"input"` } -func (q *Queries) InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error) { +func (q *sqlQuerier) InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error) { row := q.db.QueryRowContext(ctx, insertProvisionerJob, arg.ID, arg.CreatedAt, @@ -1280,7 +1291,7 @@ type UpdateProvisionerJobByIDParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *Queries) UpdateProvisionerJobByID(ctx context.Context, arg UpdateProvisionerJobByIDParams) error { +func (q *sqlQuerier) UpdateProvisionerJobByID(ctx context.Context, arg UpdateProvisionerJobByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerJobByID, arg.ID, arg.UpdatedAt) return err } @@ -1299,7 +1310,7 @@ type UpdateProvisionerJobWithCancelByIDParams struct { CanceledAt sql.NullTime `db:"canceled_at" json:"canceled_at"` } -func (q *Queries) UpdateProvisionerJobWithCancelByID(ctx context.Context, arg UpdateProvisionerJobWithCancelByIDParams) error { +func (q *sqlQuerier) UpdateProvisionerJobWithCancelByID(ctx context.Context, arg UpdateProvisionerJobWithCancelByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerJobWithCancelByID, arg.ID, arg.CanceledAt) return err } @@ -1322,7 +1333,7 @@ type UpdateProvisionerJobWithCompleteByIDParams struct { Error sql.NullString `db:"error" json:"error"` } -func (q *Queries) UpdateProvisionerJobWithCompleteByID(ctx context.Context, arg UpdateProvisionerJobWithCompleteByIDParams) error { +func (q *sqlQuerier) UpdateProvisionerJobWithCompleteByID(ctx context.Context, arg UpdateProvisionerJobWithCompleteByIDParams) error { _, err := q.db.ExecContext(ctx, updateProvisionerJobWithCompleteByID, arg.ID, arg.UpdatedAt, @@ -1343,7 +1354,7 @@ LIMIT 1 ` -func (q *Queries) GetTemplateByID(ctx context.Context, id uuid.UUID) (Template, error) { +func (q *sqlQuerier) GetTemplateByID(ctx context.Context, id uuid.UUID) (Template, error) { row := q.db.QueryRowContext(ctx, getTemplateByID, id) var i Template err := row.Scan( @@ -1378,7 +1389,7 @@ type GetTemplateByOrganizationAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) GetTemplateByOrganizationAndName(ctx context.Context, arg GetTemplateByOrganizationAndNameParams) (Template, error) { +func (q *sqlQuerier) GetTemplateByOrganizationAndName(ctx context.Context, arg GetTemplateByOrganizationAndNameParams) (Template, error) { row := q.db.QueryRowContext(ctx, getTemplateByOrganizationAndName, arg.OrganizationID, arg.Deleted, arg.Name) var i Template err := row.Scan( @@ -1403,7 +1414,7 @@ WHERE id = ANY($1 :: uuid [ ]) ` -func (q *Queries) GetTemplatesByIDs(ctx context.Context, ids []uuid.UUID) ([]Template, error) { +func (q *sqlQuerier) GetTemplatesByIDs(ctx context.Context, ids []uuid.UUID) ([]Template, error) { rows, err := q.db.QueryContext(ctx, getTemplatesByIDs, pq.Array(ids)) if err != nil { return nil, err @@ -1450,7 +1461,7 @@ type GetTemplatesByOrganizationParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *Queries) GetTemplatesByOrganization(ctx context.Context, arg GetTemplatesByOrganizationParams) ([]Template, error) { +func (q *sqlQuerier) GetTemplatesByOrganization(ctx context.Context, arg GetTemplatesByOrganizationParams) ([]Template, error) { rows, err := q.db.QueryContext(ctx, getTemplatesByOrganization, arg.OrganizationID, arg.Deleted) if err != nil { return nil, err @@ -1507,7 +1518,7 @@ type InsertTemplateParams struct { ActiveVersionID uuid.UUID `db:"active_version_id" json:"active_version_id"` } -func (q *Queries) InsertTemplate(ctx context.Context, arg InsertTemplateParams) (Template, error) { +func (q *sqlQuerier) InsertTemplate(ctx context.Context, arg InsertTemplateParams) (Template, error) { row := q.db.QueryRowContext(ctx, insertTemplate, arg.ID, arg.CreatedAt, @@ -1545,7 +1556,7 @@ type UpdateTemplateActiveVersionByIDParams struct { ActiveVersionID uuid.UUID `db:"active_version_id" json:"active_version_id"` } -func (q *Queries) UpdateTemplateActiveVersionByID(ctx context.Context, arg UpdateTemplateActiveVersionByIDParams) error { +func (q *sqlQuerier) UpdateTemplateActiveVersionByID(ctx context.Context, arg UpdateTemplateActiveVersionByIDParams) error { _, err := q.db.ExecContext(ctx, updateTemplateActiveVersionByID, arg.ID, arg.ActiveVersionID) return err } @@ -1564,7 +1575,7 @@ type UpdateTemplateDeletedByIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *Queries) UpdateTemplateDeletedByID(ctx context.Context, arg UpdateTemplateDeletedByIDParams) error { +func (q *sqlQuerier) UpdateTemplateDeletedByID(ctx context.Context, arg UpdateTemplateDeletedByIDParams) error { _, err := q.db.ExecContext(ctx, updateTemplateDeletedByID, arg.ID, arg.Deleted) return err } @@ -1578,7 +1589,7 @@ WHERE id = $1 ` -func (q *Queries) GetTemplateVersionByID(ctx context.Context, id uuid.UUID) (TemplateVersion, error) { +func (q *sqlQuerier) GetTemplateVersionByID(ctx context.Context, id uuid.UUID) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, getTemplateVersionByID, id) var i TemplateVersion err := row.Scan( @@ -1603,7 +1614,7 @@ WHERE job_id = $1 ` -func (q *Queries) GetTemplateVersionByJobID(ctx context.Context, jobID uuid.UUID) (TemplateVersion, error) { +func (q *sqlQuerier) GetTemplateVersionByJobID(ctx context.Context, jobID uuid.UUID) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, getTemplateVersionByJobID, jobID) var i TemplateVersion err := row.Scan( @@ -1634,7 +1645,7 @@ type GetTemplateVersionByTemplateIDAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) GetTemplateVersionByTemplateIDAndName(ctx context.Context, arg GetTemplateVersionByTemplateIDAndNameParams) (TemplateVersion, error) { +func (q *sqlQuerier) GetTemplateVersionByTemplateIDAndName(ctx context.Context, arg GetTemplateVersionByTemplateIDAndNameParams) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, getTemplateVersionByTemplateIDAndName, arg.TemplateID, arg.Name) var i TemplateVersion err := row.Scan( @@ -1659,7 +1670,7 @@ WHERE template_id = $1 :: uuid ` -func (q *Queries) GetTemplateVersionsByTemplateID(ctx context.Context, dollar_1 uuid.UUID) ([]TemplateVersion, error) { +func (q *sqlQuerier) GetTemplateVersionsByTemplateID(ctx context.Context, dollar_1 uuid.UUID) ([]TemplateVersion, error) { rows, err := q.db.QueryContext(ctx, getTemplateVersionsByTemplateID, dollar_1) if err != nil { return nil, err @@ -1718,7 +1729,7 @@ type InsertTemplateVersionParams struct { JobID uuid.UUID `db:"job_id" json:"job_id"` } -func (q *Queries) InsertTemplateVersion(ctx context.Context, arg InsertTemplateVersionParams) (TemplateVersion, error) { +func (q *sqlQuerier) InsertTemplateVersion(ctx context.Context, arg InsertTemplateVersionParams) (TemplateVersion, error) { row := q.db.QueryRowContext(ctx, insertTemplateVersion, arg.ID, arg.TemplateID, @@ -1759,7 +1770,7 @@ type UpdateTemplateVersionByIDParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *Queries) UpdateTemplateVersionByID(ctx context.Context, arg UpdateTemplateVersionByIDParams) error { +func (q *sqlQuerier) UpdateTemplateVersionByID(ctx context.Context, arg UpdateTemplateVersionByIDParams) error { _, err := q.db.ExecContext(ctx, updateTemplateVersionByID, arg.ID, arg.TemplateID, arg.UpdatedAt) return err } @@ -1781,7 +1792,7 @@ type GetUserByEmailOrUsernameParams struct { Email string `db:"email" json:"email"` } -func (q *Queries) GetUserByEmailOrUsername(ctx context.Context, arg GetUserByEmailOrUsernameParams) (User, error) { +func (q *sqlQuerier) GetUserByEmailOrUsername(ctx context.Context, arg GetUserByEmailOrUsernameParams) (User, error) { row := q.db.QueryRowContext(ctx, getUserByEmailOrUsername, arg.Username, arg.Email) var i User err := row.Scan( @@ -1809,7 +1820,7 @@ LIMIT 1 ` -func (q *Queries) GetUserByID(ctx context.Context, id uuid.UUID) (User, error) { +func (q *sqlQuerier) GetUserByID(ctx context.Context, id uuid.UUID) (User, error) { row := q.db.QueryRowContext(ctx, getUserByID, id) var i User err := row.Scan( @@ -1833,7 +1844,7 @@ FROM users ` -func (q *Queries) GetUserCount(ctx context.Context) (int64, error) { +func (q *sqlQuerier) GetUserCount(ctx context.Context) (int64, error) { row := q.db.QueryRowContext(ctx, getUserCount) var count int64 err := row.Scan(&count) @@ -1908,7 +1919,7 @@ type InsertUserParams struct { Username string `db:"username" json:"username"` } -func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) (User, error) { +func (q *sqlQuerier) InsertUser(ctx context.Context, arg InsertUserParams) (User, error) { row := q.db.QueryRowContext(ctx, insertUser, arg.ID, arg.Email, @@ -1954,7 +1965,7 @@ type UpdateUserProfileParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` } -func (q *Queries) UpdateUserProfile(ctx context.Context, arg UpdateUserProfileParams) (User, error) { +func (q *sqlQuerier) UpdateUserProfile(ctx context.Context, arg UpdateUserProfileParams) (User, error) { row := q.db.QueryRowContext(ctx, updateUserProfile, arg.ID, arg.Email, @@ -1988,7 +1999,7 @@ ORDER BY created_at DESC ` -func (q *Queries) GetWorkspaceAgentByAuthToken(ctx context.Context, authToken uuid.UUID) (WorkspaceAgent, error) { +func (q *sqlQuerier) GetWorkspaceAgentByAuthToken(ctx context.Context, authToken uuid.UUID) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, getWorkspaceAgentByAuthToken, authToken) var i WorkspaceAgent err := row.Scan( @@ -2021,7 +2032,7 @@ WHERE id = $1 ` -func (q *Queries) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (WorkspaceAgent, error) { +func (q *sqlQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, getWorkspaceAgentByID, id) var i WorkspaceAgent err := row.Scan( @@ -2056,7 +2067,7 @@ ORDER BY created_at DESC ` -func (q *Queries) GetWorkspaceAgentByInstanceID(ctx context.Context, authInstanceID string) (WorkspaceAgent, error) { +func (q *sqlQuerier) GetWorkspaceAgentByInstanceID(ctx context.Context, authInstanceID string) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, getWorkspaceAgentByInstanceID, authInstanceID) var i WorkspaceAgent err := row.Scan( @@ -2089,7 +2100,7 @@ WHERE resource_id = ANY($1 :: uuid [ ]) ` -func (q *Queries) GetWorkspaceAgentsByResourceIDs(ctx context.Context, ids []uuid.UUID) ([]WorkspaceAgent, error) { +func (q *sqlQuerier) GetWorkspaceAgentsByResourceIDs(ctx context.Context, ids []uuid.UUID) ([]WorkspaceAgent, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceAgentsByResourceIDs, pq.Array(ids)) if err != nil { return nil, err @@ -2166,7 +2177,7 @@ type InsertWorkspaceAgentParams struct { ResourceMetadata pqtype.NullRawMessage `db:"resource_metadata" json:"resource_metadata"` } -func (q *Queries) InsertWorkspaceAgent(ctx context.Context, arg InsertWorkspaceAgentParams) (WorkspaceAgent, error) { +func (q *sqlQuerier) InsertWorkspaceAgent(ctx context.Context, arg InsertWorkspaceAgentParams) (WorkspaceAgent, error) { row := q.db.QueryRowContext(ctx, insertWorkspaceAgent, arg.ID, arg.CreatedAt, @@ -2222,7 +2233,7 @@ type UpdateWorkspaceAgentConnectionByIDParams struct { DisconnectedAt sql.NullTime `db:"disconnected_at" json:"disconnected_at"` } -func (q *Queries) UpdateWorkspaceAgentConnectionByID(ctx context.Context, arg UpdateWorkspaceAgentConnectionByIDParams) error { +func (q *sqlQuerier) UpdateWorkspaceAgentConnectionByID(ctx context.Context, arg UpdateWorkspaceAgentConnectionByIDParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceAgentConnectionByID, arg.ID, arg.FirstConnectedAt, @@ -2243,7 +2254,7 @@ LIMIT 1 ` -func (q *Queries) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) { +func (q *sqlQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByID, id) var i WorkspaceBuild err := row.Scan( @@ -2274,7 +2285,7 @@ LIMIT 1 ` -func (q *Queries) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) { +func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByJobID, jobID) var i WorkspaceBuild err := row.Scan( @@ -2303,7 +2314,7 @@ WHERE workspace_id = $1 ` -func (q *Queries) GetWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) ([]WorkspaceBuild, error) { +func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) ([]WorkspaceBuild, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceBuildByWorkspaceID, workspaceID) if err != nil { return nil, err @@ -2354,7 +2365,7 @@ type GetWorkspaceBuildByWorkspaceIDAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndNameParams) (WorkspaceBuild, error) { +func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndName(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndNameParams) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDAndName, arg.WorkspaceID, arg.Name) var i WorkspaceBuild err := row.Scan( @@ -2386,7 +2397,7 @@ LIMIT 1 ` -func (q *Queries) GetWorkspaceBuildByWorkspaceIDWithoutAfter(ctx context.Context, workspaceID uuid.UUID) (WorkspaceBuild, error) { +func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDWithoutAfter(ctx context.Context, workspaceID uuid.UUID) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDWithoutAfter, workspaceID) var i WorkspaceBuild err := row.Scan( @@ -2416,7 +2427,7 @@ WHERE AND after_id IS NULL ` -func (q *Queries) GetWorkspaceBuildsByWorkspaceIDsWithoutAfter(ctx context.Context, ids []uuid.UUID) ([]WorkspaceBuild, error) { +func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceIDsWithoutAfter(ctx context.Context, ids []uuid.UUID) ([]WorkspaceBuild, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceBuildsByWorkspaceIDsWithoutAfter, pq.Array(ids)) if err != nil { return nil, err @@ -2485,7 +2496,7 @@ type InsertWorkspaceBuildParams struct { ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"` } -func (q *Queries) InsertWorkspaceBuild(ctx context.Context, arg InsertWorkspaceBuildParams) (WorkspaceBuild, error) { +func (q *sqlQuerier) InsertWorkspaceBuild(ctx context.Context, arg InsertWorkspaceBuildParams) (WorkspaceBuild, error) { row := q.db.QueryRowContext(ctx, insertWorkspaceBuild, arg.ID, arg.CreatedAt, @@ -2535,7 +2546,7 @@ type UpdateWorkspaceBuildByIDParams struct { ProvisionerState []byte `db:"provisioner_state" json:"provisioner_state"` } -func (q *Queries) UpdateWorkspaceBuildByID(ctx context.Context, arg UpdateWorkspaceBuildByIDParams) error { +func (q *sqlQuerier) UpdateWorkspaceBuildByID(ctx context.Context, arg UpdateWorkspaceBuildByIDParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceBuildByID, arg.ID, arg.UpdatedAt, @@ -2554,7 +2565,7 @@ WHERE id = $1 ` -func (q *Queries) GetWorkspaceResourceByID(ctx context.Context, id uuid.UUID) (WorkspaceResource, error) { +func (q *sqlQuerier) GetWorkspaceResourceByID(ctx context.Context, id uuid.UUID) (WorkspaceResource, error) { row := q.db.QueryRowContext(ctx, getWorkspaceResourceByID, id) var i WorkspaceResource err := row.Scan( @@ -2577,7 +2588,7 @@ WHERE job_id = $1 ` -func (q *Queries) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]WorkspaceResource, error) { +func (q *sqlQuerier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]WorkspaceResource, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceResourcesByJobID, jobID) if err != nil { return nil, err @@ -2623,7 +2634,7 @@ type InsertWorkspaceResourceParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) InsertWorkspaceResource(ctx context.Context, arg InsertWorkspaceResourceParams) (WorkspaceResource, error) { +func (q *sqlQuerier) InsertWorkspaceResource(ctx context.Context, arg InsertWorkspaceResourceParams) (WorkspaceResource, error) { row := q.db.QueryRowContext(ctx, insertWorkspaceResource, arg.ID, arg.CreatedAt, @@ -2655,7 +2666,7 @@ LIMIT 1 ` -func (q *Queries) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) { +func (q *sqlQuerier) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) { row := q.db.QueryRowContext(ctx, getWorkspaceByID, id) var i Workspace err := row.Scan( @@ -2689,7 +2700,7 @@ type GetWorkspaceByUserIDAndNameParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) GetWorkspaceByUserIDAndName(ctx context.Context, arg GetWorkspaceByUserIDAndNameParams) (Workspace, error) { +func (q *sqlQuerier) GetWorkspaceByUserIDAndName(ctx context.Context, arg GetWorkspaceByUserIDAndNameParams) (Workspace, error) { row := q.db.QueryRowContext(ctx, getWorkspaceByUserIDAndName, arg.OwnerID, arg.Deleted, arg.Name) var i Workspace err := row.Scan( @@ -2724,7 +2735,7 @@ type GetWorkspaceOwnerCountsByTemplateIDsRow struct { Count int64 `db:"count" json:"count"` } -func (q *Queries) GetWorkspaceOwnerCountsByTemplateIDs(ctx context.Context, ids []uuid.UUID) ([]GetWorkspaceOwnerCountsByTemplateIDsRow, error) { +func (q *sqlQuerier) GetWorkspaceOwnerCountsByTemplateIDs(ctx context.Context, ids []uuid.UUID) ([]GetWorkspaceOwnerCountsByTemplateIDsRow, error) { rows, err := q.db.QueryContext(ctx, getWorkspaceOwnerCountsByTemplateIDs, pq.Array(ids)) if err != nil { return nil, err @@ -2762,7 +2773,7 @@ type GetWorkspacesByTemplateIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *Queries) GetWorkspacesByTemplateID(ctx context.Context, arg GetWorkspacesByTemplateIDParams) ([]Workspace, error) { +func (q *sqlQuerier) GetWorkspacesByTemplateID(ctx context.Context, arg GetWorkspacesByTemplateIDParams) ([]Workspace, error) { rows, err := q.db.QueryContext(ctx, getWorkspacesByTemplateID, arg.TemplateID, arg.Deleted) if err != nil { return nil, err @@ -2810,7 +2821,7 @@ type GetWorkspacesByUserIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *Queries) GetWorkspacesByUserID(ctx context.Context, arg GetWorkspacesByUserIDParams) ([]Workspace, error) { +func (q *sqlQuerier) GetWorkspacesByUserID(ctx context.Context, arg GetWorkspacesByUserIDParams) ([]Workspace, error) { rows, err := q.db.QueryContext(ctx, getWorkspacesByUserID, arg.OwnerID, arg.Deleted) if err != nil { return nil, err @@ -2866,7 +2877,7 @@ type InsertWorkspaceParams struct { Name string `db:"name" json:"name"` } -func (q *Queries) InsertWorkspace(ctx context.Context, arg InsertWorkspaceParams) (Workspace, error) { +func (q *sqlQuerier) InsertWorkspace(ctx context.Context, arg InsertWorkspaceParams) (Workspace, error) { row := q.db.QueryRowContext(ctx, insertWorkspace, arg.ID, arg.CreatedAt, @@ -2904,7 +2915,7 @@ type UpdateWorkspaceAutostartParams struct { AutostartSchedule sql.NullString `db:"autostart_schedule" json:"autostart_schedule"` } -func (q *Queries) UpdateWorkspaceAutostart(ctx context.Context, arg UpdateWorkspaceAutostartParams) error { +func (q *sqlQuerier) UpdateWorkspaceAutostart(ctx context.Context, arg UpdateWorkspaceAutostartParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceAutostart, arg.ID, arg.AutostartSchedule) return err } @@ -2923,7 +2934,7 @@ type UpdateWorkspaceAutostopParams struct { AutostopSchedule sql.NullString `db:"autostop_schedule" json:"autostop_schedule"` } -func (q *Queries) UpdateWorkspaceAutostop(ctx context.Context, arg UpdateWorkspaceAutostopParams) error { +func (q *sqlQuerier) UpdateWorkspaceAutostop(ctx context.Context, arg UpdateWorkspaceAutostopParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceAutostop, arg.ID, arg.AutostopSchedule) return err } @@ -2942,7 +2953,7 @@ type UpdateWorkspaceDeletedByIDParams struct { Deleted bool `db:"deleted" json:"deleted"` } -func (q *Queries) UpdateWorkspaceDeletedByID(ctx context.Context, arg UpdateWorkspaceDeletedByIDParams) error { +func (q *sqlQuerier) UpdateWorkspaceDeletedByID(ctx context.Context, arg UpdateWorkspaceDeletedByIDParams) error { _, err := q.db.ExecContext(ctx, updateWorkspaceDeletedByID, arg.ID, arg.Deleted) return err } From a7e1dcb77cffaf0ce61b740e54e5462a68a1a20a Mon Sep 17 00:00:00 2001 From: Garrett Date: Mon, 18 Apr 2022 23:43:15 +0000 Subject: [PATCH 20/24] fix make --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 525f7937ddcca..74cb5073ef206 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ coderd/database/generate: fmt/sql coderd/database/dump.sql $(wildcard coderd/dat apitypings/generate: site/src/api/types.ts go run scripts/apitypings/main.go > site/src/api/types-generated.ts cd site && yarn run format:types -.PHONY: coderts/generate +.PHONY: apitypings/generate fmt/prettier: @echo "--- prettier" From 64e3102fda283688903a0036b4d33e331875ba09 Mon Sep 17 00:00:00 2001 From: Garrett Date: Tue, 19 Apr 2022 00:14:14 +0000 Subject: [PATCH 21/24] Fix yarn format:types --- site/package.json | 2 +- site/src/api/types-generated.ts | 28 +++++++--------------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/site/package.json b/site/package.json index 7fcee9fb9b4c5..42003ff643e1f 100644 --- a/site/package.json +++ b/site/package.json @@ -10,7 +10,7 @@ "chromatic": "chromatic", "dev": "webpack-dev-server --config=webpack.dev.ts", "format:check": "prettier --check '**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'", - "format:types": "prettier --write 'src/api/types.ts'", + "format:types": "prettier --write 'src/api/types-generated.ts'", "format:write": "prettier --write '**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'", "lint": "jest --selectProjects lint", "lint:fix": "FIX=true yarn lint", diff --git a/site/src/api/types-generated.ts b/site/src/api/types-generated.ts index ef5fcf2680cf9..207ba38952c74 100644 --- a/site/src/api/types-generated.ts +++ b/site/src/api/types-generated.ts @@ -125,18 +125,18 @@ export interface CreateWorkspaceRequest { readonly name: string } -// From codersdk/workspaceagents.go:26:6. +// From codersdk/workspaceagents.go:31:6. export interface GoogleInstanceIdentityToken { readonly json_web_token: string } -// From codersdk/workspaceagents.go:30:6. +// From codersdk/workspaceagents.go:35:6. export interface AWSInstanceIdentityToken { readonly signature: string readonly document: string } -// From codersdk/workspaceagents.go:37:6. +// From codersdk/workspaceagents.go:42:6. export interface WorkspaceAgentAuthenticateResponse { readonly session_token: string } @@ -210,25 +210,11 @@ export interface UpdateWorkspaceAutostopRequest { readonly schedule: string } -// From codersdk/parameters.go:16:6. -export type ParameterScope = - | "organization" - | "template" - | "user" - | "workspace" - // From codersdk/provisionerdaemons.go:26:6. -export type ProvisionerJobStatus = - | "pending" - | "running" - | "succeeded" - | "canceling" - | "canceled" - | "failed" +export type ProvisionerJobStatus = "pending" | "running" | "succeeded" | "canceling" | "canceled" | "failed" // From codersdk/workspaceresources.go:15:6. -export type WorkspaceAgentStatus = - | "connecting" - | "connected" - | "disconnected" +export type WorkspaceAgentStatus = "connecting" | "connected" | "disconnected" +// From codersdk/parameters.go:16:6. +export type ParameterScope = "organization" | "template" | "user" | "workspace" From 89c8b2b0b7f7010cbdf64737fee80e8ec2914b50 Mon Sep 17 00:00:00 2001 From: Garrett Date: Tue, 19 Apr 2022 00:18:25 +0000 Subject: [PATCH 22/24] Add node steps to gen step --- .github/workflows/coder.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/coder.yaml b/.github/workflows/coder.yaml index d6fed1b850567..87fd447e1d484 100644 --- a/.github/workflows/coder.yaml +++ b/.github/workflows/coder.yaml @@ -76,6 +76,21 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + + - name: Cache Node + id: cache-node + uses: actions/cache@v3 + with: + path: | + **/node_modules + .eslintcache + key: js-${{ runner.os }}-test-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + js-${{ runner.os }}- + + - name: Install node_modules + run: ./scripts/yarn_install.sh + - name: Install Protoc uses: arduino/setup-protoc@v1 with: From ae2940f212e8eedfe2f4605e8e67937d8f620f41 Mon Sep 17 00:00:00 2001 From: Garrett Date: Tue, 19 Apr 2022 00:21:38 +0000 Subject: [PATCH 23/24] update make gen --- site/src/api/types-generated.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/src/api/types-generated.ts b/site/src/api/types-generated.ts index 207ba38952c74..93940dbe49ad1 100644 --- a/site/src/api/types-generated.ts +++ b/site/src/api/types-generated.ts @@ -210,11 +210,11 @@ export interface UpdateWorkspaceAutostopRequest { readonly schedule: string } +// From codersdk/parameters.go:16:6. +export type ParameterScope = "organization" | "template" | "user" | "workspace" + // From codersdk/provisionerdaemons.go:26:6. export type ProvisionerJobStatus = "pending" | "running" | "succeeded" | "canceling" | "canceled" | "failed" // From codersdk/workspaceresources.go:15:6. export type WorkspaceAgentStatus = "connecting" | "connected" | "disconnected" - -// From codersdk/parameters.go:16:6. -export type ParameterScope = "organization" | "template" | "user" | "workspace" From 7b6367343a4f5b5577985cb51e75704e29a13f41 Mon Sep 17 00:00:00 2001 From: Garrett Date: Tue, 19 Apr 2022 00:41:21 +0000 Subject: [PATCH 24/24] fix make gen --- site/src/api/types-generated.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/src/api/types-generated.ts b/site/src/api/types-generated.ts index 93940dbe49ad1..660d60d01f8ca 100644 --- a/site/src/api/types-generated.ts +++ b/site/src/api/types-generated.ts @@ -210,11 +210,11 @@ export interface UpdateWorkspaceAutostopRequest { readonly schedule: string } +// From codersdk/workspaceresources.go:15:6. +export type WorkspaceAgentStatus = "connecting" | "connected" | "disconnected" + // From codersdk/parameters.go:16:6. export type ParameterScope = "organization" | "template" | "user" | "workspace" // From codersdk/provisionerdaemons.go:26:6. export type ProvisionerJobStatus = "pending" | "running" | "succeeded" | "canceling" | "canceled" | "failed" - -// From codersdk/workspaceresources.go:15:6. -export type WorkspaceAgentStatus = "connecting" | "connected" | "disconnected"