Skip to content

Commit 4667650

Browse files
feat: add function_schedules property (#366)
* feat: add `function_schedules` property * fix: create `functionSchedule` definition * feat: add updated Go models * feat: read function schedules from manifest * chore: add assertion
1 parent 2245d38 commit 4667650

File tree

7 files changed

+183
-68
lines changed

7 files changed

+183
-68
lines changed

go/models/deploy.go

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go/models/deploy_files.go

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go/models/function_schedule.go

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go/porcelain/deploy.go

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,9 @@ type DeployOptions struct {
8989

9090
Observer DeployObserver
9191

92-
files *deployFiles
93-
functions *deployFiles
92+
files *deployFiles
93+
functions *deployFiles
94+
functionSchedules []models.FunctionSchedule
9495
}
9596

9697
type uploadError struct {
@@ -211,14 +212,15 @@ func (n *Netlify) DoDeploy(ctx context.Context, options *DeployOptions, deploy *
211212

212213
options.files = files
213214

214-
functions, err := bundle(options.FunctionsDir, options.Observer)
215+
functions, schedules, err := bundle(options.FunctionsDir, options.Observer)
215216
if err != nil {
216217
if options.Observer != nil {
217218
options.Observer.OnFailedWalk()
218219
}
219220
return nil, err
220221
}
221222
options.functions = functions
223+
options.functionSchedules = schedules
222224

223225
deployFiles := &models.DeployFiles{
224226
Files: options.files.Sums,
@@ -578,9 +580,9 @@ func walk(dir string, observer DeployObserver, useLargeMedia, ignoreInstallDirs
578580
return files, err
579581
}
580582

581-
func bundle(functionDir string, observer DeployObserver) (*deployFiles, error) {
583+
func bundle(functionDir string, observer DeployObserver) (*deployFiles, []models.FunctionSchedule, error) {
582584
if functionDir == "" {
583-
return nil, nil
585+
return nil, nil, nil
584586
}
585587

586588
manifestFile, err := os.Open(filepath.Join(functionDir, "manifest.json"))
@@ -597,7 +599,7 @@ func bundle(functionDir string, observer DeployObserver) (*deployFiles, error) {
597599

598600
info, err := ioutil.ReadDir(functionDir)
599601
if err != nil {
600-
return nil, err
602+
return nil, nil, err
601603
}
602604

603605
for _, i := range info {
@@ -607,23 +609,23 @@ func bundle(functionDir string, observer DeployObserver) (*deployFiles, error) {
607609
case zipFile(i):
608610
runtime, err := readZipRuntime(filePath)
609611
if err != nil {
610-
return nil, err
612+
return nil, nil, err
611613
}
612614
file, err := newFunctionFile(filePath, i, runtime, observer)
613615
if err != nil {
614-
return nil, err
616+
return nil, nil, err
615617
}
616618
functions.Add(file.Name, file)
617619
case jsFile(i):
618620
file, err := newFunctionFile(filePath, i, jsRuntime, observer)
619621
if err != nil {
620-
return nil, err
622+
return nil, nil, err
621623
}
622624
functions.Add(file.Name, file)
623625
case goFile(filePath, i, observer):
624626
file, err := newFunctionFile(filePath, i, goRuntime, observer)
625627
if err != nil {
626-
return nil, err
628+
return nil, nil, err
627629
}
628630
functions.Add(file.Name, file)
629631
default:
@@ -633,43 +635,51 @@ func bundle(functionDir string, observer DeployObserver) (*deployFiles, error) {
633635
}
634636
}
635637

636-
return functions, nil
638+
return functions, nil, nil
637639
}
638640

639-
func bundleFromManifest(manifestFile *os.File, observer DeployObserver) (*deployFiles, error) {
641+
func bundleFromManifest(manifestFile *os.File, observer DeployObserver) (*deployFiles, []models.FunctionSchedule, error) {
640642
manifestBytes, err := ioutil.ReadAll(manifestFile)
641643

642644
if err != nil {
643-
return nil, err
645+
return nil, nil, err
644646
}
645647

646648
var manifest functionsManifest
647649

648650
err = json.Unmarshal(manifestBytes, &manifest)
649651

650652
if err != nil {
651-
return nil, fmt.Errorf("malformed functions manifest file: %w", err)
653+
return nil, nil, fmt.Errorf("malformed functions manifest file: %w", err)
652654
}
653655

656+
schedules := make([]models.FunctionSchedule, 0, len(manifest.Functions))
654657
functions := newDeployFiles()
655658

656659
for _, function := range manifest.Functions {
657660
fileInfo, err := os.Stat(function.Path)
658661

659662
if err != nil {
660-
return nil, fmt.Errorf("manifest file specifies a function path that cannot be found: %s", function.Path)
663+
return nil, nil, fmt.Errorf("manifest file specifies a function path that cannot be found: %s", function.Path)
661664
}
662665

663666
file, err := newFunctionFile(function.Path, fileInfo, function.Runtime, observer)
664667

665668
if err != nil {
666-
return nil, err
669+
return nil, nil, err
670+
}
671+
672+
if function.Schedule != "" {
673+
schedules = append(schedules, models.FunctionSchedule{
674+
Cron: function.Schedule,
675+
Name: function.Name,
676+
})
667677
}
668678

669679
functions.Add(file.Name, file)
670680
}
671681

672-
return functions, nil
682+
return functions, schedules, nil
673683
}
674684

675685
func readZipRuntime(filePath string) (string, error) {

0 commit comments

Comments
 (0)