Skip to content

Commit 3071863

Browse files
authored
fix: avoid db import in slim builds (#11258)
1 parent 28a0242 commit 3071863

File tree

2 files changed

+86
-89
lines changed

2 files changed

+86
-89
lines changed

agent/proto/convert.go

-86
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,13 @@ package proto
22

33
import (
44
"strings"
5-
"time"
65

76
"github.com/google/uuid"
87
"golang.org/x/xerrors"
9-
"google.golang.org/protobuf/types/known/durationpb"
108

11-
"github.com/coder/coder/v2/coderd/database"
12-
"github.com/coder/coder/v2/coderd/database/db2sdk"
139
"github.com/coder/coder/v2/codersdk"
1410
)
1511

16-
func DBAgentMetadataToProtoDescription(metadata []database.WorkspaceAgentMetadatum) []*WorkspaceAgentMetadata_Description {
17-
ret := make([]*WorkspaceAgentMetadata_Description, len(metadata))
18-
for i, metadatum := range metadata {
19-
ret[i] = DBAgentMetadatumToProtoDescription(metadatum)
20-
}
21-
return ret
22-
}
23-
24-
func DBAgentMetadatumToProtoDescription(metadatum database.WorkspaceAgentMetadatum) *WorkspaceAgentMetadata_Description {
25-
return &WorkspaceAgentMetadata_Description{
26-
DisplayName: metadatum.DisplayName,
27-
Key: metadatum.Key,
28-
Script: metadatum.Script,
29-
Interval: durationpb.New(time.Duration(metadatum.Interval)),
30-
Timeout: durationpb.New(time.Duration(metadatum.Timeout)),
31-
}
32-
}
33-
3412
func SDKAgentMetadataDescriptionsFromProto(descriptions []*WorkspaceAgentMetadata_Description) []codersdk.WorkspaceAgentMetadataDescription {
3513
ret := make([]codersdk.WorkspaceAgentMetadataDescription, len(descriptions))
3614
for i, description := range descriptions {
@@ -49,27 +27,6 @@ func SDKAgentMetadataDescriptionFromProto(description *WorkspaceAgentMetadata_De
4927
}
5028
}
5129

52-
func DBAgentScriptsToProto(scripts []database.WorkspaceAgentScript) []*WorkspaceAgentScript {
53-
ret := make([]*WorkspaceAgentScript, len(scripts))
54-
for i, script := range scripts {
55-
ret[i] = DBAgentScriptToProto(script)
56-
}
57-
return ret
58-
}
59-
60-
func DBAgentScriptToProto(script database.WorkspaceAgentScript) *WorkspaceAgentScript {
61-
return &WorkspaceAgentScript{
62-
LogSourceId: script.LogSourceID[:],
63-
LogPath: script.LogPath,
64-
Script: script.Script,
65-
Cron: script.Cron,
66-
RunOnStart: script.RunOnStart,
67-
RunOnStop: script.RunOnStop,
68-
StartBlocksLogin: script.StartBlocksLogin,
69-
Timeout: durationpb.New(time.Duration(script.TimeoutSeconds) * time.Second),
70-
}
71-
}
72-
7330
func SDKAgentScriptsFromProto(protoScripts []*WorkspaceAgentScript) ([]codersdk.WorkspaceAgentScript, error) {
7431
ret := make([]codersdk.WorkspaceAgentScript, len(protoScripts))
7532
for i, protoScript := range protoScripts {
@@ -100,49 +57,6 @@ func SDKAgentScriptFromProto(protoScript *WorkspaceAgentScript) (codersdk.Worksp
10057
}, nil
10158
}
10259

103-
func DBAppsToProto(dbApps []database.WorkspaceApp, agent database.WorkspaceAgent, ownerName string, workspace database.Workspace) ([]*WorkspaceApp, error) {
104-
ret := make([]*WorkspaceApp, len(dbApps))
105-
for i, dbApp := range dbApps {
106-
var err error
107-
ret[i], err = DBAppToProto(dbApp, agent, ownerName, workspace)
108-
if err != nil {
109-
return nil, xerrors.Errorf("parse app %v (%q): %w", i, dbApp.Slug, err)
110-
}
111-
}
112-
return ret, nil
113-
}
114-
115-
func DBAppToProto(dbApp database.WorkspaceApp, agent database.WorkspaceAgent, ownerName string, workspace database.Workspace) (*WorkspaceApp, error) {
116-
sharingLevelRaw, ok := WorkspaceApp_SharingLevel_value[strings.ToUpper(string(dbApp.SharingLevel))]
117-
if !ok {
118-
return nil, xerrors.Errorf("unknown app sharing level: %q", dbApp.SharingLevel)
119-
}
120-
121-
healthRaw, ok := WorkspaceApp_Health_value[strings.ToUpper(string(dbApp.Health))]
122-
if !ok {
123-
return nil, xerrors.Errorf("unknown app health: %q", dbApp.SharingLevel)
124-
}
125-
126-
return &WorkspaceApp{
127-
Id: dbApp.ID[:],
128-
Url: dbApp.Url.String,
129-
External: dbApp.External,
130-
Slug: dbApp.Slug,
131-
DisplayName: dbApp.DisplayName,
132-
Command: dbApp.Command.String,
133-
Icon: dbApp.Icon,
134-
Subdomain: dbApp.Subdomain,
135-
SubdomainName: db2sdk.AppSubdomain(dbApp, agent.Name, workspace.Name, ownerName),
136-
SharingLevel: WorkspaceApp_SharingLevel(sharingLevelRaw),
137-
Healthcheck: &WorkspaceApp_Healthcheck{
138-
Url: dbApp.HealthcheckUrl,
139-
Interval: durationpb.New(time.Duration(dbApp.HealthcheckInterval) * time.Second),
140-
Threshold: dbApp.HealthcheckThreshold,
141-
},
142-
Health: WorkspaceApp_Health(healthRaw),
143-
}, nil
144-
}
145-
14660
func SDKAppsFromProto(protoApps []*WorkspaceApp) ([]codersdk.WorkspaceApp, error) {
14761
ret := make([]codersdk.WorkspaceApp, len(protoApps))
14862
for i, protoApp := range protoApps {

coderd/agentapi/manifest.go

+86-3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/google/uuid"
1313
"golang.org/x/sync/errgroup"
1414
"golang.org/x/xerrors"
15+
"google.golang.org/protobuf/types/known/durationpb"
1516
"tailscale.com/tailcfg"
1617

1718
agentproto "github.com/coder/coder/v2/agent/proto"
@@ -128,7 +129,7 @@ func (a *ManifestAPI) GetManifest(ctx context.Context, _ *agentproto.GetManifest
128129
}
129130
}
130131

131-
apps, err := agentproto.DBAppsToProto(dbApps, workspaceAgent, owner.Username, workspace)
132+
apps, err := dbAppsToProto(dbApps, workspaceAgent, owner.Username, workspace)
132133
if err != nil {
133134
return nil, xerrors.Errorf("converting workspace apps: %w", err)
134135
}
@@ -146,8 +147,90 @@ func (a *ManifestAPI) GetManifest(ctx context.Context, _ *agentproto.GetManifest
146147
DerpForceWebsockets: a.DerpForceWebSockets,
147148

148149
DerpMap: tailnet.DERPMapToProto(a.DerpMapFn()),
149-
Scripts: agentproto.DBAgentScriptsToProto(scripts),
150+
Scripts: dbAgentScriptsToProto(scripts),
150151
Apps: apps,
151-
Metadata: agentproto.DBAgentMetadataToProtoDescription(metadata),
152+
Metadata: dbAgentMetadataToProtoDescription(metadata),
153+
}, nil
154+
}
155+
156+
func dbAgentMetadataToProtoDescription(metadata []database.WorkspaceAgentMetadatum) []*agentproto.WorkspaceAgentMetadata_Description {
157+
ret := make([]*agentproto.WorkspaceAgentMetadata_Description, len(metadata))
158+
for i, metadatum := range metadata {
159+
ret[i] = dbAgentMetadatumToProtoDescription(metadatum)
160+
}
161+
return ret
162+
}
163+
164+
func dbAgentMetadatumToProtoDescription(metadatum database.WorkspaceAgentMetadatum) *agentproto.WorkspaceAgentMetadata_Description {
165+
return &agentproto.WorkspaceAgentMetadata_Description{
166+
DisplayName: metadatum.DisplayName,
167+
Key: metadatum.Key,
168+
Script: metadatum.Script,
169+
Interval: durationpb.New(time.Duration(metadatum.Interval)),
170+
Timeout: durationpb.New(time.Duration(metadatum.Timeout)),
171+
}
172+
}
173+
174+
func dbAgentScriptsToProto(scripts []database.WorkspaceAgentScript) []*agentproto.WorkspaceAgentScript {
175+
ret := make([]*agentproto.WorkspaceAgentScript, len(scripts))
176+
for i, script := range scripts {
177+
ret[i] = dbAgentScriptToProto(script)
178+
}
179+
return ret
180+
}
181+
182+
func dbAgentScriptToProto(script database.WorkspaceAgentScript) *agentproto.WorkspaceAgentScript {
183+
return &agentproto.WorkspaceAgentScript{
184+
LogSourceId: script.LogSourceID[:],
185+
LogPath: script.LogPath,
186+
Script: script.Script,
187+
Cron: script.Cron,
188+
RunOnStart: script.RunOnStart,
189+
RunOnStop: script.RunOnStop,
190+
StartBlocksLogin: script.StartBlocksLogin,
191+
Timeout: durationpb.New(time.Duration(script.TimeoutSeconds) * time.Second),
192+
}
193+
}
194+
195+
func dbAppsToProto(dbApps []database.WorkspaceApp, agent database.WorkspaceAgent, ownerName string, workspace database.Workspace) ([]*agentproto.WorkspaceApp, error) {
196+
ret := make([]*agentproto.WorkspaceApp, len(dbApps))
197+
for i, dbApp := range dbApps {
198+
var err error
199+
ret[i], err = dbAppToProto(dbApp, agent, ownerName, workspace)
200+
if err != nil {
201+
return nil, xerrors.Errorf("parse app %v (%q): %w", i, dbApp.Slug, err)
202+
}
203+
}
204+
return ret, nil
205+
}
206+
207+
func dbAppToProto(dbApp database.WorkspaceApp, agent database.WorkspaceAgent, ownerName string, workspace database.Workspace) (*agentproto.WorkspaceApp, error) {
208+
sharingLevelRaw, ok := agentproto.WorkspaceApp_SharingLevel_value[strings.ToUpper(string(dbApp.SharingLevel))]
209+
if !ok {
210+
return nil, xerrors.Errorf("unknown app sharing level: %q", dbApp.SharingLevel)
211+
}
212+
213+
healthRaw, ok := agentproto.WorkspaceApp_Health_value[strings.ToUpper(string(dbApp.Health))]
214+
if !ok {
215+
return nil, xerrors.Errorf("unknown app health: %q", dbApp.SharingLevel)
216+
}
217+
218+
return &agentproto.WorkspaceApp{
219+
Id: dbApp.ID[:],
220+
Url: dbApp.Url.String,
221+
External: dbApp.External,
222+
Slug: dbApp.Slug,
223+
DisplayName: dbApp.DisplayName,
224+
Command: dbApp.Command.String,
225+
Icon: dbApp.Icon,
226+
Subdomain: dbApp.Subdomain,
227+
SubdomainName: db2sdk.AppSubdomain(dbApp, agent.Name, workspace.Name, ownerName),
228+
SharingLevel: agentproto.WorkspaceApp_SharingLevel(sharingLevelRaw),
229+
Healthcheck: &agentproto.WorkspaceApp_Healthcheck{
230+
Url: dbApp.HealthcheckUrl,
231+
Interval: durationpb.New(time.Duration(dbApp.HealthcheckInterval) * time.Second),
232+
Threshold: dbApp.HealthcheckThreshold,
233+
},
234+
Health: agentproto.WorkspaceApp_Health(healthRaw),
152235
}, nil
153236
}

0 commit comments

Comments
 (0)