diff --git a/config/config_test.go b/config/config_test.go index 41edcd0d..210b0fce 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -412,7 +412,7 @@ func TestGormParams(t *testing.T) { dbType, uri, err := cfg.GormParams() require.Nil(t, err) require.Equal(t, SQLiteBackend, dbType) - require.Equal(t, filepath.Join(dir, "garm.db?_journal_mode=WAL"), uri) + require.Equal(t, filepath.Join(dir, "garm.db?_journal_mode=WAL&_foreign_keys=ON"), uri) cfg.DbBackend = MySQLBackend cfg.MySQL = getMySQLDefaultConfig() diff --git a/database/sql/enterprise.go b/database/sql/enterprise.go index aa8bf25e..7223b9d2 100644 --- a/database/sql/enterprise.go +++ b/database/sql/enterprise.go @@ -148,7 +148,7 @@ func (s *sqlDatabase) CreateEnterprisePool(ctx context.Context, enterpriseID str Flavor: param.Flavor, OSType: param.OSType, OSArch: param.OSArch, - EnterpriseID: enterprise.ID, + EnterpriseID: &enterprise.ID, Enabled: param.Enabled, RunnerBootstrapTimeout: param.RunnerBootstrapTimeout, } diff --git a/database/sql/models.go b/database/sql/models.go index ef368768..4fd827ff 100644 --- a/database/sql/models.go +++ b/database/sql/models.go @@ -65,7 +65,7 @@ type Pool struct { Flavor string `gorm:"index:idx_pool_type"` OSType params.OSType OSArch params.OSArch - Tags []*Tag `gorm:"many2many:pool_tags;"` + Tags []*Tag `gorm:"many2many:pool_tags;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"` Enabled bool // ExtraSpecs is an opaque json that gets sent to the provider // as part of the bootstrap params for instances. It can contain @@ -73,13 +73,13 @@ type Pool struct { ExtraSpecs datatypes.JSON GitHubRunnerGroup string - RepoID uuid.UUID `gorm:"index"` + RepoID *uuid.UUID `gorm:"index"` Repository Repository `gorm:"foreignKey:RepoID"` - OrgID uuid.UUID `gorm:"index"` + OrgID *uuid.UUID `gorm:"index"` Organization Organization `gorm:"foreignKey:OrgID"` - EnterpriseID uuid.UUID `gorm:"index"` + EnterpriseID *uuid.UUID `gorm:"index"` Enterprise Enterprise `gorm:"foreignKey:EnterpriseID"` Instances []Instance `gorm:"foreignKey:PoolID"` diff --git a/database/sql/organizations.go b/database/sql/organizations.go index ac8c0aaf..d104b1bd 100644 --- a/database/sql/organizations.go +++ b/database/sql/organizations.go @@ -165,7 +165,7 @@ func (s *sqlDatabase) CreateOrganizationPool(ctx context.Context, orgId string, Flavor: param.Flavor, OSType: param.OSType, OSArch: param.OSArch, - OrgID: org.ID, + OrgID: &org.ID, Enabled: param.Enabled, RunnerBootstrapTimeout: param.RunnerBootstrapTimeout, } diff --git a/database/sql/repositories.go b/database/sql/repositories.go index 144e6049..0e7ed3d2 100644 --- a/database/sql/repositories.go +++ b/database/sql/repositories.go @@ -165,7 +165,7 @@ func (s *sqlDatabase) CreateRepositoryPool(ctx context.Context, repoId string, p Flavor: param.Flavor, OSType: param.OSType, OSArch: param.OSArch, - RepoID: repo.ID, + RepoID: &repo.ID, Enabled: param.Enabled, RunnerBootstrapTimeout: param.RunnerBootstrapTimeout, } diff --git a/database/sql/util.go b/database/sql/util.go index 9392f5ec..84bffc5c 100644 --- a/database/sql/util.go +++ b/database/sql/util.go @@ -21,7 +21,6 @@ import ( "github.com/cloudbase/garm/params" "github.com/cloudbase/garm/util" - "github.com/google/uuid" "github.com/pkg/errors" "gorm.io/datatypes" "gorm.io/gorm" @@ -152,19 +151,19 @@ func (s *sqlDatabase) sqlToCommonPool(pool Pool) params.Pool { GitHubRunnerGroup: pool.GitHubRunnerGroup, } - if pool.RepoID != uuid.Nil { + if pool.RepoID != nil { ret.RepoID = pool.RepoID.String() if pool.Repository.Owner != "" && pool.Repository.Name != "" { ret.RepoName = fmt.Sprintf("%s/%s", pool.Repository.Owner, pool.Repository.Name) } } - if pool.OrgID != uuid.Nil && pool.Organization.Name != "" { + if pool.OrgID != nil && pool.Organization.Name != "" { ret.OrgID = pool.OrgID.String() ret.OrgName = pool.Organization.Name } - if pool.EnterpriseID != uuid.Nil && pool.Enterprise.Name != "" { + if pool.EnterpriseID != nil && pool.Enterprise.Name != "" { ret.EnterpriseID = pool.EnterpriseID.String() ret.EnterpriseName = pool.Enterprise.Name }