Skip to content

Commit 95a3e62

Browse files
committed
refactor: set app environment manifest variables after selection
1 parent fae6821 commit 95a3e62

10 files changed

Lines changed: 75 additions & 78 deletions

File tree

cmd/app/add.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ package app
1717
import (
1818
"context"
1919

20-
"github.com/slackapi/slack-cli/internal/app"
2120
"github.com/slackapi/slack-cli/internal/cmdutil"
2221
"github.com/slackapi/slack-cli/internal/config"
2322
"github.com/slackapi/slack-cli/internal/pkg/apps"
@@ -164,6 +163,7 @@ func RunAddCommand(ctx context.Context, clients *shared.ClientFactory, selection
164163

165164
if !isProductionApp {
166165
selection.App.IsDev = true
166+
clients.Config.SetAppEnvManifestVariables(selection.App.TeamDomain, selection.App.IsDev)
167167
}
168168
}
169169
}
@@ -178,8 +178,6 @@ func RunAddCommand(ctx context.Context, clients *shared.ClientFactory, selection
178178
return ctx, "", types.App{}, err
179179
}
180180

181-
clients.Config.ManifestEnv = app.SetManifestEnvTeamVars(clients.Config.ManifestEnv, selection.App.TeamDomain, selection.App.IsDev)
182-
183181
// Install dev app or prod app to a workspace
184182
installedApp, installState, err := appInstall(ctx, clients, selection, orgGrantWorkspaceID)
185183
if err != nil {

cmd/manifest/validate.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"strings"
2121

2222
"github.com/opentracing/opentracing-go"
23-
"github.com/slackapi/slack-cli/internal/app"
2423
"github.com/slackapi/slack-cli/internal/cmdutil"
2524
"github.com/slackapi/slack-cli/internal/iostreams"
2625
"github.com/slackapi/slack-cli/internal/pkg/manifest"
@@ -75,8 +74,6 @@ func NewValidateCommand(clients *shared.ClientFactory) *cobra.Command {
7574
token = selection.Auth.Token
7675
}
7776

78-
clients.Config.ManifestEnv = app.SetManifestEnvTeamVars(clients.Config.ManifestEnv, selection.App.TeamDomain, selection.App.IsDev)
79-
8077
isValid, warn, err := manifestValidateFunc(ctx, clients, selection.App, token)
8178
if err != nil {
8279
return err

cmd/platform/run.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919

2020
"github.com/slackapi/slack-cli/cmd/help"
2121
"github.com/slackapi/slack-cli/cmd/triggers"
22-
internalapp "github.com/slackapi/slack-cli/internal/app"
2322
"github.com/slackapi/slack-cli/internal/cmdutil"
2423
"github.com/slackapi/slack-cli/internal/pkg/platform"
2524
"github.com/slackapi/slack-cli/internal/prompts"
@@ -141,8 +140,6 @@ func RunRunCommand(clients *shared.ClientFactory, cmd *cobra.Command, args []str
141140
return err
142141
}
143142

144-
clients.Config.ManifestEnv = internalapp.SetManifestEnvTeamVars(clients.Config.ManifestEnv, selection.Auth.TeamDomain, selection.App.IsDev)
145-
146143
runArgs := platform.RunArgs{
147144
Activity: !runFlags.noActivity,
148145
ActivityLevel: runFlags.activityLevel,

cmd/triggers/create.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ import (
1818
"context"
1919
"encoding/json"
2020
"fmt"
21+
"maps"
2122
"path/filepath"
2223
"strings"
2324

2425
"github.com/opentracing/opentracing-go"
2526
"github.com/slackapi/slack-cli/cmd/app"
2627
"github.com/slackapi/slack-cli/internal/api"
27-
internalapp "github.com/slackapi/slack-cli/internal/app"
2828
"github.com/slackapi/slack-cli/internal/cmdutil"
2929
"github.com/slackapi/slack-cli/internal/config"
3030
"github.com/slackapi/slack-cli/internal/goutils"
@@ -102,8 +102,6 @@ func runCreateCommand(clients *shared.ClientFactory, cmd *cobra.Command) error {
102102
ctx = config.SetContextToken(ctx, token)
103103
app := selection.App
104104

105-
clients.Config.ManifestEnv = internalapp.SetManifestEnvTeamVars(clients.Config.ManifestEnv, selection.App.TeamDomain, selection.App.IsDev)
106-
107105
if selection.App.IsNew() || selection.App.AppID == "" {
108106
_ctx, installState, _app, err := workspaceInstallAppFunc(ctx, clients, &selection, createFlags.orgGrantWorkspaceID)
109107
if err != nil {
@@ -315,10 +313,7 @@ func triggerRequestViaHook(ctx context.Context, clients *shared.ClientFactory, p
315313
hookExecOpts := hooks.HookExecOpts{
316314
Hook: clients.SDKConfig.Hooks.GetTrigger,
317315
Args: map[string]string{"source": path},
318-
Env: map[string]string{},
319-
}
320-
for name, val := range clients.Config.ManifestEnv {
321-
hookExecOpts.Env[name] = val
316+
Env: maps.Clone(clients.Config.ManifestEnv),
322317
}
323318
triggerDefAsStr, err := clients.HookExecutor.Execute(
324319
ctx,

cmd/triggers/update.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020

2121
"github.com/opentracing/opentracing-go"
2222
"github.com/slackapi/slack-cli/internal/api"
23-
internalapp "github.com/slackapi/slack-cli/internal/app"
2423
"github.com/slackapi/slack-cli/internal/cmdutil"
2524
"github.com/slackapi/slack-cli/internal/config"
2625
"github.com/slackapi/slack-cli/internal/iostreams"
@@ -87,8 +86,6 @@ func runUpdateCommand(clients *shared.ClientFactory, cmd *cobra.Command) error {
8786
ctx = config.SetContextToken(ctx, token)
8887
app := selection.App
8988

90-
clients.Config.ManifestEnv = internalapp.SetManifestEnvTeamVars(clients.Config.ManifestEnv, selection.App.TeamDomain, selection.App.IsDev)
91-
9289
if err = cmdutil.AppExists(app, selection.Auth); err != nil {
9390
return err
9491
}

internal/app/manifest.go

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package app
1717
import (
1818
"context"
1919
"encoding/json"
20+
"maps"
2021
"strings"
2122

2223
"github.com/slackapi/slack-cli/internal/api"
@@ -38,23 +39,6 @@ type ManifestClientInterface interface {
3839
GetManifestRemote(ctx context.Context, token string, appID string) (types.SlackYaml, error)
3940
}
4041

41-
// SetManifestEnvTeamVars sets environment variables that may affect app manifest values
42-
func SetManifestEnvTeamVars(manifestEnv map[string]string, appTeamDomain string, isDev bool) map[string]string {
43-
localOrDeployed := "deployed"
44-
if isDev {
45-
localOrDeployed = "local"
46-
}
47-
48-
if manifestEnv == nil {
49-
manifestEnv = map[string]string{}
50-
}
51-
52-
manifestEnv["SLACK_WORKSPACE"] = appTeamDomain
53-
manifestEnv["SLACK_ENV"] = localOrDeployed
54-
55-
return manifestEnv
56-
}
57-
5842
// NewManifestClient returns a new, empty instance of the ManifestClient
5943
func NewManifestClient(
6044
apiClient api.APIInterface,
@@ -86,10 +70,7 @@ func (c *ManifestClient) GetManifestLocal(ctx context.Context, sdkConfig hooks.S
8670
},
8771
Hook: sdkConfig.Hooks.GetManifest,
8872
}
89-
90-
for name, val := range c.Env {
91-
manifestHookOpts.Env[name] = val
92-
}
73+
maps.Copy(manifestHookOpts.Env, c.Env)
9374

9475
slackManifestInfo, err := hookExecutor.Execute(ctx, manifestHookOpts)
9576
if err != nil {

internal/app/manifest_test.go

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -29,44 +29,6 @@ import (
2929
"github.com/stretchr/testify/require"
3030
)
3131

32-
func Test_AppManifest_SetManifestEnvTeamVars(t *testing.T) {
33-
tests := map[string]struct {
34-
teamDomain string
35-
isDev bool
36-
manifest map[string]string
37-
expected map[string]string
38-
}{
39-
"workspace and prod environment is set": {
40-
teamDomain: "bigspeck",
41-
isDev: false,
42-
manifest: nil,
43-
expected: map[string]string{
44-
"SLACK_WORKSPACE": "bigspeck",
45-
"SLACK_ENV": "deployed",
46-
},
47-
},
48-
"workspace and local environment is set": {
49-
teamDomain: "sandbox",
50-
isDev: true,
51-
manifest: map[string]string{"SLACK_APP_ID": "A1234"},
52-
expected: map[string]string{
53-
"SLACK_APP_ID": "A1234",
54-
"SLACK_WORKSPACE": "sandbox",
55-
"SLACK_ENV": "local",
56-
},
57-
},
58-
}
59-
for name, tc := range tests {
60-
t.Run(name, func(t *testing.T) {
61-
teamManifest := SetManifestEnvTeamVars(tc.manifest, tc.teamDomain, tc.isDev)
62-
require.Equal(t, len(tc.expected), len(teamManifest))
63-
for key, val := range tc.expected {
64-
require.Equal(t, val, teamManifest[key])
65-
}
66-
})
67-
}
68-
}
69-
7032
func Test_AppManifest_GetManifestLocal(t *testing.T) {
7133
tests := map[string]struct {
7234
mockManifestInfo string

internal/config/dotenv.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ func (c *Config) GetDotEnvFileVariables() (map[string]string, error) {
3232
return godotenv.UnmarshalBytes(file)
3333
}
3434

35+
// SetAppEnvManifestVariables sets environment variables related to the manifest
36+
// of the selected app.
37+
func (c *Config) SetAppEnvManifestVariables(teamDomain string, isDev bool) {
38+
if c.ManifestEnv == nil {
39+
c.ManifestEnv = map[string]string{}
40+
}
41+
c.ManifestEnv["SLACK_WORKSPACE"] = teamDomain
42+
if isDev {
43+
c.ManifestEnv["SLACK_ENV"] = "local"
44+
} else {
45+
c.ManifestEnv["SLACK_ENV"] = "deployed"
46+
}
47+
}
48+
3549
// LoadEnvironmentVariables sets flags based on their environment variable value
3650
//
3751
// Note: Values are not loaded from the .env file. Use: `GetDotEnvFileVariables`

internal/config/dotenv_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,61 @@ import (
2222
"github.com/stretchr/testify/assert"
2323
)
2424

25+
func Test_DotEnv_SetAppEnvManifestVariables(t *testing.T) {
26+
tests := map[string]struct {
27+
teamDomain string
28+
isDev bool
29+
initialEnv map[string]string
30+
expected map[string]string
31+
}{
32+
"sets built-in vars for deployed app": {
33+
teamDomain: "bigspeck",
34+
isDev: false,
35+
expected: map[string]string{
36+
"SLACK_WORKSPACE": "bigspeck",
37+
"SLACK_ENV": "deployed",
38+
},
39+
},
40+
"sets built-in vars for local app": {
41+
teamDomain: "sandbox",
42+
isDev: true,
43+
expected: map[string]string{
44+
"SLACK_WORKSPACE": "sandbox",
45+
"SLACK_ENV": "local",
46+
},
47+
},
48+
"handles nil ManifestEnv": {
49+
teamDomain: "team",
50+
isDev: true,
51+
initialEnv: nil,
52+
expected: map[string]string{
53+
"SLACK_WORKSPACE": "team",
54+
"SLACK_ENV": "local",
55+
},
56+
},
57+
"preserves existing ManifestEnv values": {
58+
teamDomain: "team",
59+
isDev: false,
60+
initialEnv: map[string]string{"SLACK_APP_ID": "A1234"},
61+
expected: map[string]string{
62+
"SLACK_APP_ID": "A1234",
63+
"SLACK_WORKSPACE": "team",
64+
"SLACK_ENV": "deployed",
65+
},
66+
},
67+
}
68+
for name, tc := range tests {
69+
t.Run(name, func(t *testing.T) {
70+
fs := slackdeps.NewFsMock()
71+
os := slackdeps.NewOsMock()
72+
config := NewConfig(fs, os)
73+
config.ManifestEnv = tc.initialEnv
74+
config.SetAppEnvManifestVariables(tc.teamDomain, tc.isDev)
75+
assert.Equal(t, tc.expected, config.ManifestEnv)
76+
})
77+
}
78+
}
79+
2580
func Test_DotEnv_GetDotEnvFileVariables(t *testing.T) {
2681
tests := map[string]struct {
2782
globalVariableName string

internal/prompts/app_select.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ func AppSelectPrompt(
416416
return
417417
}
418418
clients.Auth().SetSelectedAuth(ctx, selected.Auth, clients.Config, clients.Os)
419+
clients.Config.SetAppEnvManifestVariables(selected.App.TeamDomain, selected.App.IsDev)
419420
if selected.App.IsNew() {
420421
clients.IO.PrintInfo(ctx, false, "\n%s", style.Sectionf(appTransferDisclaimer))
421422
}

0 commit comments

Comments
 (0)