Skip to content

Commit 1254a2f

Browse files
authored
[Cleanup] remove embedded assets (#1040)
Signed-off-by: Jeremy lewi <jeremy@lewi.us>
1 parent cb2eceb commit 1254a2f

File tree

2 files changed

+13
-141
lines changed

2 files changed

+13
-141
lines changed

pkg/agent/server/assets.go

Lines changed: 7 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package server
22

33
import (
44
"bytes"
5-
"embed"
65
"io/fs"
76
"net/http"
87
"net/url"
@@ -20,14 +19,6 @@ import (
2019
"google.golang.org/protobuf/encoding/protojson"
2120
)
2221

23-
// TODO(jlewi): I think we should get rid of embedded assets. Now that we publish and download assets
24-
// via OCI not sure its worth it to have another code path. The problem with embedded assets is that its
25-
// difficult to layer on additional static assets like configs. If we pull them from the filesystem then
26-
// users can just add their own assets to subdirectories.
27-
28-
//go:embed dist/*
29-
var embeddedAssets embed.FS
30-
3122
// AssetsFileSystemProvider is an interface for providing asset filesystems.
3223
// This allows the server to be decoupled from how assets are constructed.
3324
type AssetsFileSystemProvider interface {
@@ -57,38 +48,6 @@ func (s *staticAssetsFileSystemProvider) GetAssetsFileSystem() (fs.FS, error) {
5748
return os.DirFS(s.staticAssets), nil
5849
}
5950

60-
// embeddedAssetsFileSystemProvider provides assets from embedded files.
61-
type embeddedAssetsFileSystemProvider struct {
62-
embeddedFS embed.FS
63-
subPath string
64-
}
65-
66-
// NewEmbeddedAssetsFileSystemProvider creates a provider that serves assets from embedded files.
67-
// The subPath parameter specifies the subdirectory within the embedded filesystem (e.g., "dist").
68-
func NewEmbeddedAssetsFileSystemProvider(embeddedFS embed.FS, subPath string) AssetsFileSystemProvider {
69-
return &embeddedAssetsFileSystemProvider{
70-
embeddedFS: embeddedFS,
71-
subPath: subPath,
72-
}
73-
}
74-
75-
// GetAssetsFileSystem implements AssetsFileSystemProvider by returning a filesystem
76-
// for the embedded assets.
77-
func (e *embeddedAssetsFileSystemProvider) GetAssetsFileSystem() (fs.FS, error) {
78-
log := zapr.NewLogger(zap.L())
79-
distFS, err := fs.Sub(e.embeddedFS, e.subPath)
80-
if err != nil {
81-
return nil, errors.Wrapf(err, "failed to create sub filesystem for embedded assets")
82-
}
83-
// Verify that index.html exists
84-
_, err = distFS.Open("index.html")
85-
if err != nil {
86-
return nil, errors.Wrapf(err, "embedded assets not available: index.html not found")
87-
}
88-
log.Info("Serving embedded assets")
89-
return distFS, nil
90-
}
91-
9251
// fallbackAssetsFileSystemProvider tries multiple providers in order until one succeeds.
9352
type fallbackAssetsFileSystemProvider struct {
9453
providers []AssetsFileSystemProvider
@@ -119,39 +78,25 @@ func (f *fallbackAssetsFileSystemProvider) GetAssetsFileSystem() (fs.FS, error)
11978
return nil, errors.Wrapf(lastErr, "all asset providers failed")
12079
}
12180

122-
// defaultAssetsFileSystemProvider is the default implementation that tries
123-
// static assets first, then falls back to embedded assets.
81+
// defaultAssetsFileSystemProvider is the default implementation that serves
82+
// assets from the static assets directory.
12483
type defaultAssetsFileSystemProvider struct {
12584
staticAssets string
12685
}
12786

12887
// NewDefaultAssetsFileSystemProvider creates a new default asset filesystem provider
129-
// that tries static assets first, then embedded assets as a fallback.
130-
// This preserves the original behavior of getAssetsFileSystem.
88+
// that serves assets from the static assets directory.
13189
func NewDefaultAssetsFileSystemProvider(staticAssets string) AssetsFileSystemProvider {
13290
return &defaultAssetsFileSystemProvider{
13391
staticAssets: staticAssets,
13492
}
13593
}
13694

137-
// GetAssetsFileSystem implements AssetsFileSystemProvider by trying static assets first,
138-
// then falling back to embedded assets. This preserves the original behavior.
95+
// GetAssetsFileSystem implements AssetsFileSystemProvider by serving static assets.
13996
func (d *defaultAssetsFileSystemProvider) GetAssetsFileSystem() (fs.FS, error) {
140-
var providers []AssetsFileSystemProvider
141-
142-
// If static assets directory is specified, try it first
143-
if d.staticAssets != "" {
144-
providers = append(providers, NewStaticAssetsFileSystemProvider(d.staticAssets))
145-
}
146-
147-
// Always try embedded assets as fallback
148-
providers = append(providers, NewEmbeddedAssetsFileSystemProvider(embeddedAssets, "dist"))
149-
150-
// Use fallback provider to try them in order
151-
fallback := NewFallbackAssetsFileSystemProvider(providers...)
152-
fs, err := fallback.GetAssetsFileSystem()
97+
fs, err := NewStaticAssetsFileSystemProvider(d.staticAssets).GetAssetsFileSystem()
15398
if err != nil {
154-
return nil, errors.New("no assets available: neither staticAssets directory is configured nor embedded assets could be found")
99+
return nil, errors.New("no assets available: staticAssets directory is not configured")
155100
}
156101
return fs, nil
157102
}
@@ -200,7 +145,7 @@ func (s *Server) processIndexHTMLWithConfig(assetsFS fs.FS) ([]byte, error) {
200145
return content, nil
201146
}
202147

203-
// singlePageAppHandler serves a single-page app from static or embedded assets,
148+
// singlePageAppHandler serves a single-page app from static assets,
204149
// falling back to index for client-side routing when files don't exist.
205150
func (s *Server) singlePageAppHandler() (http.Handler, error) {
206151
if s.assetsFS == nil {

pkg/agent/server/assets_test.go

Lines changed: 6 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package server
22

33
import (
4-
"embed"
54
"io/fs"
65
"os"
76
"path/filepath"
@@ -11,9 +10,6 @@ import (
1110
"github.com/pkg/errors"
1211
)
1312

14-
//go:embed testdata/assets_test/*
15-
var testEmbeddedAssets embed.FS
16-
1713
func TestStaticAssetsFileSystemProvider(t *testing.T) {
1814
tests := []struct {
1915
name string
@@ -102,68 +98,6 @@ func TestStaticAssetsFileSystemProvider(t *testing.T) {
10298
}
10399
}
104100

105-
func TestEmbeddedAssetsFileSystemProvider(t *testing.T) {
106-
tests := []struct {
107-
name string
108-
embeddedFS embed.FS
109-
subPath string
110-
wantErr bool
111-
errContains string
112-
}{
113-
{
114-
name: "valid embedded FS with valid subpath",
115-
embeddedFS: testEmbeddedAssets,
116-
subPath: "testdata/assets_test",
117-
wantErr: false,
118-
},
119-
{
120-
name: "invalid subpath",
121-
embeddedFS: testEmbeddedAssets,
122-
subPath: "nonexistent",
123-
wantErr: true,
124-
errContains: "index.html not found",
125-
},
126-
}
127-
128-
for _, tt := range tests {
129-
t.Run(tt.name, func(t *testing.T) {
130-
provider := NewEmbeddedAssetsFileSystemProvider(tt.embeddedFS, tt.subPath)
131-
fs, err := provider.GetAssetsFileSystem()
132-
133-
if tt.wantErr {
134-
if err == nil {
135-
t.Errorf("Expected error but got none")
136-
return
137-
}
138-
if tt.errContains != "" && !strings.Contains(err.Error(), tt.errContains) {
139-
t.Errorf("Expected error to contain %q, got %q", tt.errContains, err.Error())
140-
}
141-
return
142-
}
143-
144-
if err != nil {
145-
t.Errorf("Unexpected error: %v", err)
146-
return
147-
}
148-
149-
if fs == nil {
150-
t.Errorf("Expected filesystem but got nil")
151-
return
152-
}
153-
154-
// Try to read index.html if it should exist
155-
if tt.name == "valid embedded FS with valid subpath" {
156-
file, err := fs.Open("index.html")
157-
if err != nil {
158-
t.Errorf("Failed to open index.html: %v", err)
159-
} else {
160-
file.Close()
161-
}
162-
}
163-
})
164-
}
165-
}
166-
167101
func TestFallbackAssetsFileSystemProvider(t *testing.T) {
168102
tests := []struct {
169103
name string
@@ -266,14 +200,15 @@ func TestDefaultAssetsFileSystemProvider(t *testing.T) {
266200
},
267201
},
268202
{
269-
name: "without static assets, should fallback to embedded",
203+
name: "without static assets, should fail",
270204
staticAssets: "",
271-
wantErr: false, // Should succeed if embedded assets exist
205+
wantErr: true,
206+
errContains: "no assets available: staticAssets directory is not configured",
272207
},
273208
{
274-
name: "with non-existent static assets, should fallback to embedded",
209+
name: "with non-existent static assets",
275210
staticAssets: "",
276-
wantErr: false, // Should succeed if embedded assets exist
211+
wantErr: false, // os.DirFS doesn't validate path existence until read-time
277212
setupDir: func(t *testing.T) string {
278213
return filepath.Join(t.TempDir(), "nonexistent")
279214
},
@@ -302,16 +237,8 @@ func TestDefaultAssetsFileSystemProvider(t *testing.T) {
302237
return
303238
}
304239

305-
// Note: This test may fail if embedded assets don't exist in the test environment
306-
// That's okay - it means the test is working correctly
307240
if err != nil {
308-
// If we have a static assets dir, it should have been tried first
309-
if dir != "" {
310-
// The error might be from embedded assets fallback failing
311-
if !strings.Contains(err.Error(), "no assets available") {
312-
t.Logf("Got error (may be expected if embedded assets missing): %v", err)
313-
}
314-
}
241+
t.Errorf("Unexpected error: %v", err)
315242
return
316243
}
317244

0 commit comments

Comments
 (0)