Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/github_actions/goreleaser/gorelea…
Browse files Browse the repository at this point in the history
…ser-action-6
  • Loading branch information
kpfleming authored Jun 25, 2024
2 parents 4839c0e + a34f38a commit a4dd77d
Show file tree
Hide file tree
Showing 23 changed files with 422 additions and 74 deletions.
2 changes: 1 addition & 1 deletion .github/dependencies.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
github.com/goreleaser/goreleaser@latest
github.com/goreleaser/goreleaser/v2@latest
github.com/mgechev/revive@latest
github.com/securego/gosec/v2/cmd/gosec@latest
honnef.co/go/tools/cmd/staticcheck@2023.1.7
2 changes: 1 addition & 1 deletion .github/workflows/tag_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
with:
# goreleaser version (NOT goreleaser-action version)
# update inline with the Makefile
version: latest
version: v2@latest
args: release --clean
env:
AUR_KEY: '${{ github.workspace }}/aur_key'
Expand Down
1 change: 1 addition & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# https://goreleaser.com/customization/project/
project_name: fastly
version: 2

# https://goreleaser.com/customization/release/
release:
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# CHANGELOG

## [v10.12.3](https://github.com/fastly/cli/releases/tag/v10.12.3) (2024-06-14)

**Bug fixes:**

