Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat: Implement joins with golang templates#6429

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
Emyrk merged 43 commits intomainfromstevenmasley/build_with_template
Mar 10, 2023
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
43 commits
Select commitHold shift + click to select a range
1979cde
feat: Implement view for workspace builds to include rbac info
EmyrkFeb 28, 2023
4c0cd84
chore: Use workspace build as RBAC object
EmyrkFeb 28, 2023
ef9936f
Merge remote-tracking branch 'origin/main' into stevenmasley/rbac_views
EmyrkFeb 28, 2023
0b98766
Remove uneeded extra code
EmyrkFeb 28, 2023
8a26947
UsePostFilter
EmyrkFeb 28, 2023
6bee9af
Remove some db round trips
EmyrkFeb 28, 2023
81165d5
Fix dbgen unit test
EmyrkFeb 28, 2023
e252c04
Fix compile issue
EmyrkFeb 28, 2023
961ffaf
Merge remote-tracking branch 'origin/main' into stevenmasley/rbac_views
EmyrkFeb 28, 2023
b698672
fix merge
EmyrkFeb 28, 2023
3ce72c5
rename migration file +1
EmyrkFeb 28, 2023
c3c2702
Merge remote-tracking branch 'origin/main' into stevenmasley/rbac_views
EmyrkMar 1, 2023
c3218f7
fix fake
EmyrkMar 1, 2023
67a5b4a
chore: Use golang templates instead of sqlc files
EmyrkMar 2, 2023
6484021
Combine all queries into 1
EmyrkMar 2, 2023
a8ceb72
Refactor sqlx to it's own package
EmyrkMar 7, 2023
29d41ab
Use sqlx for workspace build queries
EmyrkMar 7, 2023
b46813f
Pass arguments
EmyrkMar 7, 2023
8dc8c42
Handle nonzero limit
EmyrkMar 7, 2023
e907a0f
Fix sqlx unit test
EmyrkMar 7, 2023
60871ab
Merge remote-tracking branch 'origin/main' into stevenmasley/build_wi…
EmyrkMar 7, 2023
fe13549
Fix unit tests
EmyrkMar 7, 2023
e91476d
Fix unit tests
EmyrkMar 7, 2023
03547a3
cleanup
EmyrkMar 8, 2023
4495962
Test fixes
EmyrkMar 8, 2023
fd867d0
remove unused function
EmyrkMar 8, 2023
3a116ee
Rename back to WorkspaceBuild
EmyrkMar 8, 2023
fc838bf
Make fmt
EmyrkMar 8, 2023
4dc0a34
Make gens and make fmts
EmyrkMar 8, 2023
95bda31
Merge remote-tracking branch 'origin/main' into stevenmasley/build_wi…
EmyrkMar 8, 2023
98f8c56
Make gen
EmyrkMar 8, 2023
e0a09f0
fix linting errors
EmyrkMar 8, 2023
7b448d1
Merge remote-tracking branch 'origin/main' into stevenmasley/build_wi…
EmyrkMar 8, 2023
1eebb14
Make dump.sql
EmyrkMar 8, 2023
b13f593
Handle transactions
EmyrkMar 8, 2023
56b847e
Fix a unit ttest
EmyrkMar 8, 2023
2cce422
Fix a unit ttest
EmyrkMar 8, 2023
f5a87ca
Fix deadlock
EmyrkMar 8, 2023
d80dd10
Panic instead of error
EmyrkMar 9, 2023
2949513
Put back in error
EmyrkMar 9, 2023
7f480fb
Remove generic function use
EmyrkMar 9, 2023
7d6a0da
Panic when query loading fails
EmyrkMar 10, 2023
91cf7a8
Merge remote-tracking branch 'origin/main' into stevenmasley/build_wi…
EmyrkMar 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletioncoderd/audit/diff.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ type Auditable interface {
database.User |
database.Workspace |
database.GitSSHKey |
database.WorkspaceBuild |
database.WorkspaceBuildRBAC |
database.AuditableGroup |
database.License
}
Expand Down
6 changes: 3 additions & 3 deletionscoderd/audit/request.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -62,7 +62,7 @@ func ResourceTarget[T Auditable](tgt T) string {
return typed.Username
case database.Workspace:
return typed.Name
case database.WorkspaceBuild:
case database.WorkspaceBuildRBAC:
// this isn't used
return ""
case database.GitSSHKey:
Expand All@@ -89,7 +89,7 @@ func ResourceID[T Auditable](tgt T) uuid.UUID {
return typed.ID
case database.Workspace:
return typed.ID
case database.WorkspaceBuild:
case database.WorkspaceBuildRBAC:
return typed.ID
case database.GitSSHKey:
return typed.UserID
Expand All@@ -114,7 +114,7 @@ func ResourceType[T Auditable](tgt T) database.ResourceType {
return database.ResourceTypeUser
case database.Workspace:
return database.ResourceTypeWorkspace
case database.WorkspaceBuild:
case database.WorkspaceBuildRBAC:
return database.ResourceTypeWorkspaceBuild
case database.GitSSHKey:
return database.ResourceTypeGitSshKey
Expand Down
4 changes: 2 additions & 2 deletionscoderd/autobuild/executor/lifecycle_executor.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -204,7 +204,7 @@ func isEligibleForAutoStartStop(ws database.Workspace) bool {

func getNextTransition(
ws database.Workspace,
priorHistory database.WorkspaceBuild,
priorHistory database.WorkspaceBuildRBAC,
priorJob database.ProvisionerJob,
) (
validTransition database.WorkspaceTransition,
Expand DownExpand Up@@ -239,7 +239,7 @@ func getNextTransition(

// TODO(cian): this function duplicates most of api.postWorkspaceBuilds. Refactor.
// See: https://github.com/coder/coder/issues/1401
func build(ctx context.Context, store database.Store, workspace database.Workspace, trans database.WorkspaceTransition, priorHistory database.WorkspaceBuild, priorJob database.ProvisionerJob) error {
func build(ctx context.Context, store database.Store, workspace database.Workspace, trans database.WorkspaceTransition, priorHistory database.WorkspaceBuildRBAC, priorJob database.ProvisionerJob) error {
template, err := store.GetTemplateByID(ctx, workspace.TemplateID)
if err != nil {
return xerrors.Errorf("get workspace template: %w", err)
Expand Down
7 changes: 3 additions & 4 deletionscoderd/autobuild/executor/lifecycle_executor_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,16 @@ package executor_test

import (
"context"
"os"
"testing"
"time"

"go.uber.org/goleak"

"github.com/google/uuid"
"go.uber.org/goleak"

"github.com/coder/coder/coderd/autobuild/executor"
"github.com/coder/coder/coderd/coderdtest"
"github.com/coder/coder/coderd/database"
"github.com/coder/coder/coderd/database/dbtestutil"
"github.com/coder/coder/coderd/schedule"
"github.com/coder/coder/coderd/util/ptr"
"github.com/coder/coder/codersdk"
Expand DownExpand Up@@ -493,7 +492,7 @@ func TestExecutorWorkspaceAutostopNoWaitChangedMyMind(t *testing.T) {
}

func TestExecutorAutostartMultipleOK(t *testing.T) {
ifos.Getenv("DB") == "" {
if!dbtestutil.UsingRealDatabase() {
t.Skip(`This test only really works when using a "real" database, similar to a HA setup`)
}

Expand Down
12 changes: 12 additions & 0 deletionscoderd/database/db.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,6 +16,8 @@ import (

"github.com/jmoiron/sqlx"
"golang.org/x/xerrors"

"github.com/coder/coder/coderd/database/sqlxqueries"
)

// Store contains all queryable database functions.
Expand All@@ -37,11 +39,21 @@ type DBTX interface {
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error
GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error

// Extends the sqlx interface
sqlx.QueryerContext
}

// New creates a new database store using a SQL database connection.
func New(sdb *sql.DB) Store {
dbx := sqlx.NewDb(sdb, "postgres")
// Load the embedded queries. If this fails, some of our queries
// will never work. This is a fatal developer error that should never
// happen.
_, err := sqlxqueries.LoadQueries()
if err != nil {
panic(xerrors.Errorf("load queries: %w", err))
}
return &sqlQuerier{
db: dbx,
sdb: dbx,
Expand Down
86 changes: 25 additions & 61 deletionscoderd/database/dbauthz/querier.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1167,25 +1167,12 @@ func (q *querier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesP
return q.db.GetAuthorizedWorkspaces(ctx, arg, prep)
}

func (q *querier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) {
if _, err := q.GetWorkspaceByID(ctx, workspaceID); err != nil {
return database.WorkspaceBuild{}, err
}
return q.db.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspaceID)
func (q *querier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
return fetch(q.log, q.auth, q.db.GetLatestWorkspaceBuildByWorkspaceID)(ctx, workspaceID)
}

func (q *querier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceBuild, error) {
// This is not ideal as not all builds will be returned if the workspace cannot be read.
// This should probably be handled differently? Maybe join workspace builds with workspace
// ownership properties and filter on that.
for _, id := range ids {
_, err := q.GetWorkspaceByID(ctx, id)
if err != nil {
return nil, err
}
}

return q.db.GetLatestWorkspaceBuildsByWorkspaceIDs(ctx, ids)
func (q *querier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceBuildRBAC, error) {
return fetchWithPostFilter(q.auth, q.db.GetLatestWorkspaceBuildsByWorkspaceIDs)(ctx, ids)
}

func (q *querier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (database.WorkspaceAgent, error) {
Expand DownExpand Up@@ -1263,35 +1250,16 @@ func (q *querier) GetWorkspaceAppsByAgentID(ctx context.Context, agentID uuid.UU
return q.db.GetWorkspaceAppsByAgentID(ctx, agentID)
}

func (q *querier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuild, error) {
build, err := q.db.GetWorkspaceBuildByID(ctx, buildID)
if err != nil {
return database.WorkspaceBuild{}, err
}
if _, err := q.GetWorkspaceByID(ctx, build.WorkspaceID); err != nil {
return database.WorkspaceBuild{}, err
}
return build, nil
func (q *querier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByID)(ctx, buildID)
}

func (q *querier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) {
build, err := q.db.GetWorkspaceBuildByJobID(ctx, jobID)
if err != nil {
return database.WorkspaceBuild{}, err
}
// Authorized fetch
_, err = q.GetWorkspaceByID(ctx, build.WorkspaceID)
if err != nil {
return database.WorkspaceBuild{}, err
}
return build, nil
func (q *querier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByJobID)(ctx, jobID)
}

func (q *querier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) {
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
return database.WorkspaceBuild{}, err
}
return q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx, arg)
func (q *querier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuildRBAC, error) {
return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber)(ctx, arg)
}

func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuildID uuid.UUID) ([]database.WorkspaceBuildParameter, error) {
Expand All@@ -1305,11 +1273,20 @@ func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuil
return q.db.GetWorkspaceBuildParameters(ctx, workspaceBuildID)
}

func (q *querier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuild, error) {
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
func (q *querier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuildRBAC, error) {
builds, err := q.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
if err != nil {
return nil, err
}
if len(builds) == 0 {
return []database.WorkspaceBuildRBAC{}, nil
}
// All builds come from the same workspace, so we only need to check the first one.
err = q.authorizeContext(ctx, rbac.ActionRead, builds[0])
if err != nil {
return nil, err
}
returnq.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
returnbuilds, nil
}

func (q *querier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) {
Expand DownExpand Up@@ -1369,11 +1346,7 @@ func (q *querier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.U
if err != nil {
return nil, err
}
workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
if err != nil {
return nil, err
}
obj = workspace
obj = build
default:
return nil, xerrors.Errorf("unknown job type: %s", job.Type)
}
Expand DownExpand Up@@ -1414,12 +1387,7 @@ func (q *querier) InsertWorkspaceBuildParameters(ctx context.Context, arg databa
return err
}

workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
if err != nil {
return err
}

err = q.authorizeContext(ctx, rbac.ActionUpdate, workspace)
err = q.authorizeContext(ctx, rbac.ActionUpdate, build)
if err != nil {
return err
}
Expand DownExpand Up@@ -1483,11 +1451,7 @@ func (q *querier) UpdateWorkspaceBuildByID(ctx context.Context, arg database.Upd
return database.WorkspaceBuild{}, err
}

workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
if err != nil {
return database.WorkspaceBuild{}, err
}
err = q.authorizeContext(ctx, rbac.ActionUpdate, workspace.RBACObject())
err = q.authorizeContext(ctx, rbac.ActionUpdate, build)
if err != nil {
return database.WorkspaceBuild{}, err
}
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp