Skip to content

Commit a2a7beb

Browse files
committed
feat: support default spec
1 parent dec83fc commit a2a7beb

25 files changed

+444
-270
lines changed

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ Try a basic HTTP request handler using [ping.yaml](./examples/ping.yaml):
5050
out:
5151
- name: router
5252
port: in
53-
env:
54-
PORT:
55-
data: '{{ .PORT }}'
5653

5754
- kind: router
5855
name: router

README_kr.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ make build
5050
out:
5151
- name: router
5252
port: in
53-
env:
54-
PORT:
55-
data: '{{ .PORT }}'
5653

5754
- kind: router
5855
name: router

docs/architecture.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,6 @@ Users can update node specifications by using a Command-Line Interface (CLI) or
4646
error:
4747
- name: catch
4848
port: in
49-
env:
50-
PORT:
51-
data: '{{ .PORT }}'
5249

5350
- kind: router
5451
name: router

docs/architecture_kr.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@
4444
error:
4545
- name: catch
4646
port: in
47-
env:
48-
PORT:
49-
data: '{{ .PORT }}'
5047

5148
- kind: router
5249
name: router

examples/httpproxy.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
out:
77
- name: proxy
88
port: in
9-
env:
10-
PORT:
11-
data: '{{ .PORT }}'
129

1310
- kind: proxy
1411
name: proxy

examples/ping.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
out:
77
- name: router
88
port: in
9-
env:
10-
PORT:
11-
data: '{{ .PORT }}'
129

1310
- kind: router
1411
name: router

examples/system.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99
error:
1010
- name: catch
1111
port: in
12-
env:
13-
PORT:
14-
data: '{{ .PORT }}'
1512

1613
- kind: router
1714
name: router

examples/wsproxy.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
out:
1616
- name: router
1717
port: in
18-
env:
19-
PORT:
20-
data: '{{ .PORT }}'
2118

2219
- kind: router
2320
name: router

ext/pkg/control/block.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
// BlockNodeSpec defines the specification for creating a BlockNode.
1414
type BlockNodeSpec struct {
1515
spec.Meta `map:",inline"`
16-
Specs []*spec.Unstructured `map:"specs"`
16+
Specs []spec.Spec `map:"specs"`
1717
}
1818

1919
// BlockNode systematically manages complex data processing flows and executes multiple sub-nodes sequentially.
@@ -32,25 +32,26 @@ var _ node.Node = (*BlockNode)(nil)
3232

