From 21e494cf9badb904d7e488aba58a30b99ac6af05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 08:43:23 +0200 Subject: [PATCH 01/11] feat(proj): add init project command --- cmd/init.go | 30 ++++++++++++ cmd/root.go | 5 +- go.mod | 21 +++++++++ go.sum | 102 +++++++++++++++++++++++++++++++++++++++++ pkg/project/project.go | 8 ++++ 5 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 cmd/init.go create mode 100644 pkg/project/project.go diff --git a/cmd/init.go b/cmd/init.go new file mode 100644 index 0000000..68a3cf9 --- /dev/null +++ b/cmd/init.go @@ -0,0 +1,30 @@ +package cmd + +import ( + "errors" + "fmt" + + "github.com/go-git/go-git/v5" + "github.com/paastech-cloud/cli/pkg/project" + "github.com/spf13/cobra" +) + +var initCmd = &cobra.Command{ + GroupID: "project", + Use: "init", + Short: "Initialize a project", + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Println("Initializing a new project") + + git, err := git.PlainOpen(".") + if err != nil { + return errors.New("No git repository found in current directory") + } + + return project.InitProject(git) + }, +} + +func init() { + rootCmd.AddCommand(initCmd) +} diff --git a/cmd/root.go b/cmd/root.go index f3aa555..87bc964 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -13,7 +13,7 @@ var rootCmd = &cobra.Command{ 🍉 PaaSTech CLI is the official tool to manage and operate your applications and deployments on the PaaSTech platform. -🔗 Find more informations at: TBA +🔗 Find more informations at: https://paastech.cloud/ `, SilenceUsage: true, } @@ -26,5 +26,6 @@ func Execute() { } func init() { - rootCmd.AddGroup(&cobra.Group{ID: "account", Title: "Account Commands"}) + rootCmd.AddGroup(&cobra.Group{ID: "account", Title: "Account Commands:"}) + rootCmd.AddGroup(&cobra.Group{ID: "project", Title: "Project Commands:"}) } diff --git a/go.mod b/go.mod index a4efb0a..7683d73 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,27 @@ require ( ) require ( + github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 // indirect + github.com/acomagu/bufpipe v1.0.4 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.4.1 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/imdario/mergo v0.3.15 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/sergi/go-diff v1.1.0 // indirect + github.com/skeema/knownhosts v1.1.1 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + golang.org/x/net v0.10.0 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect +) + +require ( + github.com/go-git/go-git/v5 v5.7.0 github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect golang.org/x/sys v0.9.0 // indirect diff --git a/go.sum b/go.sum index f9286ce..e2c5d9d 100644 --- a/go.sum +++ b/go.sum @@ -1,16 +1,118 @@ +github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= +github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= +github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/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-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/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.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/project/project.go b/pkg/project/project.go new file mode 100644 index 0000000..f4175e3 --- /dev/null +++ b/pkg/project/project.go @@ -0,0 +1,8 @@ +package project + +import "github.com/go-git/go-git/v5" + +func InitProject(git *git.Repository) error { + // TODO: to implement when API is ready + return nil +} From 227e51ddb810d4ce5115024986068a15a4dbbae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 09:21:11 +0200 Subject: [PATCH 02/11] feat(proj): add delete project command --- cmd/delete.go | 40 ++++++++++++++++++++++++++++++++++++++++ pkg/project/project.go | 5 +++++ 2 files changed, 45 insertions(+) create mode 100644 cmd/delete.go diff --git a/cmd/delete.go b/cmd/delete.go new file mode 100644 index 0000000..24f1d33 --- /dev/null +++ b/cmd/delete.go @@ -0,0 +1,40 @@ +package cmd + +import ( + "bufio" + "errors" + "fmt" + "os" + + "github.com/go-git/go-git/v5" + "github.com/paastech-cloud/cli/pkg/project" + "github.com/paastech-cloud/cli/pkg/utils" + "github.com/spf13/cobra" +) + +var deleteCmd = &cobra.Command{ + GroupID: "project", + Use: "delete", + Short: "Delete a project", + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Println("Deleting this project from PaasTech") + + // check if git repo exists + git, err := git.PlainOpen(".") + if err != nil { + return errors.New("No git repository found in current directory") + } + + // confirmation + stdin := bufio.NewReader(os.Stdin) + if utils.ConfirmationPrompt(stdin) { + return project.DeleteProject(git) + } + + return nil + }, +} + +func init() { + rootCmd.AddCommand(deleteCmd) +} diff --git a/pkg/project/project.go b/pkg/project/project.go index f4175e3..8280512 100644 --- a/pkg/project/project.go +++ b/pkg/project/project.go @@ -6,3 +6,8 @@ func InitProject(git *git.Repository) error { // TODO: to implement when API is ready return nil } + +func DeleteProject(git *git.Repository) error { + // TODO: to implement when API is ready + return nil +} From 256aa355ab7e3eb36a6b1960f4a77cc5387a0919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 13:52:36 +0200 Subject: [PATCH 03/11] fix(proj): add missing utils module --- pkg/utils/cli.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 pkg/utils/cli.go diff --git a/pkg/utils/cli.go b/pkg/utils/cli.go new file mode 100644 index 0000000..314a204 --- /dev/null +++ b/pkg/utils/cli.go @@ -0,0 +1,25 @@ +package utils + +import ( + "bufio" + "fmt" + "io" + "strings" +) + +func ConfirmationPrompt(in io.Reader) bool { + reader := bufio.NewReader(in) + + // repeat until user answer yes or no + for { + fmt.Print("Are you sure you want to proceed? [y/N]") + input, _, _ := reader.ReadLine() + answer := strings.ToLower(string(input)) + + if answer == "y" { + return true + } else if answer == "n" { + return false + } + } +} From 2c257c5c7f53f864704d4ddb391cfd8605c6976c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 13:56:27 +0200 Subject: [PATCH 04/11] feat(proj): add env project command --- cmd/env.go | 59 ++++++++++++++++++++++++++++++++++++++++++ pkg/project/project.go | 15 +++++++++++ 2 files changed, 74 insertions(+) create mode 100644 cmd/env.go diff --git a/cmd/env.go b/cmd/env.go new file mode 100644 index 0000000..afe9bbb --- /dev/null +++ b/cmd/env.go @@ -0,0 +1,59 @@ +package cmd + +import ( + "errors" + "fmt" + + "github.com/paastech-cloud/cli/pkg/project" + "github.com/spf13/cobra" +) + +var envCmd = &cobra.Command{ + GroupID: "project", + Use: "env", + Short: "Manage environment variables for project", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return errors.New("not enough arguments") + } + return nil + }, +} + +var addEnvCmd = &cobra.Command{ + Use: "add", + Short: "Add an environment variable to the current projet", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return project.AddEnvVar(args[0]) + }, +} + +var lsEnvCmd = &cobra.Command{ + Use: "ls", + Short: "List environment variables of the current projet", + RunE: func(cmd *cobra.Command, args []string) error { + vars, err := project.ListEnvVar() + if err != nil { + return err + } + fmt.Print(vars) + return nil + }, +} + +var rmEnvCmd = &cobra.Command{ + Use: "rm", + Short: "Remove an environment variable from the current projet", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return project.RmEnvVar(args[0]) + }, +} + +func init() { + envCmd.AddCommand(rmEnvCmd) + envCmd.AddCommand(lsEnvCmd) + envCmd.AddCommand(addEnvCmd) + rootCmd.AddCommand(envCmd) +} diff --git a/pkg/project/project.go b/pkg/project/project.go index 8280512..74f005a 100644 --- a/pkg/project/project.go +++ b/pkg/project/project.go @@ -11,3 +11,18 @@ func DeleteProject(git *git.Repository) error { // TODO: to implement when API is ready return nil } + +func AddEnvVar(envVar string) error { + // TODO: to implement when API is ready + return nil +} + +func ListEnvVar() (string, error) { + // TODO: to implement when API is ready + return "", nil +} + +func RmEnvVar(envVar string) error { + // TODO: to implement when API is ready + return nil +} From 2fe6fd314450e55931614e8f768477faa960d462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 15:31:01 +0200 Subject: [PATCH 05/11] feat(misc): add dashboard url command --- cmd/dashboard.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 cmd/dashboard.go diff --git a/cmd/dashboard.go b/cmd/dashboard.go new file mode 100644 index 0000000..239cec6 --- /dev/null +++ b/cmd/dashboard.go @@ -0,0 +1,20 @@ +package cmd + +import ( + "os/exec" + + "github.com/spf13/cobra" +) + +var dashboardCmd = &cobra.Command{ + Use: "dashboard", + Short: "Open dashboard on web UI", + RunE: func(cmd *cobra.Command, args []string) error { + // only support linux for now + return exec.Command("xdg-open", "https://paastech.cloud/#/dashboard").Start() + }, +} + +func init() { + rootCmd.AddCommand(dashboardCmd) +} From 62d8c2c07d7881f2fa22735a574c9a5014b75fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 18:12:56 +0200 Subject: [PATCH 06/11] fix: fix syntax and formatting --- cmd/delete.go | 2 +- cmd/init.go | 2 +- cmd/root.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/delete.go b/cmd/delete.go index 24f1d33..4074559 100644 --- a/cmd/delete.go +++ b/cmd/delete.go @@ -22,7 +22,7 @@ var deleteCmd = &cobra.Command{ // check if git repo exists git, err := git.PlainOpen(".") if err != nil { - return errors.New("No git repository found in current directory") + return errors.New("no git repository found in current directory") } // confirmation diff --git a/cmd/init.go b/cmd/init.go index 68a3cf9..b281375 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -18,7 +18,7 @@ var initCmd = &cobra.Command{ git, err := git.PlainOpen(".") if err != nil { - return errors.New("No git repository found in current directory") + return errors.New("no git repository found in current directory") } return project.InitProject(git) diff --git a/cmd/root.go b/cmd/root.go index 87bc964..ac273bc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -13,7 +13,7 @@ var rootCmd = &cobra.Command{ 🍉 PaaSTech CLI is the official tool to manage and operate your applications and deployments on the PaaSTech platform. -🔗 Find more informations at: https://paastech.cloud/ +🔗 Find more information at: https://paastech.cloud/ `, SilenceUsage: true, } From ae0cc08f1f8c9efda71faf34a54a8c47db02ccc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 18:53:22 +0200 Subject: [PATCH 07/11] feat(deploy): add deploy command --- cmd/deploy.go | 22 ++++++++++++++++++++++ cmd/root.go | 1 + pkg/deployment/deployment.go | 26 ++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 cmd/deploy.go create mode 100644 pkg/deployment/deployment.go diff --git a/cmd/deploy.go b/cmd/deploy.go new file mode 100644 index 0000000..e35943a --- /dev/null +++ b/cmd/deploy.go @@ -0,0 +1,22 @@ +package cmd + +import ( + "fmt" + + "github.com/paastech-cloud/cli/pkg/deployment" + "github.com/spf13/cobra" +) + +var deployCmd = &cobra.Command{ + GroupID: "deployment", + Use: "deploy", + Short: "Deploy a project", + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Print("Deploying project") + return deployment.Deploy() + }, +} + +func init() { + rootCmd.AddCommand(deployCmd) +} diff --git a/cmd/root.go b/cmd/root.go index ac273bc..a49777e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -28,4 +28,5 @@ func Execute() { func init() { rootCmd.AddGroup(&cobra.Group{ID: "account", Title: "Account Commands:"}) rootCmd.AddGroup(&cobra.Group{ID: "project", Title: "Project Commands:"}) + rootCmd.AddGroup(&cobra.Group{ID: "deployment", Title: "Deployment Commands:"}) } diff --git a/pkg/deployment/deployment.go b/pkg/deployment/deployment.go new file mode 100644 index 0000000..146c8db --- /dev/null +++ b/pkg/deployment/deployment.go @@ -0,0 +1,26 @@ +package deployment + +func Deploy() error { + // TODO: to implement + return nil +} + +func Status() (string, error) { + // TODO: to implement + return "", nil +} + +func Destroy() error { + // TODO: to implement + return nil +} + +func Restart() error { + // TODO: to implement + return nil +} + +func Scale(replicas int) error { + // TODO: to implement + return nil +} From 91a359d54e249055ceb4010e6ffe37ee62c5b607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 18:57:57 +0200 Subject: [PATCH 08/11] feat(deploy): add destroy command --- cmd/destroy.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 cmd/destroy.go diff --git a/cmd/destroy.go b/cmd/destroy.go new file mode 100644 index 0000000..e7486f5 --- /dev/null +++ b/cmd/destroy.go @@ -0,0 +1,22 @@ +package cmd + +import ( + "fmt" + + "github.com/paastech-cloud/cli/pkg/deployment" + "github.com/spf13/cobra" +) + +var destroyCmd = &cobra.Command{ + GroupID: "deployment", + Use: "destroy", + Short: "Destroy a deployment", + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Print("Destroying deployment") + return deployment.Destroy() + }, +} + +func init() { + rootCmd.AddCommand(destroyCmd) +} From 9da2197b82d8c22c7a72cdb4fe2881674b56d102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 18:58:43 +0200 Subject: [PATCH 09/11] feat(deploy): add restart command --- cmd/restart.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 cmd/restart.go diff --git a/cmd/restart.go b/cmd/restart.go new file mode 100644 index 0000000..ae71a58 --- /dev/null +++ b/cmd/restart.go @@ -0,0 +1,22 @@ +package cmd + +import ( + "fmt" + + "github.com/paastech-cloud/cli/pkg/deployment" + "github.com/spf13/cobra" +) + +var restartCmd = &cobra.Command{ + GroupID: "deployment", + Use: "restart", + Short: "Restart a deployment", + RunE: func(cmd *cobra.Command, args []string) error { + fmt.Print("Restarting deployment") + return deployment.Restart() + }, +} + +func init() { + rootCmd.AddCommand(restartCmd) +} From a159f75357fc1d32350500a8144561dceb1abccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 19:08:54 +0200 Subject: [PATCH 10/11] feat(deploy): add scale command --- cmd/scale.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 cmd/scale.go diff --git a/cmd/scale.go b/cmd/scale.go new file mode 100644 index 0000000..42784cd --- /dev/null +++ b/cmd/scale.go @@ -0,0 +1,27 @@ +package cmd + +import ( + "errors" + "strconv" + + "github.com/paastech-cloud/cli/pkg/deployment" + "github.com/spf13/cobra" +) + +var scaleCmd = &cobra.Command{ + GroupID: "deployment", + Use: "scale [number]", + Short: "Scale a project deployment", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + replicas, err := strconv.Atoi(args[0]) + if err != nil { + return errors.New("not a correct number") + } + return deployment.Scale(replicas) + }, +} + +func init() { + rootCmd.AddCommand(scaleCmd) +} From adb79dca4dcef7eda4df6450e18012fa0574dba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Tarbouriech?= Date: Tue, 27 Jun 2023 19:14:30 +0200 Subject: [PATCH 11/11] feat(deploy): add status command --- cmd/status.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 cmd/status.go diff --git a/cmd/status.go b/cmd/status.go new file mode 100644 index 0000000..adff1c9 --- /dev/null +++ b/cmd/status.go @@ -0,0 +1,26 @@ +package cmd + +import ( + "fmt" + + "github.com/paastech-cloud/cli/pkg/deployment" + "github.com/spf13/cobra" +) + +var statusCmd = &cobra.Command{ + GroupID: "deployment", + Use: "status", + Short: "List deployments for current project", + RunE: func(cmd *cobra.Command, args []string) error { + status, err := deployment.Status() + if err != nil { + return err + } + fmt.Print(status) + return nil + }, +} + +func init() { + rootCmd.AddCommand(statusCmd) +}