Store circle emoji in a map (fix #34)

This commit is contained in:
Noah 2024-04-12 11:19:43 -05:00
parent 4ecd4b06b8
commit e62d7fe0c2
5 changed files with 47 additions and 39 deletions

View File

@ -7,21 +7,20 @@ import (
// DeployError contains important information about an error if something went wrong. // DeployError contains important information about an error if something went wrong.
type DeployError struct { type DeployError struct {
code int code int
where string where string
details string details string
command_output string command_output string
} }
// SendOverMatrix provides an easy way to send the contents of a DeployError over Matrix // SendOverMatrix provides an easy way to send the contents of a DeployError over Matrix
func (deploy_error *DeployError) SendOverMatrix() { func (deploy_error *DeployError) SendOverMatrix() {
sendMessage(MatrixMessage{text: fmt.Sprintf("🔴 **Error in **`%s`**!**\n- *%s*\n- Code: %d", sendMessage(MatrixMessage{text: fmt.Sprintf("%s**Error in **`%s`**!**\n- *%s*\n- Code: %d",
deploy_error.where, deploy_error.details, deploy_error.code), Circles["red"], deploy_error.where, deploy_error.details, deploy_error.code),
}) })
} }
// newDeployError creates a DeployError // newDeployError creates a DeployError
func newDeployError(code int, where string, details string, command_output string) DeployError { func newDeployError(code int, where string, details string, command_output string) DeployError {
return DeployError{ code: code, where: where, details: details, command_output: command_output } return DeployError{code: code, where: where, details: details, command_output: command_output}
} }

22
main.go
View File

@ -10,6 +10,15 @@ import (
"os" "os"
) )
// Circle emoji storage.
var Circles = map[string]string{
"white": "⚪️ ",
"green": "🟢 ",
"yellow": "🟡 ",
"red": "🔴 ",
"orange": "🟠 ",
}
// Create a configuration struct // Create a configuration struct
var configuration = Configuration{} var configuration = Configuration{}
@ -29,7 +38,8 @@ func fileExists(path string) (bool, error) {
func handler(data map[string]interface{}) { func handler(data map[string]interface{}) {
repository := data["repository"].(map[string]interface{}) repository := data["repository"].(map[string]interface{})
log.Default().Printf("Repo: %s", repository["full_name"]) log.Default().Printf("Repo: %s", repository["full_name"])
sendMessage(MatrixMessage{text: fmt.Sprintf("⚪️ Handling webhook for `%s`...", repository["full_name"])}) sendMessage(MatrixMessage{text: fmt.Sprintf("%sHandling webhook for `%s`...",
Circles["white"], repository["full_name"])})
repo_name := repository["name"].(string) repo_name := repository["name"].(string)
@ -40,7 +50,7 @@ func handler(data map[string]interface{}) {
return return
} }
if exists { if exists {
sendMessage(MatrixMessage{text: "⚪️ Updating repository..."}) sendMessage(MatrixMessage{text: Circles["white"] + "Updating repository..."})
if deploy_error := site.Update(); deploy_error.code != 0 { if deploy_error := site.Update(); deploy_error.code != 0 {
deploy_error.SendOverMatrix() deploy_error.SendOverMatrix()
return return
@ -50,18 +60,18 @@ func handler(data map[string]interface{}) {
newDeployError(1, "main", "Failed to update site data on a site we just created!", fmt.Sprint(err)) newDeployError(1, "main", "Failed to update site data on a site we just created!", fmt.Sprint(err))
} }
site = new_site site = new_site
sendMessage(MatrixMessage{text: "⚪️ Restarting server..."}) sendMessage(MatrixMessage{text: Circles["white"] + "Restarting server..."})
if deploy_error := site.Restart(); deploy_error.code != 0 { if deploy_error := site.Restart(); deploy_error.code != 0 {
deploy_error.SendOverMatrix() deploy_error.SendOverMatrix()
return return
} }
} else { } else {
sendMessage(MatrixMessage{text: "⚪️ Cloning repository..."}) sendMessage(MatrixMessage{text: Circles["white"] + "Cloning repository..."})
if deploy_error := CloneSite(repository["ssh_url"].(string), repo_name); deploy_error.code != 0 { if deploy_error := CloneSite(repository["ssh_url"].(string), repo_name); deploy_error.code != 0 {
deploy_error.SendOverMatrix() deploy_error.SendOverMatrix()
return return
} }
sendMessage(MatrixMessage{text: "⚪️ Starting server..."}) sendMessage(MatrixMessage{text: Circles["white"] + "Starting server..."})
if site, exists, err = getSite(repo_name); err != nil { if site, exists, err = getSite(repo_name); err != nil {
deploy_error := newDeployError(1, "handler", deploy_error := newDeployError(1, "handler",
fmt.Sprintf("Failed to get site '%s' after creation!", repo_name), fmt.Sprint(err)) fmt.Sprintf("Failed to get site '%s' after creation!", repo_name), fmt.Sprint(err))
@ -73,7 +83,7 @@ func handler(data map[string]interface{}) {
} }
defer sendMessage(MatrixMessage{text: "🚀 Launched for the first time!"}) defer sendMessage(MatrixMessage{text: "🚀 Launched for the first time!"})
} }
sendMessage(MatrixMessage{text: "🟢 Deployed successfully!"}) sendMessage(MatrixMessage{text: Circles["green"] + "Deployed successfully!"})
} }
// main is the starting point of the program // main is the starting point of the program

View File

@ -15,7 +15,8 @@ import (
// MatrixMessage stores information about a matrix message. // MatrixMessage stores information about a matrix message.
type MatrixMessage struct { type MatrixMessage struct {
text string text string
level int
} }
// MatrixCommandCallback is a function that gets called when the bot is issued a command over Matrix // MatrixCommandCallback is a function that gets called when the bot is issued a command over Matrix
@ -87,7 +88,7 @@ func initMatrix() {
} }
} }
if !found_command { if !found_command {
client.SendText(ctx, evt.RoomID, "🔴 Command not found") client.SendText(ctx, evt.RoomID, Circles["red"]+" Command not found")
} }
break break
} }

