Skip to content

Commit ef35c7d

Browse files
authored
Merge pull request #90 from netlify/zip-functions
Allow deploying zip files as js functions
2 parents 8d6640a + 09203f5 commit ef35c7d

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

go/porcelain/deploy.go

+27-11
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,12 @@ func bundle(functionDir string, observer DeployObserver) (*deployFiles, error) {
517517
filePath := filepath.Join(functionDir, i.Name())
518518

519519
switch {
520+
case zipFile(i):
521+
file, err := newFunctionFile(filePath, i, jsRuntime, observer)
522+
if err != nil {
523+
return nil, err
524+
}
525+
functions.Add(file.Name, file)
520526
case jsFile(i):
521527
file, err := newFunctionFile(filePath, i, jsRuntime, observer)
522528
if err != nil {
@@ -549,20 +555,26 @@ func newFunctionFile(filePath string, i os.FileInfo, runtime string, observer De
549555
}
550556
defer fileEntry.Close()
551557

552-
buf := new(bytes.Buffer)
553-
archive := zip.NewWriter(buf)
558+
var buf io.ReadWriter
554559

555-
fileHeader, err := createHeader(archive, i, runtime)
556-
if err != nil {
557-
return nil, err
558-
}
560+
if zipFile(i) {
561+
buf = fileEntry
562+
} else {
563+
buf = new(bytes.Buffer)
564+
archive := zip.NewWriter(buf)
559565

560-
if _, err = io.Copy(fileHeader, fileEntry); err != nil {
561-
return nil, err
562-
}
566+
fileHeader, err := createHeader(archive, i, runtime)
567+
if err != nil {
568+
return nil, err
569+
}
563570

564-
if err := archive.Close(); err != nil {
565-
return nil, err
571+
if _, err = io.Copy(fileHeader, fileEntry); err != nil {
572+
return nil, err
573+
}
574+
575+
if err := archive.Close(); err != nil {
576+
return nil, err
577+
}
566578
}
567579

568580
fileBuffer := new(bytes.Buffer)
@@ -583,6 +595,10 @@ func newFunctionFile(filePath string, i os.FileInfo, runtime string, observer De
583595
return file, nil
584596
}
585597

598+
func zipFile(i os.FileInfo) bool {
599+
return filepath.Ext(i.Name()) == ".zip"
600+
}
601+
586602
func jsFile(i os.FileInfo) bool {
587603
return filepath.Ext(i.Name()) == ".js"
588604
}

0 commit comments

Comments
 (0)