3333
// NewBlockNodeCodec creates a new codec for BlockNodeSpec.
3434
func NewBlockNodeCodec(s *scheme.Scheme) scheme.Codec {
35-
return scheme.CodecWithType(func(spec *BlockNodeSpec) (node.Node, error) {
36-
symbols := make([]*symbol.Symbol, 0, len(spec.Specs))
37-
for _, sp := range spec.Specs {
38-
decoded, err := s.Decode(sp)
35+
return scheme.CodecWithType(func(sp *BlockNodeSpec) (node.Node, error) {
36+
symbols := make([]*symbol.Symbol, 0, len(sp.Specs))
37+
for _, sp := range sp.Specs {
38+
sp, err := s.Decode(sp)
3939
if err != nil {
4040
for _, n := range symbols {
4141
n.Close()
4242
}
4343
return nil, err
4444
}
45-
n, err := s.Compile(decoded)
45+
46+
n, err := s.Compile(sp)
4647
if err != nil {
4748
for _, n := range symbols {
4849
n.Close()
4950
}
5051
return nil, err
5152
}
5253
symbols = append(symbols, &symbol.Symbol{
53-
Spec: decoded,
54+
Spec: sp,
5455
Node: n,
5556
})
5657
}

ext/pkg/control/block_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ func TestBlockNodeCodec_Decode(t *testing.T) {
3131
codec := NewBlockNodeCodec(s)
3232

3333
spec := &BlockNodeSpec{
34-
Specs: []*spec.Unstructured{
35-
{
34+
Specs: []spec.Spec{
35+
&spec.Unstructured{
3636
Meta: spec.Meta{
3737
ID: uuid.Must(uuid.NewV7()),
3838
Kind: kind,

ext/pkg/control/builder.go

Lines changed: 25 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/siyul-park/uniflow/ext/pkg/language"
55
"github.com/siyul-park/uniflow/pkg/hook"
66
"github.com/siyul-park/uniflow/pkg/scheme"
7+
"github.com/siyul-park/uniflow/pkg/spec"
78
"github.com/siyul-park/uniflow/pkg/symbol"
89
)
910

@@ -40,47 +41,31 @@ func AddToScheme(module *language.Module, lang string) scheme.Register {
4041
return err
4142
}
4243

43-
s.AddKnownType(KindBlock, &BlockNodeSpec{})
44-
s.AddCodec(KindBlock, NewBlockNodeCodec(s))
45-
46-
s.AddKnownType(KindPipe, &PipeNodeSpec{})
47-
s.AddCodec(KindPipe, NewPipeNodeCodec())
48-
49-
s.AddKnownType(KindFork, &ForkNodeSpec{})
50-
s.AddCodec(KindFork, NewForkNodeCodec())
51-
52-
s.AddKnownType(KindIf, &IfNodeSpec{})
53-
s.AddCodec(KindIf, NewIfNodeCodec(expr))
54-
55-
s.AddKnownType(KindLoop, &LoopNodeSpec{})
56-
s.AddCodec(KindLoop, NewLoopNodeCodec())
57-
58-
s.AddKnownType(KindMerge, &MergeNodeSpec{})
59-
s.AddCodec(KindMerge, NewMergeNodeCodec())
60-
61-
s.AddKnownType(KindNOP, &NOPNodeSpec{})
62-
s.AddCodec(KindNOP, NewNOPNodeCodec())
63-
64-
s.AddKnownType(KindReduce, &ReduceNodeSpec{})
65-
s.AddCodec(KindReduce, NewReduceNodeCodec(expr))
66-
67-
s.AddKnownType(KindRetry, &RetryNodeSpec{})
68-
s.AddCodec(KindRetry, NewRetryNodeCodec())
69-
70-
s.AddKnownType(KindSession, &SessionNodeSpec{})
71-
s.AddCodec(KindSession, NewSessionNodeCodec())
72-
73-
s.AddKnownType(KindSnippet, &SnippetNodeSpec{})
74-
s.AddCodec(KindSnippet, NewSnippetNodeCodec(module))
75-
76-
s.AddKnownType(KindSplit, &SplitNodeSpec{})
77-
s.AddCodec(KindSplit, NewSplitNodeCodec())
78-
79-
s.AddKnownType(KindSwitch, &SwitchNodeSpec{})
80-
s.AddCodec(KindSwitch, NewSwitchNodeCodec(expr))
44+
definitions := []struct {
45+
kind string
46+
codec scheme.Codec
47+
spec spec.Spec
48+
}{
49+
{KindBlock, NewBlockNodeCodec(s), &BlockNodeSpec{}},
50+
{KindPipe, NewPipeNodeCodec(), &PipeNodeSpec{}},
51+
{KindFork, NewForkNodeCodec(), &ForkNodeSpec{}},
52+
{KindIf, NewIfNodeCodec(expr), &IfNodeSpec{}},
53+
{KindLoop, NewLoopNodeCodec(), &LoopNodeSpec{}},
54+
{KindMerge, NewMergeNodeCodec(), &MergeNodeSpec{}},
55+
{KindNOP, NewNOPNodeCodec(), &NOPNodeSpec{}},
56+
{KindReduce, NewReduceNodeCodec(expr), &ReduceNodeSpec{}},
57+
{KindRetry, NewRetryNodeCodec(), &RetryNodeSpec{}},
58+
{KindSession, NewSessionNodeCodec(), &SessionNodeSpec{}},
59+
{KindSnippet, NewSnippetNodeCodec(module), &SnippetNodeSpec{}},
60+
{KindSplit, NewSplitNodeCodec(), &SplitNodeSpec{}},
61+
{KindSwitch, NewSwitchNodeCodec(expr), &SwitchNodeSpec{}},
62+
{KindWait, NewWaitNodeCodec(), &WaitNodeSpec{}},
63+
}
8164

82-
s.AddKnownType(KindWait, &WaitNodeSpec{})
83-
s.AddCodec(KindWait, NewWaitNodeCodec())
65+
for _, def := range definitions {
66+
s.AddKnownType(def.kind, def.spec)
67+
s.AddCodec(def.kind, def.codec)
68+
}
8469

8570
return nil
8671
})

ext/pkg/io/builder.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
11
package io
22

3-
import "github.com/siyul-park/uniflow/pkg/scheme"
3+
import (
4+
"github.com/siyul-park/uniflow/pkg/scheme"
5+
"github.com/siyul-park/uniflow/pkg/spec"
6+
)
47

58
// AddToScheme returns a function that adds node types and codecs to the provided spec.
69
func AddToScheme(fs FileSystem) scheme.Register {
710
return scheme.RegisterFunc(func(s *scheme.Scheme) error {
8-
s.AddKnownType(KindSQL, &SQLNodeSpec{})
9-
s.AddCodec(KindSQL, NewSQLNodeCodec())
11+
definitions := []struct {
12+
kind string
13+
codec scheme.Codec
14+
spec spec.Spec
15+
}{
16+
{KindSQL, NewSQLNodeCodec(), &SQLNodeSpec{}},
17+
{KindPrint, NewPrintNodeCodec(fs), &PrintNodeSpec{}},
18+
{KindScan, NewScanNodeCodec(fs), &ScanNodeSpec{}},
19+
}
1020

11-
s.AddKnownType(KindPrint, &PrintNodeSpec{})
12-
s.AddCodec(KindPrint, NewPrintNodeCodec(fs))
13-
14-
s.AddKnownType(KindScan, &ScanNodeSpec{})
15-
s.AddCodec(KindScan, NewScanNodeCodec(fs))
21+
for _, def := range definitions {
22+
s.AddKnownType(def.kind, def.spec)
23+
s.AddCodec(def.kind, def.codec)
24+
}
1625

1726
return nil
1827
})
28+
1929
}

ext/pkg/network/builder.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package network
33
import (
44
"github.com/siyul-park/uniflow/pkg/hook"
55
"github.com/siyul-park/uniflow/pkg/scheme"
6+
"github.com/siyul-park/uniflow/pkg/spec"
67
"github.com/siyul-park/uniflow/pkg/symbol"
78
)
89

@@ -30,23 +31,23 @@ func AddToHook() hook.Register {
3031
// AddToScheme returns a function that adds node types and codecs to the provided spec.
3132
func AddToScheme() scheme.Register {
3233
return scheme.RegisterFunc(func(s *scheme.Scheme) error {
33-
s.AddKnownType(KindHTTP, &HTTPNodeSpec{})
34-
s.AddCodec(KindHTTP, NewHTTPNodeCodec())
35-
36-
s.AddKnownType(KindListener, &ListenNodeSpec{})
37-
s.AddCodec(KindListener, NewListenNodeCodec())
38-
39-
s.AddKnownType(KindProxy, &ProxyNodeSpec{})
40-
s.AddCodec(KindProxy, NewProxyNodeCodec())
41-
42-
s.AddKnownType(KindRouter, &RouteNodeSpec{})
43-
s.AddCodec(KindRouter, NewRouteNodeCodec())
44-
45-
s.AddKnownType(KindWebSocket, &WebSocketNodeSpec{})
46-
s.AddCodec(KindWebSocket, NewWebSocketNodeCodec())
47-
48-
s.AddKnownType(KindGateway, &GatewayNodeSpec{})
49-
s.AddCodec(KindGateway, NewGatewayNodeCodec())
34+
definitions := []struct {
35+
kind string
36+
codec scheme.Codec
37+
spec spec.Spec
38+
}{
39+
{KindHTTP, NewHTTPNodeCodec(), &HTTPNodeSpec{}},
40+
{KindListener, NewListenNodeCodec(), &ListenNodeSpec{}},
41+
{KindProxy, NewProxyNodeCodec(), &ProxyNodeSpec{}},
42+
{KindRouter, NewRouteNodeCodec(), &RouteNodeSpec{}},
43+
{KindWebSocket, NewWebSocketNodeCodec(), &WebSocketNodeSpec{}},
44+
{KindGateway, NewGatewayNodeCodec(), &GatewayNodeSpec{}},
45+
}
46+
47+
for _, def := range definitions {
48+
s.AddKnownType(def.kind, def.spec)
49+
s.AddCodec(def.kind, def.codec)
50+
}
5051

5152
return nil
5253
})

ext/pkg/system/builder.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
package system
22

3-
import "github.com/siyul-park/uniflow/pkg/scheme"
3+
import (
4+
"github.com/siyul-park/uniflow/pkg/scheme"
5+
"github.com/siyul-park/uniflow/pkg/spec"
6+
)
47

58
// AddToScheme returns a function that adds node types and codecs to the provided spec.
69
func AddToScheme(table *NativeTable) scheme.Register {
710
return scheme.RegisterFunc(func(s *scheme.Scheme) error {
8-
s.AddKnownType(KindNative, &NativeNodeSpec{})
9-
s.AddCodec(KindNative, NewNativeNodeCodec(table))
11+
definitions := []struct {
12+
kind string
13+
codec scheme.Codec
14+
spec spec.Spec
15+
}{
16+
{KindNative, NewNativeNodeCodec(table), &NativeNodeSpec{}},
17+
}
18+
19+
for _, def := range definitions {
20+
s.AddKnownType(def.kind, def.spec)
21+
s.AddCodec(def.kind, def.codec)
22+
}
1023

1124
return nil
1225
})

pkg/chart/chart.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func (c *Chart) Build(sp spec.Spec) ([]spec.Spec, error) {
139139
env := map[string][]spec.Value{}
140140
for key, vals := range c.Env {
141141
for _, val := range vals {
142-
if val.IsIdentified() {
142+
if !val.IsIdentified() {
143143
v, err := template.Execute(val.Value, data)
144144
if err != nil {
145145
return nil, err
@@ -162,14 +162,11 @@ func (c *Chart) Build(sp spec.Spec) ([]spec.Spec, error) {
162162
return nil, err
163163
}
164164

165-
unstructured.SetEnv(env)
166-
167-
bind, err := spec.Bind(unstructured)
168-
if err != nil {
169-
return nil, err
165+
if len(env) > 0 {
166+
unstructured.SetEnv(env)
170167
}
171168

172-
specs = append(specs, bind)
169+
specs = append(specs, unstructured)
173170
}
174171
return specs, nil
175172
}

pkg/chart/linker.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ func (l *Linker) Link(chrt *Chart) error {
5858

5959
symbols := make([]*symbol.Symbol, 0, len(specs))
6060
for _, sp := range specs {
61+
if build, err := l.scheme.Decode(sp); err != nil {
62+
for _, sb := range symbols {
63+
sb.Close()
64+
}
65+
return nil, err
66+
} else {
67+
sp = build
68+
}
69+
6170
n, err := l.scheme.Compile(sp)
6271
if err != nil {
6372
for _, sb := range symbols {

pkg/process/local.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ func (l *Local[T]) AddStoreHook(proc *Process, hook StoreHook[T]) bool {
2222
l.mu.Lock()
2323
defer l.mu.Unlock()
2424

25-
if _, ok := l.data[proc]; ok {
25+
if val, ok := l.data[proc]; ok {
2626
l.mu.Unlock()
2727
defer l.mu.Lock()
28-
hook.Store(l.data[proc])
28+
29+
hook.Store(val)
2930
return true
3031
}
3132

pkg/runtime/runtime.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (r *Runtime) Reconcile(ctx context.Context) error {
212212
var specs []spec.Spec
213213
for _, id := range r.symbolTable.Keys() {
214214
sb := r.symbolTable.Lookup(id)
215-
if sb != nil && spec.IsBound(sb.Spec, secrets...) {
215+
if sb != nil && r.scheme.IsBound(sb.Spec, secrets...) {
216216
specs = append(specs, sb.Spec)
217217
}
218218
}

0 commit comments

Comments
 (0)