random fixes and a REVERSE PROXY!!!

This commit is contained in:
Zoe
2024-12-04 06:16:28 -06:00
parent 1bb4377a89
commit 11561e864c
11 changed files with 443 additions and 132 deletions

View File

@@ -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)
}