Commit 30bd3cd
Changed files (4)
cmd/misc/shouldideploytoday.go
@@ -0,0 +1,70 @@
+package misc
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+ "log"
+ "net/http"
+ "time"
+
+ "github.com/fatih/color"
+ "github.com/spf13/cobra"
+)
+
+type ShouldIDeploy struct {
+ Timezone string `json:"timezone"`
+ Date time.Time `json:"date"`
+ ShouldIDeploy bool `json:"shouldideploy"`
+ Message string `json:"message"`
+}
+
+func ShouldIDeployToday() ShouldIDeploy {
+ url := "https://shouldideploy.today/api?tz=Asia%2FBangkok"
+ method := "GET"
+
+ client := &http.Client{}
+ req, err := http.NewRequest(method, url, nil)
+
+ if err != nil {
+ fmt.Println(err)
+ }
+ res, err := client.Do(req)
+ if err != nil {
+ fmt.Println(err)
+ }
+ defer res.Body.Close()
+
+ body, err := io.ReadAll(res.Body)
+ if err != nil {
+ fmt.Println(err)
+ }
+
+ // decode
+ var response ShouldIDeploy
+ if err := json.Unmarshal(body, &response); err != nil {
+ log.Println("Can not unmarshal JSON")
+ }
+
+ return response
+}
+
+var Cmd = &cobra.Command{
+ Use: "shouldideploytoday",
+ Short: "Should I deploy today?",
+ Long: `Should I deploy today?`,
+ Run: func(cmd *cobra.Command, args []string) {
+ response := ShouldIDeployToday()
+
+ // init output colors
+ green := color.New(color.FgGreen).SprintFunc()
+ red := color.New(color.FgRed).SprintFunc()
+
+ // set output colors
+ if response.ShouldIDeploy {
+ fmt.Printf("%s\n", green(response.Message))
+ } else if !response.ShouldIDeploy {
+ fmt.Printf("%s\n", red(response.Message))
+ }
+ },
+}
cmd/root.go
@@ -5,6 +5,7 @@ import (
"github.com/kahnwong/swissknife/cmd/generate"
"github.com/kahnwong/swissknife/cmd/get"
+ "github.com/kahnwong/swissknife/cmd/misc"
"github.com/spf13/cobra"
)
@@ -26,4 +27,5 @@ func init() {
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
rootCmd.AddCommand(get.Cmd)
rootCmd.AddCommand(generate.Cmd)
+ rootCmd.AddCommand(misc.Cmd)
}
go.mod
@@ -3,6 +3,7 @@ module github.com/kahnwong/swissknife
go 1.20
require (
+ github.com/fatih/color v1.16.0
github.com/sethvargo/go-diceware v0.3.0
github.com/sethvargo/go-password v0.2.0
github.com/spf13/cobra v1.8.0
@@ -12,6 +13,8 @@ require (
require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
+ github.com/mattn/go-colorable v0.1.13 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect
golang.org/x/image v0.10.0 // indirect
go.sum
@@ -1,7 +1,14 @@
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
+github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sethvargo/go-diceware v0.3.0 h1:UVVEfmN/uF50JfWAN7nbY6CiAlp5xeSx+5U0lWKkMCQ=
github.com/sethvargo/go-diceware v0.3.0/go.mod h1:lH5Q/oSPMivseNdhMERAC7Ti5oOPqsaVddU1BcN1CY0=
@@ -45,7 +52,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=