Skip to content

Commit

Permalink
feat: add user property to project (#422)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: users need to run 'daytona server configure' and configure the default user

Signed-off-by: Toma Puljak <[email protected]>
  • Loading branch information
Tpuljak authored Apr 22, 2024
1 parent 7dcd550 commit d72417f
Show file tree
Hide file tree
Showing 19 changed files with 244 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/util/apiclient/server/conversion/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ func ToProjectDTO(project *workspace.Project) *serverapiclient.Project {
Target: &project.Target,
WorkspaceId: &project.WorkspaceId,
Image: &project.Image,
User: &project.User,
Repository: &serverapiclient.GitRepository{
Id: &project.Repository.Id,
Name: &project.Repository.Name,
Expand Down
9 changes: 9 additions & 0 deletions pkg/api/docs/docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1122,6 +1122,9 @@ const docTemplate = `{
},
"source": {
"$ref": "#/definitions/CreateWorkspaceRequestProjectSource"
},
"user": {
"type": "string"
}
}
},
Expand Down Expand Up @@ -1286,6 +1289,9 @@ const docTemplate = `{
"target": {
"type": "string"
},
"user": {
"type": "string"
},
"workspaceId": {
"type": "string"
}
Expand Down Expand Up @@ -1366,6 +1372,9 @@ const docTemplate = `{
"defaultProjectImage": {
"type": "string"
},
"defaultProjectUser": {
"type": "string"
},
"frps": {
"$ref": "#/definitions/FRPSConfig"
},
Expand Down
9 changes: 9 additions & 0 deletions pkg/api/docs/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -1119,6 +1119,9 @@
},
"source": {
"$ref": "#/definitions/CreateWorkspaceRequestProjectSource"
},
"user": {
"type": "string"
}
}
},
Expand Down Expand Up @@ -1283,6 +1286,9 @@
"target": {
"type": "string"
},
"user": {
"type": "string"
},
"workspaceId": {
"type": "string"
}
Expand Down Expand Up @@ -1363,6 +1369,9 @@
"defaultProjectImage": {
"type": "string"
},
"defaultProjectUser": {
"type": "string"
},
"frps": {
"$ref": "#/definitions/FRPSConfig"
},
Expand Down
6 changes: 6 additions & 0 deletions pkg/api/docs/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ definitions:
type: string
source:
$ref: '#/definitions/CreateWorkspaceRequestProjectSource'
user:
type: string
type: object
CreateWorkspaceRequestProjectSource:
properties:
Expand Down Expand Up @@ -151,6 +153,8 @@ definitions:
$ref: '#/definitions/ProjectState'
target:
type: string
user:
type: string
workspaceId:
type: string
type: object
Expand Down Expand Up @@ -203,6 +207,8 @@ definitions:
type: string
defaultProjectImage:
type: string
defaultProjectUser:
type: string
frps:
$ref: '#/definitions/FRPSConfig'
headscalePort:
Expand Down
1 change: 1 addition & 0 deletions pkg/cmd/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ var ServerCmd = &cobra.Command{
ServerApiUrl: util.GetFrpcApiUrl(c.Frps.Protocol, c.Id, c.Frps.Domain),
ServerUrl: util.GetFrpcServerUrl(c.Frps.Protocol, c.Id, c.Frps.Domain),
DefaultProjectImage: c.DefaultProjectImage,
DefaultProjectUser: c.DefaultProjectUser,
Provisioner: provisioner,
NewWorkspaceLogger: func(workspaceId string) logger.Logger {
return logger.NewWorkspaceLogger(logsDir, workspaceId)
Expand Down
1 change: 1 addition & 0 deletions pkg/server/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ type Config struct {
BinariesPath string `json:"binariesPath"`
LogFilePath string `json:"logFilePath"`
DefaultProjectImage string `json:"defaultProjectImage"`
DefaultProjectUser string `json:"defaultProjectUser"`
} // @name ServerConfig
6 changes: 6 additions & 0 deletions pkg/server/workspaces/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,15 @@ func (s *WorkspaceService) CreateWorkspace(req dto.CreateWorkspaceRequest) (*wor
projectImage = *project.Image
}

projectUser := s.defaultProjectUser
if project.User != nil {
projectUser = *project.User
}

project := &workspace.Project{
Name: project.Name,
Image: projectImage,
User: projectUser,
Repository: project.Source.Repository,
WorkspaceId: w.Id,
ApiKey: apiKey,
Expand Down
1 change: 1 addition & 0 deletions pkg/server/workspaces/dto/workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ type CreateWorkspaceRequestProject struct {
Id string `json:"id"`
Name string `json:"name"`
Image *string `json:"image,omitempty"`
User *string `json:"user,omitempty"`
Source CreateWorkspaceRequestProjectSource `json:"source"`
EnvVars map[string]string `json:"envVars"`
} // @name CreateWorkspaceRequestProject
Expand Down
3 changes: 3 additions & 0 deletions pkg/server/workspaces/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ type WorkspaceServiceConfig struct {
ServerUrl string
Provisioner provisioner.IProvisioner
DefaultProjectImage string
DefaultProjectUser string
ApiKeyService apikeys.IApiKeyService
NewWorkspaceLogger func(workspaceId string) logger.Logger
NewProjectLogger func(workspaceId, projectName string) logger.Logger
Expand All @@ -55,6 +56,7 @@ func NewWorkspaceService(config WorkspaceServiceConfig) IWorkspaceService {
serverApiUrl: config.ServerApiUrl,
serverUrl: config.ServerUrl,
defaultProjectImage: config.DefaultProjectImage,
defaultProjectUser: config.DefaultProjectUser,
provisioner: config.Provisioner,
newWorkspaceLogger: config.NewWorkspaceLogger,
newProjectLogger: config.NewProjectLogger,
Expand All @@ -72,6 +74,7 @@ type WorkspaceService struct {
serverApiUrl string
serverUrl string
defaultProjectImage string
defaultProjectUser string
newWorkspaceLogger func(workspaceId string) logger.Logger
newProjectLogger func(workspaceId, projectName string) logger.Logger
newWorkspaceLogReader func(workspaceId string) (io.Reader, error)
Expand Down
2 changes: 2 additions & 0 deletions pkg/server/workspaces/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
const serverApiUrl = "http://localhost:3000"
const serverUrl = "http://localhost:3001"
const defaultProjectImage = "daytonaio/workspace-project:latest"
const defaultProjectUser = "daytona"

var target = provider.ProviderTarget{
Name: "test-target",
Expand Down Expand Up @@ -102,6 +103,7 @@ func TestWorkspaceService(t *testing.T) {
ServerUrl: serverUrl,
ContainerRegistryStore: crStore,
DefaultProjectImage: defaultProjectImage,
DefaultProjectUser: defaultProjectUser,
ApiKeyService: apiKeyService,
Provisioner: provisioner,
NewWorkspaceLogger: func(workspaceId string) logger.Logger {
Expand Down
15 changes: 15 additions & 0 deletions pkg/serverapiclient/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,7 @@ components:
branch: branch
sha: sha
url: url
user: user
- image: image
envVars:
key: envVars
Expand All @@ -815,6 +816,7 @@ components:
branch: branch
sha: sha
url: url
user: user
name: name
id: id
target: target
Expand Down Expand Up @@ -848,6 +850,7 @@ components:
branch: branch
sha: sha
url: url
user: user
properties:
envVars:
additionalProperties:
Expand All @@ -861,6 +864,8 @@ components:
type: string
source:
$ref: '#/components/schemas/CreateWorkspaceRequestProjectSource'
user:
type: string
type: object
CreateWorkspaceRequestProjectSource:
example:
Expand Down Expand Up @@ -1021,6 +1026,7 @@ components:
branch: branch
sha: sha
url: url
user: user
target: target
workspaceId: workspaceId
properties:
Expand All @@ -1034,6 +1040,8 @@ components:
$ref: '#/components/schemas/ProjectState'
target:
type: string
user:
type: string
workspaceId:
type: string
type: object
Expand Down Expand Up @@ -1105,6 +1113,7 @@ components:
binariesPath: binariesPath
logFilePath: logFilePath
defaultProjectImage: defaultProjectImage
defaultProjectUser: defaultProjectUser
providersDir: providersDir
id: id
frps:
Expand All @@ -1118,6 +1127,8 @@ components:
type: string
defaultProjectImage:
type: string
defaultProjectUser:
type: string
frps:
$ref: '#/components/schemas/FRPSConfig'
headscalePort:
Expand Down Expand Up @@ -1158,6 +1169,7 @@ components:
branch: branch
sha: sha
url: url
user: user
target: target
workspaceId: workspaceId
- image: image
Expand All @@ -1175,6 +1187,7 @@ components:
branch: branch
sha: sha
url: url
user: user
target: target
workspaceId: workspaceId
name: name
Expand Down Expand Up @@ -1210,6 +1223,7 @@ components:
branch: branch
sha: sha
url: url
user: user
target: target
workspaceId: workspaceId
- image: image
Expand All @@ -1227,6 +1241,7 @@ components:
branch: branch
sha: sha
url: url
user: user
target: target
workspaceId: workspaceId
name: name
Expand Down
26 changes: 26 additions & 0 deletions pkg/serverapiclient/docs/CreateWorkspaceRequestProject.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Name | Type | Description | Notes
**Image** | Pointer to **string** | | [optional]
**Name** | Pointer to **string** | | [optional]
**Source** | Pointer to [**CreateWorkspaceRequestProjectSource**](CreateWorkspaceRequestProjectSource.md) | | [optional]
**User** | Pointer to **string** | | [optional]

## Methods

Expand Down Expand Up @@ -154,6 +155,31 @@ SetSource sets Source field to given value.

HasSource returns a boolean if a field has been set.

### GetUser

`func (o *CreateWorkspaceRequestProject) GetUser() string`

GetUser returns the User field if non-nil, zero value otherwise.

### GetUserOk

`func (o *CreateWorkspaceRequestProject) GetUserOk() (*string, bool)`

GetUserOk returns a tuple with the User field if it's non-nil, zero value otherwise
and a boolean to check if the value has been set.

### SetUser

`func (o *CreateWorkspaceRequestProject) SetUser(v string)`

SetUser sets User field to given value.

### HasUser

`func (o *CreateWorkspaceRequestProject) HasUser() bool`

HasUser returns a boolean if a field has been set.


[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

Expand Down
26 changes: 26 additions & 0 deletions pkg/serverapiclient/docs/Project.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Name | Type | Description | Notes
**Repository** | Pointer to [**GitRepository**](GitRepository.md) | | [optional]
**State** | Pointer to [**ProjectState**](ProjectState.md) | | [optional]
**Target** | Pointer to **string** | | [optional]
**User** | Pointer to **string** | | [optional]
**WorkspaceId** | Pointer to **string** | | [optional]

## Methods
Expand Down Expand Up @@ -155,6 +156,31 @@ SetTarget sets Target field to given value.

HasTarget returns a boolean if a field has been set.

### GetUser

`func (o *Project) GetUser() string`

GetUser returns the User field if non-nil, zero value otherwise.

### GetUserOk

`func (o *Project) GetUserOk() (*string, bool)`

GetUserOk returns a tuple with the User field if it's non-nil, zero value otherwise
and a boolean to check if the value has been set.

### SetUser

`func (o *Project) SetUser(v string)`

SetUser sets User field to given value.

### HasUser

`func (o *Project) HasUser() bool`

HasUser returns a boolean if a field has been set.

### GetWorkspaceId

`func (o *Project) GetWorkspaceId() string`
Expand Down
26 changes: 26 additions & 0 deletions pkg/serverapiclient/docs/ServerConfig.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Name | Type | Description | Notes
**ApiPort** | Pointer to **int32** | | [optional]
**BinariesPath** | Pointer to **string** | | [optional]
**DefaultProjectImage** | Pointer to **string** | | [optional]
**DefaultProjectUser** | Pointer to **string** | | [optional]
**Frps** | Pointer to [**FRPSConfig**](FRPSConfig.md) | | [optional]
**HeadscalePort** | Pointer to **int32** | | [optional]
**Id** | Pointer to **string** | | [optional]
Expand Down Expand Up @@ -109,6 +110,31 @@ SetDefaultProjectImage sets DefaultProjectImage field to given value.

HasDefaultProjectImage returns a boolean if a field has been set.

### GetDefaultProjectUser

`func (o *ServerConfig) GetDefaultProjectUser() string`

GetDefaultProjectUser returns the DefaultProjectUser field if non-nil, zero value otherwise.

### GetDefaultProjectUserOk

`func (o *ServerConfig) GetDefaultProjectUserOk() (*string, bool)`

GetDefaultProjectUserOk returns a tuple with the DefaultProjectUser field if it's non-nil, zero value otherwise
and a boolean to check if the value has been set.

### SetDefaultProjectUser

`func (o *ServerConfig) SetDefaultProjectUser(v string)`

SetDefaultProjectUser sets DefaultProjectUser field to given value.

### HasDefaultProjectUser

`func (o *ServerConfig) HasDefaultProjectUser() bool`

HasDefaultProjectUser returns a boolean if a field has been set.

### GetFrps

`func (o *ServerConfig) GetFrps() FRPSConfig`
Expand Down
Loading

0 comments on commit d72417f

Please sign in to comment.