-
Notifications
You must be signed in to change notification settings - Fork 9
/
types.go
95 lines (73 loc) · 2.96 KB
/
types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright 2022 Namespace Labs Inc; All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
package languages
import (
"context"
"io"
"namespacelabs.dev/foundation/internal/build"
"namespacelabs.dev/foundation/internal/build/assets"
"namespacelabs.dev/foundation/internal/parsing"
"namespacelabs.dev/foundation/internal/planning"
"namespacelabs.dev/foundation/internal/runtime"
"namespacelabs.dev/foundation/schema"
"namespacelabs.dev/foundation/std/cfg"
"namespacelabs.dev/foundation/std/pkggraph"
)
type Integration interface {
parsing.FrameworkHandler
// Called on `ns build`, `ns deploy`.
PrepareBuild(context.Context, assets.AvailableBuildAssets, planning.Server, bool /*isFocus*/) (build.Spec, error)
PrepareRun(context.Context, planning.Server, *runtime.ContainerRunOpts) error
// Called on `ns tidy`
TidyWorkspace(context.Context, cfg.Context, []*pkggraph.Package) error
TidyNode(context.Context, cfg.Context, pkggraph.PackageLoader, *pkggraph.Package) error
TidyServer(context.Context, cfg.Context, pkggraph.PackageLoader, pkggraph.Location, *schema.Server) error
// Called on `ns generate`.
GenerateNode(*pkggraph.Package, []*schema.Node) ([]*schema.SerializedInvocation, error)
GenerateServer(*pkggraph.Package, []*schema.Node) ([]*schema.SerializedInvocation, error)
// Called on `ns dev`.
PrepareDev(context.Context, runtime.ClusterNamespace, planning.Server) (context.Context, DevObserver, error)
}
type DevObserver interface {
io.Closer
OnDeployment(context.Context)
}
var (
mapping = map[string]Integration{}
)
func Register(fmwk schema.Framework, i Integration) {
mapping[fmwk.String()] = i
parsing.RegisterFrameworkHandler(fmwk, i)
}
func IntegrationFor(fmwk schema.Framework) Integration {
return mapping[fmwk.String()]
}
type MaybePrepare struct{}
func (MaybePrepare) PrepareBuild(context.Context, assets.AvailableBuildAssets, planning.Server, bool) (build.Spec, error) {
return nil, nil
}
func (MaybePrepare) PrepareRun(context.Context, planning.Server, *runtime.ContainerRunOpts) error {
return nil
}
type MaybeGenerate struct{}
func (MaybeGenerate) GenerateNode(*pkggraph.Package, []*schema.Node) ([]*schema.SerializedInvocation, error) {
return nil, nil
}
func (MaybeGenerate) GenerateServer(*pkggraph.Package, []*schema.Node) ([]*schema.SerializedInvocation, error) {
return nil, nil
}
type MaybeTidy struct{}
func (MaybeTidy) TidyWorkspace(context.Context, cfg.Context, []*pkggraph.Package) error {
return nil
}
func (MaybeTidy) TidyNode(context.Context, cfg.Context, pkggraph.PackageLoader, *pkggraph.Package) error {
return nil
}
func (MaybeTidy) TidyServer(context.Context, cfg.Context, pkggraph.PackageLoader, pkggraph.Location, *schema.Server) error {
return nil
}
type NoDev struct{}
func (NoDev) PrepareDev(ctx context.Context, _ runtime.ClusterNamespace, _ planning.Server) (context.Context, DevObserver, error) {
return ctx, nil, nil
}