From 8d086e7c42e185c9b1aea2540d06ff941f89755d Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 18 May 2022 14:55:17 -0500 Subject: [PATCH 01/11] chore: Force codersdk to not import anything from database --- .golangci.yaml | 2 +- cli/create.go | 5 ++-- cli/templatecreate.go | 8 +++--- cli/templateupdate.go | 5 ++-- coderd/coderd.go | 3 +++ coderd/coderdtest/coderdtest.go | 8 +++--- coderd/parameters.go | 8 +++--- coderd/parameters_test.go | 25 +++++++++---------- coderd/provisionerdaemons_test.go | 5 ++-- coderd/templates.go | 4 +-- coderd/templateversions.go | 6 ++--- coderd/templateversions_test.go | 21 ++++++++-------- coderd/workspaces.go | 4 +-- codersdk/organizations.go | 19 +++++++++++--- codersdk/parameters.go | 41 ++++++++++++++++++++----------- gorules/codersdk.go | 14 +++++++++++ gorules/doc.go | 13 ++++++++++ rules.go => gorules/errors.go | 6 +---- 18 files changed, 121 insertions(+), 76 deletions(-) create mode 100644 gorules/codersdk.go create mode 100644 gorules/doc.go rename rules.go => gorules/errors.go (76%) diff --git a/.golangci.yaml b/.golangci.yaml index 52945243f2772..3b937765060a5 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -103,7 +103,7 @@ linters-settings: settings: ruleguard: failOn: all - rules: rules.go + rules: '${configDir}/gorules/*.go' staticcheck: # https://staticcheck.io/docs/options#checks diff --git a/cli/create.go b/cli/create.go index 6a274afa4f353..5661a8dcee95b 100644 --- a/cli/create.go +++ b/cli/create.go @@ -10,7 +10,6 @@ import ( "github.com/coder/coder/cli/cliflag" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -134,8 +133,8 @@ func create() *cobra.Command { parameters = append(parameters, codersdk.CreateParameterRequest{ Name: parameterSchema.Name, SourceValue: value, - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: parameterSchema.DefaultDestinationScheme, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationScheme(parameterSchema.DefaultDestinationScheme), }) } _, _ = fmt.Fprintln(cmd.OutOrStdout()) diff --git a/cli/templatecreate.go b/cli/templatecreate.go index 92d0c29465e71..0ea2bd7861ec1 100644 --- a/cli/templatecreate.go +++ b/cli/templatecreate.go @@ -128,9 +128,9 @@ func templateCreate() *cobra.Command { func createValidTemplateVersion(cmd *cobra.Command, client *codersdk.Client, organization codersdk.Organization, provisioner database.ProvisionerType, hash string, parameters ...codersdk.CreateParameterRequest) (*codersdk.TemplateVersion, []codersdk.CreateParameterRequest, error) { before := time.Now() version, err := client.CreateTemplateVersion(cmd.Context(), organization.ID, codersdk.CreateTemplateVersionRequest{ - StorageMethod: database.ProvisionerStorageMethodFile, + StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageSource: hash, - Provisioner: provisioner, + Provisioner: codersdk.ProvisionerType(provisioner), ParameterValues: parameters, }) if err != nil { @@ -192,8 +192,8 @@ func createValidTemplateVersion(cmd *cobra.Command, client *codersdk.Client, org parameters = append(parameters, codersdk.CreateParameterRequest{ Name: parameterSchema.Name, SourceValue: value, - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: parameterSchema.DefaultDestinationScheme, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationScheme(parameterSchema.DefaultDestinationScheme), }) _, _ = fmt.Fprintln(cmd.OutOrStdout()) } diff --git a/cli/templateupdate.go b/cli/templateupdate.go index 892e99feb6160..70c2611cea687 100644 --- a/cli/templateupdate.go +++ b/cli/templateupdate.go @@ -10,7 +10,6 @@ import ( "golang.org/x/xerrors" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" "github.com/coder/coder/provisionersdk" ) @@ -68,9 +67,9 @@ func templateUpdate() *cobra.Command { before := time.Now() templateVersion, err := client.CreateTemplateVersion(cmd.Context(), organization.ID, codersdk.CreateTemplateVersionRequest{ TemplateID: template.ID, - StorageMethod: database.ProvisionerStorageMethodFile, + StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageSource: resp.Hash, - Provisioner: database.ProvisionerType(provisioner), + Provisioner: codersdk.ProvisionerType(provisioner), }) if err != nil { return err diff --git a/coderd/coderd.go b/coderd/coderd.go index 1f1a4ff18dfac..7ac0c8c75d147 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -325,6 +325,9 @@ func New(options *Options) (http.Handler, func()) { r.Get("/state", api.workspaceBuildState) }) }) + + var _ = xerrors.New("test") + r.NotFound(site.DefaultHandler().ServeHTTP) return r, func() { api.websocketWaitMutex.Lock() diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index 117e96e6ac04f..74b3171336df6 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -288,8 +288,8 @@ func CreateTemplateVersion(t *testing.T, client *codersdk.Client, organizationID require.NoError(t, err) templateVersion, err := client.CreateTemplateVersion(context.Background(), organizationID, codersdk.CreateTemplateVersionRequest{ StorageSource: file.Hash, - StorageMethod: database.ProvisionerStorageMethodFile, - Provisioner: database.ProvisionerTypeEcho, + StorageMethod: codersdk.ProvisionerStorageMethodFile, + Provisioner: codersdk.ProvisionerTypeEcho, }) require.NoError(t, err) return templateVersion @@ -331,8 +331,8 @@ func UpdateTemplateVersion(t *testing.T, client *codersdk.Client, organizationID templateVersion, err := client.CreateTemplateVersion(context.Background(), organizationID, codersdk.CreateTemplateVersionRequest{ TemplateID: templateID, StorageSource: file.Hash, - StorageMethod: database.ProvisionerStorageMethodFile, - Provisioner: database.ProvisionerTypeEcho, + StorageMethod: codersdk.ProvisionerStorageMethodFile, + Provisioner: codersdk.ProvisionerTypeEcho, }) require.NoError(t, err) return templateVersion diff --git a/coderd/parameters.go b/coderd/parameters.go index 8f5ce04c83bfe..51fee83ee818a 100644 --- a/coderd/parameters.go +++ b/coderd/parameters.go @@ -47,9 +47,9 @@ func (api *api) postParameter(rw http.ResponseWriter, r *http.Request) { UpdatedAt: database.Now(), Scope: scope, ScopeID: scopeID, - SourceScheme: createRequest.SourceScheme, + SourceScheme: database.ParameterSourceScheme(createRequest.SourceScheme), SourceValue: createRequest.SourceValue, - DestinationScheme: createRequest.DestinationScheme, + DestinationScheme: database.ParameterDestinationScheme(createRequest.DestinationScheme), }) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ @@ -130,8 +130,8 @@ func convertParameterValue(parameterValue database.ParameterValue) codersdk.Para Scope: codersdk.ParameterScope(parameterValue.Scope), ScopeID: parameterValue.ScopeID, Name: parameterValue.Name, - SourceScheme: parameterValue.SourceScheme, - DestinationScheme: parameterValue.DestinationScheme, + SourceScheme: codersdk.ParameterSourceScheme(parameterValue.SourceScheme), + DestinationScheme: codersdk.ParameterDestinationScheme(parameterValue.DestinationScheme), } } diff --git a/coderd/parameters_test.go b/coderd/parameters_test.go index 2c2f292c0e3fd..a35ab6d65dd58 100644 --- a/coderd/parameters_test.go +++ b/coderd/parameters_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/require" "github.com/coder/coder/coderd/coderdtest" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -21,8 +20,8 @@ func TestPostParameter(t *testing.T) { _, err := client.CreateParameter(context.Background(), codersdk.ParameterScope("something"), user.OrganizationID, codersdk.CreateParameterRequest{ Name: "example", SourceValue: "tomato", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }) var apiErr *codersdk.Error require.ErrorAs(t, err, &apiErr) @@ -36,8 +35,8 @@ func TestPostParameter(t *testing.T) { _, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{ Name: "example", SourceValue: "tomato", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }) require.NoError(t, err) }) @@ -49,16 +48,16 @@ func TestPostParameter(t *testing.T) { _, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{ Name: "example", SourceValue: "tomato", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }) require.NoError(t, err) _, err = client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{ Name: "example", SourceValue: "tomato", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }) var apiErr *codersdk.Error require.ErrorAs(t, err, &apiErr) @@ -82,8 +81,8 @@ func TestParameters(t *testing.T) { _, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{ Name: "example", SourceValue: "tomato", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }) require.NoError(t, err) params, err := client.Parameters(context.Background(), codersdk.ParameterOrganization, user.OrganizationID) @@ -110,8 +109,8 @@ func TestDeleteParameter(t *testing.T) { param, err := client.CreateParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, codersdk.CreateParameterRequest{ Name: "example", SourceValue: "tomato", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }) require.NoError(t, err) err = client.DeleteParameter(context.Background(), codersdk.ParameterOrganization, user.OrganizationID, param.Name) diff --git a/coderd/provisionerdaemons_test.go b/coderd/provisionerdaemons_test.go index 647045f7296a7..5e6bf0b37624c 100644 --- a/coderd/provisionerdaemons_test.go +++ b/coderd/provisionerdaemons_test.go @@ -11,7 +11,6 @@ import ( "github.com/stretchr/testify/require" "github.com/coder/coder/coderd/coderdtest" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" "github.com/coder/coder/provisionersdk" ) @@ -34,9 +33,9 @@ func TestProvisionerDaemons(t *testing.T) { t.Log(resp.Hash) version, err := client.CreateTemplateVersion(context.Background(), user.OrganizationID, codersdk.CreateTemplateVersionRequest{ - StorageMethod: database.ProvisionerStorageMethodFile, + StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageSource: resp.Hash, - Provisioner: database.ProvisionerTypeEcho, + Provisioner: codersdk.ProvisionerTypeEcho, }) require.NoError(t, err) require.Eventually(t, func() bool { diff --git a/coderd/templates.go b/coderd/templates.go index 4d719e3d85b25..4170850c60b3f 100644 --- a/coderd/templates.go +++ b/coderd/templates.go @@ -158,9 +158,9 @@ func (api *api) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque UpdatedAt: database.Now(), Scope: database.ParameterScopeTemplate, ScopeID: dbTemplate.ID, - SourceScheme: parameterValue.SourceScheme, + SourceScheme: database.ParameterSourceScheme(parameterValue.SourceScheme), SourceValue: parameterValue.SourceValue, - DestinationScheme: parameterValue.DestinationScheme, + DestinationScheme: database.ParameterDestinationScheme(parameterValue.DestinationScheme), }) if err != nil { return xerrors.Errorf("insert parameter value: %w", err) diff --git a/coderd/templateversions.go b/coderd/templateversions.go index f1d70cb4c9b97..a97ce2cb17ae8 100644 --- a/coderd/templateversions.go +++ b/coderd/templateversions.go @@ -317,9 +317,9 @@ func (api *api) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht UpdatedAt: database.Now(), Scope: database.ParameterScopeImportJob, ScopeID: jobID, - SourceScheme: parameterValue.SourceScheme, + SourceScheme: database.ParameterSourceScheme(parameterValue.SourceScheme), SourceValue: parameterValue.SourceValue, - DestinationScheme: parameterValue.DestinationScheme, + DestinationScheme: database.ParameterDestinationScheme(parameterValue.DestinationScheme), }) if err != nil { return xerrors.Errorf("insert parameter value: %w", err) @@ -332,7 +332,7 @@ func (api *api) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht UpdatedAt: database.Now(), OrganizationID: organization.ID, InitiatorID: apiKey.UserID, - Provisioner: req.Provisioner, + Provisioner: database.ProvisionerType(req.Provisioner), StorageMethod: database.ProvisionerStorageMethodFile, StorageSource: file.Hash, Type: database.ProvisionerJobTypeTemplateVersionImport, diff --git a/coderd/templateversions_test.go b/coderd/templateversions_test.go index 6512e482a1527..9b71aa231df58 100644 --- a/coderd/templateversions_test.go +++ b/coderd/templateversions_test.go @@ -11,7 +11,6 @@ import ( "github.com/stretchr/testify/require" "github.com/coder/coder/coderd/coderdtest" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" "github.com/coder/coder/provisioner/echo" "github.com/coder/coder/provisionersdk/proto" @@ -38,9 +37,9 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) { templateID := uuid.New() _, err := client.CreateTemplateVersion(context.Background(), user.OrganizationID, codersdk.CreateTemplateVersionRequest{ TemplateID: templateID, - StorageMethod: database.ProvisionerStorageMethodFile, + StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageSource: "hash", - Provisioner: database.ProvisionerTypeEcho, + Provisioner: codersdk.ProvisionerTypeEcho, }) var apiErr *codersdk.Error require.ErrorAs(t, err, &apiErr) @@ -52,9 +51,9 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) { client := coderdtest.New(t, nil) user := coderdtest.CreateFirstUser(t, client) _, err := client.CreateTemplateVersion(context.Background(), user.OrganizationID, codersdk.CreateTemplateVersionRequest{ - StorageMethod: database.ProvisionerStorageMethodFile, + StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageSource: "hash", - Provisioner: database.ProvisionerTypeEcho, + Provisioner: codersdk.ProvisionerTypeEcho, }) var apiErr *codersdk.Error require.ErrorAs(t, err, &apiErr) @@ -74,14 +73,14 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) { file, err := client.Upload(context.Background(), codersdk.ContentTypeTar, data) require.NoError(t, err) _, err = client.CreateTemplateVersion(context.Background(), user.OrganizationID, codersdk.CreateTemplateVersionRequest{ - StorageMethod: database.ProvisionerStorageMethodFile, + StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageSource: file.Hash, - Provisioner: database.ProvisionerTypeEcho, + Provisioner: codersdk.ProvisionerTypeEcho, ParameterValues: []codersdk.CreateParameterRequest{{ Name: "example", SourceValue: "value", - SourceScheme: database.ParameterSourceSchemeData, - DestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, + SourceScheme: codersdk.ParameterSourceSchemeData, + DestinationScheme: codersdk.ParameterDestinationSchemeProvisionerVariable, }}, }) require.NoError(t, err) @@ -450,8 +449,8 @@ func TestPaginatedTemplateVersions(t *testing.T) { templateVersion, err := client.CreateTemplateVersion(ctx, user.OrganizationID, codersdk.CreateTemplateVersionRequest{ TemplateID: template.ID, StorageSource: file.Hash, - StorageMethod: database.ProvisionerStorageMethodFile, - Provisioner: database.ProvisionerTypeEcho, + StorageMethod: codersdk.ProvisionerStorageMethodFile, + Provisioner: codersdk.ProvisionerTypeEcho, }) require.NoError(t, err) diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 4ef3b61301fe6..207a83141dc81 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -406,9 +406,9 @@ func (api *api) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req UpdatedAt: database.Now(), Scope: database.ParameterScopeWorkspace, ScopeID: workspace.ID, - SourceScheme: parameterValue.SourceScheme, + SourceScheme: database.ParameterSourceScheme(parameterValue.SourceScheme), SourceValue: parameterValue.SourceValue, - DestinationScheme: parameterValue.DestinationScheme, + DestinationScheme: database.ParameterDestinationScheme(parameterValue.DestinationScheme), }) if err != nil { return xerrors.Errorf("insert parameter value: %w", err) diff --git a/codersdk/organizations.go b/codersdk/organizations.go index 7ebb16aedca97..d5b8d2f3ba2ee 100644 --- a/codersdk/organizations.go +++ b/codersdk/organizations.go @@ -9,8 +9,19 @@ import ( "github.com/google/uuid" "golang.org/x/xerrors" +) + +type ProvisionerStorageMethod string + +const ( + ProvisionerStorageMethodFile ProvisionerStorageMethod = "file" +) + +type ProvisionerType string - "github.com/coder/coder/coderd/database" +const ( + ProvisionerTypeEcho ProvisionerType = "echo" + ProvisionerTypeTerraform ProvisionerType = "terraform" ) // Organization is the JSON representation of a Coder organization. @@ -26,9 +37,9 @@ type CreateTemplateVersionRequest struct { // TemplateID optionally associates a version with a template. TemplateID uuid.UUID `json:"template_id,omitempty"` - StorageMethod database.ProvisionerStorageMethod `json:"storage_method" validate:"oneof=file,required"` - StorageSource string `json:"storage_source" validate:"required"` - Provisioner database.ProvisionerType `json:"provisioner" validate:"oneof=terraform echo,required"` + StorageMethod ProvisionerStorageMethod `json:"storage_method" validate:"oneof=file,required"` + StorageSource string `json:"storage_source" validate:"required"` + Provisioner ProvisionerType `json:"provisioner" validate:"oneof=terraform echo,required"` // ParameterValues allows for additional parameters to be provided // during the dry-run provision stage. ParameterValues []CreateParameterRequest `json:"parameter_values,omitempty"` diff --git a/codersdk/parameters.go b/codersdk/parameters.go index 9fd9d5d9cad8d..116008930bcff 100644 --- a/codersdk/parameters.go +++ b/codersdk/parameters.go @@ -9,8 +9,6 @@ import ( "time" "github.com/google/uuid" - - "github.com/coder/coder/coderd/database" ) type ParameterScope string @@ -22,24 +20,39 @@ const ( ParameterWorkspace ParameterScope = "workspace" ) +type ParameterSourceScheme string + +const ( + ParameterSourceSchemeNone ParameterSourceScheme = "none" + ParameterSourceSchemeData ParameterSourceScheme = "data" +) + +type ParameterDestinationScheme string + +const ( + ParameterDestinationSchemeNone ParameterDestinationScheme = "none" + ParameterDestinationSchemeEnvironmentVariable ParameterDestinationScheme = "environment_variable" + ParameterDestinationSchemeProvisionerVariable ParameterDestinationScheme = "provisioner_variable" +) + // Parameter represents a set value for the scope. type Parameter struct { - ID uuid.UUID `db:"id" json:"id"` - CreatedAt time.Time `db:"created_at" json:"created_at"` - UpdatedAt time.Time `db:"updated_at" json:"updated_at"` - Scope ParameterScope `db:"scope" json:"scope"` - ScopeID uuid.UUID `db:"scope_id" json:"scope_id"` - Name string `db:"name" json:"name"` - SourceScheme database.ParameterSourceScheme `db:"source_scheme" json:"source_scheme"` - DestinationScheme database.ParameterDestinationScheme `db:"destination_scheme" json:"destination_scheme"` + ID uuid.UUID `db:"id" json:"id"` + CreatedAt time.Time `db:"created_at" json:"created_at"` + UpdatedAt time.Time `db:"updated_at" json:"updated_at"` + Scope ParameterScope `db:"scope" json:"scope"` + ScopeID uuid.UUID `db:"scope_id" json:"scope_id"` + Name string `db:"name" json:"name"` + SourceScheme ParameterSourceScheme `db:"source_scheme" json:"source_scheme"` + DestinationScheme ParameterDestinationScheme `db:"destination_scheme" json:"destination_scheme"` } // CreateParameterRequest is used to create a new parameter value for a scope. type CreateParameterRequest struct { - Name string `json:"name" validate:"required"` - SourceValue string `json:"source_value" validate:"required"` - SourceScheme database.ParameterSourceScheme `json:"source_scheme" validate:"oneof=data,required"` - DestinationScheme database.ParameterDestinationScheme `json:"destination_scheme" validate:"oneof=environment_variable provisioner_variable,required"` + Name string `json:"name" validate:"required"` + SourceValue string `json:"source_value" validate:"required"` + SourceScheme ParameterSourceScheme `json:"source_scheme" validate:"oneof=data,required"` + DestinationScheme ParameterDestinationScheme `json:"destination_scheme" validate:"oneof=environment_variable provisioner_variable,required"` } func (c *Client) CreateParameter(ctx context.Context, scope ParameterScope, id uuid.UUID, req CreateParameterRequest) (Parameter, error) { diff --git a/gorules/codersdk.go b/gorules/codersdk.go new file mode 100644 index 0000000000000..28c800ab5fb2d --- /dev/null +++ b/gorules/codersdk.go @@ -0,0 +1,14 @@ +package gorules + +import ( + "github.com/quasilyte/go-ruleguard/dsl" +) + +// databaseImport enforces not importing any database types into /codersdk. +//nolint:unused,deadcode,varnamelen +func databaseImport(m dsl.Matcher) { + m.Import("github.com/coder/coder/coderd/database") + m.Match("database.$_"). + Report("Do not import any database types into codersdk"). + Where(m.File().PkgPath.Matches("github.com/coder/coder/codersdk")) +} diff --git a/gorules/doc.go b/gorules/doc.go new file mode 100644 index 0000000000000..90193740cc78e --- /dev/null +++ b/gorules/doc.go @@ -0,0 +1,13 @@ +// Package gorules defines custom lint rules for ruleguard. +// +// golangci-lint runs these rules via go-critic, which includes support +// for ruleguard. All Go files in this directory define lint rules +// in the Ruleguard DSL; see: +// +// - https://go-ruleguard.github.io/by-example/ +// - https://pkg.go.dev/github.com/quasilyte/go-ruleguard/dsl +// +// You run one of the following commands to execute your go rules only: +// golangci-lint run +// golangci-lint run --disable-all --enable=gocritic +package gorules diff --git a/rules.go b/gorules/errors.go similarity index 76% rename from rules.go rename to gorules/errors.go index a81f59395e676..8c26dd914a7ed 100644 --- a/rules.go +++ b/gorules/errors.go @@ -15,11 +15,7 @@ func xerrors(m dsl.Matcher) { Suggest("xerrors.New($args)"). Report("Use xerrors to provide additional stacktrace information!") - m.Match("fmt.Errorf($*args)"). - Suggest("xerrors.Errorf($args)"). - Report("Use xerrors to provide additional stacktrace information!") - - m.Match("errors.New($msg)"). + m.Match("errors.$_($msg)"). Where(m["msg"].Type.Is("string")). Suggest("xerrors.New($msg)"). Report("Use xerrors to provide additional stacktrace information!") From c4529913793f8930c16d2b53791ad440bb3f9cef Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 18 May 2022 15:57:55 -0500 Subject: [PATCH 02/11] chore: Move all database types in codersdk out --- cli/cliui/provisionerjob.go | 9 ++--- cli/cliui/resources.go | 2 +- cli/cliui/resources_test.go | 10 ++--- cli/configssh.go | 3 +- cli/delete.go | 3 +- cli/list.go | 7 ++-- cli/portforward.go | 3 +- cli/server.go | 2 +- cli/ssh.go | 5 +-- cli/start.go | 3 +- cli/stop.go | 3 +- cmd/cliui/main.go | 12 +++--- .../executor/lifecycle_executor_test.go | 28 ++++++------- coderd/coderdtest/coderdtest.go | 2 +- coderd/provisionerjobs.go | 4 +- coderd/templates.go | 2 +- coderd/workspacebuilds.go | 6 +-- coderd/workspaces_test.go | 11 +++-- codersdk/parameters.go | 7 ++++ codersdk/provisionerdaemons.go | 40 +++++++++++++++---- codersdk/templates.go | 20 +++++----- codersdk/templateversions.go | 36 ++++++++++++++--- codersdk/workspacebuilds.go | 28 ++++++++----- codersdk/workspaceresources.go | 16 ++++---- codersdk/workspaces.go | 10 ++--- 25 files changed, 160 insertions(+), 112 deletions(-) diff --git a/cli/cliui/provisionerjob.go b/cli/cliui/provisionerjob.go index a5ece8c22aa63..4255fba43c539 100644 --- a/cli/cliui/provisionerjob.go +++ b/cli/cliui/provisionerjob.go @@ -12,7 +12,6 @@ import ( "github.com/google/uuid" "golang.org/x/xerrors" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -165,16 +164,16 @@ func ProvisionerJob(ctx context.Context, writer io.Writer, opts ProvisionerJobOp } output := "" switch log.Level { - case database.LogLevelTrace, database.LogLevelDebug: + case codersdk.LogLevelTrace, codersdk.LogLevelDebug: if !opts.Verbose { continue } output = Styles.Placeholder.Render(log.Output) - case database.LogLevelError: + case codersdk.LogLevelError: output = defaultStyles.Error.Render(log.Output) - case database.LogLevelWarn: + case codersdk.LogLevelWarn: output = Styles.Warn.Render(log.Output) - case database.LogLevelInfo: + case codersdk.LogLevelInfo: output = log.Output } jobMutex.Lock() diff --git a/cli/cliui/resources.go b/cli/cliui/resources.go index de60466f3e472..d6d047dc33af8 100644 --- a/cli/cliui/resources.go +++ b/cli/cliui/resources.go @@ -41,7 +41,7 @@ func WorkspaceResources(writer io.Writer, resources []codersdk.WorkspaceResource // Address on stop indexes whether a resource still exists when in the stopped transition. addressOnStop := map[string]codersdk.WorkspaceResource{} for _, resource := range resources { - if resource.Transition != database.WorkspaceTransitionStop { + if resource.Transition != codersdk.WorkspaceTransitionStop { continue } addressOnStop[resource.Type+"."+resource.Name] = resource diff --git a/cli/cliui/resources_test.go b/cli/cliui/resources_test.go index 3a782321a7a9c..e06b91545232b 100644 --- a/cli/cliui/resources_test.go +++ b/cli/cliui/resources_test.go @@ -22,7 +22,7 @@ func TestWorkspaceResources(t *testing.T) { err := cliui.WorkspaceResources(ptty.Output(), []codersdk.WorkspaceResource{{ Type: "google_compute_instance", Name: "dev", - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Agents: []codersdk.WorkspaceAgent{{ Name: "dev", Status: codersdk.WorkspaceAgentConnected, @@ -46,15 +46,15 @@ func TestWorkspaceResources(t *testing.T) { done := make(chan struct{}) go func() { err := cliui.WorkspaceResources(ptty.Output(), []codersdk.WorkspaceResource{{ - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Type: "google_compute_disk", Name: "root", }, { - Transition: database.WorkspaceTransitionStop, + Transition: codersdk.WorkspaceTransitionStop, Type: "google_compute_disk", Name: "root", }, { - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Type: "google_compute_instance", Name: "dev", Agents: []codersdk.WorkspaceAgent{{ @@ -65,7 +65,7 @@ func TestWorkspaceResources(t *testing.T) { Architecture: "amd64", }}, }, { - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Type: "kubernetes_pod", Name: "dev", Agents: []codersdk.WorkspaceAgent{{ diff --git a/cli/configssh.go b/cli/configssh.go index d63892f97aa9b..ed8f785b178de 100644 --- a/cli/configssh.go +++ b/cli/configssh.go @@ -15,7 +15,6 @@ import ( "github.com/coder/coder/cli/cliflag" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -86,7 +85,7 @@ func configSSH() *cobra.Command { return err } for _, resource := range resources { - if resource.Transition != database.WorkspaceTransitionStart { + if resource.Transition != codersdk.WorkspaceTransitionStart { continue } for _, agent := range resource.Agents { diff --git a/cli/delete.go b/cli/delete.go index 0f795c06c5435..8d1de59c2e653 100644 --- a/cli/delete.go +++ b/cli/delete.go @@ -6,7 +6,6 @@ import ( "github.com/spf13/cobra" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -33,7 +32,7 @@ func delete() *cobra.Command { } before := time.Now() build, err := client.CreateWorkspaceBuild(cmd.Context(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ - Transition: database.WorkspaceTransitionDelete, + Transition: codersdk.WorkspaceTransitionDelete, }) if err != nil { return err diff --git a/cli/list.go b/cli/list.go index 23454bc85674e..4d4b95fc6bc93 100644 --- a/cli/list.go +++ b/cli/list.go @@ -11,7 +11,6 @@ import ( "github.com/coder/coder/cli/cliui" "github.com/coder/coder/coderd/autobuild/schedule" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -66,17 +65,17 @@ func list() *cobra.Command { } switch workspace.LatestBuild.Transition { - case database.WorkspaceTransitionStart: + case codersdk.WorkspaceTransitionStart: status = "Running" if inProgress { status = "Starting" } - case database.WorkspaceTransitionStop: + case codersdk.WorkspaceTransitionStop: status = "Stopped" if inProgress { status = "Stopping" } - case database.WorkspaceTransitionDelete: + case codersdk.WorkspaceTransitionDelete: status = "Deleted" if inProgress { status = "Deleting" diff --git a/cli/portforward.go b/cli/portforward.go index 51206687f9cdb..d0e1897802f95 100644 --- a/cli/portforward.go +++ b/cli/portforward.go @@ -18,7 +18,6 @@ import ( coderagent "github.com/coder/coder/agent" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -80,7 +79,7 @@ func portForward() *cobra.Command { if err != nil { return err } - if workspace.LatestBuild.Transition != database.WorkspaceTransitionStart { + if workspace.LatestBuild.Transition != codersdk.WorkspaceTransitionStart { return xerrors.New("workspace must be in start transition to port-forward") } if workspace.LatestBuild.Job.CompletedAt == nil { diff --git a/cli/server.go b/cli/server.go index d00d24a8cb54d..6c861c116e87e 100644 --- a/cli/server.go +++ b/cli/server.go @@ -395,7 +395,7 @@ func server() *cobra.Command { for _, workspace := range workspaces { before := time.Now() build, err := client.CreateWorkspaceBuild(cmd.Context(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ - Transition: database.WorkspaceTransitionDelete, + Transition: codersdk.WorkspaceTransitionDelete, }) if err != nil { return xerrors.Errorf("delete workspace: %w", err) diff --git a/cli/ssh.go b/cli/ssh.go index 4dfd68463aa64..119d28446611c 100644 --- a/cli/ssh.go +++ b/cli/ssh.go @@ -22,7 +22,6 @@ import ( "github.com/coder/coder/cli/cliui" "github.com/coder/coder/coderd/autobuild/notify" "github.com/coder/coder/coderd/autobuild/schedule" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" "github.com/coder/coder/cryptorand" ) @@ -193,7 +192,7 @@ func getWorkspaceAndAgent(cmd *cobra.Command, client *codersdk.Client, orgID uui } } - if workspace.LatestBuild.Transition != database.WorkspaceTransitionStart { + if workspace.LatestBuild.Transition != codersdk.WorkspaceTransitionStart { return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, xerrors.New("workspace must be in start transition to ssh") } if workspace.LatestBuild.Job.CompletedAt == nil { @@ -202,7 +201,7 @@ func getWorkspaceAndAgent(cmd *cobra.Command, client *codersdk.Client, orgID uui return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, err } } - if workspace.LatestBuild.Transition == database.WorkspaceTransitionDelete { + if workspace.LatestBuild.Transition == codersdk.WorkspaceTransitionDelete { return codersdk.Workspace{}, codersdk.WorkspaceAgent{}, xerrors.Errorf("workspace %q is being deleted", workspace.Name) } diff --git a/cli/start.go b/cli/start.go index 223731045e38f..1c562ddd9d093 100644 --- a/cli/start.go +++ b/cli/start.go @@ -6,7 +6,6 @@ import ( "github.com/spf13/cobra" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -31,7 +30,7 @@ func start() *cobra.Command { } before := time.Now() build, err := client.CreateWorkspaceBuild(cmd.Context(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, }) if err != nil { return err diff --git a/cli/stop.go b/cli/stop.go index 1125901608413..af1f44da58af0 100644 --- a/cli/stop.go +++ b/cli/stop.go @@ -6,7 +6,6 @@ import ( "github.com/spf13/cobra" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" ) @@ -31,7 +30,7 @@ func stop() *cobra.Command { } before := time.Now() build, err := client.CreateWorkspaceBuild(cmd.Context(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ - Transition: database.WorkspaceTransitionStop, + Transition: codersdk.WorkspaceTransitionStop, }) if err != nil { return err diff --git a/cmd/cliui/main.go b/cmd/cliui/main.go index d02b7cd60c1da..52203893f2bf4 100644 --- a/cmd/cliui/main.go +++ b/cmd/cliui/main.go @@ -118,7 +118,7 @@ func main() { log := codersdk.ProvisionerJobLog{ CreatedAt: time.Now(), Output: fmt.Sprintf("Some log %d", count), - Level: database.LogLevelInfo, + Level: codersdk.LogLevelInfo, } switch { case count == 10: @@ -133,7 +133,7 @@ func main() { log.Stage = "Cleaning Up" } if count%5 == 0 { - log.Level = database.LogLevelWarn + log.Level = codersdk.LogLevelWarn } count++ if log.Output == "" && log.Stage == "" { @@ -188,15 +188,15 @@ func main() { RunE: func(cmd *cobra.Command, args []string) error { disconnected := database.Now().Add(-4 * time.Second) return cliui.WorkspaceResources(cmd.OutOrStdout(), []codersdk.WorkspaceResource{{ - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Type: "google_compute_disk", Name: "root", }, { - Transition: database.WorkspaceTransitionStop, + Transition: codersdk.WorkspaceTransitionStop, Type: "google_compute_disk", Name: "root", }, { - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Type: "google_compute_instance", Name: "dev", Agents: []codersdk.WorkspaceAgent{{ @@ -207,7 +207,7 @@ func main() { Architecture: "amd64", }}, }, { - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, Type: "kubernetes_pod", Name: "dev", Agents: []codersdk.WorkspaceAgent{{ diff --git a/coderd/autobuild/executor/lifecycle_executor_test.go b/coderd/autobuild/executor/lifecycle_executor_test.go index 38642cd54158b..729e86cbfeb85 100644 --- a/coderd/autobuild/executor/lifecycle_executor_test.go +++ b/coderd/autobuild/executor/lifecycle_executor_test.go @@ -55,7 +55,7 @@ func TestExecutorAutostartOK(t *testing.T) { ws := mustWorkspace(t, client, workspace.ID) require.NotEqual(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected a workspace build to occur") require.Equal(t, codersdk.ProvisionerJobSucceeded, ws.LatestBuild.Job.Status, "expected provisioner job to have succeeded") - require.Equal(t, database.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected latest transition to be start") + require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected latest transition to be start") } func TestExecutorAutostartTemplateUpdated(t *testing.T) { @@ -106,7 +106,7 @@ func TestExecutorAutostartTemplateUpdated(t *testing.T) { ws := mustWorkspace(t, client, workspace.ID) require.NotEqual(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected a workspace build to occur") require.Equal(t, codersdk.ProvisionerJobSucceeded, ws.LatestBuild.Job.Status, "expected provisioner job to have succeeded") - require.Equal(t, database.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected latest transition to be start") + require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected latest transition to be start") require.Equal(t, workspace.LatestBuild.TemplateVersionID, ws.LatestBuild.TemplateVersionID, "expected workspace build to be using the old template version") } @@ -125,7 +125,7 @@ func TestExecutorAutostartAlreadyRunning(t *testing.T) { ) // Given: we ensure the workspace is running - require.Equal(t, database.WorkspaceTransitionStart, workspace.LatestBuild.Transition) + require.Equal(t, codersdk.WorkspaceTransitionStart, workspace.LatestBuild.Transition) // Given: the workspace initially has autostart disabled require.Empty(t, workspace.AutostartSchedule) @@ -147,7 +147,7 @@ func TestExecutorAutostartAlreadyRunning(t *testing.T) { <-time.After(5 * time.Second) ws := mustWorkspace(t, client, workspace.ID) require.Equal(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected no further workspace builds to occur") - require.Equal(t, database.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected workspace to be running") + require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected workspace to be running") } func TestExecutorAutostartNotEnabled(t *testing.T) { @@ -195,7 +195,7 @@ func TestExecutorAutostopOK(t *testing.T) { workspace = mustProvisionWorkspace(t, client) ) // Given: workspace is running - require.Equal(t, database.WorkspaceTransitionStart, workspace.LatestBuild.Transition) + require.Equal(t, codersdk.WorkspaceTransitionStart, workspace.LatestBuild.Transition) // Given: the workspace initially has autostop disabled require.Empty(t, workspace.AutostopSchedule) @@ -218,7 +218,7 @@ func TestExecutorAutostopOK(t *testing.T) { ws := mustWorkspace(t, client, workspace.ID) require.NotEqual(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected a workspace build to occur") require.Equal(t, codersdk.ProvisionerJobSucceeded, ws.LatestBuild.Job.Status, "expected provisioner job to have succeeded") - require.Equal(t, database.WorkspaceTransitionStop, ws.LatestBuild.Transition, "expected workspace not to be running") + require.Equal(t, codersdk.WorkspaceTransitionStop, ws.LatestBuild.Transition, "expected workspace not to be running") } func TestExecutorAutostopAlreadyStopped(t *testing.T) { @@ -258,7 +258,7 @@ func TestExecutorAutostopAlreadyStopped(t *testing.T) { <-time.After(5 * time.Second) ws := mustWorkspace(t, client, workspace.ID) require.Equal(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected no further workspace builds to occur") - require.Equal(t, database.WorkspaceTransitionStop, ws.LatestBuild.Transition, "expected workspace not to be running") + require.Equal(t, codersdk.WorkspaceTransitionStop, ws.LatestBuild.Transition, "expected workspace not to be running") } func TestExecutorAutostopNotEnabled(t *testing.T) { @@ -274,7 +274,7 @@ func TestExecutorAutostopNotEnabled(t *testing.T) { ) // Given: workspace is running - require.Equal(t, database.WorkspaceTransitionStart, workspace.LatestBuild.Transition) + require.Equal(t, codersdk.WorkspaceTransitionStart, workspace.LatestBuild.Transition) // Given: the workspace has autostop disabled require.Empty(t, workspace.AutostopSchedule) @@ -289,7 +289,7 @@ func TestExecutorAutostopNotEnabled(t *testing.T) { <-time.After(5 * time.Second) ws := mustWorkspace(t, client, workspace.ID) require.Equal(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected no further workspace builds to occur") - require.Equal(t, database.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected workspace to be running") + require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected workspace to be running") } func TestExecutorWorkspaceDeleted(t *testing.T) { @@ -329,7 +329,7 @@ func TestExecutorWorkspaceDeleted(t *testing.T) { <-time.After(5 * time.Second) ws := mustWorkspace(t, client, workspace.ID) require.Equal(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected no further workspace builds to occur") - require.Equal(t, database.WorkspaceTransitionDelete, ws.LatestBuild.Transition, "expected workspace to be deleted") + require.Equal(t, codersdk.WorkspaceTransitionDelete, ws.LatestBuild.Transition, "expected workspace to be deleted") } func TestExecutorWorkspaceTooEarly(t *testing.T) { @@ -368,7 +368,7 @@ func TestExecutorWorkspaceTooEarly(t *testing.T) { <-time.After(5 * time.Second) ws := mustWorkspace(t, client, workspace.ID) require.Equal(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected no further workspace builds to occur") - require.Equal(t, database.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected workspace to be running") + require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected workspace to be running") } func TestExecutorAutostartMultipleOK(t *testing.T) { @@ -449,21 +449,21 @@ func mustTransitionWorkspace(t *testing.T, client *codersdk.Client, workspaceID ctx := context.Background() workspace, err := client.Workspace(ctx, workspaceID) require.NoError(t, err, "unexpected error fetching workspace") - require.Equal(t, workspace.LatestBuild.Transition, from, "expected workspace state: %s got: %s", from, workspace.LatestBuild.Transition) + require.Equal(t, workspace.LatestBuild.Transition, codersdk.WorkspaceTransition(from), "expected workspace state: %s got: %s", from, workspace.LatestBuild.Transition) template, err := client.Template(ctx, workspace.TemplateID) require.NoError(t, err, "fetch workspace template") build, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{ TemplateVersionID: template.ActiveVersionID, - Transition: to, + Transition: codersdk.WorkspaceTransition(to), }) require.NoError(t, err, "unexpected error transitioning workspace to %s", to) _ = coderdtest.AwaitWorkspaceBuildJob(t, client, build.ID) updated := mustWorkspace(t, client, workspace.ID) - require.Equal(t, to, updated.LatestBuild.Transition, "expected workspace to be in state %s but got %s", to, updated.LatestBuild.Transition) + require.Equal(t, codersdk.WorkspaceTransition(to), updated.LatestBuild.Transition, "expected workspace to be in state %s but got %s", to, updated.LatestBuild.Transition) return updated } diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index 74b3171336df6..45bc7236be2c7 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -302,7 +302,7 @@ func CreateWorkspaceBuild( workspace codersdk.Workspace, transition database.WorkspaceTransition) codersdk.WorkspaceBuild { req := codersdk.CreateWorkspaceBuildRequest{ - Transition: transition, + Transition: codersdk.WorkspaceTransition(transition), } build, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, req) require.NoError(t, err) diff --git a/coderd/provisionerjobs.go b/coderd/provisionerjobs.go index 5dd57211cbfe2..f3035a015ee3d 100644 --- a/coderd/provisionerjobs.go +++ b/coderd/provisionerjobs.go @@ -236,8 +236,8 @@ func convertProvisionerJobLog(provisionerJobLog database.ProvisionerJobLog) code return codersdk.ProvisionerJobLog{ ID: provisionerJobLog.ID, CreatedAt: provisionerJobLog.CreatedAt, - Source: provisionerJobLog.Source, - Level: provisionerJobLog.Level, + Source: codersdk.LogSource(provisionerJobLog.Source), + Level: codersdk.LogLevel(provisionerJobLog.Level), Stage: provisionerJobLog.Stage, Output: provisionerJobLog.Output, } diff --git a/coderd/templates.go b/coderd/templates.go index 4170850c60b3f..87cbc7874d1df 100644 --- a/coderd/templates.go +++ b/coderd/templates.go @@ -278,7 +278,7 @@ func convertTemplate(template database.Template, workspaceOwnerCount uint32) cod UpdatedAt: template.UpdatedAt, OrganizationID: template.OrganizationID, Name: template.Name, - Provisioner: template.Provisioner, + Provisioner: codersdk.ProvisionerType(template.Provisioner), ActiveVersionID: template.ActiveVersionID, WorkspaceOwnerCount: workspaceOwnerCount, Description: template.Description, diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index b3cf97462d969..d1215722011bf 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -248,7 +248,7 @@ func (api *api) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { Name: namesgenerator.GetRandomName(1), ProvisionerState: state, InitiatorID: apiKey.UserID, - Transition: createBuild.Transition, + Transition: database.WorkspaceTransition(createBuild.Transition), JobID: provisionerJob.ID, }) if err != nil { @@ -348,7 +348,7 @@ func convertWorkspaceBuild(workspaceBuild database.WorkspaceBuild, job codersdk. TemplateVersionID: workspaceBuild.TemplateVersionID, BuildNumber: workspaceBuild.BuildNumber, Name: workspaceBuild.Name, - Transition: workspaceBuild.Transition, + Transition: codersdk.WorkspaceTransition(workspaceBuild.Transition), InitiatorID: workspaceBuild.InitiatorID, Job: job, } @@ -359,7 +359,7 @@ func convertWorkspaceResource(resource database.WorkspaceResource, agents []code ID: resource.ID, CreatedAt: resource.CreatedAt, JobID: resource.JobID, - Transition: resource.Transition, + Transition: codersdk.WorkspaceTransition(resource.Transition), Type: resource.Type, Name: resource.Name, Agents: agents, diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index 58140b1d00e1d..a4794a3cf8bdc 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -12,7 +12,6 @@ import ( "github.com/coder/coder/coderd/autobuild/schedule" "github.com/coder/coder/coderd/coderdtest" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/codersdk" "github.com/coder/coder/provisioner/echo" "github.com/coder/coder/provisionersdk/proto" @@ -200,7 +199,7 @@ func TestPostWorkspaceBuild(t *testing.T) { workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) _, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ TemplateVersionID: uuid.New(), - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, }) require.Error(t, err) var apiErr *codersdk.Error @@ -240,7 +239,7 @@ func TestPostWorkspaceBuild(t *testing.T) { workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) _, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ TemplateVersionID: template.ActiveVersionID, - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, }) require.Error(t, err) var apiErr *codersdk.Error @@ -260,7 +259,7 @@ func TestPostWorkspaceBuild(t *testing.T) { coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) build, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ TemplateVersionID: template.ActiveVersionID, - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, }) require.NoError(t, err) require.Equal(t, workspace.LatestBuild.BuildNumber+1, build.BuildNumber) @@ -280,7 +279,7 @@ func TestPostWorkspaceBuild(t *testing.T) { wantState := []byte("something") build, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ TemplateVersionID: template.ActiveVersionID, - Transition: database.WorkspaceTransitionStart, + Transition: codersdk.WorkspaceTransitionStart, ProvisionerState: wantState, }) require.NoError(t, err) @@ -300,7 +299,7 @@ func TestPostWorkspaceBuild(t *testing.T) { workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) build, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ - Transition: database.WorkspaceTransitionDelete, + Transition: codersdk.WorkspaceTransitionDelete, }) require.NoError(t, err) require.Equal(t, workspace.LatestBuild.BuildNumber+1, build.BuildNumber) diff --git a/codersdk/parameters.go b/codersdk/parameters.go index 116008930bcff..647f5102d6b47 100644 --- a/codersdk/parameters.go +++ b/codersdk/parameters.go @@ -35,6 +35,13 @@ const ( ParameterDestinationSchemeProvisionerVariable ParameterDestinationScheme = "provisioner_variable" ) +type ParameterTypeSystem string + +const ( + ParameterTypeSystemNone ParameterTypeSystem = "none" + ParameterTypeSystemHCL ParameterTypeSystem = "hcl" +) + // Parameter represents a set value for the scope. type Parameter struct { ID uuid.UUID `db:"id" json:"id"` diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 1c906fa8c23b8..308e3a803f09c 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -2,6 +2,7 @@ package codersdk import ( "context" + "database/sql" "encoding/json" "fmt" "io" @@ -15,12 +16,35 @@ import ( "golang.org/x/xerrors" "nhooyr.io/websocket" - "github.com/coder/coder/coderd/database" "github.com/coder/coder/provisionerd/proto" "github.com/coder/coder/provisionersdk" ) -type ProvisionerDaemon database.ProvisionerDaemon +type LogSource string + +const ( + LogSourceProvisionerDaemon LogSource = "provisioner_daemon" + LogSourceProvisioner LogSource = "provisioner" +) + +type LogLevel string + +const ( + LogLevelTrace LogLevel = "trace" + LogLevelDebug LogLevel = "debug" + LogLevelInfo LogLevel = "info" + LogLevelWarn LogLevel = "warn" + LogLevelError LogLevel = "error" +) + +type ProvisionerDaemon struct { + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt sql.NullTime `json:"updated_at"` + OrganizationID uuid.NullUUID `json:"organization_id"` + Name string `json:"name"` + Provisioners []ProvisionerType `json:"provisioners"` +} // ProvisionerJobStaus represents the at-time state of a job. type ProvisionerJobStatus string @@ -54,12 +78,12 @@ type ProvisionerJob struct { } type ProvisionerJobLog struct { - ID uuid.UUID `json:"id"` - CreatedAt time.Time `json:"created_at"` - Source database.LogSource `json:"log_source"` - Level database.LogLevel `json:"log_level"` - Stage string `json:"stage"` - Output string `json:"output"` + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + Source LogSource `json:"log_source"` + Level LogLevel `json:"log_level"` + Stage string `json:"stage"` + Output string `json:"output"` } // ListenProvisionerDaemon returns the gRPC service for a provisioner daemon implementation. diff --git a/codersdk/templates.go b/codersdk/templates.go index 972a8a5b2b8dd..6ca9361ad89df 100644 --- a/codersdk/templates.go +++ b/codersdk/templates.go @@ -8,22 +8,20 @@ import ( "time" "github.com/google/uuid" - - "github.com/coder/coder/coderd/database" ) // Template is the JSON representation of a Coder template. This type matches the // database object for now, but is abstracted for ease of change later on. type Template struct { - ID uuid.UUID `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - OrganizationID uuid.UUID `json:"organization_id"` - Name string `json:"name"` - Provisioner database.ProvisionerType `json:"provisioner"` - ActiveVersionID uuid.UUID `json:"active_version_id"` - WorkspaceOwnerCount uint32 `json:"workspace_owner_count"` - Description string `json:"description"` + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + OrganizationID uuid.UUID `json:"organization_id"` + Name string `json:"name"` + Provisioner ProvisionerType `json:"provisioner"` + ActiveVersionID uuid.UUID `json:"active_version_id"` + WorkspaceOwnerCount uint32 `json:"workspace_owner_count"` + Description string `json:"description"` } type UpdateActiveTemplateVersion struct { diff --git a/codersdk/templateversions.go b/codersdk/templateversions.go index 64e3934c8732a..edc282bac94cd 100644 --- a/codersdk/templateversions.go +++ b/codersdk/templateversions.go @@ -8,9 +8,6 @@ import ( "time" "github.com/google/uuid" - - "github.com/coder/coder/coderd/database" - "github.com/coder/coder/coderd/parameter" ) // TemplateVersion represents a single version of a template. @@ -25,10 +22,39 @@ type TemplateVersion struct { } // TemplateVersionParameterSchema represents a parameter parsed from template version source. -type TemplateVersionParameterSchema database.ParameterSchema +type TemplateVersionParameterSchema struct { + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + JobID uuid.UUID `json:"job_id"` + Name string `json:"name"` + Description string `json:"description"` + DefaultSourceScheme ParameterSourceScheme `json:"default_source_scheme"` + DefaultSourceValue string `json:"default_source_value"` + AllowOverrideSource bool `json:"allow_override_source"` + DefaultDestinationScheme ParameterDestinationScheme `json:"default_destination_scheme"` + AllowOverrideDestination bool `json:"allow_override_destination"` + DefaultRefresh string `json:"default_refresh"` + RedisplayValue bool `json:"redisplay_value"` + ValidationError string `json:"validation_error"` + ValidationCondition string `json:"validation_condition"` + ValidationTypeSystem ParameterTypeSystem `json:"validation_type_system"` + ValidationValueType string `json:"validation_value_type"` +} // TemplateVersionParameter represents a computed parameter value. -type TemplateVersionParameter parameter.ComputedValue +type TemplateVersionParameter struct { + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Scope ParameterScope `json:"scope"` + ScopeID uuid.UUID `json:"scope_id"` + Name string `json:"name"` + SourceScheme ParameterSourceScheme `json:"source_scheme"` + SourceValue string `json:"source_value"` + DestinationScheme ParameterDestinationScheme `json:"destination_scheme"` + SchemaID uuid.UUID `json:"schema_id"` + DefaultSourceValue bool `json:"default_source_value"` +} // TemplateVersion returns a template version by ID. func (c *Client) TemplateVersion(ctx context.Context, id uuid.UUID) (TemplateVersion, error) { diff --git a/codersdk/workspacebuilds.go b/codersdk/workspacebuilds.go index 83e2a4b535cf0..073fae6e88bf3 100644 --- a/codersdk/workspacebuilds.go +++ b/codersdk/workspacebuilds.go @@ -9,23 +9,29 @@ import ( "time" "github.com/google/uuid" +) + +type WorkspaceTransition string - "github.com/coder/coder/coderd/database" +const ( + WorkspaceTransitionStart WorkspaceTransition = "start" + WorkspaceTransitionStop WorkspaceTransition = "stop" + WorkspaceTransitionDelete WorkspaceTransition = "delete" ) // WorkspaceBuild is an at-point representation of a workspace state. // BuildNumbers start at 1 and increase by 1 for each subsequent build type WorkspaceBuild struct { - ID uuid.UUID `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - WorkspaceID uuid.UUID `json:"workspace_id"` - TemplateVersionID uuid.UUID `json:"template_version_id"` - BuildNumber int32 `json:"build_number"` - Name string `json:"name"` - Transition database.WorkspaceTransition `json:"transition"` - InitiatorID uuid.UUID `json:"initiator_id"` - Job ProvisionerJob `json:"job"` + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + WorkspaceID uuid.UUID `json:"workspace_id"` + TemplateVersionID uuid.UUID `json:"template_version_id"` + BuildNumber int32 `json:"build_number"` + Name string `json:"name"` + Transition WorkspaceTransition `json:"transition"` + InitiatorID uuid.UUID `json:"initiator_id"` + Job ProvisionerJob `json:"job"` } // WorkspaceBuild returns a single workspace build for a workspace. diff --git a/codersdk/workspaceresources.go b/codersdk/workspaceresources.go index f1dc5d74a04f9..97ae03186cf39 100644 --- a/codersdk/workspaceresources.go +++ b/codersdk/workspaceresources.go @@ -8,8 +8,6 @@ import ( "time" "github.com/google/uuid" - - "github.com/coder/coder/coderd/database" ) type WorkspaceAgentStatus string @@ -21,13 +19,13 @@ const ( ) type WorkspaceResource struct { - ID uuid.UUID `json:"id"` - CreatedAt time.Time `json:"created_at"` - JobID uuid.UUID `json:"job_id"` - Transition database.WorkspaceTransition `json:"workspace_transition"` - Type string `json:"type"` - Name string `json:"name"` - Agents []WorkspaceAgent `json:"agents,omitempty"` + ID uuid.UUID `json:"id"` + CreatedAt time.Time `json:"created_at"` + JobID uuid.UUID `json:"job_id"` + Transition WorkspaceTransition `json:"workspace_transition"` + Type string `json:"type"` + Name string `json:"name"` + Agents []WorkspaceAgent `json:"agents,omitempty"` } type WorkspaceAgent struct { diff --git a/codersdk/workspaces.go b/codersdk/workspaces.go index 6e4ab7afd6e57..18c36ab1aead9 100644 --- a/codersdk/workspaces.go +++ b/codersdk/workspaces.go @@ -9,8 +9,6 @@ import ( "github.com/google/uuid" "golang.org/x/xerrors" - - "github.com/coder/coder/coderd/database" ) // Workspace is a deployment of a template. It references a specific @@ -32,10 +30,10 @@ type Workspace struct { // CreateWorkspaceBuildRequest provides options to update the latest workspace build. type CreateWorkspaceBuildRequest struct { - TemplateVersionID uuid.UUID `json:"template_version_id,omitempty"` - Transition database.WorkspaceTransition `json:"transition" validate:"oneof=create start stop delete,required"` - DryRun bool `json:"dry_run,omitempty"` - ProvisionerState []byte `json:"state,omitempty"` + TemplateVersionID uuid.UUID `json:"template_version_id,omitempty"` + Transition WorkspaceTransition `json:"transition" validate:"oneof=create start stop delete,required"` + DryRun bool `json:"dry_run,omitempty"` + ProvisionerState []byte `json:"state,omitempty"` } // Workspace returns a single workspace. From de0d26af6c5d75a92e00fdf5a04e82f103c29ad0 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 18 May 2022 16:01:01 -0500 Subject: [PATCH 03/11] Merge rules files into 1 --- gorules/codersdk.go | 14 -------------- gorules/{errors.go => rules.go} | 9 +++++++++ 2 files changed, 9 insertions(+), 14 deletions(-) delete mode 100644 gorules/codersdk.go rename gorules/{errors.go => rules.go} (61%) diff --git a/gorules/codersdk.go b/gorules/codersdk.go deleted file mode 100644 index 28c800ab5fb2d..0000000000000 --- a/gorules/codersdk.go +++ /dev/null @@ -1,14 +0,0 @@ -package gorules - -import ( - "github.com/quasilyte/go-ruleguard/dsl" -) - -// databaseImport enforces not importing any database types into /codersdk. -//nolint:unused,deadcode,varnamelen -func databaseImport(m dsl.Matcher) { - m.Import("github.com/coder/coder/coderd/database") - m.Match("database.$_"). - Report("Do not import any database types into codersdk"). - Where(m.File().PkgPath.Matches("github.com/coder/coder/codersdk")) -} diff --git a/gorules/errors.go b/gorules/rules.go similarity index 61% rename from gorules/errors.go rename to gorules/rules.go index 8c26dd914a7ed..e77fd6ba3d92b 100644 --- a/gorules/errors.go +++ b/gorules/rules.go @@ -20,3 +20,12 @@ func xerrors(m dsl.Matcher) { Suggest("xerrors.New($msg)"). Report("Use xerrors to provide additional stacktrace information!") } + +// databaseImport enforces not importing any database types into /codersdk. +//nolint:unused,deadcode,varnamelen +func databaseImport(m dsl.Matcher) { + m.Import("github.com/coder/coder/coderd/database") + m.Match("database.$_"). + Report("Do not import any database types into codersdk"). + Where(m.File().PkgPath.Matches("github.com/coder/coder/codersdk")) +} From 3456244e32927a8b235a292f26143ed532710fb7 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 18 May 2022 17:30:01 -0500 Subject: [PATCH 04/11] Move gorules to /script --- .golangci.yaml | 2 +- cli/create.go | 2 +- cli/templatecreate.go | 2 +- gorules/doc.go | 13 ------------- {gorules => scripts}/rules.go | 12 ++++++++++++ 5 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 gorules/doc.go rename {gorules => scripts}/rules.go (65%) diff --git a/.golangci.yaml b/.golangci.yaml index 3b937765060a5..db3f8b6acc3d1 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -103,7 +103,7 @@ linters-settings: settings: ruleguard: failOn: all - rules: '${configDir}/gorules/*.go' + rules: '${configDir}/scripts/rules.go' staticcheck: # https://staticcheck.io/docs/options#checks diff --git a/cli/create.go b/cli/create.go index 5661a8dcee95b..cbfa5ec9f4713 100644 --- a/cli/create.go +++ b/cli/create.go @@ -134,7 +134,7 @@ func create() *cobra.Command { Name: parameterSchema.Name, SourceValue: value, SourceScheme: codersdk.ParameterSourceSchemeData, - DestinationScheme: codersdk.ParameterDestinationScheme(parameterSchema.DefaultDestinationScheme), + DestinationScheme: parameterSchema.DefaultDestinationScheme, }) } _, _ = fmt.Fprintln(cmd.OutOrStdout()) diff --git a/cli/templatecreate.go b/cli/templatecreate.go index 0ea2bd7861ec1..bf09c098f54a4 100644 --- a/cli/templatecreate.go +++ b/cli/templatecreate.go @@ -193,7 +193,7 @@ func createValidTemplateVersion(cmd *cobra.Command, client *codersdk.Client, org Name: parameterSchema.Name, SourceValue: value, SourceScheme: codersdk.ParameterSourceSchemeData, - DestinationScheme: codersdk.ParameterDestinationScheme(parameterSchema.DefaultDestinationScheme), + DestinationScheme: parameterSchema.DefaultDestinationScheme, }) _, _ = fmt.Fprintln(cmd.OutOrStdout()) } diff --git a/gorules/doc.go b/gorules/doc.go deleted file mode 100644 index 90193740cc78e..0000000000000 --- a/gorules/doc.go +++ /dev/null @@ -1,13 +0,0 @@ -// Package gorules defines custom lint rules for ruleguard. -// -// golangci-lint runs these rules via go-critic, which includes support -// for ruleguard. All Go files in this directory define lint rules -// in the Ruleguard DSL; see: -// -// - https://go-ruleguard.github.io/by-example/ -// - https://pkg.go.dev/github.com/quasilyte/go-ruleguard/dsl -// -// You run one of the following commands to execute your go rules only: -// golangci-lint run -// golangci-lint run --disable-all --enable=gocritic -package gorules diff --git a/gorules/rules.go b/scripts/rules.go similarity index 65% rename from gorules/rules.go rename to scripts/rules.go index e77fd6ba3d92b..ef1c31da2c8ec 100644 --- a/gorules/rules.go +++ b/scripts/rules.go @@ -1,3 +1,15 @@ +// Package gorules defines custom lint rules for ruleguard. +// +// golangci-lint runs these rules via go-critic, which includes support +// for ruleguard. All Go files in this directory define lint rules +// in the Ruleguard DSL; see: +// +// - https://go-ruleguard.github.io/by-example/ +// - https://pkg.go.dev/github.com/quasilyte/go-ruleguard/dsl +// +// You run one of the following commands to execute your go rules only: +// golangci-lint run +// golangci-lint run --disable-all --enable=gocritic package gorules import ( From 8c5d66ee3f5fa26554ca99ba7ed726f18d5e6dd2 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 18 May 2022 17:46:04 -0500 Subject: [PATCH 05/11] Fix unit test assert types --- coderd/autobuild/executor/lifecycle_executor_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coderd/autobuild/executor/lifecycle_executor_test.go b/coderd/autobuild/executor/lifecycle_executor_test.go index 729e86cbfeb85..2d2c10e30c9fe 100644 --- a/coderd/autobuild/executor/lifecycle_executor_test.go +++ b/coderd/autobuild/executor/lifecycle_executor_test.go @@ -418,13 +418,13 @@ func TestExecutorAutostartMultipleOK(t *testing.T) { ws := mustWorkspace(t, client, workspace.ID) require.NotEqual(t, workspace.LatestBuild.ID, ws.LatestBuild.ID, "expected a workspace build to occur") require.Equal(t, codersdk.ProvisionerJobSucceeded, ws.LatestBuild.Job.Status, "expected provisioner job to have succeeded") - require.Equal(t, database.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected latest transition to be start") + require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "expected latest transition to be start") builds, err := client.WorkspaceBuilds(ctx, codersdk.WorkspaceBuildsRequest{WorkspaceID: ws.ID}) require.NoError(t, err, "fetch list of workspace builds from primary") // One build to start, one stop transition, and one autostart. No more. - require.Equal(t, database.WorkspaceTransitionStart, builds[0].Transition) - require.Equal(t, database.WorkspaceTransitionStop, builds[1].Transition) - require.Equal(t, database.WorkspaceTransitionStart, builds[2].Transition) + require.Equal(t, codersdk.WorkspaceTransitionStart, builds[0].Transition) + require.Equal(t, codersdk.WorkspaceTransitionStop, builds[1].Transition) + require.Equal(t, codersdk.WorkspaceTransitionStart, builds[2].Transition) require.Len(t, builds, 3, "unexpected number of builds for workspace from primary") // Builds are returned most recent first. From db536c045b0fb062eae5c90eb663a289a7bae3e2 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 19 May 2022 08:57:17 -0500 Subject: [PATCH 06/11] Make gen --- site/src/api/typesGenerated.ts | 136 ++++++++++++++++++--------------- 1 file changed, 75 insertions(+), 61 deletions(-) diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 792ef3961313c..7523706cedcfd 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -49,17 +49,15 @@ export interface CreateOrganizationRequest { readonly name: string } -// From codersdk/parameters.go:38:6 +// From codersdk/parameters.go:58:6 export interface CreateParameterRequest { readonly name: string readonly source_value: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterSourceScheme") - readonly source_scheme: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterDestinationScheme") - readonly destination_scheme: string + readonly source_scheme: ParameterSourceScheme + readonly destination_scheme: ParameterDestinationScheme } -// From codersdk/organizations.go:38:6 +// From codersdk/organizations.go:49:6 export interface CreateTemplateRequest { readonly name: string readonly description?: string @@ -67,14 +65,12 @@ export interface CreateTemplateRequest { readonly parameter_values?: CreateParameterRequest[] } -// From codersdk/organizations.go:25:6 +// From codersdk/organizations.go:36:6 export interface CreateTemplateVersionRequest { readonly template_id?: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ProvisionerStorageMethod") - readonly storage_method: string + readonly storage_method: ProvisionerStorageMethod readonly storage_source: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ProvisionerType") - readonly provisioner: string + readonly provisioner: ProvisionerType readonly parameter_values?: CreateParameterRequest[] } @@ -89,13 +85,12 @@ export interface CreateUserRequest { // From codersdk/workspaces.go:34:6 export interface CreateWorkspaceBuildRequest { readonly template_version_id?: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.WorkspaceTransition") - readonly transition: string + readonly transition: WorkspaceTransition readonly dry_run?: boolean readonly state?: string } -// From codersdk/organizations.go:56:6 +// From codersdk/organizations.go:67:6 export interface CreateWorkspaceRequest { readonly template_id: string readonly name: string @@ -131,7 +126,7 @@ export interface LoginWithPasswordResponse { readonly session_token: string } -// From codersdk/organizations.go:17:6 +// From codersdk/organizations.go:28:6 export interface Organization { readonly id: string readonly name: string @@ -155,7 +150,7 @@ export interface Pagination { readonly offset?: number } -// From codersdk/parameters.go:26:6 +// From codersdk/parameters.go:46:6 export interface Parameter { readonly id: string readonly created_at: string @@ -163,24 +158,21 @@ export interface Parameter { readonly scope: ParameterScope readonly scope_id: string readonly name: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterSourceScheme") - readonly source_scheme: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterDestinationScheme") - readonly destination_scheme: string + readonly source_scheme: ParameterSourceScheme + readonly destination_scheme: ParameterDestinationScheme } -// From codersdk/provisionerdaemons.go:23:6 +// From codersdk/provisionerdaemons.go:40:6 export interface ProvisionerDaemon { readonly id: string readonly created_at: string readonly updated_at?: string readonly organization_id?: string readonly name: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ProvisionerType") - readonly provisioners: string[] + readonly provisioners: ProvisionerType[] } -// From codersdk/provisionerdaemons.go:46:6 +// From codersdk/provisionerdaemons.go:70:6 export interface ProvisionerJob { readonly id: string readonly created_at: string @@ -191,14 +183,12 @@ export interface ProvisionerJob { readonly worker_id?: string } -// From codersdk/provisionerdaemons.go:56:6 +// From codersdk/provisionerdaemons.go:80:6 export interface ProvisionerJobLog { readonly id: string readonly created_at: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.LogSource") - readonly log_source: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.LogLevel") - readonly log_level: string + readonly log_source: LogSource + readonly log_level: LogLevel readonly stage: string readonly output: string } @@ -209,21 +199,20 @@ export interface Role { readonly display_name: string } -// From codersdk/templates.go:17:6 +// From codersdk/templates.go:15:6 export interface Template { readonly id: string readonly created_at: string readonly updated_at: string readonly organization_id: string readonly name: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ProvisionerType") - readonly provisioner: string + readonly provisioner: ProvisionerType readonly active_version_id: string readonly workspace_owner_count: number readonly description: string } -// From codersdk/templateversions.go:17:6 +// From codersdk/templateversions.go:14:6 export interface TemplateVersion { readonly id: string readonly template_id?: string @@ -234,44 +223,47 @@ export interface TemplateVersion { readonly readme: string } -// From codersdk/templateversions.go:31:6 +// From codersdk/templateversions.go:45:6 export interface TemplateVersionParameter { - // Named type "github.com/coder/coder/coderd/database.ParameterValue" unknown, using "any" - // eslint-disable-next-line @typescript-eslint/no-explicit-any - readonly ParameterValue: any + readonly id: string + readonly created_at: string + readonly updated_at: string + readonly scope: ParameterScope + readonly scope_id: string + readonly name: string + readonly source_scheme: ParameterSourceScheme + readonly source_value: string + readonly destination_scheme: ParameterDestinationScheme readonly schema_id: string readonly default_source_value: boolean } -// From codersdk/templateversions.go:28:6 +// From codersdk/templateversions.go:25:6 export interface TemplateVersionParameterSchema { readonly id: string readonly created_at: string readonly job_id: string readonly name: string readonly description: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterSourceScheme") - readonly default_source_scheme: string + readonly default_source_scheme: ParameterSourceScheme readonly default_source_value: string readonly allow_override_source: boolean - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterDestinationScheme") - readonly default_destination_scheme: string + readonly default_destination_scheme: ParameterDestinationScheme readonly allow_override_destination: boolean readonly default_refresh: string readonly redisplay_value: boolean readonly validation_error: string readonly validation_condition: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.ParameterTypeSystem") - readonly validation_type_system: string + readonly validation_type_system: ParameterTypeSystem readonly validation_value_type: string } -// From codersdk/templates.go:75:6 +// From codersdk/templates.go:73:6 export interface TemplateVersionsByTemplateRequest extends Pagination { readonly template_id: string } -// From codersdk/templates.go:29:6 +// From codersdk/templates.go:27:6 export interface UpdateActiveTemplateVersion { readonly id: string } @@ -292,12 +284,12 @@ export interface UpdateUserProfileRequest { readonly username: string } -// From codersdk/workspaces.go:102:6 +// From codersdk/workspaces.go:132:6 export interface UpdateWorkspaceAutostartRequest { readonly schedule: string } -// From codersdk/workspaces.go:122:6 +// From codersdk/workspaces.go:152:6 export interface UpdateWorkspaceAutostopRequest { readonly schedule: string } @@ -368,7 +360,7 @@ export interface Workspace { readonly autostop_schedule: string } -// From codersdk/workspaceresources.go:33:6 +// From codersdk/workspaceresources.go:31:6 export interface WorkspaceAgent { readonly id: string readonly created_at: string @@ -392,7 +384,7 @@ export interface WorkspaceAgentAuthenticateResponse { readonly session_token: string } -// From codersdk/workspaceresources.go:59:6 +// From codersdk/workspaceresources.go:57:6 export interface WorkspaceAgentInstanceMetadata { readonly jail_orchestrator: string readonly operating_system: string @@ -405,7 +397,7 @@ export interface WorkspaceAgentInstanceMetadata { readonly vnc: boolean } -// From codersdk/workspaceresources.go:51:6 +// From codersdk/workspaceresources.go:49:6 export interface WorkspaceAgentResourceMetadata { readonly memory_total: number readonly disk_total: number @@ -414,7 +406,7 @@ export interface WorkspaceAgentResourceMetadata { readonly cpu_mhz: number } -// From codersdk/workspacebuilds.go:18:6 +// From codersdk/workspacebuilds.go:24:6 export interface WorkspaceBuild { readonly id: string readonly created_at: string @@ -423,8 +415,7 @@ export interface WorkspaceBuild { readonly template_version_id: string readonly build_number: number readonly name: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.WorkspaceTransition") - readonly transition: string + readonly transition: WorkspaceTransition readonly initiator_id: string readonly job: ProvisionerJob } @@ -434,32 +425,55 @@ export interface WorkspaceBuildsRequest extends Pagination { readonly WorkspaceID: string } -// From codersdk/workspaces.go:141:6 +// From codersdk/workspaces.go:171:6 export interface WorkspaceFilter { readonly OrganizationID: string readonly Owner: string } -// From codersdk/workspaceresources.go:23:6 +// From codersdk/workspaceresources.go:21:6 export interface WorkspaceResource { readonly id: string readonly created_at: string readonly job_id: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.WorkspaceTransition") - readonly workspace_transition: string + readonly workspace_transition: WorkspaceTransition readonly type: string readonly name: string readonly agents?: WorkspaceAgent[] } -// From codersdk/parameters.go:16:6 +// From codersdk/provisionerdaemons.go:30:6 +export type LogLevel = "debug" | "error" | "info" | "trace" | "warn" + +// From codersdk/provisionerdaemons.go:23:6 +export type LogSource = "provisioner" | "provisioner_daemon" + +// From codersdk/parameters.go:30:6 +export type ParameterDestinationScheme = "environment_variable" | "none" | "provisioner_variable" + +// From codersdk/parameters.go:14:6 export type ParameterScope = "organization" | "template" | "user" | "workspace" -// From codersdk/provisionerdaemons.go:26:6 +// From codersdk/parameters.go:23:6 +export type ParameterSourceScheme = "data" | "none" + +// From codersdk/parameters.go:38:6 +export type ParameterTypeSystem = "hcl" | "none" + +// From codersdk/provisionerdaemons.go:50:6 export type ProvisionerJobStatus = "canceled" | "canceling" | "failed" | "pending" | "running" | "succeeded" +// From codersdk/organizations.go:14:6 +export type ProvisionerStorageMethod = "file" + +// From codersdk/organizations.go:20:6 +export type ProvisionerType = "echo" | "terraform" + // From codersdk/users.go:17:6 export type UserStatus = "active" | "suspended" -// From codersdk/workspaceresources.go:15:6 +// From codersdk/workspaceresources.go:13:6 export type WorkspaceAgentStatus = "connected" | "connecting" | "disconnected" + +// From codersdk/workspacebuilds.go:14:6 +export type WorkspaceTransition = "delete" | "start" | "stop" From 7811333f32f4af72385995dfe599d3c54a2b25cd Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 19 May 2022 09:19:31 -0500 Subject: [PATCH 07/11] Make gen --- site/src/api/typesGenerated.ts | 93 +++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 35 deletions(-) diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index abafdf87d9bda..7e586cfdf7081 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -49,7 +49,7 @@ export interface CreateOrganizationRequest { readonly name: string } -// From codersdk/parameters.go:58:6 +// From codersdk/parameters.go:81:6 export interface CreateParameterRequest { readonly name: string readonly source_value: string @@ -162,6 +162,27 @@ export interface Parameter { readonly destination_scheme: ParameterDestinationScheme } +// From codersdk/parameters.go:57:6 +export interface ParameterSchema { + readonly id: string + readonly created_at: string + readonly job_id: string + readonly name: string + readonly description: string + readonly default_source_scheme: ParameterSourceScheme + readonly default_source_value: string + readonly allow_override_source: boolean + readonly default_destination_scheme: ParameterDestinationScheme + readonly allow_override_destination: boolean + readonly default_refresh: string + readonly redisplay_value: boolean + readonly validation_error: string + readonly validation_condition: string + readonly validation_type_system: string + readonly validation_value_type: string + readonly validation_contains: string[] +} + // From codersdk/provisionerdaemons.go:40:6 export interface ProvisionerDaemon { readonly id: string @@ -223,7 +244,7 @@ export interface TemplateVersion { readonly readme: string } -// From codersdk/templateversions.go:45:6 +// From codersdk/templateversions.go:25:6 export interface TemplateVersionParameter { readonly id: string readonly created_at: string @@ -238,26 +259,6 @@ export interface TemplateVersionParameter { readonly default_source_value: boolean } -// From codersdk/templateversions.go:25:6 -export interface TemplateVersionParameterSchema { - readonly id: string - readonly created_at: string - readonly job_id: string - readonly name: string - readonly description: string - readonly default_source_scheme: ParameterSourceScheme - readonly default_source_value: string - readonly allow_override_source: boolean - readonly default_destination_scheme: ParameterDestinationScheme - readonly allow_override_destination: boolean - readonly default_refresh: string - readonly redisplay_value: boolean - readonly validation_error: string - readonly validation_condition: string - readonly validation_type_system: ParameterTypeSystem - readonly validation_value_type: string -} - // From codersdk/templates.go:73:6 export interface TemplateVersionsByTemplateRequest extends Pagination { readonly template_id: string @@ -360,7 +361,7 @@ export interface Workspace { readonly autostop_schedule: string } -// From codersdk/workspaceresources.go:33:6 +// From codersdk/workspaceresources.go:31:6 export interface WorkspaceAgent { readonly id: string readonly created_at: string @@ -384,7 +385,7 @@ export interface WorkspaceAgentAuthenticateResponse { readonly session_token: string } -// From codersdk/workspaceresources.go:59:6 +// From codersdk/workspaceresources.go:57:6 export interface WorkspaceAgentInstanceMetadata { readonly jail_orchestrator: string readonly operating_system: string @@ -397,7 +398,7 @@ export interface WorkspaceAgentInstanceMetadata { readonly vnc: boolean } -// From codersdk/workspaceresources.go:51:6 +// From codersdk/workspaceresources.go:49:6 export interface WorkspaceAgentResourceMetadata { readonly memory_total: number readonly disk_total: number @@ -406,7 +407,7 @@ export interface WorkspaceAgentResourceMetadata { readonly cpu_mhz: number } -// From codersdk/workspacebuilds.go:18:6 +// From codersdk/workspacebuilds.go:24:6 export interface WorkspaceBuild { readonly id: string readonly created_at: string @@ -415,8 +416,7 @@ export interface WorkspaceBuild { readonly template_version_id: string readonly build_number: number readonly name: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.WorkspaceTransition") - readonly transition: string + readonly transition: WorkspaceTransition readonly initiator_id: string readonly job: ProvisionerJob } @@ -426,32 +426,55 @@ export interface WorkspaceBuildsRequest extends Pagination { readonly WorkspaceID: string } -// From codersdk/workspaces.go:141:6 +// From codersdk/workspaces.go:171:6 export interface WorkspaceFilter { readonly OrganizationID: string readonly Owner: string } -// From codersdk/workspaceresources.go:23:6 +// From codersdk/workspaceresources.go:21:6 export interface WorkspaceResource { readonly id: string readonly created_at: string readonly job_id: string - // This is likely an enum in an external package ("github.com/coder/coder/coderd/database.WorkspaceTransition") - readonly workspace_transition: string + readonly workspace_transition: WorkspaceTransition readonly type: string readonly name: string readonly agents?: WorkspaceAgent[] } -// From codersdk/parameters.go:16:6 +// From codersdk/provisionerdaemons.go:30:6 +export type LogLevel = "debug" | "error" | "info" | "trace" | "warn" + +// From codersdk/provisionerdaemons.go:23:6 +export type LogSource = "provisioner" | "provisioner_daemon" + +// From codersdk/parameters.go:30:6 +export type ParameterDestinationScheme = "environment_variable" | "none" | "provisioner_variable" + +// From codersdk/parameters.go:14:6 export type ParameterScope = "organization" | "template" | "user" | "workspace" -// From codersdk/provisionerdaemons.go:26:6 +// From codersdk/parameters.go:23:6 +export type ParameterSourceScheme = "data" | "none" + +// From codersdk/parameters.go:38:6 +export type ParameterTypeSystem = "hcl" | "none" + +// From codersdk/provisionerdaemons.go:50:6 export type ProvisionerJobStatus = "canceled" | "canceling" | "failed" | "pending" | "running" | "succeeded" +// From codersdk/organizations.go:14:6 +export type ProvisionerStorageMethod = "file" + +// From codersdk/organizations.go:20:6 +export type ProvisionerType = "echo" | "terraform" + // From codersdk/users.go:17:6 export type UserStatus = "active" | "suspended" -// From codersdk/workspaceresources.go:15:6 +// From codersdk/workspaceresources.go:13:6 export type WorkspaceAgentStatus = "connected" | "connecting" | "disconnected" + +// From codersdk/workspacebuilds.go:14:6 +export type WorkspaceTransition = "delete" | "start" | "stop" From d2a7506db762a9939ae98de94f287768b3846698 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 19 May 2022 10:55:12 -0500 Subject: [PATCH 08/11] Make gen --- site/src/api/typesGenerated.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 7e586cfdf7081..3a64d14942f97 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -285,12 +285,12 @@ export interface UpdateUserProfileRequest { readonly username: string } -// From codersdk/workspaces.go:132:6 +// From codersdk/workspaces.go:141:6 export interface UpdateWorkspaceAutostartRequest { readonly schedule: string } -// From codersdk/workspaces.go:152:6 +// From codersdk/workspaces.go:161:6 export interface UpdateWorkspaceAutostopRequest { readonly schedule: string } @@ -421,12 +421,12 @@ export interface WorkspaceBuild { readonly job: ProvisionerJob } -// From codersdk/workspaces.go:55:6 +// From codersdk/workspaces.go:64:6 export interface WorkspaceBuildsRequest extends Pagination { readonly WorkspaceID: string } -// From codersdk/workspaces.go:171:6 +// From codersdk/workspaces.go:180:6 export interface WorkspaceFilter { readonly OrganizationID: string readonly Owner: string From ae8014e86c00599a862493e4ca2a685a8819d5c8 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 19 May 2022 11:02:46 -0500 Subject: [PATCH 09/11] Fix type --- coderd/workspaces_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index d0be0f9bdf4e7..af43c6efdfd0d 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -54,7 +54,7 @@ func TestWorkspace(t *testing.T) { // Delete the workspace build, err := client.CreateWorkspaceBuild(context.Background(), workspace.ID, codersdk.CreateWorkspaceBuildRequest{ - Transition: database.WorkspaceTransitionDelete, + Transition: codersdk.WorkspaceTransitionDelete, }) require.NoError(t, err, "delete the workspace") coderdtest.AwaitWorkspaceBuildJob(t, client, build.ID) From 34537afd022efea5e16e72150843385ac896abb3 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 19 May 2022 11:38:59 -0500 Subject: [PATCH 10/11] Fix ts mocks --- site/src/testHelpers/entities.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 8387e6b7b671c..e34b268f22e7a 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -62,7 +62,7 @@ export const MockProvisioner: TypesGen.ProvisionerDaemon = { created_at: "", id: "test-provisioner", name: "Test Provisioner", - provisioners: [], + provisioners: ["echo"], } export const MockProvisionerJob: TypesGen.ProvisionerJob = { @@ -84,7 +84,7 @@ export const MockTemplate: TypesGen.Template = { updated_at: "2022-05-18T17:39:01.382927298Z", organization_id: MockOrganization.id, name: "Test Template", - provisioner: MockProvisioner.id, + provisioner: MockProvisioner.provisioners[0], active_version_id: "", workspace_owner_count: 1, description: "This is a test description.", @@ -122,13 +122,13 @@ export const MockWorkspaceBuild: TypesGen.WorkspaceBuild = { workspace_id: "test-workspace", } -export const MockWorkspaceBuildStop = { +export const MockWorkspaceBuildStop: TypesGen.WorkspaceBuild = { ...MockWorkspaceBuild, id: "2", transition: "stop", } -export const MockWorkspaceBuildDelete = { +export const MockWorkspaceBuildDelete: TypesGen.WorkspaceBuild = { ...MockWorkspaceBuild, id: "3", transition: "delete", From 2cc2ffd5233f8c61fe4940c79a22f30816a04995 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 19 May 2022 12:38:26 -0500 Subject: [PATCH 11/11] Fix ts issue --- site/src/forms/CreateTemplateForm.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site/src/forms/CreateTemplateForm.tsx b/site/src/forms/CreateTemplateForm.tsx index 5242ad1a0c533..1163d992c1062 100644 --- a/site/src/forms/CreateTemplateForm.tsx +++ b/site/src/forms/CreateTemplateForm.tsx @@ -43,7 +43,8 @@ export const CreateTemplateForm: React.FC = ({ const form: FormikContextType = useFormik({ initialValues: { - provisioner: provisioners[0].id, + // This value is currently harcoded until it is needed. It will likely never be used and deleted soon. + provisioner: "echo", organizationId: organizations[0].name, name: "", },