🗑️ Remove old RoadSign CLI
This commit is contained in:
parent
dd36e2ab1a
commit
f22affc05c
@ -1,89 +0,0 @@
|
|||||||
package conn
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/samber/lo"
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var CliCommands = []*cli.Command{
|
|
||||||
{
|
|
||||||
Name: "list",
|
|
||||||
Aliases: []string{"ls"},
|
|
||||||
Description: "List all connected remote server",
|
|
||||||
Action: func(ctx *cli.Context) error {
|
|
||||||
var servers []CliConnection
|
|
||||||
raw, _ := json.Marshal(viper.Get("servers"))
|
|
||||||
_ = json.Unmarshal(raw, &servers)
|
|
||||||
|
|
||||||
log.Info().Msgf("There are %d server(s) connected in total.", len(servers))
|
|
||||||
for idx, server := range servers {
|
|
||||||
log.Info().Msgf("%d) %s: %s", idx+1, server.ID, server.Url)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "connect",
|
|
||||||
Aliases: []string{"add"},
|
|
||||||
Description: "Connect and save configuration of remote server",
|
|
||||||
ArgsUsage: "<id> <server url> <credential>",
|
|
||||||
Action: func(ctx *cli.Context) error {
|
|
||||||
if ctx.Args().Len() < 3 {
|
|
||||||
return fmt.Errorf("must have three arguments: <id> <server url> <credential>")
|
|
||||||
}
|
|
||||||
|
|
||||||
c := CliConnection{
|
|
||||||
ID: ctx.Args().Get(0),
|
|
||||||
Url: ctx.Args().Get(1),
|
|
||||||
Credential: ctx.Args().Get(2),
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.CheckConnectivity(); err != nil {
|
|
||||||
return fmt.Errorf("couldn't connect server: %s", err.Error())
|
|
||||||
} else {
|
|
||||||
var servers []CliConnection
|
|
||||||
raw, _ := json.Marshal(viper.Get("servers"))
|
|
||||||
_ = json.Unmarshal(raw, &servers)
|
|
||||||
viper.Set("servers", append(servers, c))
|
|
||||||
|
|
||||||
if err := viper.WriteConfig(); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
log.Info().Msg("Successfully connected a new remote server, enter \"rds ls\" to get more info.")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "disconnect",
|
|
||||||
Aliases: []string{"remove"},
|
|
||||||
Description: "Remove a remote server configuration",
|
|
||||||
ArgsUsage: "<id>",
|
|
||||||
Action: func(ctx *cli.Context) error {
|
|
||||||
if ctx.Args().Len() < 1 {
|
|
||||||
return fmt.Errorf("must have more one arguments: <server url>")
|
|
||||||
}
|
|
||||||
|
|
||||||
var servers []CliConnection
|
|
||||||
raw, _ := json.Marshal(viper.Get("servers"))
|
|
||||||
_ = json.Unmarshal(raw, &servers)
|
|
||||||
viper.Set("servers", lo.Filter(servers, func(item CliConnection, idx int) bool {
|
|
||||||
return item.ID != ctx.Args().Get(0)
|
|
||||||
}))
|
|
||||||
|
|
||||||
if err := viper.WriteConfig(); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
log.Info().Msg("Successfully disconnected a remote server, enter \"rds ls\" to get more info.")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
package conn
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
roadsign "git.solsynth.dev/goatworks/roadsign/pkg"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
)
|
|
||||||
|
|
||||||
type CliConnection struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Url string `json:"url"`
|
|
||||||
Credential string `json:"credential"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v CliConnection) CheckConnectivity() error {
|
|
||||||
client := fiber.Get(v.Url + "/cgi/metadata")
|
|
||||||
client.BasicAuth("RoadSign CLI", v.Credential)
|
|
||||||
|
|
||||||
if status, data, err := client.Bytes(); len(err) > 0 {
|
|
||||||
return fmt.Errorf("couldn't connect to server: %q", err)
|
|
||||||
} else if status != 200 {
|
|
||||||
return fmt.Errorf("server rejected request, may cause by invalid credential")
|
|
||||||
} else {
|
|
||||||
var resp fiber.Map
|
|
||||||
if err := json.Unmarshal(data, &resp); err != nil {
|
|
||||||
return err
|
|
||||||
} else if resp["server"] != "RoadSign" {
|
|
||||||
return fmt.Errorf("remote server isn't roadsign")
|
|
||||||
} else if resp["version"] != roadsign.AppVersion {
|
|
||||||
if strings.Contains(roadsign.AppVersion, "#") {
|
|
||||||
return fmt.Errorf("remote server version mismatch client version, update or downgrade client required")
|
|
||||||
} else {
|
|
||||||
log.Warn().Msg("RoadSign CLI didn't complied with vcs information, compatibility was disabled. To enable it, reinstall cli with -buildvcs flag.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
package conn
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/samber/lo"
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetConnection(id string) (CliConnection, bool) {
|
|
||||||
var servers []CliConnection
|
|
||||||
raw, _ := json.Marshal(viper.Get("servers"))
|
|
||||||
_ = json.Unmarshal(raw, &servers)
|
|
||||||
return lo.Find(servers, func(item CliConnection) bool {
|
|
||||||
return item.ID == id
|
|
||||||
})
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
package deploy
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
jsoniter "github.com/json-iterator/go"
|
|
||||||
|
|
||||||
"git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc/conn"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var DeployCommands = []*cli.Command{
|
|
||||||
{
|
|
||||||
Name: "deploy",
|
|
||||||
Aliases: []string{"dp"},
|
|
||||||
ArgsUsage: "<server> <site> <upstream> [path]",
|
|
||||||
Action: func(ctx *cli.Context) error {
|
|
||||||
if ctx.Args().Len() < 4 {
|
|
||||||
return fmt.Errorf("must have four arguments: <server> <site> <upstream> <path>")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.HasSuffix(ctx.Args().Get(3), ".zip") {
|
|
||||||
return fmt.Errorf("input file must be a zip file and ends with .zip")
|
|
||||||
}
|
|
||||||
|
|
||||||
server, ok := conn.GetConnection(ctx.Args().Get(0))
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("server was not found, use \"rds connect\" add one first")
|
|
||||||
} else if err := server.CheckConnectivity(); err != nil {
|
|
||||||
return fmt.Errorf("couldn't connect server: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send request
|
|
||||||
log.Info().Msg("Now publishing to remote server...")
|
|
||||||
|
|
||||||
url := fmt.Sprintf("/webhooks/publish/%s/%s?mimetype=%s", ctx.Args().Get(1), ctx.Args().Get(2), "application/zip")
|
|
||||||
client := fiber.Put(server.Url+url).
|
|
||||||
SendFile(ctx.Args().Get(3), "attachments").
|
|
||||||
MultipartForm(nil).
|
|
||||||
BasicAuth("RoadSign CLI", server.Credential)
|
|
||||||
|
|
||||||
if status, data, err := client.Bytes(); len(err) > 0 {
|
|
||||||
return fmt.Errorf("failed to publish to remote: %q", err)
|
|
||||||
} else if status != 200 {
|
|
||||||
return fmt.Errorf("server rejected request, status code %d, response %s", status, string(data))
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info().Msg("Well done! Your site is successfully published! 🎉")
|
|
||||||
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "sync",
|
|
||||||
ArgsUsage: "<server> <site> <configuration path>",
|
|
||||||
Action: func(ctx *cli.Context) error {
|
|
||||||
if ctx.Args().Len() < 3 {
|
|
||||||
return fmt.Errorf("must have three arguments: <server> <site> <configuration path>")
|
|
||||||
}
|
|
||||||
|
|
||||||
server, ok := conn.GetConnection(ctx.Args().Get(0))
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("server was not found, use \"rds connect\" add one first")
|
|
||||||
} else if err := server.CheckConnectivity(); err != nil {
|
|
||||||
return fmt.Errorf("couldn't connect server: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
var raw []byte
|
|
||||||
if file, err := os.Open(ctx.Args().Get(2)); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
raw, _ = io.ReadAll(file)
|
|
||||||
}
|
|
||||||
|
|
||||||
url := fmt.Sprintf("/webhooks/sync/%s", ctx.Args().Get(1))
|
|
||||||
client := fiber.Put(server.Url+url).
|
|
||||||
JSONEncoder(jsoniter.ConfigCompatibleWithStandardLibrary.Marshal).
|
|
||||||
JSONDecoder(jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal).
|
|
||||||
Body(raw).
|
|
||||||
BasicAuth("RoadSign CLI", server.Credential)
|
|
||||||
|
|
||||||
if status, data, err := client.Bytes(); len(err) > 0 {
|
|
||||||
return fmt.Errorf("failed to sync to remote: %q", err)
|
|
||||||
} else if status != 200 {
|
|
||||||
return fmt.Errorf("server rejected request, status code %d, response %s", status, string(data))
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info().Msg("Well done! Your site configuration is up-to-date! 🎉")
|
|
||||||
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
roadsign "git.solsynth.dev/goatworks/roadsign/pkg"
|
|
||||||
"git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc/conn"
|
|
||||||
"git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc/deploy"
|
|
||||||
"github.com/rs/zerolog"
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
|
||||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout})
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// Configure settings
|
|
||||||
viper.AddConfigPath("$HOME")
|
|
||||||
viper.SetConfigName(".roadsignrc")
|
|
||||||
viper.SetConfigType("toml")
|
|
||||||
|
|
||||||
// Load settings
|
|
||||||
if err := viper.ReadInConfig(); err != nil {
|
|
||||||
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
|
|
||||||
viper.SafeWriteConfig()
|
|
||||||
viper.ReadInConfig()
|
|
||||||
} else {
|
|
||||||
log.Panic().Err(err).Msg("An error occurred when loading settings.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure CLI
|
|
||||||
app := &cli.App{
|
|
||||||
Name: "RoadSign CLI",
|
|
||||||
Version: roadsign.AppVersion,
|
|
||||||
Suggest: true,
|
|
||||||
Commands: append(append([]*cli.Command{}, conn.CliCommands...), deploy.DeployCommands...),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run CLI
|
|
||||||
if err := app.Run(os.Args); err != nil {
|
|
||||||
log.Fatal().Err(err).Msg("An error occurred when running cli.")
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user