Skip to content

Commit 53f9fdd

Browse files
authored
Merge pull request #297 from netlify/bbot-1131-ignore-root-cache-dirs
Ignore cache directories in root of build directory when deploying
2 parents db10ae2 + 0b08b4f commit 53f9fdd

File tree

2 files changed

+63
-4
lines changed

2 files changed

+63
-4
lines changed

go/porcelain/deploy.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ const (
4242
lfsVersionString = "version https://git-lfs.github.com/spec/v1"
4343
)
4444

45+
var installDirs = []string{"node_modules/", "bower_components/"}
46+
4547
type uploadType int
4648
type pointerData struct {
4749
SHA string
@@ -72,6 +74,7 @@ type DeployOptions struct {
7274
SiteID string
7375
Dir string
7476
FunctionsDir string
77+
BuildDir string
7578
LargeMediaEnabled bool
7679

7780
IsDraft bool
@@ -188,8 +191,10 @@ func (n *Netlify) DoDeploy(ctx context.Context, options *DeployOptions, deploy *
188191
largeMediaEnabled = deploy.SiteCapabilities.LargeMediaEnabled
189192
}
190193

194+
ignoreInstallDirs := options.Dir == options.BuildDir
195+
191196
context.GetLogger(ctx).Infof("Getting files info with large media flag: %v", largeMediaEnabled)
192-
files, err := walk(options.Dir, options.Observer, largeMediaEnabled)
197+
files, err := walk(options.Dir, options.Observer, largeMediaEnabled, ignoreInstallDirs)
193198
if err != nil {
194199
if options.Observer != nil {
195200
options.Observer.OnFailedWalk()
@@ -498,7 +503,7 @@ func (n *Netlify) uploadFile(ctx context.Context, d *models.Deploy, f *FileBundl
498503
}
499504
}
500505

501-
func walk(dir string, observer DeployObserver, useLargeMedia bool) (*deployFiles, error) {
506+
func walk(dir string, observer DeployObserver, useLargeMedia, ignoreInstallDirs bool) (*deployFiles, error) {
502507
files := newDeployFiles()
503508

504509
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
@@ -513,7 +518,7 @@ func walk(dir string, observer DeployObserver, useLargeMedia bool) (*deployFiles
513518
}
514519
rel := forceSlashSeparators(osRel)
515520

516-
if ignoreFile(rel) {
521+
if ignoreFile(rel, ignoreInstallDirs) {
517522
return nil
518523
}
519524

@@ -737,10 +742,18 @@ func goFile(filePath string, i os.FileInfo, observer DeployObserver) bool {
737742
return true
738743
}
739744

740-
func ignoreFile(rel string) bool {
745+
func ignoreFile(rel string, ignoreInstallDirs bool) bool {
741746
if strings.HasPrefix(rel, ".") || strings.Contains(rel, "/.") || strings.HasPrefix(rel, "__MACOS") {
742747
return !strings.HasPrefix(rel, ".well-known/")
743748
}
749+
if !ignoreInstallDirs {
750+
return false
751+
}
752+
for _, ignorePath := range installDirs {
753+
if strings.HasPrefix(rel, ignorePath) {
754+
return true
755+
}
756+
}
744757
return false
745758
}
746759

go/porcelain/deploy_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ import (
66
"net/http"
77
"net/http/httptest"
88
"net/url"
9+
"os"
10+
"path/filepath"
911
"strings"
1012
"testing"
1113

1214
"github.com/go-openapi/runtime"
1315
apiClient "github.com/go-openapi/runtime/client"
1416
"github.com/go-openapi/strfmt"
17+
"github.com/netlify/open-api/go/models"
1518
"github.com/netlify/open-api/go/plumbing/operations"
19+
"github.com/stretchr/testify/assert"
1620
"github.com/stretchr/testify/require"
1721
)
1822

@@ -131,6 +135,33 @@ func TestConcurrentFileUpload(t *testing.T) {
131135
}
132136
}
133137

138+
func TestWalk_IgnoreNodeModulesInRoot(t *testing.T) {
139+
dir, err := ioutil.TempDir("", "deploy")
140+
require.Nil(t, err)
141+
defer os.RemoveAll(dir)
142+
143+
err = os.Mkdir(filepath.Join(dir, "node_modules"), os.ModePerm)
144+
require.Nil(t, err)
145+
err = ioutil.WriteFile(filepath.Join(dir, "node_modules", "root-package"), []byte{}, 0644)
146+
require.Nil(t, err)
147+
148+
err = os.MkdirAll(filepath.Join(dir, "more", "node_modules"), os.ModePerm)
149+
require.Nil(t, err)
150+
err = ioutil.WriteFile(filepath.Join(dir, "more", "node_modules", "inner-package"), []byte{}, 0644)
151+
require.Nil(t, err)
152+
153+
files, err := walk(dir, mockObserver{}, false, false)
154+
require.Nil(t, err)
155+
assert.NotNil(t, files.Files["node_modules/root-package"])
156+
assert.NotNil(t, files.Files["more/node_modules/inner-package"])
157+
158+
// When deploy directory == build directory, ignore node_modules in deploy directory root.
159+
files, err = walk(dir, mockObserver{}, false, true)
160+
require.Nil(t, err)
161+
assert.Nil(t, files.Files["node_modules/root-package"])
162+
assert.NotNil(t, files.Files["more/node_modules/inner-package"])
163+
}
164+
134165
func TestReadZipRuntime(t *testing.T) {
135166
runtime, err := readZipRuntime("../internal/data/hello-rs-function-test.zip")
136167
if err != nil {
@@ -141,3 +172,18 @@ func TestReadZipRuntime(t *testing.T) {
141172
t.Fatalf("unexpected runtime value, expected='rs', got='%s'", runtime)
142173
}
143174
}
175+
176+
type mockObserver struct{}
177+
178+
func (m mockObserver) OnSetupWalk() error { return nil }
179+
func (m mockObserver) OnSuccessfulStep(*FileBundle) error { return nil }
180+
func (m mockObserver) OnSuccessfulWalk(*models.DeployFiles) error { return nil }
181+
func (m mockObserver) OnFailedWalk() {}
182+
183+
func (m mockObserver) OnSetupDelta(*models.DeployFiles) error { return nil }
184+
func (m mockObserver) OnSuccessfulDelta(*models.DeployFiles, *models.Deploy) error { return nil }
185+
func (m mockObserver) OnFailedDelta(*models.DeployFiles) {}
186+
187+
func (m mockObserver) OnSetupUpload(*FileBundle) error { return nil }
188+
func (m mockObserver) OnSuccessfulUpload(*FileBundle) error { return nil }
189+
func (m mockObserver) OnFailedUpload(*FileBundle) {}

0 commit comments

Comments
 (0)