Skip to content

Commit 600a65e

Browse files
committed
fix: re-add in dynamic commands
1 parent 6129873 commit 600a65e

File tree

4 files changed

+41
-32
lines changed

4 files changed

+41
-32
lines changed

cmd/create.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,11 @@ import (
1111
"github.com/spf13/cobra"
1212
)
1313

14-
type CreateInput struct {
15-
Name string
16-
Language string
17-
Template string
18-
}
19-
2014
// CreateCmd is a cobra-independent command handler for create operations
2115
type CreateCmd struct{}
2216

2317
// Create executes the creating a new Kernel app logic
24-
func (c CreateCmd) Create(ctx context.Context, ci CreateInput) error {
18+
func (c CreateCmd) Create(ctx context.Context, ci create.CreateInput) error {
2519
appPath, err := filepath.Abs(ci.Name)
2620
if err != nil {
2721
return fmt.Errorf("failed to resolve app path: %w", err)
@@ -58,7 +52,7 @@ func (c CreateCmd) Create(ctx context.Context, ci CreateInput) error {
5852
return fmt.Errorf("failed to copy template files: %w", err)
5953
}
6054

61-
nextSteps, err := create.InstallDependencies(ci.Name, appPath, ci.Language)
55+
nextSteps, err := create.InstallDependencies(appPath, ci)
6256
if err != nil {
6357
return fmt.Errorf("failed to install dependencies: %w", err)
6458
}
@@ -103,7 +97,7 @@ func runCreateApp(cmd *cobra.Command, args []string) error {
10397
}
10498

10599
c := CreateCmd{}
106-
return c.Create(cmd.Context(), CreateInput{
100+
return c.Create(cmd.Context(), create.CreateInput{
107101
Name: appName,
108102
Language: language,
109103
Template: template,

cmd/create_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ const (
2222
func TestCreateCommand(t *testing.T) {
2323
tests := []struct {
2424
name string
25-
input CreateInput
25+
input create.CreateInput
2626
wantErr bool
2727
errContains string
2828
validate func(t *testing.T, appPath string)
2929
}{
3030
{
3131
name: "create typescript sample-app",
32-
input: CreateInput{
32+
input: create.CreateInput{
3333
Name: "test-app",
3434
Language: "typescript",
3535
Template: "sample-app",
@@ -44,7 +44,7 @@ func TestCreateCommand(t *testing.T) {
4444
},
4545
{
4646
name: "fail with invalid template",
47-
input: CreateInput{
47+
input: create.CreateInput{
4848
Name: "test-app",
4949
Language: "typescript",
5050
Template: "nonexistent",
@@ -117,7 +117,7 @@ func TestAllTemplatesWithDependencies(t *testing.T) {
117117

118118
// Create the app
119119
c := CreateCmd{}
120-
err = c.Create(context.Background(), CreateInput{
120+
err = c.Create(context.Background(), create.CreateInput{
121121
Name: appName,
122122
Language: tt.language,
123123
Template: tt.template,
@@ -263,7 +263,7 @@ func TestCreateCommand_DependencyInstallationFails(t *testing.T) {
263263

264264
// Create the app - should succeed even though dependency installation fails
265265
c := CreateCmd{}
266-
err = c.Create(context.Background(), CreateInput{
266+
err = c.Create(context.Background(), create.CreateInput{
267267
Name: appName,
268268
Language: create.LanguageTypeScript,
269269
Template: "sample-app",
@@ -323,7 +323,7 @@ func TestCreateCommand_RequiredToolMissing(t *testing.T) {
323323

324324
// Create the app - should succeed even though required tool is missing
325325
c := CreateCmd{}
326-
err = c.Create(context.Background(), CreateInput{
326+
err = c.Create(context.Background(), create.CreateInput{
327327
Name: appName,
328328
Language: tt.language,
329329
Template: tt.template,
@@ -397,7 +397,7 @@ func TestCreateCommand_DirectoryOverwrite(t *testing.T) {
397397
require.NoError(t, err, "failed to remove existing directory")
398398

399399
c := CreateCmd{}
400-
err = c.Create(context.Background(), CreateInput{
400+
err = c.Create(context.Background(), create.CreateInput{
401401
Name: appName,
402402
Language: create.LanguageTypeScript,
403403
Template: "sample-app",
@@ -474,7 +474,7 @@ func TestCreateCommand_InvalidLanguageTemplateCombinations(t *testing.T) {
474474
})
475475

476476
c := CreateCmd{}
477-
err = c.Create(context.Background(), CreateInput{
477+
err = c.Create(context.Background(), create.CreateInput{
478478
Name: "test-app",
479479
Language: tt.language,
480480
Template: tt.template,

pkg/create/dependencies.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@ import (
88
)
99

1010
// InstallDependencies sets up project dependencies based on language
11-
func InstallDependencies(appName string, appPath string, language string) (string, error) {
11+
func InstallDependencies(appPath string, ci CreateInput) (string, error) {
12+
language := ci.Language
13+
template := ci.Template
14+
appName := ci.Name
15+
1216
installCommand, ok := InstallCommands[language]
1317
if !ok {
1418
return "", fmt.Errorf("unsupported language: %s", language)
1519
}
1620

1721
requiredTool := RequiredTools[language]
1822
if requiredTool != "" && !RequiredTools.CheckToolAvailable(language) {
19-
return getNextStepsWithToolInstall(appName, language, requiredTool), nil
23+
return getNextStepsWithToolInstall(appName, language, requiredTool, template), nil
2024
}
2125

2226
spinner, _ := pterm.DefaultSpinner.Start(pterm.Sprintf("Setting up %s environment...", language))
@@ -36,16 +40,19 @@ func InstallDependencies(appName string, appPath string, language string) (strin
3640
pterm.Println(" uv venv && source .venv/bin/activate && uv sync")
3741
}
3842
pterm.Println()
39-
return getNextStepsStandard(appName), nil
43+
return getNextStepsStandard(appName, language, template), nil
4044
}
4145

4246
spinner.Success(pterm.Sprintf("✔ %s environment set up successfully", language))
4347

44-
return getNextStepsStandard(appName), nil
48+
return getNextStepsStandard(appName, language, template), nil
4549
}
4650

4751
// getNextStepsWithToolInstall returns next steps message including tool installation
48-
func getNextStepsWithToolInstall(appName string, language string, requiredTool string) string {
52+
func getNextStepsWithToolInstall(appName string, language string, requiredTool string, template string) string {
53+
deployCommand := GetDeployCommand(language, template)
54+
invokeCommand := GetInvokeSample(language, template)
55+
4956
pterm.Warning.Printfln(" %s is not installed or not in PATH", requiredTool)
5057

5158
switch language {
@@ -63,9 +70,9 @@ func getNextStepsWithToolInstall(appName string, language string, requiredTool s
6370
# Deploy your app:
6471
brew install onkernel/tap/kernel
6572
kernel login # or: export KERNEL_API_KEY=<YOUR_API_KEY>
66-
kernel deploy index.ts
67-
kernel invoke ts-basic get-page-title --payload '{"url": "https://www.google.com"}'
68-
`, appName)
73+
%s
74+
%s
75+
`, appName, deployCommand, invokeCommand)
6976
case LanguagePython:
7077
return pterm.FgYellow.Sprintf(`Next steps:
7178
# Install uv (choose one):
@@ -80,21 +87,23 @@ func getNextStepsWithToolInstall(appName string, language string, requiredTool s
8087
# Deploy your app:
8188
brew install onkernel/tap/kernel
8289
kernel login # or: export KERNEL_API_KEY=<YOUR_API_KEY>
83-
kernel deploy index.py
84-
kernel invoke py-basic get-page-title --payload '{"url": "https://www.google.com"}'
85-
`, appName)
90+
%s
91+
%s
92+
`, appName, deployCommand, invokeCommand)
8693
default:
8794
return ""
8895
}
8996
}
9097

9198
// getNextStepsStandard returns standard next steps message
92-
func getNextStepsStandard(appName string) string {
99+
func getNextStepsStandard(appName string, language string, template string) string {
100+
deployCommand := GetDeployCommand(language, template)
101+
invokeCommand := GetInvokeSample(language, template)
93102
return pterm.FgYellow.Sprintf(`Next steps:
94103
brew install onkernel/tap/kernel
95104
cd %s
96105
kernel login # or: export KERNEL_API_KEY=<YOUR_API_KEY>
97-
kernel deploy index.ts
98-
kernel invoke ts-basic get-page-title --payload '{"url": "https://www.google.com"}'
99-
`, appName)
106+
%s
107+
%s
108+
`, appName, deployCommand, invokeCommand)
100109
}

pkg/create/types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ package create
22

33
import "os/exec"
44

5+
type CreateInput struct {
6+
Name string
7+
Language string
8+
Template string
9+
}
10+
511
const (
612
DefaultAppName = "my-kernel-app"
713
AppNamePrompt = "What is the name of your project?"

0 commit comments

Comments
 (0)