random fixes and a REVERSE PROXY!!!
This commit is contained in:
154
cmd/cli/main.go
154
cmd/cli/main.go
@@ -12,6 +12,7 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -81,6 +82,36 @@ func compressDirectory() ([]byte, error) {
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func getProjectName() string {
|
||||
var projectName string
|
||||
|
||||
if len(os.Args) < 3 {
|
||||
if _, err := os.Stat("flux.json"); err != nil {
|
||||
fmt.Printf("Usage: flux %[1]s <app name>, or run flux %[1]s in the project directory\n", os.Args[1])
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fluxConfigFile, err := os.Open("flux.json")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to open flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer fluxConfigFile.Close()
|
||||
|
||||
var config models.ProjectConfig
|
||||
if err := json.NewDecoder(fluxConfigFile).Decode(&config); err != nil {
|
||||
fmt.Printf("Failed to decode flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
projectName = config.Name
|
||||
} else {
|
||||
projectName = os.Args[2]
|
||||
}
|
||||
|
||||
return projectName
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
fmt.Println("Usage: flux <command>")
|
||||
@@ -115,6 +146,11 @@ func main() {
|
||||
|
||||
switch command {
|
||||
case "deploy":
|
||||
if _, err := os.Stat("flux.json"); err != nil {
|
||||
fmt.Printf("No flux.json found, please run flux init first\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
loadingSpinner := spinner.New(spinner.CharSets[14], 100*time.Millisecond)
|
||||
loadingSpinner.Suffix = " Deploying"
|
||||
loadingSpinner.Start()
|
||||
@@ -205,31 +241,7 @@ func main() {
|
||||
loadingSpinner.Stop()
|
||||
fmt.Println("Deployed successfully!")
|
||||
case "stop":
|
||||
var projectName string
|
||||
|
||||
if len(os.Args) < 3 {
|
||||
if _, err := os.Stat("flux.json"); err != nil {
|
||||
fmt.Printf("Usage: flux delete <app name>, or run flux delete in the project directory\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fluxConfigFile, err := os.Open("flux.json")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to open flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer fluxConfigFile.Close()
|
||||
|
||||
var config models.ProjectConfig
|
||||
if err := json.NewDecoder(fluxConfigFile).Decode(&config); err != nil {
|
||||
fmt.Printf("Failed to decode flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
projectName = config.Name
|
||||
} else {
|
||||
projectName = os.Args[2]
|
||||
}
|
||||
projectName := getProjectName()
|
||||
|
||||
req, err := http.Post(config.DeamonURL+"/stop/"+projectName, "application/json", nil)
|
||||
if err != nil {
|
||||
@@ -255,31 +267,7 @@ func main() {
|
||||
|
||||
fmt.Printf("Successfully stopped %s\n", projectName)
|
||||
case "start":
|
||||
var projectName string
|
||||
|
||||
if len(os.Args) < 3 {
|
||||
if _, err := os.Stat("flux.json"); err != nil {
|
||||
fmt.Printf("Usage: flux delete <app name>, or run flux delete in the project directory\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fluxConfigFile, err := os.Open("flux.json")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to open flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer fluxConfigFile.Close()
|
||||
|
||||
var config models.ProjectConfig
|
||||
if err := json.NewDecoder(fluxConfigFile).Decode(&config); err != nil {
|
||||
fmt.Printf("Failed to decode flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
projectName = config.Name
|
||||
} else {
|
||||
projectName = os.Args[2]
|
||||
}
|
||||
projectName := getProjectName()
|
||||
|
||||
req, err := http.Post(config.DeamonURL+"/start/"+projectName, "application/json", nil)
|
||||
if err != nil {
|
||||
@@ -305,31 +293,7 @@ func main() {
|
||||
|
||||
fmt.Printf("Successfully started %s\n", projectName)
|
||||
case "delete":
|
||||
var projectName string
|
||||
|
||||
if len(os.Args) < 3 {
|
||||
if _, err := os.Stat("flux.json"); err != nil {
|
||||
fmt.Printf("Usage: flux delete <app name>, or run flux delete in the project directory\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fluxConfigFile, err := os.Open("flux.json")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to open flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer fluxConfigFile.Close()
|
||||
|
||||
var config models.ProjectConfig
|
||||
if err := json.NewDecoder(fluxConfigFile).Decode(&config); err != nil {
|
||||
fmt.Printf("Failed to decode flux.json: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
projectName = config.Name
|
||||
} else {
|
||||
projectName = os.Args[2]
|
||||
}
|
||||
projectName := getProjectName()
|
||||
|
||||
// ask for confirmation
|
||||
fmt.Printf("Are you sure you want to delete %s? this will delete all volumes and containers associated with the deployment, and cannot be undone. \n[y/N]", projectName)
|
||||
@@ -390,6 +354,46 @@ func main() {
|
||||
for _, app := range apps {
|
||||
fmt.Printf("%s (%s)\n", app.Name, app.DeploymentStatus)
|
||||
}
|
||||
case "init":
|
||||
var projectConfig models.ProjectConfig
|
||||
|
||||
var response string
|
||||
if len(os.Args) > 2 {
|
||||
response = os.Args[2]
|
||||
} else {
|
||||
fmt.Println("What is the name of your project?")
|
||||
fmt.Scanln(&response)
|
||||
projectConfig.Name = response
|
||||
}
|
||||
|
||||
fmt.Println("What URL should your project listen to?")
|
||||
fmt.Scanln(&response)
|
||||
if strings.HasPrefix(response, "http") {
|
||||
strings.TrimPrefix(response, "http://")
|
||||
strings.TrimPrefix(response, "https://")
|
||||
}
|
||||
|
||||
response = strings.Split(response, "/")[0]
|
||||
|
||||
projectConfig.Url = response
|
||||
|
||||
fmt.Println("What port does your project listen to?")
|
||||
fmt.Scanln(&response)
|
||||
projectConfig.Port, err = strconv.Atoi(response)
|
||||
if err != nil || projectConfig.Port < 1 || projectConfig.Port > 65535 {
|
||||
fmt.Println("That doesnt look like a valid port", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
configBytes, err := json.MarshalIndent(projectConfig, "", " ")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to marshal project config: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
os.WriteFile("flux.json", configBytes, 0644)
|
||||
|
||||
fmt.Printf("Successfully initialized project %s\n", projectConfig.Name)
|
||||
default:
|
||||
fmt.Println("Unknown command:", command)
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import (
|
||||
func main() {
|
||||
fluxServer := server.NewServer()
|
||||
|
||||
go fluxServer.Proxy.Start()
|
||||
|
||||
http.HandleFunc("POST /deploy", fluxServer.DeployHandler)
|
||||
http.HandleFunc("DELETE /deploy/{name}", fluxServer.DeleteDeployHandler)
|
||||
http.HandleFunc("POST /start/{name}", fluxServer.StartDeployHandler)
|
||||
|
||||
Reference in New Issue
Block a user