From 7f2a99fec5486b9df4deb672b7a5e164351ce705 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Sat, 5 Feb 2022 01:01:30 +0000 Subject: [PATCH 1/2] chore: Rename ProjectHistory to ProjectVersion Version more accurately represents version storage. This forks from the WorkspaceHistory name, but I think it's easier to understand Workspace history. --- coderd/coderd.go | 16 +- coderd/projecthistory.go | 86 ++-- coderd/projecthistory_test.go | 16 +- coderd/projectparameter/projectparameter.go | 52 +-- .../projectparameter/projectparameter_test.go | 18 +- coderd/projects_test.go | 8 +- coderd/provisionerdaemons.go | 34 +- coderd/workspacehistory.go | 30 +- coderd/workspacehistory_test.go | 32 +- coderd/workspacehistorylogs_test.go | 12 +- codersdk/projects.go | 42 +- codersdk/projects_test.go | 12 +- codersdk/workspaces.go | 10 +- codersdk/workspaces_test.go | 2 +- database/databasefake/databasefake.go | 84 ++-- database/dump.sql | 36 +- database/migrations/000002_projects.up.sql | 12 +- database/migrations/000003_workspaces.up.sql | 2 +- database/models.go | 46 +- database/querier.go | 14 +- database/query.sql | 36 +- database/query.sql.go | 420 +++++++++--------- httpmw/projecthistoryparam.go | 32 +- httpmw/projecthistoryparam_test.go | 18 +- provisionerd/proto/provisionerd.pb.go | 24 +- provisionerd/proto/provisionerd.proto | 4 +- provisionerd/provisionerd.go | 4 +- 27 files changed, 551 insertions(+), 551 deletions(-) diff --git a/coderd/coderd.go b/coderd/coderd.go index 0aedb1d0c6847..cd60b044e9d33 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -66,13 +66,13 @@ func New(options *Options) http.Handler { r.Get("/", api.parametersByProject) r.Post("/", api.postParametersByProject) }) - r.Route("/history", func(r chi.Router) { - r.Get("/", api.projectHistoryByOrganization) - r.Post("/", api.postProjectHistoryByOrganization) - r.Route("/{projecthistory}", func(r chi.Router) { - r.Use(httpmw.ExtractProjectHistoryParam(api.Database)) - r.Get("/", api.projectHistoryByOrganizationAndName) - r.Get("/parameters", api.projectHistoryParametersByOrganizationAndName) + r.Route("/versions", func(r chi.Router) { + r.Get("/", api.projectVersionsByOrganization) + r.Post("/", api.postProjectVersionByOrganization) + r.Route("/{projectversion}", func(r chi.Router) { + r.Use(httpmw.ExtractProjectVersionParam(api.Database)) + r.Get("/", api.projectVersionByOrganizationAndName) + r.Get("/parameters", api.projectVersionParametersByOrganizationAndName) }) }) }) @@ -91,7 +91,7 @@ func New(options *Options) http.Handler { r.Route("/{workspace}", func(r chi.Router) { r.Use(httpmw.ExtractWorkspaceParam(options.Database)) r.Get("/", api.workspaceByUser) - r.Route("/history", func(r chi.Router) { + r.Route("/version", func(r chi.Router) { r.Post("/", api.postWorkspaceHistoryByUser) r.Get("/", api.workspaceHistoryByUser) r.Route("/{workspacehistory}", func(r chi.Router) { diff --git a/coderd/projecthistory.go b/coderd/projecthistory.go index 36d4a38f95736..ac1906f2be069 100644 --- a/coderd/projecthistory.go +++ b/coderd/projecthistory.go @@ -20,8 +20,8 @@ import ( "github.com/coder/coder/httpmw" ) -// ProjectHistory is the JSON representation of Coder project version history. -type ProjectHistory struct { +// ProjectVersion represents a single version of a project. +type ProjectVersion struct { ID uuid.UUID `json:"id"` ProjectID uuid.UUID `json:"project_id"` CreatedAt time.Time `json:"created_at"` @@ -31,11 +31,11 @@ type ProjectHistory struct { Import ProvisionerJob `json:"import"` } -// ProjectParameter represents a parameter parsed from project history source on creation. +// ProjectParameter represents a parameter parsed from project version source on creation. type ProjectParameter struct { ID uuid.UUID `json:"id"` CreatedAt time.Time `json:"created_at"` - ProjectHistoryID uuid.UUID `json:"project_history_id"` + ProjectVersionID uuid.UUID `json:"project_version_id"` Name string `json:"name"` Description string `json:"description,omitempty"` DefaultSourceScheme database.ParameterSourceScheme `json:"default_source_scheme,omitempty"` @@ -52,28 +52,28 @@ type ProjectParameter struct { ValidationValueType string `json:"validation_value_type,omitempty"` } -// CreateProjectHistoryRequest enables callers to create a new Project Version. -type CreateProjectHistoryRequest struct { +// CreateProjectVersionRequest enables callers to create a new Project Version. +type CreateProjectVersionRequest struct { StorageMethod database.ProjectStorageMethod `json:"storage_method" validate:"oneof=inline-archive,required"` StorageSource []byte `json:"storage_source" validate:"max=1048576,required"` } -// Lists history for a single project. -func (api *api) projectHistoryByOrganization(rw http.ResponseWriter, r *http.Request) { +// Lists versions for a single project. +func (api *api) projectVersionsByOrganization(rw http.ResponseWriter, r *http.Request) { project := httpmw.ProjectParam(r) - history, err := api.Database.GetProjectHistoryByProjectID(r.Context(), project.ID) + version, err := api.Database.GetProjectVersionByProjectID(r.Context(), project.ID) if errors.Is(err, sql.ErrNoRows) { err = nil } if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ - Message: fmt.Sprintf("get project history: %s", err), + Message: fmt.Sprintf("get project version: %s", err), }) return } - apiHistory := make([]ProjectHistory, 0) - for _, version := range history { + apiVersion := make([]ProjectVersion, 0) + for _, version := range version { job, err := api.Database.GetProvisionerJobByID(r.Context(), version.ImportJobID) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ @@ -81,16 +81,16 @@ func (api *api) projectHistoryByOrganization(rw http.ResponseWriter, r *http.Req }) return } - apiHistory = append(apiHistory, convertProjectHistory(version, job)) + apiVersion = append(apiVersion, convertProjectVersion(version, job)) } render.Status(r, http.StatusOK) - render.JSON(rw, r, apiHistory) + render.JSON(rw, r, apiVersion) } -// Return a single project history by organization and name. -func (api *api) projectHistoryByOrganizationAndName(rw http.ResponseWriter, r *http.Request) { - projectHistory := httpmw.ProjectHistoryParam(r) - job, err := api.Database.GetProvisionerJobByID(r.Context(), projectHistory.ImportJobID) +// Return a single project version by organization and name. +func (api *api) projectVersionByOrganizationAndName(rw http.ResponseWriter, r *http.Request) { + projectVersion := httpmw.ProjectVersionParam(r) + job, err := api.Database.GetProvisionerJobByID(r.Context(), projectVersion.ImportJobID) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ Message: fmt.Sprintf("get provisioner job: %s", err), @@ -98,14 +98,14 @@ func (api *api) projectHistoryByOrganizationAndName(rw http.ResponseWriter, r *h return } render.Status(r, http.StatusOK) - render.JSON(rw, r, convertProjectHistory(projectHistory, job)) + render.JSON(rw, r, convertProjectVersion(projectVersion, job)) } // Creates a new version of the project. An import job is queued to parse // the storage method provided. Once completed, the import job will specify // the version as latest. -func (api *api) postProjectHistoryByOrganization(rw http.ResponseWriter, r *http.Request) { - var createProjectVersion CreateProjectHistoryRequest +func (api *api) postProjectVersionByOrganization(rw http.ResponseWriter, r *http.Request) { + var createProjectVersion CreateProjectVersionRequest if !httpapi.Read(rw, r, &createProjectVersion) { return } @@ -131,11 +131,11 @@ func (api *api) postProjectHistoryByOrganization(rw http.ResponseWriter, r *http project := httpmw.ProjectParam(r) var provisionerJob database.ProvisionerJob - var projectHistory database.ProjectHistory + var projectVersion database.ProjectVersion err := api.Database.InTx(func(db database.Store) error { - projectHistoryID := uuid.New() + projectVersionID := uuid.New() input, err := json.Marshal(projectImportJob{ - ProjectHistoryID: projectHistoryID, + ProjectVersionID: projectVersionID, }) if err != nil { return xerrors.Errorf("marshal import job: %w", err) @@ -155,8 +155,8 @@ func (api *api) postProjectHistoryByOrganization(rw http.ResponseWriter, r *http return xerrors.Errorf("insert provisioner job: %w", err) } - projectHistory, err = api.Database.InsertProjectHistory(r.Context(), database.InsertProjectHistoryParams{ - ID: projectHistoryID, + projectVersion, err = api.Database.InsertProjectVersion(r.Context(), database.InsertProjectVersionParams{ + ID: projectVersionID, ProjectID: project.ID, CreatedAt: database.Now(), UpdatedAt: database.Now(), @@ -166,7 +166,7 @@ func (api *api) postProjectHistoryByOrganization(rw http.ResponseWriter, r *http ImportJobID: provisionerJob.ID, }) if err != nil { - return xerrors.Errorf("insert project history: %s", err) + return xerrors.Errorf("insert project version: %s", err) } return nil }) @@ -178,12 +178,12 @@ func (api *api) postProjectHistoryByOrganization(rw http.ResponseWriter, r *http } render.Status(r, http.StatusCreated) - render.JSON(rw, r, convertProjectHistory(projectHistory, provisionerJob)) + render.JSON(rw, r, convertProjectVersion(projectVersion, provisionerJob)) } -func (api *api) projectHistoryParametersByOrganizationAndName(rw http.ResponseWriter, r *http.Request) { - projectHistory := httpmw.ProjectHistoryParam(r) - job, err := api.Database.GetProvisionerJobByID(r.Context(), projectHistory.ImportJobID) +func (api *api) projectVersionParametersByOrganizationAndName(rw http.ResponseWriter, r *http.Request) { + projectVersion := httpmw.ProjectVersionParam(r) + job, err := api.Database.GetProvisionerJobByID(r.Context(), projectVersion.ImportJobID) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ Message: fmt.Sprintf("get provisioner job: %s", err), @@ -204,7 +204,7 @@ func (api *api) projectHistoryParametersByOrganizationAndName(rw http.ResponseWr return } - parameters, err := api.Database.GetProjectParametersByHistoryID(r.Context(), projectHistory.ID) + parameters, err := api.Database.GetProjectParametersByVersionID(r.Context(), projectVersion.ID) if errors.Is(err, sql.ErrNoRows) { err = nil parameters = []database.ProjectParameter{} @@ -225,14 +225,14 @@ func (api *api) projectHistoryParametersByOrganizationAndName(rw http.ResponseWr render.JSON(rw, r, apiParameters) } -func convertProjectHistory(history database.ProjectHistory, job database.ProvisionerJob) ProjectHistory { - return ProjectHistory{ - ID: history.ID, - ProjectID: history.ProjectID, - CreatedAt: history.CreatedAt, - UpdatedAt: history.UpdatedAt, - Name: history.Name, - StorageMethod: history.StorageMethod, +func convertProjectVersion(version database.ProjectVersion, job database.ProvisionerJob) ProjectVersion { + return ProjectVersion{ + ID: version.ID, + ProjectID: version.ProjectID, + CreatedAt: version.CreatedAt, + UpdatedAt: version.UpdatedAt, + Name: version.Name, + StorageMethod: version.StorageMethod, Import: convertProvisionerJob(job), } } @@ -241,7 +241,7 @@ func convertProjectParameter(parameter database.ProjectParameter) ProjectParamet return ProjectParameter{ ID: parameter.ID, CreatedAt: parameter.CreatedAt, - ProjectHistoryID: parameter.ProjectHistoryID, + ProjectVersionID: parameter.ProjectVersionID, Name: parameter.Name, Description: parameter.Description, DefaultSourceScheme: parameter.DefaultSourceScheme, @@ -259,6 +259,6 @@ func convertProjectParameter(parameter database.ProjectParameter) ProjectParamet } } -func projectHistoryLogsChannel(projectHistoryID uuid.UUID) string { - return fmt.Sprintf("project-history-logs:%s", projectHistoryID) +func projectVersionLogsChannel(projectVersionID uuid.UUID) string { + return fmt.Sprintf("project-version-logs:%s", projectVersionID) } diff --git a/coderd/projecthistory_test.go b/coderd/projecthistory_test.go index a0cf932886835..69d8d011b42d6 100644 --- a/coderd/projecthistory_test.go +++ b/coderd/projecthistory_test.go @@ -15,7 +15,7 @@ import ( "github.com/coder/coder/provisionersdk/proto" ) -func TestProjectHistory(t *testing.T) { +func TestProjectVersion(t *testing.T) { t.Parallel() t.Run("NoHistory", func(t *testing.T) { @@ -27,12 +27,12 @@ func TestProjectHistory(t *testing.T) { Provisioner: database.ProvisionerTypeEcho, }) require.NoError(t, err) - versions, err := server.Client.ListProjectHistory(context.Background(), user.Organization, project.Name) + versions, err := server.Client.ProjectVersions(context.Background(), user.Organization, project.Name) require.NoError(t, err) require.Len(t, versions, 0) }) - t.Run("CreateHistory", func(t *testing.T) { + t.Run("CreateVersion", func(t *testing.T) { t.Parallel() server := coderdtest.New(t) user := server.RandomInitialUser(t) @@ -47,16 +47,16 @@ func TestProjectHistory(t *testing.T) { }, }}, nil) require.NoError(t, err) - history, err := server.Client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + version, err := server.Client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: data, }) require.NoError(t, err) - versions, err := server.Client.ListProjectHistory(context.Background(), user.Organization, project.Name) + versions, err := server.Client.ProjectVersions(context.Background(), user.Organization, project.Name) require.NoError(t, err) require.Len(t, versions, 1) - _, err = server.Client.ProjectHistory(context.Background(), user.Organization, project.Name, history.Name) + _, err = server.Client.ProjectVersion(context.Background(), user.Organization, project.Name, version.Name) require.NoError(t, err) }) @@ -78,7 +78,7 @@ func TestProjectHistory(t *testing.T) { require.NoError(t, err) _, err = writer.Write(make([]byte, 1<<21)) require.NoError(t, err) - _, err = server.Client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + _, err = server.Client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: buffer.Bytes(), }) @@ -94,7 +94,7 @@ func TestProjectHistory(t *testing.T) { Provisioner: database.ProvisionerTypeEcho, }) require.NoError(t, err) - _, err = server.Client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + _, err = server.Client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: []byte{}, }) diff --git a/coderd/projectparameter/projectparameter.go b/coderd/projectparameter/projectparameter.go index 95975849e0ddf..0ba65eae8f168 100644 --- a/coderd/projectparameter/projectparameter.go +++ b/coderd/projectparameter/projectparameter.go @@ -17,7 +17,7 @@ import ( type Scope struct { OrganizationID string ProjectID uuid.UUID - ProjectHistoryID uuid.UUID + ProjectVersionID uuid.UUID UserID string WorkspaceID uuid.UUID WorkspaceHistoryID uuid.UUID @@ -40,21 +40,21 @@ func Compute(ctx context.Context, db database.Store, scope Scope) ([]Value, erro compute := &compute{ db: db, computedParameterByName: map[string]Value{}, - projectHistoryParametersByName: map[string]database.ProjectParameter{}, + projectVersionParametersByName: map[string]database.ProjectParameter{}, } // All parameters for the project version! - projectHistoryParameters, err := db.GetProjectParametersByHistoryID(ctx, scope.ProjectHistoryID) + projectVersionParameters, err := db.GetProjectParametersByVersionID(ctx, scope.ProjectVersionID) if errors.Is(err, sql.ErrNoRows) { - // This occurs when the project history has defined + // This occurs when the project version has defined // no parameters, so we have nothing to compute! return []Value{}, nil } if err != nil { return nil, xerrors.Errorf("get project parameters: %w", err) } - for _, projectHistoryParameter := range projectHistoryParameters { - compute.projectHistoryParametersByName[projectHistoryParameter.Name] = projectHistoryParameter + for _, projectVersionParameter := range projectVersionParameters { + compute.projectVersionParametersByName[projectVersionParameter.Name] = projectVersionParameter } // Organization parameters come first! @@ -67,33 +67,33 @@ func Compute(ctx context.Context, db database.Store, scope Scope) ([]Value, erro } // Default project parameter values come second! - for _, projectHistoryParameter := range projectHistoryParameters { - if !projectHistoryParameter.DefaultSourceValue.Valid { + for _, projectVersionParameter := range projectVersionParameters { + if !projectVersionParameter.DefaultSourceValue.Valid { continue } - if !projectHistoryParameter.DefaultDestinationValue.Valid { + if !projectVersionParameter.DefaultDestinationValue.Valid { continue } - destinationScheme, err := convertDestinationScheme(projectHistoryParameter.DefaultDestinationScheme) + destinationScheme, err := convertDestinationScheme(projectVersionParameter.DefaultDestinationScheme) if err != nil { - return nil, xerrors.Errorf("convert default destination scheme for project history parameter %q: %w", projectHistoryParameter.Name, err) + return nil, xerrors.Errorf("convert default destination scheme for project version parameter %q: %w", projectVersionParameter.Name, err) } - switch projectHistoryParameter.DefaultSourceScheme { + switch projectVersionParameter.DefaultSourceScheme { case database.ParameterSourceSchemeData: - compute.computedParameterByName[projectHistoryParameter.Name] = Value{ + compute.computedParameterByName[projectVersionParameter.Name] = Value{ Proto: &proto.ParameterValue{ DestinationScheme: destinationScheme, - Name: projectHistoryParameter.DefaultDestinationValue.String, - Value: projectHistoryParameter.DefaultSourceValue.String, + Name: projectVersionParameter.DefaultDestinationValue.String, + Value: projectVersionParameter.DefaultSourceValue.String, }, DefaultValue: true, Scope: database.ParameterScopeProject, ScopeID: scope.ProjectID.String(), } default: - return nil, xerrors.Errorf("unsupported source scheme for project history parameter %q: %q", projectHistoryParameter.Name, string(projectHistoryParameter.DefaultSourceScheme)) + return nil, xerrors.Errorf("unsupported source scheme for project version parameter %q: %q", projectVersionParameter.Name, string(projectVersionParameter.DefaultSourceScheme)) } } @@ -124,13 +124,13 @@ func Compute(ctx context.Context, db database.Store, scope Scope) ([]Value, erro return nil, err } - for _, projectHistoryParameter := range compute.projectHistoryParametersByName { - if _, ok := compute.computedParameterByName[projectHistoryParameter.Name]; ok { + for _, projectVersionParameter := range compute.projectVersionParametersByName { + if _, ok := compute.computedParameterByName[projectVersionParameter.Name]; ok { continue } return nil, NoValueError{ - ParameterID: projectHistoryParameter.ID, - ParameterName: projectHistoryParameter.Name, + ParameterID: projectVersionParameter.ID, + ParameterName: projectVersionParameter.Name, } } @@ -144,7 +144,7 @@ func Compute(ctx context.Context, db database.Store, scope Scope) ([]Value, erro type compute struct { db database.Store computedParameterByName map[string]Value - projectHistoryParametersByName map[string]database.ProjectParameter + projectVersionParametersByName map[string]database.ProjectParameter } // Validates and computes the value for parameters; setting the value on "parameterByName". @@ -158,8 +158,8 @@ func (c *compute) inject(ctx context.Context, scopeParams database.GetParameterV } for _, scopedParameter := range scopedParameters { - projectHistoryParameter, hasProjectHistoryParameter := c.projectHistoryParametersByName[scopedParameter.Name] - if !hasProjectHistoryParameter { + projectVersionParameter, hasProjectVersionParameter := c.projectVersionParametersByName[scopedParameter.Name] + if !hasProjectVersionParameter { // Don't inject parameters that aren't defined by the project. continue } @@ -169,7 +169,7 @@ func (c *compute) inject(ctx context.Context, scopeParams database.GetParameterV // If a parameter already exists, check if this variable can override it. // Injection hierarchy is the responsibility of the caller. This check ensures // project parameters cannot be overridden if already set. - if !projectHistoryParameter.AllowOverrideSource && scopedParameter.Scope != database.ParameterScopeProject { + if !projectVersionParameter.AllowOverrideSource && scopedParameter.Scope != database.ParameterScopeProject { continue } } @@ -181,7 +181,7 @@ func (c *compute) inject(ctx context.Context, scopeParams database.GetParameterV switch scopedParameter.SourceScheme { case database.ParameterSourceSchemeData: - c.computedParameterByName[projectHistoryParameter.Name] = Value{ + c.computedParameterByName[projectVersionParameter.Name] = Value{ Proto: &proto.ParameterValue{ DestinationScheme: destinationScheme, Name: scopedParameter.SourceValue, @@ -189,7 +189,7 @@ func (c *compute) inject(ctx context.Context, scopeParams database.GetParameterV }, } default: - return xerrors.Errorf("unsupported source scheme: %q", string(projectHistoryParameter.DefaultSourceScheme)) + return xerrors.Errorf("unsupported source scheme: %q", string(projectVersionParameter.DefaultSourceScheme)) } } return nil diff --git a/coderd/projectparameter/projectparameter_test.go b/coderd/projectparameter/projectparameter_test.go index 5b562175497e6..1cc2cd80f95ae 100644 --- a/coderd/projectparameter/projectparameter_test.go +++ b/coderd/projectparameter/projectparameter_test.go @@ -21,7 +21,7 @@ func TestCompute(t *testing.T) { return projectparameter.Scope{ OrganizationID: uuid.New().String(), ProjectID: uuid.New(), - ProjectHistoryID: uuid.New(), + ProjectVersionID: uuid.New(), UserID: uuid.NewString(), } } @@ -29,7 +29,7 @@ func TestCompute(t *testing.T) { AllowOverrideSource bool AllowOverrideDestination bool DefaultDestinationScheme database.ParameterDestinationScheme - ProjectHistoryID uuid.UUID + ProjectVersionID uuid.UUID } generateProjectParameter := func(t *testing.T, db database.Store, opts projectParameterOptions) database.ProjectParameter { if opts.DefaultDestinationScheme == "" { @@ -44,7 +44,7 @@ func TestCompute(t *testing.T) { param, err := db.InsertProjectParameter(context.Background(), database.InsertProjectParameterParams{ ID: uuid.New(), Name: name, - ProjectHistoryID: opts.ProjectHistoryID, + ProjectVersionID: opts.ProjectVersionID, DefaultSourceScheme: database.ParameterSourceSchemeData, DefaultSourceValue: sql.NullString{ String: sourceValue, @@ -68,7 +68,7 @@ func TestCompute(t *testing.T) { scope := generateScope() parameter, err := db.InsertProjectParameter(context.Background(), database.InsertProjectParameterParams{ ID: uuid.New(), - ProjectHistoryID: scope.ProjectHistoryID, + ProjectVersionID: scope.ProjectVersionID, Name: "hey", }) require.NoError(t, err) @@ -85,7 +85,7 @@ func TestCompute(t *testing.T) { db := databasefake.New() scope := generateScope() parameter := generateProjectParameter(t, db, projectParameterOptions{ - ProjectHistoryID: scope.ProjectHistoryID, + ProjectVersionID: scope.ProjectVersionID, DefaultDestinationScheme: database.ParameterDestinationSchemeProvisionerVariable, }) values, err := projectparameter.Compute(context.Background(), db, scope) @@ -105,7 +105,7 @@ func TestCompute(t *testing.T) { db := databasefake.New() scope := generateScope() parameter := generateProjectParameter(t, db, projectParameterOptions{ - ProjectHistoryID: scope.ProjectHistoryID, + ProjectVersionID: scope.ProjectVersionID, }) _, err := db.InsertParameterValue(context.Background(), database.InsertParameterValueParams{ ID: uuid.New(), @@ -131,7 +131,7 @@ func TestCompute(t *testing.T) { db := databasefake.New() scope := generateScope() parameter := generateProjectParameter(t, db, projectParameterOptions{ - ProjectHistoryID: scope.ProjectHistoryID, + ProjectVersionID: scope.ProjectVersionID, }) value, err := db.InsertParameterValue(context.Background(), database.InsertParameterValueParams{ ID: uuid.New(), @@ -157,7 +157,7 @@ func TestCompute(t *testing.T) { db := databasefake.New() scope := generateScope() parameter := generateProjectParameter(t, db, projectParameterOptions{ - ProjectHistoryID: scope.ProjectHistoryID, + ProjectVersionID: scope.ProjectVersionID, }) _, err := db.InsertParameterValue(context.Background(), database.InsertParameterValueParams{ ID: uuid.New(), @@ -183,7 +183,7 @@ func TestCompute(t *testing.T) { scope := generateScope() parameter := generateProjectParameter(t, db, projectParameterOptions{ AllowOverrideSource: true, - ProjectHistoryID: scope.ProjectHistoryID, + ProjectVersionID: scope.ProjectVersionID, }) _, err := db.InsertParameterValue(context.Background(), database.InsertParameterValueParams{ ID: uuid.New(), diff --git a/coderd/projects_test.go b/coderd/projects_test.go index 14ed1af4f03b1..b5bbc03766522 100644 --- a/coderd/projects_test.go +++ b/coderd/projects_test.go @@ -148,17 +148,17 @@ func TestProjects(t *testing.T) { }, }}, nil) require.NoError(t, err) - history, err := server.Client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + version, err := server.Client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: data, }) require.NoError(t, err) require.Eventually(t, func() bool { - projectHistory, err := server.Client.ProjectHistory(context.Background(), user.Organization, project.Name, history.Name) + projectVersion, err := server.Client.ProjectVersion(context.Background(), user.Organization, project.Name, version.Name) require.NoError(t, err) - return projectHistory.Import.Status.Completed() + return projectVersion.Import.Status.Completed() }, 15*time.Second, 10*time.Millisecond) - params, err := server.Client.ProjectHistoryParameters(context.Background(), user.Organization, project.Name, history.Name) + params, err := server.Client.ProjectVersionParameters(context.Background(), user.Organization, project.Name, version.Name) require.NoError(t, err) require.Len(t, params, 1) require.Equal(t, "example", params[0].Name) diff --git a/coderd/provisionerdaemons.go b/coderd/provisionerdaemons.go index 445f9ed1710ac..69886a6848a40 100644 --- a/coderd/provisionerdaemons.go +++ b/coderd/provisionerdaemons.go @@ -106,7 +106,7 @@ type workspaceProvisionJob struct { // The input for a "project_import" job. type projectImportJob struct { - ProjectHistoryID uuid.UUID `json:"project_history_id"` + ProjectVersionID uuid.UUID `json:"project_version_id"` } // Implementation of the provisioner daemon protobuf server. @@ -182,7 +182,7 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty ProjectName: project.Name, UserName: user.Username, } - var projectHistory database.ProjectHistory + var projectVersion database.ProjectVersion switch job.Type { case database.ProvisionerJobTypeWorkspaceProvision: var input workspaceProvisionJob @@ -198,16 +198,16 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty if err != nil { return nil, failJob(fmt.Sprintf("get workspace: %s", err)) } - projectHistory, err = server.Database.GetProjectHistoryByID(ctx, workspaceHistory.ProjectHistoryID) + projectVersion, err = server.Database.GetProjectVersionByID(ctx, workspaceHistory.ProjectVersionID) if err != nil { - return nil, failJob(fmt.Sprintf("get project history: %s", err)) + return nil, failJob(fmt.Sprintf("get project version: %s", err)) } // Compute parameters for the workspace to consume. parameters, err := projectparameter.Compute(ctx, server.Database, projectparameter.Scope{ OrganizationID: organization.ID, ProjectID: project.ID, - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, UserID: user.ID, WorkspaceID: workspace.ID, WorkspaceHistoryID: workspaceHistory.ID, @@ -249,23 +249,23 @@ func (server *provisionerdServer) AcquireJob(ctx context.Context, _ *proto.Empty if err != nil { return nil, failJob(fmt.Sprintf("unmarshal job input %q: %s", job.Input, err)) } - projectHistory, err = server.Database.GetProjectHistoryByID(ctx, input.ProjectHistoryID) + projectVersion, err = server.Database.GetProjectVersionByID(ctx, input.ProjectVersionID) if err != nil { - return nil, failJob(fmt.Sprintf("get project history: %s", err)) + return nil, failJob(fmt.Sprintf("get project version: %s", err)) } protoJob.Type = &proto.AcquiredJob_ProjectImport_{ ProjectImport: &proto.AcquiredJob_ProjectImport{ - ProjectHistoryId: projectHistory.ID.String(), - ProjectHistoryName: projectHistory.Name, + ProjectVersionId: projectVersion.ID.String(), + ProjectVersionName: projectVersion.Name, }, } } - switch projectHistory.StorageMethod { + switch projectVersion.StorageMethod { case database.ProjectStorageMethodInlineArchive: - protoJob.ProjectSourceArchive = projectHistory.StorageSource + protoJob.ProjectSourceArchive = projectVersion.StorageSource default: - return nil, failJob(fmt.Sprintf("unsupported storage source: %q", projectHistory.StorageMethod)) + return nil, failJob(fmt.Sprintf("unsupported storage source: %q", projectVersion.StorageMethod)) } return protoJob, err @@ -309,8 +309,8 @@ func (server *provisionerdServer) UpdateJob(stream proto.DRPCProvisionerDaemon_U if err != nil { return xerrors.Errorf("unmarshal job input %q: %s", job.Input, err) } - insertParams := database.InsertProjectHistoryLogsParams{ - ProjectHistoryID: input.ProjectHistoryID, + insertParams := database.InsertProjectVersionLogsParams{ + ProjectVersionID: input.ProjectVersionID, } for _, log := range update.ProjectImportLogs { logLevel, err := convertLogLevel(log.Level) @@ -327,7 +327,7 @@ func (server *provisionerdServer) UpdateJob(stream proto.DRPCProvisionerDaemon_U insertParams.Source = append(insertParams.Source, logSource) insertParams.Output = append(insertParams.Output, log.Output) } - logs, err := server.Database.InsertProjectHistoryLogs(stream.Context(), insertParams) + logs, err := server.Database.InsertProjectVersionLogs(stream.Context(), insertParams) if err != nil { return xerrors.Errorf("insert project logs: %w", err) } @@ -335,7 +335,7 @@ func (server *provisionerdServer) UpdateJob(stream proto.DRPCProvisionerDaemon_U if err != nil { return xerrors.Errorf("marshal project log: %w", err) } - err = server.Pubsub.Publish(projectHistoryLogsChannel(input.ProjectHistoryID), data) + err = server.Pubsub.Publish(projectVersionLogsChannel(input.ProjectVersionID), data) if err != nil { return xerrors.Errorf("publish history log: %w", err) } @@ -442,7 +442,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr projectParameter := database.InsertProjectParameterParams{ ID: uuid.New(), CreatedAt: database.Now(), - ProjectHistoryID: input.ProjectHistoryID, + ProjectVersionID: input.ProjectVersionID, Name: protoParameter.Name, Description: protoParameter.Description, RedisplayValue: protoParameter.RedisplayValue, diff --git a/coderd/workspacehistory.go b/coderd/workspacehistory.go index 59ba0ed9e7905..8ebdee7df1702 100644 --- a/coderd/workspacehistory.go +++ b/coderd/workspacehistory.go @@ -25,7 +25,7 @@ type WorkspaceHistory struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` WorkspaceID uuid.UUID `json:"workspace_id"` - ProjectHistoryID uuid.UUID `json:"project_history_id"` + ProjectVersionID uuid.UUID `json:"project_version_id"` BeforeID uuid.UUID `json:"before_id"` AfterID uuid.UUID `json:"after_id"` Name string `json:"name"` @@ -36,7 +36,7 @@ type WorkspaceHistory struct { // CreateWorkspaceHistoryRequest provides options to update the latest workspace history. type CreateWorkspaceHistoryRequest struct { - ProjectHistoryID uuid.UUID `json:"project_history_id" validate:"required"` + ProjectVersionID uuid.UUID `json:"project_version_id" validate:"required"` Transition database.WorkspaceTransition `json:"transition" validate:"oneof=create start stop delete,required"` } @@ -47,12 +47,12 @@ func (api *api) postWorkspaceHistoryByUser(rw http.ResponseWriter, r *http.Reque } user := httpmw.UserParam(r) workspace := httpmw.WorkspaceParam(r) - projectHistory, err := api.Database.GetProjectHistoryByID(r.Context(), createBuild.ProjectHistoryID) + projectVersion, err := api.Database.GetProjectVersionByID(r.Context(), createBuild.ProjectVersionID) if errors.Is(err, sql.ErrNoRows) { httpapi.Write(rw, http.StatusBadRequest, httpapi.Response{ - Message: "project history not found", + Message: "project version not found", Errors: []httpapi.Error{{ - Field: "project_history_id", + Field: "project_version_id", Code: "exists", }}, }) @@ -60,36 +60,36 @@ func (api *api) postWorkspaceHistoryByUser(rw http.ResponseWriter, r *http.Reque } if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ - Message: fmt.Sprintf("get project history: %s", err), + Message: fmt.Sprintf("get project version: %s", err), }) return } - projectHistoryJob, err := api.Database.GetProvisionerJobByID(r.Context(), projectHistory.ImportJobID) + projectVersionJob, err := api.Database.GetProvisionerJobByID(r.Context(), projectVersion.ImportJobID) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ Message: fmt.Sprintf("get provisioner job: %s", err), }) return } - projectHistoryJobStatus := convertProvisionerJob(projectHistoryJob).Status - switch projectHistoryJobStatus { + projectVersionJobStatus := convertProvisionerJob(projectVersionJob).Status + switch projectVersionJobStatus { case ProvisionerJobStatusPending, ProvisionerJobStatusRunning: httpapi.Write(rw, http.StatusPreconditionFailed, httpapi.Response{ - Message: fmt.Sprintf("The provided project history is %s. Wait for it to complete importing!", projectHistoryJobStatus), + Message: fmt.Sprintf("The provided project version is %s. Wait for it to complete importing!", projectVersionJobStatus), }) return case ProvisionerJobStatusFailed: httpapi.Write(rw, http.StatusBadRequest, httpapi.Response{ - Message: fmt.Sprintf("The provided project history %q has failed to import. You cannot create workspaces using it!", projectHistory.Name), + Message: fmt.Sprintf("The provided project version %q has failed to import. You cannot create workspaces using it!", projectVersion.Name), }) return case ProvisionerJobStatusCancelled: httpapi.Write(rw, http.StatusPreconditionFailed, httpapi.Response{ - Message: "The provided project history was canceled during import. You cannot create workspaces using it!", + Message: "The provided project version was canceled during import. You cannot create workspaces using it!", }) } - project, err := api.Database.GetProjectByID(r.Context(), projectHistory.ProjectID) + project, err := api.Database.GetProjectByID(r.Context(), projectVersion.ProjectID) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ Message: fmt.Sprintf("get project: %s", err), @@ -154,7 +154,7 @@ func (api *api) postWorkspaceHistoryByUser(rw http.ResponseWriter, r *http.Reque CreatedAt: database.Now(), UpdatedAt: database.Now(), WorkspaceID: workspace.ID, - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, BeforeID: priorHistoryID, Name: namesgenerator.GetRandomName(1), Initiator: user.ID, @@ -246,7 +246,7 @@ func convertWorkspaceHistory(workspaceHistory database.WorkspaceHistory, provisi CreatedAt: workspaceHistory.CreatedAt, UpdatedAt: workspaceHistory.UpdatedAt, WorkspaceID: workspaceHistory.WorkspaceID, - ProjectHistoryID: workspaceHistory.ProjectHistoryID, + ProjectVersionID: workspaceHistory.ProjectVersionID, BeforeID: workspaceHistory.BeforeID.UUID, AfterID: workspaceHistory.AfterID.UUID, Name: workspaceHistory.Name, diff --git a/coderd/workspacehistory_test.go b/coderd/workspacehistory_test.go index d65e82fd10ecb..484269892ad3f 100644 --- a/coderd/workspacehistory_test.go +++ b/coderd/workspacehistory_test.go @@ -32,19 +32,19 @@ func TestWorkspaceHistory(t *testing.T) { return project, workspace } - setupProjectHistory := func(t *testing.T, client *codersdk.Client, user coderd.CreateInitialUserRequest, project coderd.Project, data []byte) coderd.ProjectHistory { - projectHistory, err := client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + setupProjectVersion := func(t *testing.T, client *codersdk.Client, user coderd.CreateInitialUserRequest, project coderd.Project, data []byte) coderd.ProjectVersion { + projectVersion, err := client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: data, }) require.NoError(t, err) require.Eventually(t, func() bool { - hist, err := client.ProjectHistory(context.Background(), user.Organization, project.Name, projectHistory.Name) + version, err := client.ProjectVersion(context.Background(), user.Organization, project.Name, projectVersion.Name) require.NoError(t, err) - t.Logf("Import status: %s\n", hist.Import.Status) - return hist.Import.Status.Completed() + t.Logf("Import status: %s\n", version.Import.Status) + return version.Import.Status.Completed() }, 15*time.Second, 50*time.Millisecond) - return projectHistory + return projectVersion } t.Run("AllHistory", func(t *testing.T) { @@ -58,9 +58,9 @@ func TestWorkspaceHistory(t *testing.T) { require.Len(t, history, 0) data, err := echo.Tar(echo.ParseComplete, echo.ProvisionComplete) require.NoError(t, err) - projectVersion := setupProjectHistory(t, server.Client, user, project, data) + projectVersion := setupProjectVersion(t, server.Client, user, project, data) _, err = server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: projectVersion.ID, + ProjectVersionID: projectVersion.ID, Transition: database.WorkspaceTransitionCreate, }) require.NoError(t, err) @@ -79,9 +79,9 @@ func TestWorkspaceHistory(t *testing.T) { require.Error(t, err) data, err := echo.Tar(echo.ParseComplete, echo.ProvisionComplete) require.NoError(t, err) - projectHistory := setupProjectHistory(t, server.Client, user, project, data) + projectVersion := setupProjectVersion(t, server.Client, user, project, data) _, err = server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, Transition: database.WorkspaceTransitionCreate, }) require.NoError(t, err) @@ -97,9 +97,9 @@ func TestWorkspaceHistory(t *testing.T) { project, workspace := setupProjectAndWorkspace(t, server.Client, user) data, err := echo.Tar(echo.ParseComplete, echo.ProvisionComplete) require.NoError(t, err) - projectHistory := setupProjectHistory(t, server.Client, user, project, data) + projectVersion := setupProjectVersion(t, server.Client, user, project, data) _, err = server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, Transition: database.WorkspaceTransitionCreate, }) require.NoError(t, err) @@ -122,16 +122,16 @@ func TestWorkspaceHistory(t *testing.T) { project, workspace := setupProjectAndWorkspace(t, server.Client, user) data, err := echo.Tar(echo.ParseComplete, echo.ProvisionComplete) require.NoError(t, err) - projectHistory := setupProjectHistory(t, server.Client, user, project, data) + projectVersion := setupProjectVersion(t, server.Client, user, project, data) _, err = server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, Transition: database.WorkspaceTransitionCreate, }) require.NoError(t, err) _, err = server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, Transition: database.WorkspaceTransitionCreate, }) require.Error(t, err) @@ -145,7 +145,7 @@ func TestWorkspaceHistory(t *testing.T) { _, workspace := setupProjectAndWorkspace(t, server.Client, user) _, err := server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: uuid.New(), + ProjectVersionID: uuid.New(), Transition: database.WorkspaceTransitionCreate, }) require.Error(t, err) diff --git a/coderd/workspacehistorylogs_test.go b/coderd/workspacehistorylogs_test.go index 9e9dd06fbd6db..f507001beb4d5 100644 --- a/coderd/workspacehistorylogs_test.go +++ b/coderd/workspacehistorylogs_test.go @@ -32,18 +32,18 @@ func TestWorkspaceHistoryLogs(t *testing.T) { return project, workspace } - setupProjectHistory := func(t *testing.T, client *codersdk.Client, user coderd.CreateInitialUserRequest, project coderd.Project, data []byte) coderd.ProjectHistory { - projectHistory, err := client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + setupProjectVersion := func(t *testing.T, client *codersdk.Client, user coderd.CreateInitialUserRequest, project coderd.Project, data []byte) coderd.ProjectVersion { + projectVersion, err := client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: data, }) require.NoError(t, err) require.Eventually(t, func() bool { - hist, err := client.ProjectHistory(context.Background(), user.Organization, project.Name, projectHistory.Name) + hist, err := client.ProjectVersion(context.Background(), user.Organization, project.Name, projectVersion.Name) require.NoError(t, err) return hist.Import.Status.Completed() }, 15*time.Second, 50*time.Millisecond) - return projectHistory + return projectVersion } server := coderdtest.New(t) @@ -62,10 +62,10 @@ func TestWorkspaceHistoryLogs(t *testing.T) { }, }}) require.NoError(t, err) - projectHistory := setupProjectHistory(t, server.Client, user, project, data) + projectVersion := setupProjectVersion(t, server.Client, user, project, data) workspaceHistory, err := server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: projectHistory.ID, + ProjectVersionID: projectVersion.ID, Transition: database.WorkspaceTransitionCreate, }) require.NoError(t, err) diff --git a/codersdk/projects.go b/codersdk/projects.go index 7b43e5d604170..e3805ba3c4d71 100644 --- a/codersdk/projects.go +++ b/codersdk/projects.go @@ -57,9 +57,9 @@ func (c *Client) CreateProject(ctx context.Context, organization string, request return project, json.NewDecoder(res.Body).Decode(&project) } -// ListProjectHistory lists history for a project. -func (c *Client) ListProjectHistory(ctx context.Context, organization, project string) ([]coderd.ProjectHistory, error) { - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/projects/%s/%s/history", organization, project), nil) +// ProjectVersions lists versions of a project. +func (c *Client) ProjectVersions(ctx context.Context, organization, project string) ([]coderd.ProjectVersion, error) { + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/projects/%s/%s/versions", organization, project), nil) if err != nil { return nil, err } @@ -67,41 +67,41 @@ func (c *Client) ListProjectHistory(ctx context.Context, organization, project s if res.StatusCode != http.StatusOK { return nil, readBodyAsError(res) } - var projectHistory []coderd.ProjectHistory - return projectHistory, json.NewDecoder(res.Body).Decode(&projectHistory) + var projectVersion []coderd.ProjectVersion + return projectVersion, json.NewDecoder(res.Body).Decode(&projectVersion) } -// ProjectHistory returns project history by name. -func (c *Client) ProjectHistory(ctx context.Context, organization, project, history string) (coderd.ProjectHistory, error) { - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/projects/%s/%s/history/%s", organization, project, history), nil) +// ProjectVersion returns project version by name. +func (c *Client) ProjectVersion(ctx context.Context, organization, project, version string) (coderd.ProjectVersion, error) { + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/projects/%s/%s/versions/%s", organization, project, version), nil) if err != nil { - return coderd.ProjectHistory{}, err + return coderd.ProjectVersion{}, err } defer res.Body.Close() if res.StatusCode != http.StatusOK { - return coderd.ProjectHistory{}, readBodyAsError(res) + return coderd.ProjectVersion{}, readBodyAsError(res) } - var projectHistory coderd.ProjectHistory - return projectHistory, json.NewDecoder(res.Body).Decode(&projectHistory) + var projectVersion coderd.ProjectVersion + return projectVersion, json.NewDecoder(res.Body).Decode(&projectVersion) } -// CreateProjectHistory inserts a new version for the project. -func (c *Client) CreateProjectHistory(ctx context.Context, organization, project string, request coderd.CreateProjectHistoryRequest) (coderd.ProjectHistory, error) { - res, err := c.request(ctx, http.MethodPost, fmt.Sprintf("/api/v2/projects/%s/%s/history", organization, project), request) +// CreateProjectVersion inserts a new version for the project. +func (c *Client) CreateProjectVersion(ctx context.Context, organization, project string, request coderd.CreateProjectVersionRequest) (coderd.ProjectVersion, error) { + res, err := c.request(ctx, http.MethodPost, fmt.Sprintf("/api/v2/projects/%s/%s/versions", organization, project), request) if err != nil { - return coderd.ProjectHistory{}, err + return coderd.ProjectVersion{}, err } defer res.Body.Close() if res.StatusCode != http.StatusCreated { - return coderd.ProjectHistory{}, readBodyAsError(res) + return coderd.ProjectVersion{}, readBodyAsError(res) } - var projectVersion coderd.ProjectHistory + var projectVersion coderd.ProjectVersion return projectVersion, json.NewDecoder(res.Body).Decode(&projectVersion) } -// ProjectHistoryParameters returns project parameters for history by name. -func (c *Client) ProjectHistoryParameters(ctx context.Context, organization, project, history string) ([]coderd.ProjectParameter, error) { - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/projects/%s/%s/history/%s/parameters", organization, project, history), nil) +// ProjectVersionParameters returns project parameters for a version by name. +func (c *Client) ProjectVersionParameters(ctx context.Context, organization, project, version string) ([]coderd.ProjectParameter, error) { + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/projects/%s/%s/versions/%s/parameters", organization, project, version), nil) if err != nil { return nil, err } diff --git a/codersdk/projects_test.go b/codersdk/projects_test.go index 0645438c249f9..957a759b3e062 100644 --- a/codersdk/projects_test.go +++ b/codersdk/projects_test.go @@ -74,7 +74,7 @@ func TestProjects(t *testing.T) { t.Run("UnauthenticatedHistory", func(t *testing.T) { t.Parallel() server := coderdtest.New(t) - _, err := server.Client.ListProjectHistory(context.Background(), "org", "project") + _, err := server.Client.ProjectVersions(context.Background(), "org", "project") require.Error(t, err) }) @@ -87,14 +87,14 @@ func TestProjects(t *testing.T) { Provisioner: database.ProvisionerTypeEcho, }) require.NoError(t, err) - _, err = server.Client.ListProjectHistory(context.Background(), user.Organization, project.Name) + _, err = server.Client.ProjectVersions(context.Background(), user.Organization, project.Name) require.NoError(t, err) }) t.Run("CreateHistoryUnauthenticated", func(t *testing.T) { t.Parallel() server := coderdtest.New(t) - _, err := server.Client.CreateProjectHistory(context.Background(), "org", "project", coderd.CreateProjectHistoryRequest{ + _, err := server.Client.CreateProjectVersion(context.Background(), "org", "project", coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: []byte{}, }) @@ -119,13 +119,13 @@ func TestProjects(t *testing.T) { require.NoError(t, err) _, err = writer.Write(make([]byte, 1<<10)) require.NoError(t, err) - history, err := server.Client.CreateProjectHistory(context.Background(), user.Organization, project.Name, coderd.CreateProjectHistoryRequest{ + version, err := server.Client.CreateProjectVersion(context.Background(), user.Organization, project.Name, coderd.CreateProjectVersionRequest{ StorageMethod: database.ProjectStorageMethodInlineArchive, StorageSource: buffer.Bytes(), }) require.NoError(t, err) - _, err = server.Client.ProjectHistory(context.Background(), user.Organization, project.Name, history.Name) + _, err = server.Client.ProjectVersion(context.Background(), user.Organization, project.Name, version.Name) require.NoError(t, err) }) @@ -168,7 +168,7 @@ func TestProjects(t *testing.T) { t.Parallel() server := coderdtest.New(t) user := server.RandomInitialUser(t) - _, err := server.Client.ProjectHistoryParameters(context.Background(), user.Organization, "nothing", "nope") + _, err := server.Client.ProjectVersionParameters(context.Background(), user.Organization, "nothing", "nope") require.Error(t, err) }) } diff --git a/codersdk/workspaces.go b/codersdk/workspaces.go index 79878bf407570..d6ddf14f7b082 100644 --- a/codersdk/workspaces.go +++ b/codersdk/workspaces.go @@ -68,7 +68,7 @@ func (c *Client) ListWorkspaceHistory(ctx context.Context, owner, workspace stri if owner == "" { owner = "me" } - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/history", owner, workspace), nil) + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/version", owner, workspace), nil) if err != nil { return nil, err } @@ -89,7 +89,7 @@ func (c *Client) WorkspaceHistory(ctx context.Context, owner, workspace, history if history == "" { history = "latest" } - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/history/%s", owner, workspace, history), nil) + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/version/%s", owner, workspace, history), nil) if err != nil { return coderd.WorkspaceHistory{}, err } @@ -123,7 +123,7 @@ func (c *Client) CreateWorkspaceHistory(ctx context.Context, owner, workspace st if owner == "" { owner = "me" } - res, err := c.request(ctx, http.MethodPost, fmt.Sprintf("/api/v2/workspaces/%s/%s/history", owner, workspace), request) + res, err := c.request(ctx, http.MethodPost, fmt.Sprintf("/api/v2/workspaces/%s/%s/version", owner, workspace), request) if err != nil { return coderd.WorkspaceHistory{}, err } @@ -153,7 +153,7 @@ func (c *Client) WorkspaceHistoryLogsBetween(ctx context.Context, owner, workspa if !before.IsZero() { values["before"] = []string{strconv.FormatInt(before.UTC().UnixMilli(), 10)} } - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/history/%s/logs?%s", owner, workspace, history, values.Encode()), nil) + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/version/%s/logs?%s", owner, workspace, history, values.Encode()), nil) if err != nil { return nil, err } @@ -177,7 +177,7 @@ func (c *Client) FollowWorkspaceHistoryLogsAfter(ctx context.Context, owner, wor owner = "me" } - res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/history/%s/logs?follow%s", owner, workspace, history, afterQuery), nil) + res, err := c.request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/%s/version/%s/logs?follow%s", owner, workspace, history, afterQuery), nil) if err != nil { return nil, err } diff --git a/codersdk/workspaces_test.go b/codersdk/workspaces_test.go index b030b3741450f..21e0d5bcaa1a6 100644 --- a/codersdk/workspaces_test.go +++ b/codersdk/workspaces_test.go @@ -161,7 +161,7 @@ func TestWorkspaces(t *testing.T) { }) require.NoError(t, err) _, err = server.Client.CreateWorkspaceHistory(context.Background(), "", workspace.Name, coderd.CreateWorkspaceHistoryRequest{ - ProjectHistoryID: uuid.New(), + ProjectVersionID: uuid.New(), Transition: database.WorkspaceTransitionCreate, }) require.Error(t, err) diff --git a/database/databasefake/databasefake.go b/database/databasefake/databasefake.go index 36a8671c64f3a..2ee1bf965e878 100644 --- a/database/databasefake/databasefake.go +++ b/database/databasefake/databasefake.go @@ -21,8 +21,8 @@ func New() database.Store { parameterValue: make([]database.ParameterValue, 0), project: make([]database.Project, 0), - projectHistory: make([]database.ProjectHistory, 0), - projectHistoryLog: make([]database.ProjectHistoryLog, 0), + projectVersion: make([]database.ProjectVersion, 0), + projectVersionLog: make([]database.ProjectVersionLog, 0), projectParameter: make([]database.ProjectParameter, 0), provisionerDaemons: make([]database.ProvisionerDaemon, 0), provisionerJobs: make([]database.ProvisionerJob, 0), @@ -47,8 +47,8 @@ type fakeQuerier struct { // New tables parameterValue []database.ParameterValue project []database.Project - projectHistory []database.ProjectHistory - projectHistoryLog []database.ProjectHistoryLog + projectVersion []database.ProjectVersion + projectVersionLog []database.ProjectVersionLog projectParameter []database.ProjectParameter provisionerDaemons []database.ProvisionerDaemon provisionerJobs []database.ProvisionerJob @@ -410,55 +410,55 @@ func (q *fakeQuerier) GetProjectByOrganizationAndName(_ context.Context, arg dat return database.Project{}, sql.ErrNoRows } -func (q *fakeQuerier) GetProjectHistoryByProjectID(_ context.Context, projectID uuid.UUID) ([]database.ProjectHistory, error) { +func (q *fakeQuerier) GetProjectVersionByProjectID(_ context.Context, projectID uuid.UUID) ([]database.ProjectVersion, error) { q.mutex.Lock() defer q.mutex.Unlock() - history := make([]database.ProjectHistory, 0) - for _, projectHistory := range q.projectHistory { - if projectHistory.ProjectID.String() != projectID.String() { + version := make([]database.ProjectVersion, 0) + for _, projectVersion := range q.projectVersion { + if projectVersion.ProjectID.String() != projectID.String() { continue } - history = append(history, projectHistory) + version = append(version, projectVersion) } - if len(history) == 0 { + if len(version) == 0 { return nil, sql.ErrNoRows } - return history, nil + return version, nil } -func (q *fakeQuerier) GetProjectHistoryByProjectIDAndName(_ context.Context, arg database.GetProjectHistoryByProjectIDAndNameParams) (database.ProjectHistory, error) { +func (q *fakeQuerier) GetProjectVersionByProjectIDAndName(_ context.Context, arg database.GetProjectVersionByProjectIDAndNameParams) (database.ProjectVersion, error) { q.mutex.Lock() defer q.mutex.Unlock() - for _, projectHistory := range q.projectHistory { - if projectHistory.ProjectID.String() != arg.ProjectID.String() { + for _, projectVersion := range q.projectVersion { + if projectVersion.ProjectID.String() != arg.ProjectID.String() { continue } - if !strings.EqualFold(projectHistory.Name, arg.Name) { + if !strings.EqualFold(projectVersion.Name, arg.Name) { continue } - return projectHistory, nil + return projectVersion, nil } - return database.ProjectHistory{}, sql.ErrNoRows + return database.ProjectVersion{}, sql.ErrNoRows } -func (q *fakeQuerier) GetProjectHistoryLogsByIDBetween(_ context.Context, arg database.GetProjectHistoryLogsByIDBetweenParams) ([]database.ProjectHistoryLog, error) { +func (q *fakeQuerier) GetProjectVersionLogsByIDBetween(_ context.Context, arg database.GetProjectVersionLogsByIDBetweenParams) ([]database.ProjectVersionLog, error) { q.mutex.Lock() defer q.mutex.Unlock() - logs := make([]database.ProjectHistoryLog, 0) - for _, projectHistoryLog := range q.projectHistoryLog { - if projectHistoryLog.ProjectHistoryID.String() != arg.ProjectHistoryID.String() { + logs := make([]database.ProjectVersionLog, 0) + for _, projectVersionLog := range q.projectVersionLog { + if projectVersionLog.ProjectVersionID.String() != arg.ProjectVersionID.String() { continue } - if projectHistoryLog.CreatedAt.After(arg.CreatedBefore) { + if projectVersionLog.CreatedAt.After(arg.CreatedBefore) { continue } - if projectHistoryLog.CreatedAt.Before(arg.CreatedAfter) { + if projectVersionLog.CreatedAt.Before(arg.CreatedAfter) { continue } - logs = append(logs, projectHistoryLog) + logs = append(logs, projectVersionLog) } if len(logs) == 0 { return nil, sql.ErrNoRows @@ -466,26 +466,26 @@ func (q *fakeQuerier) GetProjectHistoryLogsByIDBetween(_ context.Context, arg da return logs, nil } -func (q *fakeQuerier) GetProjectHistoryByID(_ context.Context, projectHistoryID uuid.UUID) (database.ProjectHistory, error) { +func (q *fakeQuerier) GetProjectVersionByID(_ context.Context, projectVersionID uuid.UUID) (database.ProjectVersion, error) { q.mutex.Lock() defer q.mutex.Unlock() - for _, projectHistory := range q.projectHistory { - if projectHistory.ID.String() != projectHistoryID.String() { + for _, projectVersion := range q.projectVersion { + if projectVersion.ID.String() != projectVersionID.String() { continue } - return projectHistory, nil + return projectVersion, nil } - return database.ProjectHistory{}, sql.ErrNoRows + return database.ProjectVersion{}, sql.ErrNoRows } -func (q *fakeQuerier) GetProjectParametersByHistoryID(_ context.Context, projectHistoryID uuid.UUID) ([]database.ProjectParameter, error) { +func (q *fakeQuerier) GetProjectParametersByVersionID(_ context.Context, projectVersionID uuid.UUID) ([]database.ProjectParameter, error) { q.mutex.Lock() defer q.mutex.Unlock() parameters := make([]database.ProjectParameter, 0) for _, projectParameter := range q.projectParameter { - if projectParameter.ProjectHistoryID.String() != projectHistoryID.String() { + if projectParameter.ProjectVersionID.String() != projectVersionID.String() { continue } parameters = append(parameters, projectParameter) @@ -660,12 +660,12 @@ func (q *fakeQuerier) InsertProject(_ context.Context, arg database.InsertProjec return project, nil } -func (q *fakeQuerier) InsertProjectHistory(_ context.Context, arg database.InsertProjectHistoryParams) (database.ProjectHistory, error) { +func (q *fakeQuerier) InsertProjectVersion(_ context.Context, arg database.InsertProjectVersionParams) (database.ProjectVersion, error) { q.mutex.Lock() defer q.mutex.Unlock() //nolint:gosimple - history := database.ProjectHistory{ + version := database.ProjectVersion{ ID: arg.ID, ProjectID: arg.ProjectID, CreatedAt: arg.CreatedAt, @@ -676,18 +676,18 @@ func (q *fakeQuerier) InsertProjectHistory(_ context.Context, arg database.Inser StorageSource: arg.StorageSource, ImportJobID: arg.ImportJobID, } - q.projectHistory = append(q.projectHistory, history) - return history, nil + q.projectVersion = append(q.projectVersion, version) + return version, nil } -func (q *fakeQuerier) InsertProjectHistoryLogs(_ context.Context, arg database.InsertProjectHistoryLogsParams) ([]database.ProjectHistoryLog, error) { +func (q *fakeQuerier) InsertProjectVersionLogs(_ context.Context, arg database.InsertProjectVersionLogsParams) ([]database.ProjectVersionLog, error) { q.mutex.Lock() defer q.mutex.Unlock() - logs := make([]database.ProjectHistoryLog, 0) + logs := make([]database.ProjectVersionLog, 0) for index, output := range arg.Output { - logs = append(logs, database.ProjectHistoryLog{ - ProjectHistoryID: arg.ProjectHistoryID, + logs = append(logs, database.ProjectVersionLog{ + ProjectVersionID: arg.ProjectVersionID, ID: arg.ID[index], CreatedAt: arg.CreatedAt[index], Source: arg.Source[index], @@ -695,7 +695,7 @@ func (q *fakeQuerier) InsertProjectHistoryLogs(_ context.Context, arg database.I Output: output, }) } - q.projectHistoryLog = append(q.projectHistoryLog, logs...) + q.projectVersionLog = append(q.projectVersionLog, logs...) return logs, nil } @@ -707,7 +707,7 @@ func (q *fakeQuerier) InsertProjectParameter(_ context.Context, arg database.Ins param := database.ProjectParameter{ ID: arg.ID, CreatedAt: arg.CreatedAt, - ProjectHistoryID: arg.ProjectHistoryID, + ProjectVersionID: arg.ProjectVersionID, Name: arg.Name, Description: arg.Description, DefaultSourceScheme: arg.DefaultSourceScheme, @@ -821,7 +821,7 @@ func (q *fakeQuerier) InsertWorkspaceHistory(_ context.Context, arg database.Ins UpdatedAt: arg.UpdatedAt, WorkspaceID: arg.WorkspaceID, Name: arg.Name, - ProjectHistoryID: arg.ProjectHistoryID, + ProjectVersionID: arg.ProjectVersionID, BeforeID: arg.BeforeID, Transition: arg.Transition, Initiator: arg.Initiator, diff --git a/database/dump.sql b/database/dump.sql index 7f174528af7b2..9da449f498079 100644 --- a/database/dump.sql +++ b/database/dump.sql @@ -137,7 +137,7 @@ CREATE TABLE project ( active_version_id uuid ); -CREATE TABLE project_history ( +CREATE TABLE project_version ( id uuid NOT NULL, project_id uuid NOT NULL, created_at timestamp with time zone NOT NULL, @@ -149,9 +149,9 @@ CREATE TABLE project_history ( import_job_id uuid NOT NULL ); -CREATE TABLE project_history_log ( +CREATE TABLE project_version_log ( id uuid NOT NULL, - project_history_id uuid NOT NULL, + project_version_id uuid NOT NULL, created_at timestamp with time zone NOT NULL, source log_source NOT NULL, level log_level NOT NULL, @@ -161,7 +161,7 @@ CREATE TABLE project_history_log ( CREATE TABLE project_parameter ( id uuid NOT NULL, created_at timestamp with time zone NOT NULL, - project_history_id uuid NOT NULL, + project_version_id uuid NOT NULL, name character varying(64) NOT NULL, description character varying(8192) DEFAULT ''::character varying NOT NULL, default_source_scheme parameter_source_scheme, @@ -247,7 +247,7 @@ CREATE TABLE workspace_history ( created_at timestamp with time zone NOT NULL, updated_at timestamp with time zone NOT NULL, workspace_id uuid NOT NULL, - project_history_id uuid NOT NULL, + project_version_id uuid NOT NULL, name character varying(64) NOT NULL, before_id uuid, after_id uuid, @@ -282,14 +282,14 @@ ALTER TABLE ONLY parameter_value ALTER TABLE ONLY parameter_value ADD CONSTRAINT parameter_value_name_scope_scope_id_key UNIQUE (name, scope, scope_id); -ALTER TABLE ONLY project_history - ADD CONSTRAINT project_history_id_key UNIQUE (id); +ALTER TABLE ONLY project_version + ADD CONSTRAINT project_version_id_key UNIQUE (id); -ALTER TABLE ONLY project_history_log - ADD CONSTRAINT project_history_log_id_key UNIQUE (id); +ALTER TABLE ONLY project_version_log + ADD CONSTRAINT project_version_log_id_key UNIQUE (id); -ALTER TABLE ONLY project_history - ADD CONSTRAINT project_history_project_id_name_key UNIQUE (project_id, name); +ALTER TABLE ONLY project_version + ADD CONSTRAINT project_version_project_id_name_key UNIQUE (project_id, name); ALTER TABLE ONLY project ADD CONSTRAINT project_id_key UNIQUE (id); @@ -301,7 +301,7 @@ ALTER TABLE ONLY project_parameter ADD CONSTRAINT project_parameter_id_key UNIQUE (id); ALTER TABLE ONLY project_parameter - ADD CONSTRAINT project_parameter_project_history_id_name_key UNIQUE (project_history_id, name); + ADD CONSTRAINT project_parameter_project_version_id_name_key UNIQUE (project_version_id, name); ALTER TABLE ONLY provisioner_daemon ADD CONSTRAINT provisioner_daemon_id_key UNIQUE (id); @@ -339,14 +339,14 @@ ALTER TABLE ONLY workspace_resource ALTER TABLE ONLY workspace_resource ADD CONSTRAINT workspace_resource_workspace_history_id_name_key UNIQUE (workspace_history_id, name); -ALTER TABLE ONLY project_history_log - ADD CONSTRAINT project_history_log_project_history_id_fkey FOREIGN KEY (project_history_id) REFERENCES project_history(id) ON DELETE CASCADE; +ALTER TABLE ONLY project_version_log + ADD CONSTRAINT project_version_log_project_version_id_fkey FOREIGN KEY (project_version_id) REFERENCES project_version(id) ON DELETE CASCADE; -ALTER TABLE ONLY project_history - ADD CONSTRAINT project_history_project_id_fkey FOREIGN KEY (project_id) REFERENCES project(id); +ALTER TABLE ONLY project_version + ADD CONSTRAINT project_version_project_id_fkey FOREIGN KEY (project_id) REFERENCES project(id); ALTER TABLE ONLY project_parameter - ADD CONSTRAINT project_parameter_project_history_id_fkey FOREIGN KEY (project_history_id) REFERENCES project_history(id) ON DELETE CASCADE; + ADD CONSTRAINT project_parameter_project_version_id_fkey FOREIGN KEY (project_version_id) REFERENCES project_version(id) ON DELETE CASCADE; ALTER TABLE ONLY provisioner_job ADD CONSTRAINT provisioner_job_project_id_fkey FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE; @@ -358,7 +358,7 @@ ALTER TABLE ONLY workspace_history_log ADD CONSTRAINT workspace_history_log_workspace_history_id_fkey FOREIGN KEY (workspace_history_id) REFERENCES workspace_history(id) ON DELETE CASCADE; ALTER TABLE ONLY workspace_history - ADD CONSTRAINT workspace_history_project_history_id_fkey FOREIGN KEY (project_history_id) REFERENCES project_history(id) ON DELETE CASCADE; + ADD CONSTRAINT workspace_history_project_version_id_fkey FOREIGN KEY (project_version_id) REFERENCES project_version(id) ON DELETE CASCADE; ALTER TABLE ONLY workspace_history ADD CONSTRAINT workspace_history_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES workspace(id) ON DELETE CASCADE; diff --git a/database/migrations/000002_projects.up.sql b/database/migrations/000002_projects.up.sql index 0149ec8033f39..c33f2f1e725b8 100644 --- a/database/migrations/000002_projects.up.sql +++ b/database/migrations/000002_projects.up.sql @@ -20,10 +20,10 @@ CREATE TABLE project ( CREATE TYPE project_storage_method AS ENUM ('inline-archive'); --- Project Versions store Project history. When a Project Version is imported, +-- Project Versions store historical project data. When a Project Version is imported, -- an "import" job is queued to parse parameters. A Project Version -- can only be used if the import job succeeds. -CREATE TABLE project_history ( +CREATE TABLE project_version ( id uuid NOT NULL UNIQUE, -- This should be indexed. project_id uuid NOT NULL REFERENCES project (id), @@ -66,7 +66,7 @@ CREATE TYPE parameter_destination_scheme AS ENUM('none', 'environment_variable', CREATE TABLE project_parameter ( id uuid NOT NULL UNIQUE, created_at timestamptz NOT NULL, - project_history_id uuid NOT NULL REFERENCES project_history(id) ON DELETE CASCADE, + project_version_id uuid NOT NULL REFERENCES project_version(id) ON DELETE CASCADE, name varchar(64) NOT NULL, -- 8KB limit description varchar(8192) NOT NULL DEFAULT '', @@ -88,7 +88,7 @@ CREATE TABLE project_parameter ( validation_condition varchar(512) NOT NULL, validation_type_system parameter_type_system NOT NULL, validation_value_type varchar(64) NOT NULL, - UNIQUE(project_history_id, name) + UNIQUE(project_version_id, name) ); CREATE TYPE log_level AS ENUM ( @@ -104,9 +104,9 @@ CREATE TYPE log_source AS ENUM ( 'provisioner' ); -CREATE TABLE project_history_log ( +CREATE TABLE project_version_log ( id uuid NOT NULL UNIQUE, - project_history_id uuid NOT NULL REFERENCES project_history (id) ON DELETE CASCADE, + project_version_id uuid NOT NULL REFERENCES project_version (id) ON DELETE CASCADE, created_at timestamptz NOT NULL, source log_source NOT NULL, level log_level NOT NULL, diff --git a/database/migrations/000003_workspaces.up.sql b/database/migrations/000003_workspaces.up.sql index fcc0b8fc3f77b..fe7bfe6ea2822 100644 --- a/database/migrations/000003_workspaces.up.sql +++ b/database/migrations/000003_workspaces.up.sql @@ -21,7 +21,7 @@ CREATE TABLE workspace_history ( created_at timestamptz NOT NULL, updated_at timestamptz NOT NULL, workspace_id uuid NOT NULL REFERENCES workspace (id) ON DELETE CASCADE, - project_history_id uuid NOT NULL REFERENCES project_history (id) ON DELETE CASCADE, + project_version_id uuid NOT NULL REFERENCES project_version (id) ON DELETE CASCADE, name varchar(64) NOT NULL, before_id uuid, after_id uuid, diff --git a/database/models.go b/database/models.go index f0c0458e5cd58..72e7007e176c5 100644 --- a/database/models.go +++ b/database/models.go @@ -316,31 +316,10 @@ type Project struct { ActiveVersionID uuid.NullUUID `db:"active_version_id" json:"active_version_id"` } -type ProjectHistory struct { - ID uuid.UUID `db:"id" json:"id"` - ProjectID uuid.UUID `db:"project_id" json:"project_id"` - CreatedAt time.Time `db:"created_at" json:"created_at"` - UpdatedAt time.Time `db:"updated_at" json:"updated_at"` - Name string `db:"name" json:"name"` - Description string `db:"description" json:"description"` - StorageMethod ProjectStorageMethod `db:"storage_method" json:"storage_method"` - StorageSource []byte `db:"storage_source" json:"storage_source"` - ImportJobID uuid.UUID `db:"import_job_id" json:"import_job_id"` -} - -type ProjectHistoryLog struct { - ID uuid.UUID `db:"id" json:"id"` - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` - CreatedAt time.Time `db:"created_at" json:"created_at"` - Source LogSource `db:"source" json:"source"` - Level LogLevel `db:"level" json:"level"` - Output string `db:"output" json:"output"` -} - type ProjectParameter struct { ID uuid.UUID `db:"id" json:"id"` CreatedAt time.Time `db:"created_at" json:"created_at"` - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` Name string `db:"name" json:"name"` Description string `db:"description" json:"description"` DefaultSourceScheme ParameterSourceScheme `db:"default_source_scheme" json:"default_source_scheme"` @@ -357,6 +336,27 @@ type ProjectParameter struct { ValidationValueType string `db:"validation_value_type" json:"validation_value_type"` } +type ProjectVersion struct { + ID uuid.UUID `db:"id" json:"id"` + ProjectID uuid.UUID `db:"project_id" json:"project_id"` + CreatedAt time.Time `db:"created_at" json:"created_at"` + UpdatedAt time.Time `db:"updated_at" json:"updated_at"` + Name string `db:"name" json:"name"` + Description string `db:"description" json:"description"` + StorageMethod ProjectStorageMethod `db:"storage_method" json:"storage_method"` + StorageSource []byte `db:"storage_source" json:"storage_source"` + ImportJobID uuid.UUID `db:"import_job_id" json:"import_job_id"` +} + +type ProjectVersionLog struct { + ID uuid.UUID `db:"id" json:"id"` + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` + CreatedAt time.Time `db:"created_at" json:"created_at"` + Source LogSource `db:"source" json:"source"` + Level LogLevel `db:"level" json:"level"` + Output string `db:"output" json:"output"` +} + type ProvisionerDaemon struct { ID uuid.UUID `db:"id" json:"id"` CreatedAt time.Time `db:"created_at" json:"created_at"` @@ -426,7 +426,7 @@ type WorkspaceHistory struct { CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` Name string `db:"name" json:"name"` BeforeID uuid.NullUUID `db:"before_id" json:"before_id"` AfterID uuid.NullUUID `db:"after_id" json:"after_id"` diff --git a/database/querier.go b/database/querier.go index 49793672fa9e1..20c859cbe3f67 100644 --- a/database/querier.go +++ b/database/querier.go @@ -18,11 +18,11 @@ type querier interface { GetParameterValuesByScope(ctx context.Context, arg GetParameterValuesByScopeParams) ([]ParameterValue, error) GetProjectByID(ctx context.Context, id uuid.UUID) (Project, error) GetProjectByOrganizationAndName(ctx context.Context, arg GetProjectByOrganizationAndNameParams) (Project, error) - GetProjectHistoryByID(ctx context.Context, id uuid.UUID) (ProjectHistory, error) - GetProjectHistoryByProjectID(ctx context.Context, projectID uuid.UUID) ([]ProjectHistory, error) - GetProjectHistoryByProjectIDAndName(ctx context.Context, arg GetProjectHistoryByProjectIDAndNameParams) (ProjectHistory, error) - GetProjectHistoryLogsByIDBetween(ctx context.Context, arg GetProjectHistoryLogsByIDBetweenParams) ([]ProjectHistoryLog, error) - GetProjectParametersByHistoryID(ctx context.Context, projectHistoryID uuid.UUID) ([]ProjectParameter, error) + GetProjectParametersByVersionID(ctx context.Context, projectVersionID uuid.UUID) ([]ProjectParameter, error) + GetProjectVersionByID(ctx context.Context, id uuid.UUID) (ProjectVersion, error) + GetProjectVersionByProjectID(ctx context.Context, projectID uuid.UUID) ([]ProjectVersion, error) + GetProjectVersionByProjectIDAndName(ctx context.Context, arg GetProjectVersionByProjectIDAndNameParams) (ProjectVersion, error) + GetProjectVersionLogsByIDBetween(ctx context.Context, arg GetProjectVersionLogsByIDBetweenParams) ([]ProjectVersionLog, error) GetProjectsByOrganizationIDs(ctx context.Context, ids []string) ([]Project, error) GetProvisionerDaemonByID(ctx context.Context, id uuid.UUID) (ProvisionerDaemon, error) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) @@ -46,9 +46,9 @@ type querier interface { InsertOrganizationMember(ctx context.Context, arg InsertOrganizationMemberParams) (OrganizationMember, error) InsertParameterValue(ctx context.Context, arg InsertParameterValueParams) (ParameterValue, error) InsertProject(ctx context.Context, arg InsertProjectParams) (Project, error) - InsertProjectHistory(ctx context.Context, arg InsertProjectHistoryParams) (ProjectHistory, error) - InsertProjectHistoryLogs(ctx context.Context, arg InsertProjectHistoryLogsParams) ([]ProjectHistoryLog, error) InsertProjectParameter(ctx context.Context, arg InsertProjectParameterParams) (ProjectParameter, error) + InsertProjectVersion(ctx context.Context, arg InsertProjectVersionParams) (ProjectVersion, error) + InsertProjectVersionLogs(ctx context.Context, arg InsertProjectVersionLogsParams) ([]ProjectVersionLog, error) InsertProvisionerDaemon(ctx context.Context, arg InsertProvisionerDaemonParams) (ProvisionerDaemon, error) InsertProvisionerJob(ctx context.Context, arg InsertProvisionerJobParams) (ProvisionerJob, error) InsertUser(ctx context.Context, arg InsertUserParams) (User, error) diff --git a/database/query.sql b/database/query.sql index 93943326f7f15..3a9889c299453 100644 --- a/database/query.sql +++ b/database/query.sql @@ -155,46 +155,46 @@ FROM WHERE organization_id = ANY(@ids :: text [ ]); --- name: GetProjectParametersByHistoryID :many +-- name: GetProjectParametersByVersionID :many SELECT * FROM project_parameter WHERE - project_history_id = $1; + project_version_id = $1; --- name: GetProjectHistoryByProjectID :many +-- name: GetProjectVersionByProjectID :many SELECT * FROM - project_history + project_version WHERE project_id = $1; --- name: GetProjectHistoryByProjectIDAndName :one +-- name: GetProjectVersionByProjectIDAndName :one SELECT * FROM - project_history + project_version WHERE project_id = $1 AND name = $2; --- name: GetProjectHistoryByID :one +-- name: GetProjectVersionByID :one SELECT * FROM - project_history + project_version WHERE id = $1; --- name: GetProjectHistoryLogsByIDBetween :many +-- name: GetProjectVersionLogsByIDBetween :many SELECT * FROM - project_history_log + project_version_log WHERE - project_history_id = @project_history_id + project_version_id = @project_version_id AND ( created_at >= @created_after OR created_at <= @created_before @@ -414,9 +414,9 @@ INSERT INTO VALUES ($1, $2, $3, $4, $5, $6) RETURNING *; --- name: InsertProjectHistory :one +-- name: InsertProjectVersion :one INSERT INTO - project_history ( + project_version ( id, project_id, created_at, @@ -430,11 +430,11 @@ INSERT INTO VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *; --- name: InsertProjectHistoryLogs :many +-- name: InsertProjectVersionLogs :many INSERT INTO - project_history_log + project_version_log SELECT - @project_history_id :: uuid AS project_history_id, + @project_version_id :: uuid AS project_version_id, unnest(@id :: uuid [ ]) AS id, unnest(@created_at :: timestamptz [ ]) AS created_at, unnest(@source :: log_source [ ]) as source, @@ -446,7 +446,7 @@ INSERT INTO project_parameter ( id, created_at, - project_history_id, + project_version_id, name, description, default_source_scheme, @@ -553,7 +553,7 @@ INSERT INTO created_at, updated_at, workspace_id, - project_history_id, + project_version_id, before_id, name, transition, diff --git a/database/query.sql.go b/database/query.sql.go index 0da3e8cfba63e..363c5a3aae896 100644 --- a/database/query.sql.go +++ b/database/query.sql.go @@ -350,18 +350,68 @@ func (q *sqlQuerier) GetProjectByOrganizationAndName(ctx context.Context, arg Ge return i, err } -const getProjectHistoryByID = `-- name: GetProjectHistoryByID :one +const getProjectParametersByVersionID = `-- name: GetProjectParametersByVersionID :many +SELECT + id, created_at, project_version_id, name, description, default_source_scheme, default_source_value, allow_override_source, default_destination_scheme, default_destination_value, allow_override_destination, default_refresh, redisplay_value, validation_error, validation_condition, validation_type_system, validation_value_type +FROM + project_parameter +WHERE + project_version_id = $1 +` + +func (q *sqlQuerier) GetProjectParametersByVersionID(ctx context.Context, projectVersionID uuid.UUID) ([]ProjectParameter, error) { + rows, err := q.db.QueryContext(ctx, getProjectParametersByVersionID, projectVersionID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ProjectParameter + for rows.Next() { + var i ProjectParameter + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.ProjectVersionID, + &i.Name, + &i.Description, + &i.DefaultSourceScheme, + &i.DefaultSourceValue, + &i.AllowOverrideSource, + &i.DefaultDestinationScheme, + &i.DefaultDestinationValue, + &i.AllowOverrideDestination, + &i.DefaultRefresh, + &i.RedisplayValue, + &i.ValidationError, + &i.ValidationCondition, + &i.ValidationTypeSystem, + &i.ValidationValueType, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getProjectVersionByID = `-- name: GetProjectVersionByID :one SELECT id, project_id, created_at, updated_at, name, description, storage_method, storage_source, import_job_id FROM - project_history + project_version WHERE id = $1 ` -func (q *sqlQuerier) GetProjectHistoryByID(ctx context.Context, id uuid.UUID) (ProjectHistory, error) { - row := q.db.QueryRowContext(ctx, getProjectHistoryByID, id) - var i ProjectHistory +func (q *sqlQuerier) GetProjectVersionByID(ctx context.Context, id uuid.UUID) (ProjectVersion, error) { + row := q.db.QueryRowContext(ctx, getProjectVersionByID, id) + var i ProjectVersion err := row.Scan( &i.ID, &i.ProjectID, @@ -376,24 +426,24 @@ func (q *sqlQuerier) GetProjectHistoryByID(ctx context.Context, id uuid.UUID) (P return i, err } -const getProjectHistoryByProjectID = `-- name: GetProjectHistoryByProjectID :many +const getProjectVersionByProjectID = `-- name: GetProjectVersionByProjectID :many SELECT id, project_id, created_at, updated_at, name, description, storage_method, storage_source, import_job_id FROM - project_history + project_version WHERE project_id = $1 ` -func (q *sqlQuerier) GetProjectHistoryByProjectID(ctx context.Context, projectID uuid.UUID) ([]ProjectHistory, error) { - rows, err := q.db.QueryContext(ctx, getProjectHistoryByProjectID, projectID) +func (q *sqlQuerier) GetProjectVersionByProjectID(ctx context.Context, projectID uuid.UUID) ([]ProjectVersion, error) { + rows, err := q.db.QueryContext(ctx, getProjectVersionByProjectID, projectID) if err != nil { return nil, err } defer rows.Close() - var items []ProjectHistory + var items []ProjectVersion for rows.Next() { - var i ProjectHistory + var i ProjectVersion if err := rows.Scan( &i.ID, &i.ProjectID, @@ -418,24 +468,24 @@ func (q *sqlQuerier) GetProjectHistoryByProjectID(ctx context.Context, projectID return items, nil } -const getProjectHistoryByProjectIDAndName = `-- name: GetProjectHistoryByProjectIDAndName :one +const getProjectVersionByProjectIDAndName = `-- name: GetProjectVersionByProjectIDAndName :one SELECT id, project_id, created_at, updated_at, name, description, storage_method, storage_source, import_job_id FROM - project_history + project_version WHERE project_id = $1 AND name = $2 ` -type GetProjectHistoryByProjectIDAndNameParams struct { +type GetProjectVersionByProjectIDAndNameParams struct { ProjectID uuid.UUID `db:"project_id" json:"project_id"` Name string `db:"name" json:"name"` } -func (q *sqlQuerier) GetProjectHistoryByProjectIDAndName(ctx context.Context, arg GetProjectHistoryByProjectIDAndNameParams) (ProjectHistory, error) { - row := q.db.QueryRowContext(ctx, getProjectHistoryByProjectIDAndName, arg.ProjectID, arg.Name) - var i ProjectHistory +func (q *sqlQuerier) GetProjectVersionByProjectIDAndName(ctx context.Context, arg GetProjectVersionByProjectIDAndNameParams) (ProjectVersion, error) { + row := q.db.QueryRowContext(ctx, getProjectVersionByProjectIDAndName, arg.ProjectID, arg.Name) + var i ProjectVersion err := row.Scan( &i.ID, &i.ProjectID, @@ -450,13 +500,13 @@ func (q *sqlQuerier) GetProjectHistoryByProjectIDAndName(ctx context.Context, ar return i, err } -const getProjectHistoryLogsByIDBetween = `-- name: GetProjectHistoryLogsByIDBetween :many +const getProjectVersionLogsByIDBetween = `-- name: GetProjectVersionLogsByIDBetween :many SELECT - id, project_history_id, created_at, source, level, output + id, project_version_id, created_at, source, level, output FROM - project_history_log + project_version_log WHERE - project_history_id = $1 + project_version_id = $1 AND ( created_at >= $2 OR created_at <= $3 @@ -465,24 +515,24 @@ ORDER BY created_at ` -type GetProjectHistoryLogsByIDBetweenParams struct { - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` +type GetProjectVersionLogsByIDBetweenParams struct { + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` CreatedAfter time.Time `db:"created_after" json:"created_after"` CreatedBefore time.Time `db:"created_before" json:"created_before"` } -func (q *sqlQuerier) GetProjectHistoryLogsByIDBetween(ctx context.Context, arg GetProjectHistoryLogsByIDBetweenParams) ([]ProjectHistoryLog, error) { - rows, err := q.db.QueryContext(ctx, getProjectHistoryLogsByIDBetween, arg.ProjectHistoryID, arg.CreatedAfter, arg.CreatedBefore) +func (q *sqlQuerier) GetProjectVersionLogsByIDBetween(ctx context.Context, arg GetProjectVersionLogsByIDBetweenParams) ([]ProjectVersionLog, error) { + rows, err := q.db.QueryContext(ctx, getProjectVersionLogsByIDBetween, arg.ProjectVersionID, arg.CreatedAfter, arg.CreatedBefore) if err != nil { return nil, err } defer rows.Close() - var items []ProjectHistoryLog + var items []ProjectVersionLog for rows.Next() { - var i ProjectHistoryLog + var i ProjectVersionLog if err := rows.Scan( &i.ID, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.CreatedAt, &i.Source, &i.Level, @@ -501,56 +551,6 @@ func (q *sqlQuerier) GetProjectHistoryLogsByIDBetween(ctx context.Context, arg G return items, nil } -const getProjectParametersByHistoryID = `-- name: GetProjectParametersByHistoryID :many -SELECT - id, created_at, project_history_id, name, description, default_source_scheme, default_source_value, allow_override_source, default_destination_scheme, default_destination_value, allow_override_destination, default_refresh, redisplay_value, validation_error, validation_condition, validation_type_system, validation_value_type -FROM - project_parameter -WHERE - project_history_id = $1 -` - -func (q *sqlQuerier) GetProjectParametersByHistoryID(ctx context.Context, projectHistoryID uuid.UUID) ([]ProjectParameter, error) { - rows, err := q.db.QueryContext(ctx, getProjectParametersByHistoryID, projectHistoryID) - if err != nil { - return nil, err - } - defer rows.Close() - var items []ProjectParameter - for rows.Next() { - var i ProjectParameter - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.ProjectHistoryID, - &i.Name, - &i.Description, - &i.DefaultSourceScheme, - &i.DefaultSourceValue, - &i.AllowOverrideSource, - &i.DefaultDestinationScheme, - &i.DefaultDestinationValue, - &i.AllowOverrideDestination, - &i.DefaultRefresh, - &i.RedisplayValue, - &i.ValidationError, - &i.ValidationCondition, - &i.ValidationTypeSystem, - &i.ValidationValueType, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const getProjectsByOrganizationIDs = `-- name: GetProjectsByOrganizationIDs :many SELECT id, created_at, updated_at, organization_id, name, provisioner, active_version_id @@ -870,7 +870,7 @@ func (q *sqlQuerier) GetWorkspaceByUserIDAndName(ctx context.Context, arg GetWor const getWorkspaceHistoryByID = `-- name: GetWorkspaceHistoryByID :one SELECT - id, created_at, updated_at, workspace_id, project_history_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id + id, created_at, updated_at, workspace_id, project_version_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id FROM workspace_history WHERE @@ -887,7 +887,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByID(ctx context.Context, id uuid.UUID) &i.CreatedAt, &i.UpdatedAt, &i.WorkspaceID, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.Name, &i.BeforeID, &i.AfterID, @@ -901,7 +901,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByID(ctx context.Context, id uuid.UUID) const getWorkspaceHistoryByWorkspaceID = `-- name: GetWorkspaceHistoryByWorkspaceID :many SELECT - id, created_at, updated_at, workspace_id, project_history_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id + id, created_at, updated_at, workspace_id, project_version_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id FROM workspace_history WHERE @@ -922,7 +922,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByWorkspaceID(ctx context.Context, works &i.CreatedAt, &i.UpdatedAt, &i.WorkspaceID, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.Name, &i.BeforeID, &i.AfterID, @@ -946,7 +946,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByWorkspaceID(ctx context.Context, works const getWorkspaceHistoryByWorkspaceIDAndName = `-- name: GetWorkspaceHistoryByWorkspaceIDAndName :one SELECT - id, created_at, updated_at, workspace_id, project_history_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id + id, created_at, updated_at, workspace_id, project_version_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id FROM workspace_history WHERE @@ -967,7 +967,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByWorkspaceIDAndName(ctx context.Context &i.CreatedAt, &i.UpdatedAt, &i.WorkspaceID, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.Name, &i.BeforeID, &i.AfterID, @@ -981,7 +981,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByWorkspaceIDAndName(ctx context.Context const getWorkspaceHistoryByWorkspaceIDWithoutAfter = `-- name: GetWorkspaceHistoryByWorkspaceIDWithoutAfter :one SELECT - id, created_at, updated_at, workspace_id, project_history_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id + id, created_at, updated_at, workspace_id, project_version_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id FROM workspace_history WHERE @@ -999,7 +999,7 @@ func (q *sqlQuerier) GetWorkspaceHistoryByWorkspaceIDWithoutAfter(ctx context.Co &i.CreatedAt, &i.UpdatedAt, &i.WorkspaceID, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.Name, &i.BeforeID, &i.AfterID, @@ -1466,126 +1466,12 @@ func (q *sqlQuerier) InsertProject(ctx context.Context, arg InsertProjectParams) return i, err } -const insertProjectHistory = `-- name: InsertProjectHistory :one -INSERT INTO - project_history ( - id, - project_id, - created_at, - updated_at, - name, - description, - storage_method, - storage_source, - import_job_id - ) -VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id, project_id, created_at, updated_at, name, description, storage_method, storage_source, import_job_id -` - -type InsertProjectHistoryParams struct { - ID uuid.UUID `db:"id" json:"id"` - ProjectID uuid.UUID `db:"project_id" json:"project_id"` - CreatedAt time.Time `db:"created_at" json:"created_at"` - UpdatedAt time.Time `db:"updated_at" json:"updated_at"` - Name string `db:"name" json:"name"` - Description string `db:"description" json:"description"` - StorageMethod ProjectStorageMethod `db:"storage_method" json:"storage_method"` - StorageSource []byte `db:"storage_source" json:"storage_source"` - ImportJobID uuid.UUID `db:"import_job_id" json:"import_job_id"` -} - -func (q *sqlQuerier) InsertProjectHistory(ctx context.Context, arg InsertProjectHistoryParams) (ProjectHistory, error) { - row := q.db.QueryRowContext(ctx, insertProjectHistory, - arg.ID, - arg.ProjectID, - arg.CreatedAt, - arg.UpdatedAt, - arg.Name, - arg.Description, - arg.StorageMethod, - arg.StorageSource, - arg.ImportJobID, - ) - var i ProjectHistory - err := row.Scan( - &i.ID, - &i.ProjectID, - &i.CreatedAt, - &i.UpdatedAt, - &i.Name, - &i.Description, - &i.StorageMethod, - &i.StorageSource, - &i.ImportJobID, - ) - return i, err -} - -const insertProjectHistoryLogs = `-- name: InsertProjectHistoryLogs :many -INSERT INTO - project_history_log -SELECT - $1 :: uuid AS project_history_id, - unnest($2 :: uuid [ ]) AS id, - unnest($3 :: timestamptz [ ]) AS created_at, - unnest($4 :: log_source [ ]) as source, - unnest($5 :: log_level [ ]) as level, - unnest($6 :: varchar(1024) [ ]) as output RETURNING id, project_history_id, created_at, source, level, output -` - -type InsertProjectHistoryLogsParams struct { - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` - ID []uuid.UUID `db:"id" json:"id"` - CreatedAt []time.Time `db:"created_at" json:"created_at"` - Source []LogSource `db:"source" json:"source"` - Level []LogLevel `db:"level" json:"level"` - Output []string `db:"output" json:"output"` -} - -func (q *sqlQuerier) InsertProjectHistoryLogs(ctx context.Context, arg InsertProjectHistoryLogsParams) ([]ProjectHistoryLog, error) { - rows, err := q.db.QueryContext(ctx, insertProjectHistoryLogs, - arg.ProjectHistoryID, - pq.Array(arg.ID), - pq.Array(arg.CreatedAt), - pq.Array(arg.Source), - pq.Array(arg.Level), - pq.Array(arg.Output), - ) - if err != nil { - return nil, err - } - defer rows.Close() - var items []ProjectHistoryLog - for rows.Next() { - var i ProjectHistoryLog - if err := rows.Scan( - &i.ID, - &i.ProjectHistoryID, - &i.CreatedAt, - &i.Source, - &i.Level, - &i.Output, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const insertProjectParameter = `-- name: InsertProjectParameter :one INSERT INTO project_parameter ( id, created_at, - project_history_id, + project_version_id, name, description, default_source_scheme, @@ -1620,13 +1506,13 @@ VALUES $15, $16, $17 - ) RETURNING id, created_at, project_history_id, name, description, default_source_scheme, default_source_value, allow_override_source, default_destination_scheme, default_destination_value, allow_override_destination, default_refresh, redisplay_value, validation_error, validation_condition, validation_type_system, validation_value_type + ) RETURNING id, created_at, project_version_id, name, description, default_source_scheme, default_source_value, allow_override_source, default_destination_scheme, default_destination_value, allow_override_destination, default_refresh, redisplay_value, validation_error, validation_condition, validation_type_system, validation_value_type ` type InsertProjectParameterParams struct { ID uuid.UUID `db:"id" json:"id"` CreatedAt time.Time `db:"created_at" json:"created_at"` - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` Name string `db:"name" json:"name"` Description string `db:"description" json:"description"` DefaultSourceScheme ParameterSourceScheme `db:"default_source_scheme" json:"default_source_scheme"` @@ -1647,7 +1533,7 @@ func (q *sqlQuerier) InsertProjectParameter(ctx context.Context, arg InsertProje row := q.db.QueryRowContext(ctx, insertProjectParameter, arg.ID, arg.CreatedAt, - arg.ProjectHistoryID, + arg.ProjectVersionID, arg.Name, arg.Description, arg.DefaultSourceScheme, @@ -1667,7 +1553,7 @@ func (q *sqlQuerier) InsertProjectParameter(ctx context.Context, arg InsertProje err := row.Scan( &i.ID, &i.CreatedAt, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.Name, &i.Description, &i.DefaultSourceScheme, @@ -1686,6 +1572,120 @@ func (q *sqlQuerier) InsertProjectParameter(ctx context.Context, arg InsertProje return i, err } +const insertProjectVersion = `-- name: InsertProjectVersion :one +INSERT INTO + project_version ( + id, + project_id, + created_at, + updated_at, + name, + description, + storage_method, + storage_source, + import_job_id + ) +VALUES + ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id, project_id, created_at, updated_at, name, description, storage_method, storage_source, import_job_id +` + +type InsertProjectVersionParams struct { + ID uuid.UUID `db:"id" json:"id"` + ProjectID uuid.UUID `db:"project_id" json:"project_id"` + CreatedAt time.Time `db:"created_at" json:"created_at"` + UpdatedAt time.Time `db:"updated_at" json:"updated_at"` + Name string `db:"name" json:"name"` + Description string `db:"description" json:"description"` + StorageMethod ProjectStorageMethod `db:"storage_method" json:"storage_method"` + StorageSource []byte `db:"storage_source" json:"storage_source"` + ImportJobID uuid.UUID `db:"import_job_id" json:"import_job_id"` +} + +func (q *sqlQuerier) InsertProjectVersion(ctx context.Context, arg InsertProjectVersionParams) (ProjectVersion, error) { + row := q.db.QueryRowContext(ctx, insertProjectVersion, + arg.ID, + arg.ProjectID, + arg.CreatedAt, + arg.UpdatedAt, + arg.Name, + arg.Description, + arg.StorageMethod, + arg.StorageSource, + arg.ImportJobID, + ) + var i ProjectVersion + err := row.Scan( + &i.ID, + &i.ProjectID, + &i.CreatedAt, + &i.UpdatedAt, + &i.Name, + &i.Description, + &i.StorageMethod, + &i.StorageSource, + &i.ImportJobID, + ) + return i, err +} + +const insertProjectVersionLogs = `-- name: InsertProjectVersionLogs :many +INSERT INTO + project_version_log +SELECT + $1 :: uuid AS project_version_id, + unnest($2 :: uuid [ ]) AS id, + unnest($3 :: timestamptz [ ]) AS created_at, + unnest($4 :: log_source [ ]) as source, + unnest($5 :: log_level [ ]) as level, + unnest($6 :: varchar(1024) [ ]) as output RETURNING id, project_version_id, created_at, source, level, output +` + +type InsertProjectVersionLogsParams struct { + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` + ID []uuid.UUID `db:"id" json:"id"` + CreatedAt []time.Time `db:"created_at" json:"created_at"` + Source []LogSource `db:"source" json:"source"` + Level []LogLevel `db:"level" json:"level"` + Output []string `db:"output" json:"output"` +} + +func (q *sqlQuerier) InsertProjectVersionLogs(ctx context.Context, arg InsertProjectVersionLogsParams) ([]ProjectVersionLog, error) { + rows, err := q.db.QueryContext(ctx, insertProjectVersionLogs, + arg.ProjectVersionID, + pq.Array(arg.ID), + pq.Array(arg.CreatedAt), + pq.Array(arg.Source), + pq.Array(arg.Level), + pq.Array(arg.Output), + ) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ProjectVersionLog + for rows.Next() { + var i ProjectVersionLog + if err := rows.Scan( + &i.ID, + &i.ProjectVersionID, + &i.CreatedAt, + &i.Source, + &i.Level, + &i.Output, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const insertProvisionerDaemon = `-- name: InsertProvisionerDaemon :one INSERT INTO provisioner_daemon (id, created_at, name, provisioners) @@ -1934,7 +1934,7 @@ INSERT INTO created_at, updated_at, workspace_id, - project_history_id, + project_version_id, before_id, name, transition, @@ -1943,7 +1943,7 @@ INSERT INTO provisioner_state ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING id, created_at, updated_at, workspace_id, project_history_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING id, created_at, updated_at, workspace_id, project_version_id, name, before_id, after_id, transition, initiator, provisioner_state, provision_job_id ` type InsertWorkspaceHistoryParams struct { @@ -1951,7 +1951,7 @@ type InsertWorkspaceHistoryParams struct { CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` - ProjectHistoryID uuid.UUID `db:"project_history_id" json:"project_history_id"` + ProjectVersionID uuid.UUID `db:"project_version_id" json:"project_version_id"` BeforeID uuid.NullUUID `db:"before_id" json:"before_id"` Name string `db:"name" json:"name"` Transition WorkspaceTransition `db:"transition" json:"transition"` @@ -1966,7 +1966,7 @@ func (q *sqlQuerier) InsertWorkspaceHistory(ctx context.Context, arg InsertWorks arg.CreatedAt, arg.UpdatedAt, arg.WorkspaceID, - arg.ProjectHistoryID, + arg.ProjectVersionID, arg.BeforeID, arg.Name, arg.Transition, @@ -1980,7 +1980,7 @@ func (q *sqlQuerier) InsertWorkspaceHistory(ctx context.Context, arg InsertWorks &i.CreatedAt, &i.UpdatedAt, &i.WorkspaceID, - &i.ProjectHistoryID, + &i.ProjectVersionID, &i.Name, &i.BeforeID, &i.AfterID, diff --git a/httpmw/projecthistoryparam.go b/httpmw/projecthistoryparam.go index 07f6a0e9010b5..21deceff87825 100644 --- a/httpmw/projecthistoryparam.go +++ b/httpmw/projecthistoryparam.go @@ -13,47 +13,47 @@ import ( "github.com/coder/coder/httpapi" ) -type projectHistoryParamContextKey struct{} +type projectVersionParamContextKey struct{} -// ProjectHistoryParam returns the project history from the ExtractProjectHistoryParam handler. -func ProjectHistoryParam(r *http.Request) database.ProjectHistory { - projectHistory, ok := r.Context().Value(projectHistoryParamContextKey{}).(database.ProjectHistory) +// ProjectVersionParam returns the project version from the ExtractProjectVersionParam handler. +func ProjectVersionParam(r *http.Request) database.ProjectVersion { + projectVersion, ok := r.Context().Value(projectVersionParamContextKey{}).(database.ProjectVersion) if !ok { - panic("developer error: project history param middleware not provided") + panic("developer error: project version param middleware not provided") } - return projectHistory + return projectVersion } -// ExtractProjectHistoryParam grabs project history from the "projecthistory" URL parameter. -func ExtractProjectHistoryParam(db database.Store) func(http.Handler) http.Handler { +// ExtractProjectVersionParam grabs project version from the "projectversion" URL parameter. +func ExtractProjectVersionParam(db database.Store) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { project := ProjectParam(r) - projectHistoryName := chi.URLParam(r, "projecthistory") - if projectHistoryName == "" { + projectVersionName := chi.URLParam(r, "projectversion") + if projectVersionName == "" { httpapi.Write(rw, http.StatusBadRequest, httpapi.Response{ - Message: "project history name must be provided", + Message: "project version name must be provided", }) return } - projectHistory, err := db.GetProjectHistoryByProjectIDAndName(r.Context(), database.GetProjectHistoryByProjectIDAndNameParams{ + projectVersion, err := db.GetProjectVersionByProjectIDAndName(r.Context(), database.GetProjectVersionByProjectIDAndNameParams{ ProjectID: project.ID, - Name: projectHistoryName, + Name: projectVersionName, }) if errors.Is(err, sql.ErrNoRows) { httpapi.Write(rw, http.StatusNotFound, httpapi.Response{ - Message: fmt.Sprintf("project history %q does not exist", projectHistoryName), + Message: fmt.Sprintf("project version %q does not exist", projectVersionName), }) return } if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ - Message: fmt.Sprintf("get project history: %s", err.Error()), + Message: fmt.Sprintf("get project version: %s", err.Error()), }) return } - ctx := context.WithValue(r.Context(), projectHistoryParamContextKey{}, projectHistory) + ctx := context.WithValue(r.Context(), projectVersionParamContextKey{}, projectVersion) next.ServeHTTP(rw, r.WithContext(ctx)) }) } diff --git a/httpmw/projecthistoryparam_test.go b/httpmw/projecthistoryparam_test.go index dbac93517637a..b5054a58231b8 100644 --- a/httpmw/projecthistoryparam_test.go +++ b/httpmw/projecthistoryparam_test.go @@ -19,7 +19,7 @@ import ( "github.com/coder/coder/httpmw" ) -func TestProjectHistoryParam(t *testing.T) { +func TestProjectVersionParam(t *testing.T) { t.Parallel() setupAuthentication := func(db database.Store) (*http.Request, database.Project) { @@ -94,7 +94,7 @@ func TestProjectHistoryParam(t *testing.T) { httpmw.ExtractAPIKey(db, nil), httpmw.ExtractOrganizationParam(db), httpmw.ExtractProjectParam(db), - httpmw.ExtractProjectHistoryParam(db), + httpmw.ExtractProjectVersionParam(db), ) rtr.Get("/", nil) r, _ := setupAuthentication(db) @@ -114,12 +114,12 @@ func TestProjectHistoryParam(t *testing.T) { httpmw.ExtractAPIKey(db, nil), httpmw.ExtractOrganizationParam(db), httpmw.ExtractProjectParam(db), - httpmw.ExtractProjectHistoryParam(db), + httpmw.ExtractProjectVersionParam(db), ) rtr.Get("/", nil) r, _ := setupAuthentication(db) - chi.RouteContext(r.Context()).URLParams.Add("projecthistory", "nothin") + chi.RouteContext(r.Context()).URLParams.Add("projectversion", "nothin") rw := httptest.NewRecorder() rtr.ServeHTTP(rw, r) @@ -128,7 +128,7 @@ func TestProjectHistoryParam(t *testing.T) { require.Equal(t, http.StatusNotFound, res.StatusCode) }) - t.Run("ProjectHistory", func(t *testing.T) { + t.Run("ProjectVersion", func(t *testing.T) { t.Parallel() db := databasefake.New() rtr := chi.NewRouter() @@ -136,21 +136,21 @@ func TestProjectHistoryParam(t *testing.T) { httpmw.ExtractAPIKey(db, nil), httpmw.ExtractOrganizationParam(db), httpmw.ExtractProjectParam(db), - httpmw.ExtractProjectHistoryParam(db), + httpmw.ExtractProjectVersionParam(db), ) rtr.Get("/", func(rw http.ResponseWriter, r *http.Request) { - _ = httpmw.ProjectHistoryParam(r) + _ = httpmw.ProjectVersionParam(r) rw.WriteHeader(http.StatusOK) }) r, project := setupAuthentication(db) - projectHistory, err := db.InsertProjectHistory(context.Background(), database.InsertProjectHistoryParams{ + projectVersion, err := db.InsertProjectVersion(context.Background(), database.InsertProjectVersionParams{ ID: uuid.New(), ProjectID: project.ID, Name: "moo", }) require.NoError(t, err) - chi.RouteContext(r.Context()).URLParams.Add("projecthistory", projectHistory.Name) + chi.RouteContext(r.Context()).URLParams.Add("projectversion", projectVersion.Name) rw := httptest.NewRecorder() rtr.ServeHTTP(rw, r) diff --git a/provisionerd/proto/provisionerd.pb.go b/provisionerd/proto/provisionerd.pb.go index 0f1723b09b4e4..c7b59d6f6fcdc 100644 --- a/provisionerd/proto/provisionerd.pb.go +++ b/provisionerd/proto/provisionerd.pb.go @@ -602,8 +602,8 @@ type AcquiredJob_ProjectImport struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectHistoryId string `protobuf:"bytes,1,opt,name=project_history_id,json=projectHistoryId,proto3" json:"project_history_id,omitempty"` - ProjectHistoryName string `protobuf:"bytes,2,opt,name=project_history_name,json=projectHistoryName,proto3" json:"project_history_name,omitempty"` + ProjectVersionId string `protobuf:"bytes,1,opt,name=project_version_id,json=projectVersionId,proto3" json:"project_version_id,omitempty"` + ProjectVersionName string `protobuf:"bytes,2,opt,name=project_version_name,json=projectVersionName,proto3" json:"project_version_name,omitempty"` } func (x *AcquiredJob_ProjectImport) Reset() { @@ -638,16 +638,16 @@ func (*AcquiredJob_ProjectImport) Descriptor() ([]byte, []int) { return file_provisionerd_proto_provisionerd_proto_rawDescGZIP(), []int{1, 1} } -func (x *AcquiredJob_ProjectImport) GetProjectHistoryId() string { +func (x *AcquiredJob_ProjectImport) GetProjectVersionId() string { if x != nil { - return x.ProjectHistoryId + return x.ProjectVersionId } return "" } -func (x *AcquiredJob_ProjectImport) GetProjectHistoryName() string { +func (x *AcquiredJob_ProjectImport) GetProjectVersionName() string { if x != nil { - return x.ProjectHistoryName + return x.ProjectVersionName } return "" } @@ -805,12 +805,12 @@ var file_provisionerd_proto_provisionerd_proto_rawDesc = []byte{ 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x6f, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, - 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4e, + 0x6f, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3b, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, diff --git a/provisionerd/proto/provisionerd.proto b/provisionerd/proto/provisionerd.proto index 836d2d5f49a3a..accb69e99f542 100644 --- a/provisionerd/proto/provisionerd.proto +++ b/provisionerd/proto/provisionerd.proto @@ -18,8 +18,8 @@ message AcquiredJob { bytes state = 4; } message ProjectImport { - string project_history_id = 1; - string project_history_name = 2; + string project_version_id = 1; + string project_version_name = 2; } string job_id = 1; int64 created_at = 2; diff --git a/provisionerd/provisionerd.go b/provisionerd/provisionerd.go index f751847b6afe3..2eff81620b87c 100644 --- a/provisionerd/provisionerd.go +++ b/provisionerd/provisionerd.go @@ -318,7 +318,7 @@ func (p *provisionerDaemon) runJob(ctx context.Context, job *proto.AcquiredJob) switch jobType := job.Type.(type) { case *proto.AcquiredJob_ProjectImport_: p.opts.Logger.Debug(context.Background(), "acquired job is project import", - slog.F("project_history_name", jobType.ProjectImport.ProjectHistoryName), + slog.F("project_version_name", jobType.ProjectImport.ProjectVersionName), ) p.runProjectImport(ctx, provisioner, job) @@ -362,7 +362,7 @@ func (p *provisionerDaemon) runProjectImport(ctx context.Context, provisioner sd p.opts.Logger.Debug(context.Background(), "parse job logged", slog.F("level", msgType.Log.Level), slog.F("output", msgType.Log.Output), - slog.F("project_history_id", job.GetProjectImport().ProjectHistoryId), + slog.F("project_version_id", job.GetProjectImport().ProjectVersionId), ) err = p.updateStream.Send(&proto.JobUpdate{ From 7c46342543ba80b67a841f4bba26adab0ce2859c Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Sat, 5 Feb 2022 01:02:51 +0000 Subject: [PATCH 2/2] Rename files --- coderd/{projecthistory.go => projectversion.go} | 0 coderd/{projecthistory_test.go => projectversion_test.go} | 0 httpmw/{projecthistoryparam.go => projectversionparam.go} | 0 .../{projecthistoryparam_test.go => projectversionparam_test.go} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename coderd/{projecthistory.go => projectversion.go} (100%) rename coderd/{projecthistory_test.go => projectversion_test.go} (100%) rename httpmw/{projecthistoryparam.go => projectversionparam.go} (100%) rename httpmw/{projecthistoryparam_test.go => projectversionparam_test.go} (100%) diff --git a/coderd/projecthistory.go b/coderd/projectversion.go similarity index 100% rename from coderd/projecthistory.go rename to coderd/projectversion.go diff --git a/coderd/projecthistory_test.go b/coderd/projectversion_test.go similarity index 100% rename from coderd/projecthistory_test.go rename to coderd/projectversion_test.go diff --git a/httpmw/projecthistoryparam.go b/httpmw/projectversionparam.go similarity index 100% rename from httpmw/projecthistoryparam.go rename to httpmw/projectversionparam.go diff --git a/httpmw/projecthistoryparam_test.go b/httpmw/projectversionparam_test.go similarity index 100% rename from httpmw/projecthistoryparam_test.go rename to httpmw/projectversionparam_test.go pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy