Cleanup, bug fixes, and improvements
This commit changes how projects are handled internally so that projects can be renamed. This commit also fixes some bugs, and removes redundant code.
This commit is contained in:
@@ -98,7 +98,7 @@ func DeleteCommand(ctx models.CommandCtx, args []string) error {
|
||||
return deleteAll(ctx, noConfirm)
|
||||
}
|
||||
|
||||
projectName, err := GetProjectName("delete", args)
|
||||
projectName, err := GetProjectId("delete", args, ctx.Config)
|
||||
if err != nil {
|
||||
return fmt.Errorf("\tfailed to get project name: %v.\n\tSee flux delete --help for more information", err)
|
||||
}
|
||||
@@ -136,6 +136,11 @@ func DeleteCommand(ctx models.CommandCtx, args []string) error {
|
||||
return fmt.Errorf("delete failed: %s", responseBody)
|
||||
}
|
||||
|
||||
if len(args) == 0 {
|
||||
// remove the .fluxid file if it exists
|
||||
os.Remove(".fluxid")
|
||||
}
|
||||
|
||||
fmt.Printf("Successfully deleted %s\n", projectName)
|
||||
|
||||
return nil
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/briandowns/spinner"
|
||||
"github.com/google/uuid"
|
||||
"github.com/juls0730/flux/cmd/flux/models"
|
||||
"github.com/juls0730/flux/pkg"
|
||||
)
|
||||
@@ -188,7 +189,32 @@ func DeployCommand(ctx models.CommandCtx, args []string) error {
|
||||
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
configPart, err := writer.CreateFormFile("config", "flux.json")
|
||||
|
||||
if _, err := os.Stat(".fluxid"); err == nil {
|
||||
idPart, err := writer.CreateFormField("id")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create id part: %v", err)
|
||||
}
|
||||
|
||||
idFile, err := os.Open(".fluxid")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to open .fluxid: %v", err)
|
||||
}
|
||||
defer idFile.Close()
|
||||
|
||||
var idBytes []byte
|
||||
if idBytes, err = io.ReadAll(idFile); err != nil {
|
||||
return fmt.Errorf("failed to read .fluxid: %v", err)
|
||||
}
|
||||
|
||||
if _, err := uuid.Parse(string(idBytes)); err != nil {
|
||||
return fmt.Errorf(".fluxid does not contain a valid uuid")
|
||||
}
|
||||
|
||||
idPart.Write(idBytes)
|
||||
}
|
||||
|
||||
configPart, err := writer.CreateFormField("config")
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create config part: %v", err)
|
||||
@@ -246,7 +272,19 @@ func DeployCommand(ctx models.CommandCtx, args []string) error {
|
||||
switch event {
|
||||
case "complete":
|
||||
loadingSpinner.Stop()
|
||||
fmt.Printf("App %s deployed successfully!\n", data.Message.(map[string]interface{})["name"])
|
||||
fmt.Printf("App %s deployed successfully!\n", data.Message.(map[string]any)["name"])
|
||||
if _, err := os.Stat(".fluxid"); os.IsNotExist(err) {
|
||||
idFile, err := os.Create(".fluxid")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create .fluxid: %v", err)
|
||||
}
|
||||
defer idFile.Close()
|
||||
|
||||
id := data.Message.(map[string]any)["id"].(string)
|
||||
if _, err := idFile.Write([]byte(id)); err != nil {
|
||||
return fmt.Errorf("failed to write .fluxid: %v", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
case "cmd_output":
|
||||
customWriter.Printf("... %s\n", data.Message)
|
||||
|
||||
@@ -3,14 +3,27 @@ package commands
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/juls0730/flux/cmd/flux/models"
|
||||
"github.com/juls0730/flux/pkg"
|
||||
)
|
||||
|
||||
func GetProjectName(command string, args []string) (string, error) {
|
||||
func GetProjectId(command string, args []string, config models.Config) (string, error) {
|
||||
var projectName string
|
||||
|
||||
if _, err := os.Stat(".fluxid"); err == nil {
|
||||
id, err := os.ReadFile(".fluxid")
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to read .fluxid: %v", err)
|
||||
}
|
||||
|
||||
return string(id), nil
|
||||
}
|
||||
|
||||
if len(args) == 0 {
|
||||
if _, err := os.Stat("flux.json"); err != nil {
|
||||
return "", fmt.Errorf("the current directory is not a flux project, please run flux %[1]s in the project directory", command)
|
||||
@@ -32,5 +45,28 @@ func GetProjectName(command string, args []string) (string, error) {
|
||||
projectName = args[0]
|
||||
}
|
||||
|
||||
return projectName, nil
|
||||
// make an http get request to the daemon to get the project name
|
||||
resp, err := http.Get(config.DeamonURL + "/apps/by-name/" + projectName)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to get project name: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
responseBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error reading response body: %v", err)
|
||||
}
|
||||
|
||||
responseBody = []byte(strings.TrimSuffix(string(responseBody), "\n"))
|
||||
|
||||
return "", fmt.Errorf("get project name failed: %s", responseBody)
|
||||
}
|
||||
|
||||
var app pkg.App
|
||||
if err := json.NewDecoder(resp.Body).Decode(&app); err != nil {
|
||||
return "", fmt.Errorf("failed to decode app: %v", err)
|
||||
}
|
||||
|
||||
return app.Id.String(), nil
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
func StartCommand(ctx models.CommandCtx, args []string) error {
|
||||
projectName, err := GetProjectName("start", args)
|
||||
projectName, err := GetProjectId("start", args, ctx.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
func StopCommand(ctx models.CommandCtx, args []string) error {
|
||||
projectName, err := GetProjectName("stop", args)
|
||||
projectName, err := GetProjectId("stop", args, ctx.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -14,10 +14,11 @@ func main() {
|
||||
|
||||
http.HandleFunc("POST /deploy", fluxServer.DeployHandler)
|
||||
http.HandleFunc("DELETE /deployments", fluxServer.DeleteAllDeploymentsHandler)
|
||||
http.HandleFunc("DELETE /deployments/{name}", fluxServer.DeleteDeployHandler)
|
||||
http.HandleFunc("POST /start/{name}", fluxServer.StartDeployHandler)
|
||||
http.HandleFunc("POST /stop/{name}", fluxServer.StopDeployHandler)
|
||||
http.HandleFunc("DELETE /deployments/{id}", fluxServer.DeleteDeployHandler)
|
||||
http.HandleFunc("POST /start/{id}", fluxServer.StartDeployHandler)
|
||||
http.HandleFunc("POST /stop/{id}", fluxServer.StopDeployHandler)
|
||||
http.HandleFunc("GET /apps", fluxServer.ListAppsHandler)
|
||||
http.HandleFunc("GET /apps/by-name/{name}", fluxServer.GetAppByNameHandler)
|
||||
http.HandleFunc("GET /heartbeat", fluxServer.DaemonInfoHandler)
|
||||
|
||||
fluxServer.Logger.Info("Fluxd started on http://127.0.0.1:5647")
|
||||
|
||||
Reference in New Issue
Block a user