@@ -6,11 +6,18 @@ import (
66 "path"
77 "sync"
88
9+ "github.com/aws/aws-sdk-go/aws"
10+ "github.com/aws/aws-sdk-go/aws/awserr"
11+ "github.com/aws/aws-sdk-go/aws/credentials"
12+ "github.com/aws/aws-sdk-go/aws/session"
13+ "github.com/aws/aws-sdk-go/service/sts"
914 "github.com/commitdev/commit0/internal/templator"
1015 "github.com/commitdev/commit0/internal/util"
16+ "github.com/commitdev/commit0/internal/util/secrets"
1117 "github.com/gobuffalo/packr/v2"
1218 "github.com/kyokomi/emoji"
1319 "github.com/logrusorgru/aurora"
20+ "github.com/manifoldco/promptui"
1421 "github.com/spf13/cobra"
1522)
1623
@@ -22,16 +29,63 @@ func Create(projectName string, outDir string, t *templator.Templator) string {
2229 rootDir := path .Join (outDir , projectName )
2330 log .Println (aurora .Cyan (emoji .Sprintf (":tada: Creating project %s." , projectName )))
2431 err := os .MkdirAll (rootDir , os .ModePerm )
25-
2632 if os .IsExist (err ) {
2733 log .Fatalln (aurora .Red (emoji .Sprintf (":exclamation: Directory %v already exists! Error: %v" , projectName , err )))
2834 } else if err != nil {
2935 log .Fatalln (aurora .Red (emoji .Sprintf (":exclamation: Error creating root: %v " , err )))
3036 }
31- var wg sync.WaitGroup
37+
38+ // @TODO : Clean up the following aws stuff
39+ providerPrompt := promptui.Select {
40+ Label : "Select Cloud Provider" ,
41+ Items : []string {"Amazon AWS" , "Google GCP" , "Microsoft Azure" },
42+ }
43+
44+ _ , _ , err = providerPrompt .Run ()
45+
46+ regionPrompt := promptui.Select {
47+ Label : "Select AWS Region " ,
48+ Items : []string {"us-west-1" , "us-west-2" , "us-east-1" , "us-east-2" , "ca-central-1" ,
49+ "eu-central-1" , "eu-west-1" , "ap-east-1" , "ap-south-1" },
50+ }
51+
52+ _ , regionResult , err := regionPrompt .Run ()
53+
54+ if err != nil {
55+ log .Fatalf ("Prompt failed %v\n " , err )
56+ panic (err )
57+ }
58+
59+ s := secrets .GetSecrets (rootDir )
60+
61+ sess , err := session .NewSession (& aws.Config {
62+ Region : aws .String (regionResult ),
63+ Credentials : credentials .NewStaticCredentials (s .AWS .AccessKeyID , s .AWS .SecretAccessKey , "" ),
64+ })
65+
66+ svc := sts .New (sess )
67+ input := & sts.GetCallerIdentityInput {}
68+
69+ awsCaller , err := svc .GetCallerIdentity (input )
70+ if err != nil {
71+ if aerr , ok := err .(awserr.Error ); ok {
72+ switch aerr .Code () {
73+ default :
74+ log .Fatalf (aerr .Error ())
75+ }
76+ } else {
77+ log .Fatalf (err .Error ())
78+ }
79+ }
3280
3381 defaultProjConfig := defaultProjConfig (projectName )
3482
83+ defaultProjConfig .Infrastructure .AWS .Region = regionResult
84+ if awsCaller != nil && awsCaller .Account != nil {
85+ defaultProjConfig .Infrastructure .AWS .AccountID = * awsCaller .Account
86+ }
87+
88+ var wg sync.WaitGroup
3589 util .TemplateFileIfDoesNotExist (rootDir , util .CommitYml , t .Commit0 , & wg , defaultProjConfig )
3690 util .TemplateFileIfDoesNotExist (rootDir , ".gitignore" , t .GitIgnore , & wg , projectName )
3791
@@ -50,10 +104,10 @@ func defaultProjConfig(projectName string) util.ProjectConfiguration {
50104 Email : "bob@test.com" ,
51105 }},
52106 Services : []util.Service {{
53- Name : "User" ,
107+ Name : "User" ,
54108 Description : "User Service" ,
55- Language : "go" ,
56- GitRepo : "github.com/test/repo" ,
109+ Language : "go" ,
110+ GitRepo : "github.com/test/repo" ,
57111 }},
58112 }
59113}
0 commit comments