View File

@ -25,10 +25,10 @@ func registerChatCommands() {
cmd: "sites", cmd: "sites",
description: "Display all available sites", description: "Display all available sites",
callback: func(ctx context.Context, evt *event.Event, args []string) string { callback: func(ctx context.Context, evt *event.Event, args []string) string {
text := "⚪️ Getting sites...\n" text := Circles["white"] + "Getting sites...\n"
sites, err := getAllSites() sites, err := getAllSites()
if err.code != 0 { if err.code != 0 {
return text + "🔴 Failed to get sites!" return text + Circles["red"] + "Failed to get sites!"
} }
for _, site := range sites { for _, site := range sites {
text = fmt.Sprintf("%s- %s\n", text, site.getName()) text = fmt.Sprintf("%s- %s\n", text, site.getName())
@ -44,21 +44,21 @@ func registerChatCommands() {
description: "Restart a site.", description: "Restart a site.",
callback: func(ctx context.Context, evt *event.Event, args []string) string { callback: func(ctx context.Context, evt *event.Event, args []string) string {
if len(args) < 2 { if len(args) < 2 {
return "🔴 Invalid site." return Circles["red"] + "Invalid site."
} }
site, found, err := getSite(args[1]) site, found, err := getSite(args[1])
if err != nil { if err != nil {
return "🔴 Failed to get site " + args[2] + "!" return Circles["red"] + "Failed to get site " + args[2] + "!"
} else if !found { } else if !found {
return "🔴 Invalid site." return Circles["red"] + "Invalid site."
} }
text := "⚪️ Restarting server..." text := Circles["white"] + "Restarting server..."
derr := site.Restart() derr := site.Restart()
if derr.code != 0 { if derr.code != 0 {
derr.SendOverMatrix() derr.SendOverMatrix()
return text + "\n🔴 Failed to restart site!" return text + "\n" + Circles["red"] + "Failed to restart site!"
} }
return text + "\n🟢 Successfully restarted site." return text + "\n" + Circles["green"] + "Successfully restarted site."
}, },
}, },
{ {
@ -66,21 +66,21 @@ func registerChatCommands() {
description: "Start a site.", description: "Start a site.",
callback: func(ctx context.Context, evt *event.Event, args []string) string { callback: func(ctx context.Context, evt *event.Event, args []string) string {
if len(args) < 2 { if len(args) < 2 {
return "🔴 Invalid site." return Circles["red"] + "Invalid site."
} }
site, found, err := getSite(args[1]) site, found, err := getSite(args[1])
if err != nil { if err != nil {
return "🔴 Failed to get site " + args[2] + "!" return Circles["red"] + "Failed to get site " + args[2] + "!"
} else if !found { } else if !found {
return "🔴 Invalid site." return Circles["red"] + "Invalid site."
} }
text := "⚪️ Starting server..." text := Circles["white"] + "Starting server..."
if derr := site.Start(); derr.code != 0 { if derr := site.Start(); derr.code != 0 {
derr.SendOverMatrix() derr.SendOverMatrix()
return text + "\n🔴 Failed to stop site!" return text + "\n" + Circles["red"] + "Failed to stop site!"
} }
return text + "\n🟢 Successfully started site." return text + "\n" + Circles["green"] + "Successfully started site."
}, },
}, },
{ {
@ -88,20 +88,20 @@ func registerChatCommands() {
description: "Stop a site.", description: "Stop a site.",
callback: func(ctx context.Context, evt *event.Event, args []string) string { callback: func(ctx context.Context, evt *event.Event, args []string) string {
if len(args) < 2 { if len(args) < 2 {
return "🔴 Invalid site." return Circles["red"] + "Invalid site."
} }
site, found, err := getSite(args[1]) site, found, err := getSite(args[1])
if err != nil { if err != nil {
return "🔴 Failed to get site " + args[2] + "!" return Circles["red"] + "Failed to get site " + args[2] + "!"
} else if !found { } else if !found {
return "🔴 Invalid site." return Circles["red"] + "Invalid site."
} }
text := "⚪️ Stopping server..." text := Circles["white"] + "Stopping server..."
if derr := site.Stop(); derr.code != 0 { if derr := site.Stop(); derr.code != 0 {
derr.SendOverMatrix() derr.SendOverMatrix()
return text + "\n🔴 Failed to stop site!" return text + "\n" + Circles["red"] + "Failed to stop site!"
} }
return text + "\n🟢 Successfully stopped site." return text + "\n" + Circles["green"] + "Successfully stopped site."
}, },
}, },
} }

View File

@ -63,7 +63,7 @@ func (site *Site) getConfig() (bool, error) {
config := SiteConfig{} config := SiteConfig{}
log.Printf("Loading per-site config %s", path) log.Printf("Loading per-site config %s", path)
warning := fmt.Sprintf("🟠 %s : Site config warning : ", site.getName()) warning := fmt.Sprintf("%s%s : Site config warning : ", Circles["orange"], site.getName())
if _, err := getStringFromTable(L, table, "name", &config.name); err != nil { // Name if _, err := getStringFromTable(L, table, "name", &config.name); err != nil { // Name
sendMessage(MatrixMessage{text: warning + fmt.Sprint(err)}) sendMessage(MatrixMessage{text: warning + fmt.Sprint(err)})
@ -77,8 +77,6 @@ func (site *Site) getConfig() (bool, error) {
} else if _, ok := raw_gitt.(*lua.LNilType); !ok { // If 'git' is neither a table or nil (undefined), } else if _, ok := raw_gitt.(*lua.LNilType); !ok { // If 'git' is neither a table or nil (undefined),
sendMessage(MatrixMessage{text: warning + "'git' is neither a table or nil!"}) sendMessage(MatrixMessage{text: warning + "'git' is neither a table or nil!"})
} }
log.Print(config)
site.config = config site.config = config
return true, nil return true, nil