Skip to content

Commit 3a48a1b

Browse files
authored
Merge pull request #126 from mattrent/fixes
Fixes and improvements to prepare for v0.8.0 release of FunLess
2 parents 2af973b + a67300b commit 3a48a1b

46 files changed

Lines changed: 963 additions & 246 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
# working-directory: somedir
5050

5151
# Optional: golangci-lint command line arguments.
52-
# args: --issues-exit-code=0
52+
args: --timeout=3m
5353

5454
# Optional: show only new issues if it's a pull request. The default value is `false`.
5555
# only-new-issues: true

cmd/fl/app/app.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/alecthomas/kong"
2323
"github.com/funlessdev/fl-cli/internal/command/admin"
24+
"github.com/funlessdev/fl-cli/internal/command/cfg"
2425
"github.com/funlessdev/fl-cli/internal/command/fn"
2526
"github.com/funlessdev/fl-cli/internal/command/mod"
2627
"github.com/funlessdev/fl-cli/internal/command/template"
@@ -36,6 +37,7 @@ type CLI struct {
3637
Mod mod.Mod `cmd:"" help:"Create, delete and manage modules"`
3738
Admin admin.Admin `cmd:"" aliases:"a" help:"Deploy and manage the platform"`
3839
Template template.Template `cmd:"" help:"Pull function templates"`
40+
Cfg cfg.Cfg `cmd:"" aliases:"c,config" help:"Manage local configuration"`
3941

4042
Version kong.VersionFlag `short:"v" cmd:"" passthrough:"" help:"Show fl version"`
4143
}
@@ -56,7 +58,10 @@ func ParseCMD(version string) (*kong.Context, error) {
5658
return nil, err
5759
}
5860

