99 lines
1.9 KiB
Go
99 lines
1.9 KiB
Go
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"time"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
)
|
|
|
|
// --- Messages ---
|
|
|
|
// Docker installation check
|
|
type DockerCheckedMsg struct{ Installed bool }
|
|
type DockerInstalledMsg struct{ Err error }
|
|
type TickMsg struct{}
|
|
|
|
// Image downloading and checking
|
|
type ImageCheckMsg struct {
|
|
Exists bool
|
|
Err error
|
|
}
|
|
type ImageDownloadFinishedMsg struct {
|
|
Message string
|
|
Err error
|
|
}
|
|
type DownloadTickMsg struct{}
|
|
type ConfigFileMsg struct{ Err error }
|
|
type DockerRunMsg struct{ Err error }
|
|
|
|
// --- Commands ---
|
|
|
|
func CheckDockerCmd() tea.Cmd {
|
|
return func() tea.Msg {
|
|
_, err := exec.LookPath("docker")
|
|
return DockerCheckedMsg{Installed: err == nil}
|
|
}
|
|
}
|
|
|
|
func TickCmd() tea.Cmd {
|
|
return tea.Tick(100*time.Millisecond, func(t time.Time) tea.Msg {
|
|
return TickMsg{}
|
|
})
|
|
}
|
|
|
|
func DownloadImageCmd(username, password string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
url := imageName
|
|
|
|
loginOut, err := exec.Command(
|
|
"docker", "login", url,
|
|
"-u", username,
|
|
"-p", password,
|
|
).CombinedOutput()
|
|
|
|
if err != nil {
|
|
return ImageDownloadFinishedMsg{
|
|
Message: string(loginOut),
|
|
Err: fmt.Errorf("falha no login: %w", err),
|
|
}
|
|
}
|
|
|
|
message, err := PullImage(url)
|
|
return ImageDownloadFinishedMsg{Message: message, Err: err}
|
|
}
|
|
}
|
|
|
|
func CheckImageCmd(image string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
cmd := exec.Command("docker", "image", "inspect", image)
|
|
err := cmd.Run()
|
|
|
|
return ImageCheckMsg{
|
|
Exists: err == nil,
|
|
Err: err,
|
|
}
|
|
}
|
|
}
|
|
|
|
func GenerateConfigFile(cv ConfigValues, path string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
err := WriteConfigFile(cv, path)
|
|
|
|
return ConfigFileMsg{
|
|
Err: err,
|
|
}
|
|
}
|
|
}
|
|
|
|
func RunAppContainer(image, name, filePath, destinationPath string, cv ConfigValues) tea.Cmd {
|
|
return func() tea.Msg {
|
|
err := RunAppClienteContainer(image, name, filePath, destinationPath, cv)
|
|
|
|
return DockerRunMsg{
|
|
Err: err,
|
|
}
|
|
}
|
|
}
|