Skip to content

Commit 3e1ea56

Browse files
committed
feat: support for edge-redirects manifests
1 parent cec435c commit 3e1ea56

File tree

2 files changed

+57
-16
lines changed

2 files changed

+57
-16
lines changed

go/porcelain/deploy.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const (
4343
lfsVersionString = "version https://git-lfs.github.com/spec/v1"
4444

4545
edgeFunctionsInternalPath = ".netlify/internal/edge-functions/"
46+
edgeRedirectsInternalPath = ".netlify/internal/edge-redirects/"
4647
)
4748

4849
var installDirs = []string{"node_modules/", "bower_components/"}
@@ -78,6 +79,7 @@ type DeployOptions struct {
7879
Dir string
7980
FunctionsDir string
8081
EdgeFunctionsDir string
82+
EdgeRedirectsDir string
8183
BuildDir string
8284
LargeMediaEnabled bool
8385

@@ -215,7 +217,17 @@ func (n *Netlify) DoDeploy(ctx context.Context, options *DeployOptions, deploy *
215217
}
216218

217219
if options.EdgeFunctionsDir != "" {
218-
err = addEdgeFunctionsToDeployFiles(options.EdgeFunctionsDir, files, options.Observer)
220+
err = addInternalFilesToDeploy(options.EdgeFunctionsDir, edgeFunctionsInternalPath, files, options.Observer)
221+
if err != nil {
222+
if options.Observer != nil {
223+
options.Observer.OnFailedWalk()
224+
}
225+
return nil, err
226+
}
227+
}
228+
229+
if options.EdgeRedirectsDir != "" {
230+
err = addInternalFilesToDeploy(options.EdgeRedirectsDir, edgeRedirectsInternalPath, files, options.Observer)
219231
if err != nil {
220232
if options.Observer != nil {
221233
options.Observer.OnFailedWalk()
@@ -631,7 +643,7 @@ func walk(dir string, observer DeployObserver, useLargeMedia, ignoreInstallDirs
631643
return files, err
632644
}
633645

634-
func addEdgeFunctionsToDeployFiles(dir string, files *deployFiles, observer DeployObserver) error {
646+
func addInternalFilesToDeploy(dir, internalPath string, files *deployFiles, observer DeployObserver) error {
635647
return filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
636648
if err != nil {
637649
return err
@@ -642,7 +654,7 @@ func addEdgeFunctionsToDeployFiles(dir string, files *deployFiles, observer Depl
642654
if err != nil {
643655
return err
644656
}
645-
rel := edgeFunctionsInternalPath + forceSlashSeparators(osRel)
657+
rel := internalPath + forceSlashSeparators(osRel)
646658

647659
file, err := createFileBundle(rel, path)
648660
if err != nil {

go/porcelain/deploy_test.go

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -186,17 +186,15 @@ func TestWalk_EdgeFunctions(t *testing.T) {
186186
err = ioutil.WriteFile(filepath.Join(edgeFunctionsDir, "123456789.js"), []byte{}, 0644)
187187
require.Nil(t, err)
188188

189-
err = addEdgeFunctionsToDeployFiles(edgeFunctionsDir, files, mockObserver{})
189+
err = addInternalFilesToDeploy(edgeFunctionsDir, edgeFunctionsInternalPath, files, mockObserver{})
190190
require.Nil(t, err)
191191

192192
assert.NotNil(t, files.Files[".netlify/internal/edge-functions/manifest.json"])
193193
assert.NotNil(t, files.Files[".netlify/internal/edge-functions/123456789.js"])
194194
}
195195

196196
func TestWalk_PublishedFilesAndEdgeFunctions(t *testing.T) {
197-
publishDir, err := ioutil.TempDir("", "publish")
198-
require.Nil(t, err)
199-
defer os.RemoveAll(publishDir)
197+
files := setupPublishedAssets(t)
200198

201199
netlifyDir, err := ioutil.TempDir("", ".netlify")
202200
require.Nil(t, err)
@@ -206,28 +204,59 @@ func TestWalk_PublishedFilesAndEdgeFunctions(t *testing.T) {
206204
require.Nil(t, err)
207205
defer os.RemoveAll(edgeFunctionsDir)
208206

209-
err = os.Mkdir(filepath.Join(publishDir, "assets"), os.ModePerm)
207+
err = ioutil.WriteFile(filepath.Join(edgeFunctionsDir, "manifest.json"), []byte{}, 0644)
210208
require.Nil(t, err)
211-
err = ioutil.WriteFile(filepath.Join(publishDir, "assets", "styles.css"), []byte{}, 0644)
209+
err = ioutil.WriteFile(filepath.Join(edgeFunctionsDir, "123456789.js"), []byte{}, 0644)
212210
require.Nil(t, err)
213-
err = ioutil.WriteFile(filepath.Join(publishDir, "index.html"), []byte{}, 0644)
211+
212+
err = addInternalFilesToDeploy(edgeFunctionsDir, edgeFunctionsInternalPath, files, mockObserver{})
214213
require.Nil(t, err)
215214

216-
err = ioutil.WriteFile(filepath.Join(edgeFunctionsDir, "manifest.json"), []byte{}, 0644)
215+
assert.NotNil(t, files.Files["assets/styles.css"])
216+
assert.NotNil(t, files.Files["index.html"])
217+
assert.NotNil(t, files.Files[".netlify/internal/edge-functions/manifest.json"])
218+
assert.NotNil(t, files.Files[".netlify/internal/edge-functions/123456789.js"])
219+
}
220+
221+
func TestWalk_PublishedFilesAndEdgeRedirects(t *testing.T) {
222+
files := setupPublishedAssets(t)
223+
224+
netlifyDir, err := ioutil.TempDir("", ".netlify")
217225
require.Nil(t, err)
218-
err = ioutil.WriteFile(filepath.Join(edgeFunctionsDir, "123456789.js"), []byte{}, 0644)
226+
defer os.RemoveAll(netlifyDir)
227+
228+
edgeRedirectsDir, err := ioutil.TempDir(netlifyDir, "edge-redirects-dist")
219229
require.Nil(t, err)
230+
defer os.RemoveAll(edgeRedirectsDir)
220231

221-
files, err := walk(publishDir, mockObserver{}, false, false)
232+
err = ioutil.WriteFile(filepath.Join(edgeRedirectsDir, "manifest.json"), []byte{}, 0644)
222233
require.Nil(t, err)
223234

224-
err = addEdgeFunctionsToDeployFiles(edgeFunctionsDir, files, mockObserver{})
235+
err = addInternalFilesToDeploy(edgeRedirectsDir, edgeRedirectsInternalPath, files, mockObserver{})
225236
require.Nil(t, err)
226237

227238
assert.NotNil(t, files.Files["assets/styles.css"])
228239
assert.NotNil(t, files.Files["index.html"])
229-
assert.NotNil(t, files.Files[".netlify/internal/edge-functions/manifest.json"])
230-
assert.NotNil(t, files.Files[".netlify/internal/edge-functions/123456789.js"])
240+
assert.NotNil(t, files.Files[".netlify/internal/edge-redirects/manifest.json"])
241+
}
242+
243+
func setupPublishedAssets(t *testing.T) *deployFiles {
244+
publishDir, err := ioutil.TempDir("", "publish")
245+
require.Nil(t, err)
246+
247+
t.Cleanup(func() { os.RemoveAll(publishDir) })
248+
249+
err = os.Mkdir(filepath.Join(publishDir, "assets"), os.ModePerm)
250+
require.Nil(t, err)
251+
err = ioutil.WriteFile(filepath.Join(publishDir, "assets", "styles.css"), []byte{}, 0644)
252+
require.Nil(t, err)
253+
err = ioutil.WriteFile(filepath.Join(publishDir, "index.html"), []byte{}, 0644)
254+
require.Nil(t, err)
255+
256+
files, err := walk(publishDir, mockObserver{}, false, false)
257+
require.Nil(t, err)
258+
259+
return files
231260
}
232261

233262
func TestUploadFiles_Cancelation(t *testing.T) {

0 commit comments

Comments
 (0)