Skip to content

Commit fbeb4f3

Browse files
committed
Merge branch 'main' into charm-tests
2 parents 94b0d7d + dbedcf2 commit fbeb4f3

30 files changed

Lines changed: 1328 additions & 132 deletions

.github/workflows/dependencies.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ jobs:
5656
ref: main
5757
token: ${{ steps.credentials.outputs.token }}
5858
- name: Install Golang
59-
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
59+
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
6060
with:
6161
go-version: "stable"
6262
- name: Get the latest version

.github/workflows/tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
fetch-depth: 0
2424
persist-credentials: false
2525
- name: Set up Go
26-
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
26+
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
2727
with:
2828
go-version: "1.26.0"
2929
- name: Lint
@@ -55,7 +55,7 @@ jobs:
5555
with:
5656
persist-credentials: false
5757
- name: Set up Go
58-
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
58+
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
5959
with:
6060
go-version: "1.26.0"
6161
- name: Report health score

cmd/project/create.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@ package project
1717
import (
1818
"context"
1919
"fmt"
20+
"math/rand"
2021
"path/filepath"
2122
"strings"
23+
"time"
2224

25+
"github.com/slackapi/slack-cli/internal/iostreams"
2326
"github.com/slackapi/slack-cli/internal/logger"
2427
"github.com/slackapi/slack-cli/internal/pkg/create"
2528
"github.com/slackapi/slack-cli/internal/shared"
29+
"github.com/slackapi/slack-cli/internal/slackerror"
2630
"github.com/slackapi/slack-cli/internal/slacktrace"
2731
"github.com/slackapi/slack-cli/internal/style"
2832
"github.com/spf13/cobra"
@@ -33,6 +37,7 @@ var createTemplateURLFlag string
3337
var createGitBranchFlag string
3438
var createAppNameFlag string
3539
var createListFlag bool
40+
var createSubdirFlag string
3641

3742
// Handle to client's create function used for testing
3843
// TODO - Find best practice, such as using an Interface and Struct to create a client
@@ -66,6 +71,7 @@ name your app 'agent' (not create an AI Agent), use the --name flag instead.`,
6671
{Command: "create agent my-agent-app", Meaning: "Create a new AI Agent app"},
6772
{Command: "create my-project -t slack-samples/deno-hello-world", Meaning: "Start a new project from a specific template"},
6873
{Command: "create --name my-project", Meaning: "Create a project named 'my-project'"},
74+
{Command: "create my-project -t org/monorepo --subdir apps/my-app", Meaning: "Create from a subdirectory of a template"},
6975
}),
7076
Args: cobra.MaximumNArgs(2),
7177
RunE: func(cmd *cobra.Command, args []string) error {
@@ -79,6 +85,7 @@ name your app 'agent' (not create an AI Agent), use the --name flag instead.`,
7985
cmd.Flags().StringVarP(&createGitBranchFlag, "branch", "b", "", "name of git branch to checkout")
8086
cmd.Flags().StringVarP(&createAppNameFlag, "name", "n", "", "name for your app (overrides the name argument)")
8187
cmd.Flags().BoolVar(&createListFlag, "list", false, "list available app templates")
88+
cmd.Flags().StringVar(&createSubdirFlag, "subdir", "", "subdirectory in the template to use as project")
8289

8390
return cmd
8491
}
@@ -128,19 +135,45 @@ func runCreateCommand(clients *shared.ClientFactory, cmd *cobra.Command, args []
128135
return listTemplates(ctx, clients, categoryShortcut)
129136
}
130137

138+
// --subdir requires --template
139+
if cmd.Flags().Changed("subdir") && !templateFlagProvided {
140+
return slackerror.New(slackerror.ErrMismatchedFlags).
141+
WithMessage("The --subdir flag requires the --template flag")
142+
}
143+
131144
// Collect the template URL or select a starting template
132145
template, err := promptTemplateSelection(cmd, clients, categoryShortcut)
133146
if err != nil {
134147
return err
135148
}
136149

150+
// Prompt for app name if not provided via flag or argument
151+
if appNameArg == "" {
152+
if clients.IO.IsTTY() {
153+
defaultName := generateRandomAppName()
154+
cmd.Print(style.Secondary(fmt.Sprintf(" Press Enter to use the generated name: %s", defaultName)), "\n")
155+
name, err := clients.IO.InputPrompt(ctx, "Name your app:", iostreams.InputPromptConfig{})
156+
if err != nil {
157+
return err
158+
}
159+
if name != "" {
160+
appNameArg = name
161+
} else {
162+
appNameArg = defaultName
163+
}
164+
} else {
165+
appNameArg = generateRandomAppName()
166+
}
167+
}
168+
137169
// Set up spinners
138170
appCreateSpinner = style.NewSpinner(cmd.OutOrStdout())
139171

140172
createArgs := create.CreateArgs{
141173
AppName: appNameArg,
142174
Template: template,
143175
GitBranch: createGitBranchFlag,
176+
Subdir: createSubdirFlag,
144177
}
145178
clients.EventTracker.SetAppTemplate(template.GetTemplatePath())
146179

@@ -277,6 +310,15 @@ func printCreateSuccess(ctx context.Context, clients *shared.ClientFactory, appP
277310
clients.IO.PrintTrace(ctx, slacktrace.CreateSuccess)
278311
}
279312

313+
// generateRandomAppName will create a random app name based on two words and a number
314+
func generateRandomAppName() string {
315+
rand.New(rand.NewSource(time.Now().UnixNano()))
316+
var firstRandomNum = rand.Intn(len(create.Adjectives))
317+
var secondRandomNum = rand.Intn(len(create.Animals))
318+
var randomName = fmt.Sprintf("%s-%s-%d", create.Adjectives[firstRandomNum], create.Animals[secondRandomNum], rand.Intn(1000))
319+
return randomName
320+
}
321+
280322
// printAppCreateError stops the creation spinners and displays the returned error message
281323
func printAppCreateError(clients *shared.ClientFactory, cmd *cobra.Command, err error) {
282324
ctx := cmd.Context()

0 commit comments

Comments
 (0)