Skip to content

Commit b8884c2

Browse files
authored
Merge branch 'main' into fix-configs-secrets-2
Signed-off-by: Lionel <[email protected]>
2 parents b530e6c + 5f7c9a2 commit b8884c2

File tree

4 files changed

+60
-52
lines changed

4 files changed

+60
-52
lines changed

go.mod

+10-10
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,24 @@ require (
3737
github.com/r3labs/sse v0.0.0-20210224172625-26fe804710bc
3838
github.com/sirupsen/logrus v1.9.3
3939
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
40-
github.com/spf13/cobra v1.8.1
40+
github.com/spf13/cobra v1.9.1
4141
github.com/spf13/pflag v1.0.6
4242
github.com/stretchr/testify v1.10.0
4343
github.com/theupdateframework/notary v0.7.0
4444
github.com/tilt-dev/fsnotify v1.4.8-0.20220602155310-fff9c274a375
4545
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0
46-
go.opentelemetry.io/otel v1.31.0
46+
go.opentelemetry.io/otel v1.32.0
4747
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0
4848
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0
49-
go.opentelemetry.io/otel/metric v1.31.0
50-
go.opentelemetry.io/otel/sdk v1.31.0
51-
go.opentelemetry.io/otel/trace v1.31.0
49+
go.opentelemetry.io/otel/metric v1.32.0
50+
go.opentelemetry.io/otel/sdk v1.32.0
51+
go.opentelemetry.io/otel/trace v1.32.0
5252
go.uber.org/goleak v1.3.0
5353
go.uber.org/mock v0.5.0
5454
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
5555
golang.org/x/sync v0.11.0
5656
golang.org/x/sys v0.30.0
57-
google.golang.org/grpc v1.68.1
57+
google.golang.org/grpc v1.70.0
5858
gopkg.in/yaml.v3 v3.0.1
5959
gotest.tools/v3 v3.5.2
6060
tags.cncf.io/container-device-interface v0.8.0
@@ -174,16 +174,16 @@ require (
174174
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0 // indirect
175175
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.31.0 // indirect
176176
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
177-
go.opentelemetry.io/otel/sdk/metric v1.31.0 // indirect
177+
go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect
178178
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
179179
golang.org/x/crypto v0.31.0 // indirect
180180
golang.org/x/net v0.33.0 // indirect
181-
golang.org/x/oauth2 v0.23.0 // indirect
181+
golang.org/x/oauth2 v0.24.0 // indirect
182182
golang.org/x/term v0.27.0 // indirect
183183
golang.org/x/text v0.21.0 // indirect
184184
golang.org/x/time v0.6.0 // indirect
185-
google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect
186-
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect
185+
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a // indirect
186+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect
187187
google.golang.org/protobuf v1.35.2 // indirect
188188
gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect
189189
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

+20-22
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ github.com/containerd/ttrpc v1.2.7 h1:qIrroQvuOL9HQ1X6KHe2ohc7p+HP/0VE6XPU7elJRq
114114
github.com/containerd/ttrpc v1.2.7/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o=
115115
github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40=
116116
github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk=
117-
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
118117
github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
119118
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
120119
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -443,12 +442,11 @@ github.com/spdx/tools-golang v0.5.3/go.mod h1:/ETOahiAo96Ob0/RAIBmFZw6XN0yTnyr/u
443442
github.com/spf13/cast v0.0.0-20150508191742-4d07383ffe94 h1:JmfC365KywYwHB946TTiQWEb8kqPY+pybPLoGE9GgVk=
444443
github.com/spf13/cast v0.0.0-20150508191742-4d07383ffe94/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
445444
github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
446-
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
447-
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
445+
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
446+
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
448447
github.com/spf13/jwalterweatherman v0.0.0-20141219030609-3d60171a6431 h1:XTHrT015sxHyJ5FnQ0AeemSspZWaDq7DoTRW0EVsDCE=
449448
github.com/spf13/jwalterweatherman v0.0.0-20141219030609-3d60171a6431/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
450449
github.com/spf13/pflag v1.0.0/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
451-
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
452450
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
453451
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
454452
github.com/spf13/viper v0.0.0-20150530192845-be5ff3e4840c h1:2EejZtjFjKJGk71ANb+wtFK5EjUzUkEM3R0xnp559xg=
@@ -509,8 +507,8 @@ go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.
509507
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0/go.mod h1:3qi2EEwMgB4xnKgPLqsDP3j9qxnHDZeHsnAxfjQqTko=
510508
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s=
511509
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM=
512-
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
513-
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
510+
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
511+
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
514512
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0 h1:FZ6ei8GFW7kyPYdxJaV2rgI6M+4tvZzhYsQ2wgyVC08=
515513
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0/go.mod h1:MdEu/mC6j3D+tTEfvI15b5Ci2Fn7NneJ71YMoiS3tpI=
516514
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.31.0 h1:ZsXq73BERAiNuuFXYqP4MR5hBrjXfMGSO+Cx7qoOZiM=
@@ -521,14 +519,14 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy
521519
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o=
522520
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU=
523521
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4=
524-
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
525-
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
526-
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
527-
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
528-
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
529-
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
530-
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
531-
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
522+
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
523+
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
524+
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
525+
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
526+
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
527+
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
528+
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
529+
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
532530
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
533531
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
534532
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -564,8 +562,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
564562
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
565563
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
566564
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
567-
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
568-
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
565+
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
566+
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
569567
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
570568
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
571569
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -621,13 +619,13 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
621619
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
622620
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
623621
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
624-
google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg=
625-
google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M=
626-
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI=
627-
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
622+
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a h1:OAiGFfOiA0v9MRYsSidp3ubZaBnteRUyn3xB2ZQ5G/E=
623+
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a/go.mod h1:jehYqy3+AhJU9ve55aNOaSml7wUXjF9x6z2LcCfpAhY=
624+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1:hgh8P4EuoxpsuKMXX/To36nOFD7vixReXgn8lPGnt+o=
625+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU=
628626
google.golang.org/grpc v1.0.5/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
629-
google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0=
630-
google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe00waw=
627+
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
628+
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
631629
google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io=
632630
google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
633631
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=

pkg/compose/secrets.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (s *composeService) injectSecrets(ctx context.Context, project *types.Proje
3737
if file.Environment != "" {
3838
env, ok := project.Environment[file.Environment]
3939
if !ok {
40-
return fmt.Errorf("environment variable %q required by file %q is not set", file.Environment, file.Name)
40+
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name)
4141
}
4242
content = env
4343
} else if file.File != "" {
@@ -52,6 +52,10 @@ func (s *composeService) injectSecrets(ctx context.Context, project *types.Proje
5252
continue
5353
}
5454

55+
if service.ReadOnly {
56+
return fmt.Errorf("cannot create secret %q in read-only service %s", file.Name, service.Name)
57+
}
58+
5559
if config.Target == "" {
5660
config.Target = "/run/secrets/" + config.Source
5761
} else if !isAbsTarget(config.Target) {
@@ -81,7 +85,7 @@ func (s *composeService) injectConfigs(ctx context.Context, project *types.Proje
8185
if file.Environment != "" {
8286
env, ok := project.Environment[file.Environment]
8387
if !ok {
84-
return fmt.Errorf("environment variable %q required by file %q is not set", file.Environment, file.Name)
88+
return fmt.Errorf("environment variable %q required by config %q is not set", file.Environment, file.Name)
8589
}
8690
content = env
8791
} else if file.File != "" {
@@ -96,6 +100,10 @@ func (s *composeService) injectConfigs(ctx context.Context, project *types.Proje
96100
continue
97101
}
98102

103+
if service.ReadOnly {
104+
return fmt.Errorf("cannot create config %q in read-only service %s", file.Name, service.Name)
105+
}
106+
99107
if config.Target == "" {
100108
config.Target = "/" + config.Source
101109
}

pkg/compose/up.go

+20-18
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,28 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options
7272
var isTerminated atomic.Bool
7373
printer := newLogPrinter(options.Start.Attach)
7474

75+
var kEvents <-chan keyboard.KeyEvent
76+
if options.Start.NavigationMenu {
77+
kEvents, err = keyboard.GetKeys(100)
78+
if err != nil {
79+
logrus.Warnf("could not start menu, an error occurred while starting: %v", err)
80+
options.Start.NavigationMenu = false
81+
} else {
82+
defer keyboard.Close() //nolint:errcheck
83+
isWatchConfigured := s.shouldWatch(project)
84+
isDockerDesktopActive := s.isDesktopIntegrationActive()
85+
tracing.KeyboardMetrics(ctx, options.Start.NavigationMenu, isDockerDesktopActive, isWatchConfigured)
86+
formatter.NewKeyboardManager(ctx, isDockerDesktopActive, isWatchConfigured, signalChan, s.watch)
87+
}
88+
}
89+
7590
doneCh := make(chan bool)
7691
eg.Go(func() error {
92+
if options.Start.NavigationMenu && options.Start.Watch {
93+
// Run watch by navigation menu, so we can interactively enable/disable
94+
formatter.KeyboardManager.StartWatch(ctx, doneCh, project, options)
95+
}
96+
7797
first := true
7898
gracefulTeardown := func() {
7999
printer.Cancel()
@@ -89,24 +109,6 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options
89109
first = false
90110
}
91111

92-
var kEvents <-chan keyboard.KeyEvent
93-
if options.Start.NavigationMenu {
94-
kEvents, err = keyboard.GetKeys(100)
95-
if err != nil {
96-
logrus.Warn("could not start menu, an error occurred while starting.")
97-
} else {
98-
defer keyboard.Close() //nolint:errcheck
99-
isWatchConfigured := s.shouldWatch(project)
100-
isDockerDesktopActive := s.isDesktopIntegrationActive()
101-
tracing.KeyboardMetrics(ctx, options.Start.NavigationMenu, isDockerDesktopActive, isWatchConfigured)
102-
103-
formatter.NewKeyboardManager(ctx, isDockerDesktopActive, isWatchConfigured, signalChan, s.watch)
104-
if options.Start.Watch {
105-
formatter.KeyboardManager.StartWatch(ctx, doneCh, project, options)
106-
}
107-
}
108-
}
109-
110112
for {
111113
select {
112114
case <-doneCh:

0 commit comments

Comments
 (0)