Skip to content
Merged

Dev #28

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions internal/buildtool/detector.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ func FindBuildFile(startDir string, fs afero.Fs) (string, Type, error) {

func DetectFromPath(path string) Type {
base := filepath.Base(path)
switch {
case base == "pom.xml":
switch base {
case "pom.xml":
return Maven
case base == "build.gradle.kts":
case "build.gradle.kts":
return GradleKotln
case base == "build.gradle":
case "build.gradle":
return Gradle
default:
return ""
Expand Down
8 changes: 4 additions & 4 deletions internal/cli/add/maven_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ func (c *MavenClient) VerifyDependency(groupId, artifactId string) (*MavenArtifa
if err != nil {
return nil, fmt.Errorf("failed to connect to Maven Central: %w", err)
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()

if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("Maven Central returned status %d", resp.StatusCode)
return nil, fmt.Errorf("maven central returned status %d", resp.StatusCode)
}

var searchResp MavenSearchResponse
Expand Down Expand Up @@ -85,10 +85,10 @@ func (c *MavenClient) SearchDependencies(query string, limit int) ([]MavenArtifa
if err != nil {
return nil, fmt.Errorf("failed to connect to Maven Central: %w", err)
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()

if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("Maven Central returned status %d", resp.StatusCode)
return nil, fmt.Errorf("maven central returned status %d", resp.StatusCode)
}

var searchResp MavenSearchResponse
Expand Down
4 changes: 2 additions & 2 deletions internal/cli/add/picker.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,12 +280,12 @@ func (m PickerModel) View() string {
b.WriteString(line + "\n")

if m.cursor == i && item.description != "" {
b.WriteString(fmt.Sprintf(" %s\n", styles.Subtle.Render(item.description)))
fmt.Fprintf(&b, " %s\n", styles.Subtle.Render(item.description))
}
}

selectedCount := m.countSelected()
b.WriteString(fmt.Sprintf("\n%s\n", styles.Subtle.Render(fmt.Sprintf("Selected: %d", selectedCount))))
fmt.Fprintf(&b, "\n%s\n", styles.Subtle.Render(fmt.Sprintf("Selected: %d", selectedCount)))

if m.searchMode {
b.WriteString(styles.RenderHelp("type to search • enter: apply filter • esc: cancel search"))
Expand Down
4 changes: 4 additions & 0 deletions internal/cli/dev/dev_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ func TestKeyCommand_String(t *testing.T) {
{KeyQuit, "quit"},
{KeyClear, "clear"},
{KeyHelp, "help"},
{KeyEnter, "enter"},
{KeyNone, "unknown"},
{KeyUnknown, "unknown"},
}
Expand Down Expand Up @@ -323,6 +324,9 @@ func TestKeyboardListener_ParseKey(t *testing.T) {
{"help uppercase", []byte{'H'}, KeyHelp},
{"help question mark", []byte{'?'}, KeyHelp},
{"ctrl+c", []byte{3}, KeyQuit},
{"enter CR", []byte{13}, KeyEnter},
{"enter LF", []byte{10}, KeyEnter},
{"enter space", []byte{32}, KeyEnter},
{"unknown key", []byte{'x'}, KeyNone},
{"empty", []byte{}, KeyNone},
}
Expand Down
5 changes: 5 additions & 0 deletions internal/cli/dev/keyboard.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const (
KeyQuit
KeyClear
KeyHelp
KeyEnter
KeyUnknown
)

Expand All @@ -29,6 +30,8 @@ func (k KeyCommand) String() string {
return "clear"
case KeyHelp:
return "help"
case KeyEnter:
return "enter"
default:
return "unknown"
}
Expand Down Expand Up @@ -137,6 +140,8 @@ func (kl *KeyboardListener) parseKey(buf []byte) KeyCommand {
return KeyClear
case 'h', 'H', '?':
return KeyHelp
case 13, 10, 32:
return KeyEnter
}
}

Expand Down
20 changes: 10 additions & 10 deletions internal/cli/dev/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,34 +301,34 @@ func (pm *ProcessManager) Restart(ctx context.Context) error {
pm.restartCount++
pm.mu.Unlock()

fmt.Fprintln(pm.stdout, "\n\033[33m─────────────────────────────────────────\033[0m")
fmt.Fprintln(pm.stdout, "\033[33m→ Compiling...\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\n\033[33m─────────────────────────────────────────\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\033[33m→ Compiling...\033[0m")

if err := pm.Compile(ctx); err != nil {
fmt.Fprintf(pm.stderr, "\n\033[31m✗ Compilation failed: %v\033[0m\n", err)
fmt.Fprintln(pm.stdout, "\033[33m→ Keeping current server running\033[0m")
fmt.Fprintln(pm.stdout, "\033[33m─────────────────────────────────────────\033[0m")
_, _ = fmt.Fprintf(pm.stderr, "\n\033[31m✗ Compilation failed: %v\033[0m\n", err)
_, _ = fmt.Fprintln(pm.stdout, "\033[33m→ Keeping current server running\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\033[33m─────────────────────────────────────────\033[0m")
pm.mu.Lock()
pm.setState(StateRunning)
pm.mu.Unlock()
return err
}

fmt.Fprintln(pm.stdout, "\n\033[32m✓ Compilation successful\033[0m")
fmt.Fprintln(pm.stdout, "\033[33m→ Stopping server...\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\n\033[32m✓ Compilation successful\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\033[33m→ Stopping server...\033[0m")

pm.mu.Lock()
cmd := pm.cmd
pm.mu.Unlock()

if cmd != nil && cmd.Process != nil {
if err := pm.gracefulStop(cmd); err != nil {
fmt.Fprintf(pm.stderr, "\033[31m✗ Failed to stop server: %v\033[0m\n", err)
_, _ = fmt.Fprintf(pm.stderr, "\033[31m✗ Failed to stop server: %v\033[0m\n", err)
}
}

fmt.Fprintln(pm.stdout, "\033[33m→ Starting server...\033[0m")
fmt.Fprintln(pm.stdout, "\033[33m─────────────────────────────────────────\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\033[33m→ Starting server...\033[0m")
_, _ = fmt.Fprintln(pm.stdout, "\033[33m─────────────────────────────────────────\033[0m")

return pm.Start()
}
Expand Down
2 changes: 1 addition & 1 deletion internal/cli/dev/restart.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func runRestart() error {
if err != nil {
return fmt.Errorf("could not create trigger file: %w", err)
}
file.Close()
_ = file.Close()

logger.Success("Restart triggered", "trigger", triggerPath)
return nil
Expand Down
5 changes: 5 additions & 0 deletions internal/cli/dev/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ func runServe(profile string, debug bool, port int, noInteractive bool) error {

case KeyHelp:
PrintKeyCommands()

case KeyEnter:
fmt.Print("\r\n")
}

case <-trigger.Events():
Expand Down Expand Up @@ -224,6 +227,8 @@ func waitForRestartOrQuit(keyboard *KeyboardListener, sigChan chan os.Signal, pm
case KeyClear:
ClearScreen()
PrintBanner()
case KeyEnter:
fmt.Print("\r\n")
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions internal/cli/dev/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (tw *TriggerWatcher) Setup() error {
}

func (tw *TriggerWatcher) cleanup() {
os.Remove(tw.triggerPath)
_ = os.Remove(tw.triggerPath)
}

func (tw *TriggerWatcher) Events() <-chan struct{} {
Expand Down Expand Up @@ -79,7 +79,7 @@ func (tw *TriggerWatcher) checkTrigger() {
if modTime.After(tw.lastModTime) {
tw.lastModTime = modTime

os.Remove(tw.triggerPath)
_ = os.Remove(tw.triggerPath)

select {
case tw.events <- struct{}{}:
Expand Down
44 changes: 16 additions & 28 deletions internal/cli/docker/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,18 +153,14 @@ func TestDetectPort(t *testing.T) {
})

t.Run("default when no config", func(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "test-port-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()

result := detectPort(tmpDir, 0)
assert.Equal(t, 8080, result)
})

t.Run("from properties file", func(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "test-port-props-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()

resourcesPath := filepath.Join(tmpDir, "src", "main", "resources")
require.NoError(t, os.MkdirAll(resourcesPath, 0755))
Expand All @@ -181,9 +177,7 @@ func TestDetectPort(t *testing.T) {
})

t.Run("from yml file", func(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "test-port-yml-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()

resourcesPath := filepath.Join(tmpDir, "src", "main", "resources")
require.NoError(t, os.MkdirAll(resourcesPath, 0755))
Expand All @@ -202,9 +196,7 @@ func TestDetectPort(t *testing.T) {

func TestHasWrapper(t *testing.T) {
t.Run("maven wrapper exists", func(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "test-wrapper-mvn-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()

require.NoError(t, os.WriteFile(
filepath.Join(tmpDir, "mvnw"),
Expand All @@ -217,9 +209,7 @@ func TestHasWrapper(t *testing.T) {
})

t.Run("gradle wrapper exists", func(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "test-wrapper-gradle-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()

require.NoError(t, os.WriteFile(
filepath.Join(tmpDir, "gradlew"),
Expand All @@ -232,9 +222,7 @@ func TestHasWrapper(t *testing.T) {
})

t.Run("no wrapper", func(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "test-wrapper-none-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()

result := hasWrapper(tmpDir, buildtool.Maven)
assert.False(t, result)
Expand Down Expand Up @@ -487,7 +475,7 @@ func TestRunDockerizeNoBuildFile(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-nobuild-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

require.NoError(t, os.Chdir(tmpDir))

Expand All @@ -505,7 +493,7 @@ func TestRunDockerizeInvalidDB(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-invaliddb-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -536,7 +524,7 @@ func TestGenerateDockerFilesMaven(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-maven-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -590,7 +578,7 @@ func TestGenerateDockerFilesGradle(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-gradle-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

buildGradle := `plugins {
id 'java'
Expand Down Expand Up @@ -641,7 +629,7 @@ func TestGenerateDockerFilesWithDatabase(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-db-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -686,7 +674,7 @@ func TestGenerateDockerFilesNoCompose(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-nocompose-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -726,7 +714,7 @@ func TestGenerateDockerFilesSkipsExisting(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-skip-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -776,7 +764,7 @@ func TestGenerateDockerFilesForceOverwrite(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-force-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -871,7 +859,7 @@ func TestMergeDockerComposeWithDatabase(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-merge-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down Expand Up @@ -953,7 +941,7 @@ func TestMergeDockerComposePreservesCustomizations(t *testing.T) {

tmpDir, err := os.MkdirTemp("", "test-docker-preserve-*")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
defer func() { _ = os.RemoveAll(tmpDir) }()

pomContent := `<?xml version="1.0" encoding="UTF-8"?>
<project>
Expand Down
Loading