Matrix notifications (fix #3)
This commit is contained in:
parent
7ff174fab9
commit
16e20f496b
@ -1,6 +1,10 @@
|
||||
// package main is the main package for the LapisDeploy program
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// DeployError contains important information about an error if something went wrong.
|
||||
type DeployError struct {
|
||||
code int
|
||||
@ -9,6 +13,13 @@ type DeployError struct {
|
||||
command_output string
|
||||
}
|
||||
|
||||
// SendOverMatrix provides an easy way to send the contents of a DeployError over Matrix
|
||||
func (deploy_error *DeployError) SendOverMatrix() {
|
||||
sendMessage(MatrixMessage{text: fmt.Sprintf("🔴 **Error in **`%s`**!**\n- *%s*\n- Code: %d",
|
||||
deploy_error.where, deploy_error.details, deploy_error.code),
|
||||
})
|
||||
}
|
||||
|
||||
// newDeployError creates a 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 }
|
||||
|
1
go.mod
1
go.mod
@ -13,6 +13,7 @@ require (
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.1 // indirect
|
||||
github.com/tidwall/sjson v1.2.5 // indirect
|
||||
github.com/yuin/goldmark v1.6.0 // indirect
|
||||
go.mau.fi/util v0.4.0 // indirect
|
||||
golang.org/x/crypto v0.21.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
|
||||
|
2
go.sum
2
go.sum
@ -35,6 +35,8 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
|
||||
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
|
||||
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
|
||||
github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68=
|
||||
github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.mau.fi/util v0.4.0 h1:S2X3qU4pUcb/vxBRfAuZjbrR9xVMAXSjQojNBLPBbhs=
|
||||
go.mau.fi/util v0.4.0/go.mod h1:leeiHtgVBuN+W9aDii3deAXnfC563iN3WK6BF8/AjNw=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
|
9
main.go
9
main.go
@ -25,16 +25,19 @@ func fileExists(path string) (bool, error) {
|
||||
func handler(data map[string]interface{}) {
|
||||
repository := data["repository"].(map[string]interface{})
|
||||
log.Default().Printf("Repo: %s", repository["full_name"])
|
||||
sendMessage(MatrixMessage{text: fmt.Sprintf("⚪️ Handling webhook for `%s`...", repository["full_name"])})
|
||||
|
||||
deploy_error := pullRepo(repository["ssh_url"].(string), repository["name"].(string))
|
||||
if deploy_error.code != 0 {
|
||||
log.Default().Printf("Error in %s! [Code: %d] (%s)", deploy_error.where, deploy_error.code, deploy_error.details)
|
||||
deploy_error.SendOverMatrix()
|
||||
return
|
||||
}
|
||||
deploy_error = restartServer(repository["name"].(string))
|
||||
if deploy_error.code != 0 {
|
||||
log.Printf("Error in %s! [Code: %d] (%s) {Command output: '%s'}",
|
||||
deploy_error.where, deploy_error.code, deploy_error.details, deploy_error.command_output)
|
||||
deploy_error.SendOverMatrix()
|
||||
return
|
||||
}
|
||||
sendMessage(MatrixMessage{text: "🟢 Deployed successfully!"})
|
||||
}
|
||||
|
||||
// main is the starting point of the program
|
||||
|
47
matrix.go
47
matrix.go
@ -3,14 +3,29 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
//"errors"
|
||||
"log"
|
||||
//"sync"
|
||||
"time"
|
||||
|
||||
"maunium.net/go/mautrix"
|
||||
"maunium.net/go/mautrix/event"
|
||||
"maunium.net/go/mautrix/id"
|
||||
"maunium.net/go/mautrix/format"
|
||||
)
|
||||
|
||||
type MatrixMessage struct {
|
||||
text string
|
||||
}
|
||||
|
||||
// I/O queues
|
||||
var MatrixIn []MatrixMessage
|
||||
var MatrixOut []MatrixMessage
|
||||
|
||||
// sendMessage sends a message through Matrix
|
||||
func sendMessage(msg MatrixMessage) {
|
||||
MatrixOut = append(MatrixOut, msg)
|
||||
}
|
||||
|
||||
// initMatrix starts a Matrix bot.
|
||||
func initMatrix() {
|
||||
client, err := mautrix.NewClient(configuration.matrix.homeserver, "", "")
|
||||
if err != nil {
|
||||
@ -43,22 +58,24 @@ func initMatrix() {
|
||||
}
|
||||
})
|
||||
|
||||
go func () {
|
||||
for range time.Tick(time.Second * 3) {
|
||||
log.Printf("Scanning for queued messages...")
|
||||
for _, msg := range MatrixOut {
|
||||
_, err := client.SendMessageEvent(context.Background(), id.RoomID(configuration.matrix.room_id), event.EventMessage, format.RenderMarkdown(msg.text, true, false))
|
||||
if err != nil {
|
||||
log.Printf("[Matrix] ERROR : %s", err)
|
||||
continue
|
||||
}
|
||||
log.Print("[Matrix] Sent queued message successfully.")
|
||||
}
|
||||
MatrixOut = []MatrixMessage{}
|
||||
}
|
||||
}()
|
||||
|
||||
log.Print("[Matrix] Running!")
|
||||
err = client.Sync()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
//syncCtx, cancelSync := context.WithCancel(context.Background())
|
||||
//var syncStopWait sync.WaitGroup
|
||||
//syncStopWait.Add(1)
|
||||
|
||||
//go func() {
|
||||
// err = client.SyncWithContext(syncCtx)
|
||||
// defer syncStopWait.Done()
|
||||
// if err != nil && !errors.Is(err, context.Canceled) {
|
||||
// panic(err)
|
||||
// }
|
||||
//}()
|
||||
//cancelSync()
|
||||
//syncStopWait.Wait()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user