59-
flConfig := client.Config{Host: "http://localhost:4000"}
61+
flConfig, err := client.NewConfig(pkg.ConfigFileName)
62+
if err != nil {
63+
return nil, err
64+
}
6065
flClient, err := client.NewClient(http.DefaultClient, flConfig)
6166
validator := client.InputValidator{}
6267
if err != nil {
@@ -78,14 +83,16 @@ func ParseCMD(version string) (*kong.Context, error) {
7883
kong.BindTo(ctx, (*context.Context)(nil)),
7984
kong.BindTo(fnSvc, (*client.FnHandler)(nil)),
8085
kong.BindTo(modSvc, (*client.ModHandler)(nil)),
86+
kong.BindTo(userSvc, (*client.UserHandler)(nil)),
8187
kong.BindTo(logger, (*log.FLogger)(nil)),
8288
kong.BindTo(dockerShell, (*deploy.DockerShell)(nil)),
8389
kong.BindTo(kubernetesDeployer, (*deploy.KubernetesDeployer)(nil)),
8490
kong.BindTo(kubernetesRemover, (*deploy.KubernetesRemover)(nil)),
8591
kong.BindTo(wasmBuilder, (*build.DockerBuilder)(nil)),
86-
kong.BindTo(userSvc, (*client.UserHandler)(nil)),
92+
kong.BindTo(flConfig, (*client.Config)(nil)),
8793
kong.Vars{
8894
"version": version,
95+
"config_keys": pkg.ConfigKeys,
8996
"default_core_image": pkg.CoreImg,
9097
"default_worker_image": pkg.WorkerImg,
9198
},

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ require (
2222
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230312081443-2c80f8dc5ba5
2323
github.com/theckman/yacspin v0.13.12
2424
golang.org/x/exp v0.0.0-20230223210539-50820d90acfd
25+
gopkg.in/yaml.v2 v2.4.0
2526
gotest.tools/v3 v3.4.0
2627
k8s.io/api v0.26.1
2728
k8s.io/apimachinery v0.26.1
@@ -51,7 +52,7 @@ require (
5152
github.com/google/gnostic v0.6.9 // indirect
5253
github.com/google/go-cmp v0.5.9 // indirect
5354
github.com/google/gofuzz v1.2.0 // indirect
54-
github.com/imdario/mergo v0.3.13 // indirect
55+
github.com/imdario/mergo v0.3.14 // indirect
5556
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
5657
github.com/josharian/intern v1.0.0 // indirect
5758
github.com/json-iterator/go v1.1.12 // indirect
@@ -60,6 +61,7 @@ require (
6061
github.com/mattn/go-colorable v0.1.13 // indirect
6162
github.com/mattn/go-isatty v0.0.17 // indirect
6263
github.com/mattn/go-runewidth v0.0.14 // indirect
64+
github.com/moby/spdystream v0.2.0 // indirect
6365
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
6466
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
6567
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -89,7 +91,6 @@ require (
8991
google.golang.org/protobuf v1.28.1 // indirect
9092
gopkg.in/inf.v0 v0.9.1 // indirect
9193
gopkg.in/warnings.v0 v0.1.2 // indirect
92-
gopkg.in/yaml.v2 v2.4.0 // indirect
9394
gopkg.in/yaml.v3 v3.0.1 // indirect
9495
k8s.io/klog/v2 v2.90.0 // indirect
9596
k8s.io/kube-openapi v0.0.0-20230127205639-68031ae9242a // indirect
@@ -103,5 +104,5 @@ require (
103104
github.com/go-git/go-git/v5 v5.5.2
104105
github.com/mitchellh/go-homedir v1.1.0
105106
github.com/pkg/errors v0.9.1 // indirect
106-
github.com/stretchr/testify v1.8.1
107+
github.com/stretchr/testify v1.8.2
107108
)

go.sum

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh
4646
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
4747
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
4848
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
49+
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
4950
github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ=
5051
github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
5152
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
@@ -59,10 +60,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
5960
github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
6061
github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
6162
github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0=
62-
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230126150929-357b8efdaab0 h1:sR6tDlHDrfvheLt8cDQddgE5nUX+mD5d2nmAEiFZD98=
63-
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230126150929-357b8efdaab0/go.mod h1:ysqKhDMya3Qzmu37XEpkbGuNWk67I88e93g47GT5vz4=
64-
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230218195230-0cef4bf202e2 h1:8GtBi2j3ApEv8ffiasZLsVKVwyGKhF3PqC9Ip7DGeTA=
65-
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230218195230-0cef4bf202e2/go.mod h1:hnAtdQhg4An6FDhte2RWdM5C6v2kZ78+f/4/dN/+cGU=
6663
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230312081443-2c80f8dc5ba5 h1:8Ax6MDbmmXOM/+McMj2iR3DC/BX6XnQpWPX7GfE0Gy4=
6764
github.com/funlessdev/fl-client-sdk-go v0.0.0-20230312081443-2c80f8dc5ba5/go.mod h1:hnAtdQhg4An6FDhte2RWdM5C6v2kZ78+f/4/dN/+cGU=
6865
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -119,10 +116,12 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
119116
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
120117
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
121118
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
119+
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
122120
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
123121
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
124-
github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
125122
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
123+
github.com/imdario/mergo v0.3.14 h1:fOqeC1+nCuuk6PKQdg9YmosXX7Y7mHX6R/0ZldI9iHo=
124+
github.com/imdario/mergo v0.3.14/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
126125
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
127126
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
128127
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
@@ -155,6 +154,8 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV
155154
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
156155
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
157156
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
157+
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
158+
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
158159
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
159160
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
160161
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -209,8 +210,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
209210
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
210211
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
211212
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
212-
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
213213
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
214+
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
215+
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
214216
github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4=
215217
github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg=
216218
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=

internal/command/admin/deploy/docker/docker_down.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (r *Down) Run(ctx context.Context, dk deploy.DockerShell, logger log.FLogge
3434
if err != nil {
3535
errorMsg := "unable to read docker-compose.yml file"
3636
if os.IsNotExist(err) {
37-
lines, _ := dk.ComposeList()
37+
lines, _ := dk.ComposeList(ctx)
3838
if slices.Contains(lines, "fl") {
3939
errorMsg = "unable to locate docker-compose.yml, but a local deployment was found. The file might have been moved or deleted."
4040
} else {
@@ -45,7 +45,7 @@ func (r *Down) Run(ctx context.Context, dk deploy.DockerShell, logger log.FLogge
4545
}
4646
defer os.Remove(composeFilePath)
4747

48-
err = dk.ComposeDown(composeFilePath)
48+
err = dk.ComposeDown(ctx, composeFilePath)
4949
if err != nil {
5050
return err
5151
}

internal/command/admin/deploy/docker/docker_down_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/funlessdev/fl-cli/pkg/homedir"
2424
"github.com/funlessdev/fl-cli/test/mocks"
25+
"github.com/stretchr/testify/mock"
2526
"github.com/stretchr/testify/require"
2627
)
2728

@@ -60,7 +61,7 @@ func TestDockerDownRun(t *testing.T) {
6061
require.NoError(t, err)
6162

6263
out.Reset()
63-
mockDockerShell.On("ComposeDown", path).Return(errors.New("some compose down error")).Once()
64+
mockDockerShell.On("ComposeDown", mock.Anything, path).Return(errors.New("some compose down error")).Once()
6465

6566
err = down.Run(ctx, mockDockerShell, logger)
6667
require.Error(t, err)
@@ -78,7 +79,7 @@ func TestDockerDownRun(t *testing.T) {
7879
}()
7980

8081
out.Reset()
81-
mockDockerShell.On("ComposeList").Return([]string{"fl"}, nil).Once()
82+
mockDockerShell.On("ComposeList", mock.Anything).Return([]string{"fl"}, nil).Once()
8283

8384
err = down.Run(ctx, mockDockerShell, logger)
8485
require.Error(t, err)
@@ -98,7 +99,7 @@ func TestDockerDownRun(t *testing.T) {
9899
}()
99100

100101
out.Reset()
101-
mockDockerShell.On("ComposeList").Return([]string{"test"}, nil).Once()
102+
mockDockerShell.On("ComposeList", mock.Anything).Return([]string{"test"}, nil).Once()
102103

103104
err = down.Run(ctx, mockDockerShell, logger)
104105
require.Error(t, err)
@@ -111,7 +112,7 @@ func TestDockerDownRun(t *testing.T) {
111112
require.NoError(t, err)
112113

113114
out.Reset()
114-
mockDockerShell.On("ComposeDown", path).Return(nil)
115+
mockDockerShell.On("ComposeDown", mock.Anything, path).Return(nil)
115116

116117
err = down.Run(ctx, mockDockerShell, logger)
117118
require.NoError(t, err)

internal/command/admin/deploy/docker/docker_up.go

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ import (
1919
"errors"
2020
"io"
2121
"net/http"
22-
"strings"
2322

2423
"github.com/funlessdev/fl-cli/pkg"
24+
"github.com/funlessdev/fl-cli/pkg/client"
2525
"github.com/funlessdev/fl-cli/pkg/deploy"
2626
"github.com/funlessdev/fl-cli/pkg/homedir"
2727
"github.com/funlessdev/fl-cli/pkg/log"
28+
"gopkg.in/yaml.v2"
2829
)
2930

3031
const (
@@ -52,9 +53,12 @@ EXAMPLES
5253
$ fl admin deploy docker up --core <your-core-image> --worker <your-worker-image>`
5354
}
5455

55-
func (u *Up) Run(ctx context.Context, dk deploy.DockerShell, logger log.FLogger) error {
56+
func (u *Up) Run(ctx context.Context, dk deploy.DockerShell, logger log.FLogger, config client.Config) error {
5657
logger.Info("Deploying FunLess locally...\n\n")
5758

59+
cmdEnv := map[string]string{"SECRET_KEY_BASE": config.SecretKeyBase}
60+
ctx = context.WithValue(ctx, pkg.FLContextKey("env"), cmdEnv)
61+
5862
_ = logger.StartSpinner("Setting things up...")
5963

6064
composeFilePath, err := downloadFile("docker-compose.yml", dockerComposeYmlUrl)
@@ -84,11 +88,20 @@ func (u *Up) Run(ctx context.Context, dk deploy.DockerShell, logger log.FLogger)
8488

8589
_ = logger.StopSpinner(nil)
8690

87-
if err := dk.ComposeUp(composeFilePath); err != nil {
91+
if err := dk.ComposeUp(ctx, composeFilePath); err != nil {
8892
return err
8993
}
9094

91-
logger.Info("\nDeployment complete!\n")
95+
logger.Info("\nExtracting auth tokens... 🔒\n\n")
96+
97+
err = dk.LogTokens(ctx)
98+
if err != nil {
99+
logger.Info("Couldn't extract auth tokens from core container. Completing deployment...")
100+
} else {
101+
logger.Info("\n\nRemember to add these tokens in ~/.fl/config as api_token and admin_token.")
102+
}
103+
104+
logger.Info("\n\nDeployment complete!\n")
92105
logger.Info("You can now start using FunLess! 🎉\n")
93106

94107
return nil
@@ -141,23 +154,35 @@ func downloadFolderFile(folder, file, url string) error {
141154
}
142155

143156
func replaceImages(core string, worker string) error {
144-
if core == pkg.CoreImg && worker == pkg.WorkerImg {
145-
return nil
146-
}
147-
148157
content, _, err := homedir.ReadFromConfigDir("docker-compose.yml")
149158
if err != nil {
150159
return errors.New("unable to read docker-compose.yml")
151160
}
152161

153-
newCompose := string(content)
154-
if core != pkg.CoreImg {
155-
newCompose = strings.Replace(string(content), pkg.CoreImg, core, 1)
162+
var composeYaml map[string]interface{}
163+
err = yaml.Unmarshal(content, &composeYaml)
164+
if err != nil {
165+
return err
156166
}
157-
if worker != pkg.WorkerImg {
158-
newCompose = strings.Replace(newCompose, pkg.WorkerImg, worker, 1)
167+
168+
svc := composeYaml["services"].(map[interface{}]interface{})
169+
svcCore := svc["core"].(map[interface{}]interface{})
170+
svcWorker := svc["worker"].(map[interface{}]interface{})
171+
172+
svcCore["image"] = core
173+
svcWorker["image"] = worker
174+
175+
svc["core"] = svcCore
176+
svc["worker"] = svcWorker
177+
composeYaml["services"] = svc
178+
179+
newCompose, err := yaml.Marshal(composeYaml)
180+
181+
if err != nil {
182+
return err
159183
}
160184

161185
_, err = homedir.WriteToConfigDir("docker-compose.yml", []byte(newCompose), true)
186+
162187
return err
163188
}

0 commit comments

Comments
 (0)