@@ -54,13 +54,10 @@ func Init(outDir string) *projectconfig.ZeroProjectConfig {
5454
5555 // Prompting for push-up stream, then conditionally prompting for github
5656 initParams ["GithubRootOrg" ] = prompts ["GithubRootOrg" ].GetParam (initParams )
57- initParams ["GithubPersonalToken" ] = prompts ["GithubPersonalToken" ].GetParam (initParams )
58- if initParams ["GithubRootOrg" ] != "" && initParams ["GithubPersonalToken" ] != globalconfig .GetUserCredentials (projectConfig .Name ).AccessToken {
59- projectCredential := globalconfig .GetUserCredentials (projectConfig .Name )
60- projectCredential .GithubResourceConfig .AccessToken = initParams ["GithubPersonalToken" ]
61- globalconfig .Save (projectCredential )
62- }
63-
57+ projectCredentials := globalconfig .GetProjectCredentials (projectConfig .Name )
58+ credentialPrompts := getCredentialPrompts (projectCredentials , moduleConfigs )
59+ projectCredentials = promptCredentialsAndFillProjectCreds (credentialPrompts , projectCredentials )
60+ globalconfig .Save (projectCredentials )
6461 projectParameters := promptAllModules (moduleConfigs )
6562
6663 // Map parameter values back to specific modules
@@ -84,6 +81,7 @@ func Init(outDir string) *projectconfig.ZeroProjectConfig {
8481
8582 // TODO : Write the project config file. For now, print.
8683 pp .Println (projectConfig )
84+ pp .Print (projectCredentials )
8785
8886 // TODO: load ~/.zero/config.yml (or credentials)
8987 // TODO: prompt global credentials
@@ -159,15 +157,6 @@ func getProjectPrompts(projectName string, modules map[string]moduleconfig.Modul
159157 KeyMatchCondition ("ShouldPushRepositories" , "y" ),
160158 NoValidation ,
161159 },
162- "GithubPersonalToken" : {
163- moduleconfig.Parameter {
164- Field : "GithubPersonalToken" ,
165- Label : "Github Personal Access Token with access to the above organization" ,
166- Default : globalconfig .GetUserCredentials (projectName ).AccessToken ,
167- },
168- KeyMatchCondition ("ShouldPushRepositories" , "y" ),
169- NoValidation ,
170- },
171160 }
172161
173162 for moduleName , module := range modules {
@@ -187,6 +176,71 @@ func getProjectPrompts(projectName string, modules map[string]moduleconfig.Modul
187176 return handlers
188177}
189178
179+ func getCredentialPrompts (projectCredentials globalconfig.ProjectCredential , moduleConfigs map [string ]moduleconfig.ModuleConfig ) map [string ][]PromptHandler {
180+ var uniqueVendors []string
181+ for _ , module := range moduleConfigs {
182+ uniqueVendors = appendToSet (uniqueVendors , module .RequiredCredentials )
183+ }
184+ // map is to keep track of which vendor they belong to, to fill them back into the projectConfig
185+ prompts := map [string ][]PromptHandler {}
186+ for _ , vendor := range uniqueVendors {
187+ prompts [vendor ] = mapVendorToPrompts (projectCredentials , vendor )
188+ }
189+ return prompts
190+ }
191+
192+ func mapVendorToPrompts (projectCred globalconfig.ProjectCredential , vendor string ) []PromptHandler {
193+ var prompts []PromptHandler
194+
195+ switch vendor {
196+ case "aws" :
197+ awsPrompts := []PromptHandler {
198+ {
199+ moduleconfig.Parameter {
200+ Field : "accessKeyId" ,
201+ Label : "AWS Access Key ID" ,
202+ Default : projectCred .AWSResourceConfig .AccessKeyId ,
203+ },
204+ NoCondition ,
205+ NoValidation ,
206+ },
207+ {
208+ moduleconfig.Parameter {
209+ Field : "secretAccessKey" ,
210+ Label : "AWS Secret access key" ,
211+ Default : projectCred .AWSResourceConfig .SecretAccessKey ,
212+ },
213+ NoCondition ,
214+ NoValidation ,
215+ },
216+ }
217+ prompts = append (prompts , awsPrompts ... )
218+ case "github" :
219+ githubPrompt := PromptHandler {
220+ moduleconfig.Parameter {
221+ Field : "accessToken" ,
222+ Label : "Github Personal Access Token with access to the above organization" ,
223+ Default : projectCred .GithubResourceConfig .AccessToken ,
224+ },
225+ NoCondition ,
226+ NoValidation ,
227+ }
228+ prompts = append (prompts , githubPrompt )
229+ case "circleci" :
230+ circleCiPrompt := PromptHandler {
231+ moduleconfig.Parameter {
232+ Field : "apiKey" ,
233+ Label : "Circleci api key for CI/CD" ,
234+ Default : projectCred .CircleCiResourceConfig .ApiKey ,
235+ },
236+ NoCondition ,
237+ NoValidation ,
238+ }
239+ prompts = append (prompts , circleCiPrompt )
240+ }
241+ return prompts
242+ }
243+
190244func chooseCloudProvider (projectConfig * projectconfig.ZeroProjectConfig ) {
191245 // @TODO move options into configs
192246 providerPrompt := promptui.Select {
0 commit comments