- fix(sso): correct the behaviour for direct sso invocation [#1230](https://github.com/fastly/cli/pull/1230)
- fix(compute/deploy): dereference service number pointer [#1231](https://github.com/fastly/cli/pull/1231)
- fix(sso): update output to reflect default profile behaviour [#1232](https://github.com/fastly/cli/pull/1232)

## [v10.12.2](https://github.com/fastly/cli/releases/tag/v10.12.2) (2024-06-13)

**Bug fixes:**

- fix(sso): re-auth on profile switch + support MAUA [#1226](https://github.com/fastly/cli/pull/1226)

## [v10.12.1](https://github.com/fastly/cli/releases/tag/v10.12.1) (2024-06-10)

**Enhancements:**
Expand Down
12 changes: 6 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,22 @@ require (
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
github.com/segmentio/textio v1.2.0
github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80
golang.org/x/sys v0.20.0 // indirect
golang.org/x/term v0.20.0
golang.org/x/sys v0.21.0 // indirect
golang.org/x/term v0.21.0
)

require (
github.com/fastly/go-fastly/v9 v9.5.0
github.com/fastly/go-fastly/v9 v9.7.0
github.com/hashicorp/cap v0.6.0
github.com/kennygrant/sanitize v1.2.4
github.com/mholt/archiver v3.1.1+incompatible
github.com/otiai10/copy v1.14.0
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
github.com/theckman/yacspin v0.13.12
golang.org/x/crypto v0.23.0
golang.org/x/crypto v0.24.0
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8
golang.org/x/mod v0.17.0
golang.org/x/mod v0.18.0
)

require (
Expand Down Expand Up @@ -74,7 +74,7 @@ require (
golang.org/x/net v0.24.0 // indirect
golang.org/x/oauth2 v0.19.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/text v0.15.0
golang.org/x/text v0.16.0
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
24 changes: 12 additions & 12 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj6
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2 h1:S6Dco8FtAhEI/qkg/00H6RdEGC+MCy5GPiQ+xweNRFE=
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc=
github.com/fastly/go-fastly/v9 v9.5.0 h1:FOZtOA7Dn9DgKQM2hOixP2oKF/49bA5Gf0MpH1eRVUI=
github.com/fastly/go-fastly/v9 v9.5.0/go.mod h1:5w2jgJBZqQEebOwM/rRg7wutAcpDTziiMYWb/6qdM7U=
github.com/fastly/go-fastly/v9 v9.7.0 h1:RIHKQcsUT6n5kZHeDES47FsUWtoJm69/40tk5P8fi8Q=
github.com/fastly/go-fastly/v9 v9.7.0/go.mod h1:5w2jgJBZqQEebOwM/rRg7wutAcpDTziiMYWb/6qdM7U=
github.com/fastly/kingpin v2.1.12-0.20191105091915-95d230a53780+incompatible h1:FhrXlfhgGCS+uc6YwyiFUt04alnjpoX7vgDKJxS6Qbk=
github.com/fastly/kingpin v2.1.12-0.20191105091915-95d230a53780+incompatible/go.mod h1:U8UynVoU1SQaqD2I4ZqgYd5lx3A1ipQYn4aSt2Y5h6c=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
Expand Down Expand Up @@ -152,14 +152,14 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc=
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
Expand Down Expand Up @@ -189,23 +189,23 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
Expand Down
2 changes: 1 addition & 1 deletion pkg/app/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,7 @@ func commandCollectsData(command string) bool {
// requires just the authentication server to be running.
func commandRequiresAuthServer(command string) bool {
switch command {
case "profile create", "profile update":
case "profile create", "profile switch", "profile update":
return true
}
return false
Expand Down
2 changes: 1 addition & 1 deletion pkg/commands/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ func Define(
profileCreate := profile.NewCreateCommand(profileCmdRoot.CmdClause, data, ssoCmdRoot)
profileDelete := profile.NewDeleteCommand(profileCmdRoot.CmdClause, data)
profileList := profile.NewListCommand(profileCmdRoot.CmdClause, data)
profileSwitch := profile.NewSwitchCommand(profileCmdRoot.CmdClause, data)
profileSwitch := profile.NewSwitchCommand(profileCmdRoot.CmdClause, data, ssoCmdRoot)
profileToken := profile.NewTokenCommand(profileCmdRoot.CmdClause, data)
profileUpdate := profile.NewUpdateCommand(profileCmdRoot.CmdClause, data, ssoCmdRoot)
purgeCmdRoot := purge.NewRootCommand(app, data)
Expand Down
10 changes: 4 additions & 6 deletions pkg/commands/compute/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,7 @@ func (c *DeployCommand) Exec(in io.Reader, out io.Writer) (err error) {
if err != nil {
return err
}
if !c.Globals.Flags.NonInteractive {
text.Break(out)
}
text.Break(out)

fnActivateTrial, serviceID, err := c.Setup(out)
if err != nil {
Expand Down Expand Up @@ -204,7 +202,7 @@ func (c *DeployCommand) Exec(in io.Reader, out io.Writer) (err error) {
serviceVersion, err = c.ExistingServiceVersion(serviceID, out)
if err != nil {
if errors.Is(err, ErrPackageUnchanged) {
text.Info(out, "Skipping package deployment, local and service version are identical. (service %s, version %d) ", serviceID, serviceVersion.Number)
text.Info(out, "Skipping package deployment, local and service version are identical. (service %s, version %d) ", serviceID, fastly.ToValue(serviceVersion.Number))
return nil
}
return err
Expand All @@ -215,6 +213,7 @@ func (c *DeployCommand) Exec(in io.Reader, out io.Writer) (err error) {
}

var sr ServiceResources
serviceVersionNumber := fastly.ToValue(serviceVersion.Number)

// NOTE: A 'domain' resource isn't strictly part of the [setup] config.
// It's part of the implementation so that we can utilise the same interface.
Expand All @@ -226,12 +225,11 @@ func (c *DeployCommand) Exec(in io.Reader, out io.Writer) (err error) {
PackageDomain: c.Domain,
RetryLimit: 5,
ServiceID: serviceID,
ServiceVersion: fastly.ToValue(serviceVersion.Number),
ServiceVersion: serviceVersionNumber,
Stdin: in,
Stdout: out,
Verbose: c.Globals.Verbose(),
}
serviceVersionNumber := fastly.ToValue(serviceVersion.Number)
if err = sr.domains.Validate(); err != nil {
errLogService(c.Globals.ErrLog, err, serviceID, serviceVersionNumber)
return fmt.Errorf("error configuring service domains: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion pkg/commands/kvstoreentry/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func NewCreateCommand(parent argparser.Registerer, g *global.Data) *CreateComman
c.CmdClause.Flag("dir", "Path to a directory containing individual files where the filename is the key and the file contents is the value").StringVar(&c.dirPath)
c.CmdClause.Flag("dir-allow-hidden", "Allow hidden files (e.g. dot files) to be included (skipped by default)").BoolVar(&c.dirAllowHidden)
c.CmdClause.Flag("dir-concurrency", "Limit the number of concurrent network resources allocated").Default("50").IntVar(&c.dirConcurrency)
c.CmdClause.Flag("file", "Path to a file containing individual JSON objects separated by new-line delimiter").StringVar(&c.filePath)
c.CmdClause.Flag("file", `Path to a file containing individual JSON objects (e.g., {"key":"...","value":"base64_encoded_value"}) separated by new-line delimiter`).StringVar(&c.filePath)
c.RegisterFlagBool(c.JSONFlag()) // --json
c.CmdClause.Flag("key", "Key name").Short('k').StringVar(&c.Input.Key)
c.CmdClause.Flag("stdin", "Read new-line separated JSON stream via STDIN").BoolVar(&c.stdin)
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/profile/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ func (c *DeleteCommand) Exec(_ io.Reader, out io.Writer) error {
if err := c.Globals.Config.Write(c.Globals.ConfigPath); err != nil {
return err
}
if c.Globals.Verbose() {
text.Break(out)
}
text.Success(out, "Profile '%s' deleted", c.profile)

if _, p := profile.Default(c.Globals.Config.Profiles); p == nil && len(c.Globals.Config.Profiles) > 0 {
Expand Down
7 changes: 7 additions & 0 deletions pkg/commands/profile/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ func (c *ListCommand) Exec(_ io.Reader, out io.Writer) error {
if p == nil {
text.Warning(out, profile.NoDefaults)
} else {
if c.Globals.Verbose() {
text.Break(out)
}
text.Info(out, "Default profile highlighted in red.\n\n")
display(name, p, out, text.BoldRed)
}
Expand All @@ -76,4 +79,8 @@ func display(k string, v *config.Profile, out io.Writer, style func(a ...any) st
text.Output(out, "%s: %s", style("Email"), v.Email)
text.Output(out, "%s: %s", style("Token"), v.Token)
text.Output(out, "%s: %t", style("SSO"), !auth.IsLongLivedToken(v))
if !auth.IsLongLivedToken(v) {
text.Output(out, "%s: %s", style("Customer ID"), v.CustomerID)
text.Output(out, "%s: %s", style("Customer Name"), v.CustomerName)
}
}
4 changes: 4 additions & 0 deletions pkg/commands/profile/profile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,8 @@ func TestProfileList(t *testing.T) {
"access_token": "",
"access_token_created": 0,
"access_token_ttl": 0,
"customer_id": "",
"customer_name": "",
"default": false,
"email": "bar@example.com",
"refresh_token": "",
Expand All @@ -448,6 +450,8 @@ func TestProfileList(t *testing.T) {
"access_token": "",
"access_token_created": 0,
"access_token_ttl": 0,
"customer_id": "",
"customer_name": "",
"default": false,
"email": "foo@example.com",
"refresh_token": "",
Expand Down
52 changes: 42 additions & 10 deletions pkg/commands/profile/switch.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package profile

import (
"errors"
"fmt"
"io"

"github.com/fastly/cli/pkg/argparser"
"github.com/fastly/cli/pkg/commands/sso"
fsterr "github.com/fastly/cli/pkg/errors"
"github.com/fastly/cli/pkg/global"
"github.com/fastly/cli/pkg/profile"
"github.com/fastly/cli/pkg/text"
Expand All @@ -16,32 +17,63 @@ type SwitchCommand struct {
argparser.Base

profile string
ssoCmd *sso.RootCommand
}

// NewSwitchCommand returns a usable command registered under the parent.
func NewSwitchCommand(parent argparser.Registerer, g *global.Data) *SwitchCommand {
func NewSwitchCommand(parent argparser.Registerer, g *global.Data, ssoCmd *sso.RootCommand) *SwitchCommand {
var c SwitchCommand
c.Globals = g
c.ssoCmd = ssoCmd
c.CmdClause = parent.Command("switch", "Switch user profile")
c.CmdClause.Arg("profile", "Profile to switch to").Short('p').Required().StringVar(&c.profile)
return &c
}

// Exec invokes the application logic for the command.
func (c *SwitchCommand) Exec(_ io.Reader, out io.Writer) error {
var ok bool
func (c *SwitchCommand) Exec(in io.Reader, out io.Writer) error {
// We get the named profile to check if it's an SSO-based profile.
// If we're switching to an SSO-based profile, then we need to re-auth.
p := profile.Get(c.profile, c.Globals.Config.Profiles)
if p == nil {
err := fmt.Errorf(profile.DoesNotExist, c.profile)
c.Globals.ErrLog.Add(err)
return fsterr.RemediationError{
Inner: err,
Remediation: fsterr.ProfileRemediation,
}
}
if isSSOToken(p) {
// IMPORTANT: We need to set profile fields for `sso` command.
//
// This is so the `sso` command will use this information to trigger the
// correct authentication flow.
c.ssoCmd.InvokedFromProfileSwitch = true
c.ssoCmd.ProfileSwitchName = c.profile
c.ssoCmd.ProfileSwitchEmail = p.Email
c.ssoCmd.ProfileSwitchCustomerID = p.CustomerID
c.ssoCmd.ProfileDefault = true

err := c.ssoCmd.Exec(in, out)
if err != nil {
return fmt.Errorf("failed to authenticate: %w", err)
}
text.Success(out, "\nProfile switched to '%s'", c.profile)
return nil
}

// We call SetDefault for its side effect of resetting all other profiles to have
// their Default field set to false.
p, ok := profile.SetDefault(c.profile, c.Globals.Config.Profiles)
ps, ok := profile.SetDefault(c.profile, c.Globals.Config.Profiles)
if !ok {
msg := fmt.Sprintf(profile.DoesNotExist, c.profile)
err := errors.New(msg)
err := fmt.Errorf(profile.DoesNotExist, c.profile)
c.Globals.ErrLog.Add(err)
return err
return fsterr.RemediationError{
Inner: err,
Remediation: fsterr.ProfileRemediation,
}
}

c.Globals.Config.Profiles = p
c.Globals.Config.Profiles = ps

if err := c.Globals.Config.Write(c.Globals.ConfigPath); err != nil {
c.Globals.ErrLog.Add(err)
Expand Down
Loading

0 comments on commit a4dd77d

Please sign in to comment.