@@ -190,15 +190,8 @@ func createScriptYaml(opts *RunnerOptions, branch Branch) {
190
190
191
191
workDir := filepath .Join (opts .branchRepoDir , "mockgcp" )
192
192
193
- log .Printf ("COMMAND: git checkout %s\r \n " , branch .Local )
194
- checkout := exec .Command ("git" , "checkout" , branch .Local )
195
- checkout .Dir = workDir
196
193
var out strings.Builder
197
- checkout .Stdout = & out
198
- if err := checkout .Run (); err != nil {
199
- log .Fatal (err )
200
- }
201
- log .Printf ("BRANCH CHECKOUT: %q\n " , out .String ())
194
+ checkoutBranch (branch , workDir , out )
202
195
203
196
// Check to see if the script file already exists
204
197
scriptFile := fmt .Sprintf ("mock%s/testdata/%s/crud/script.yaml" , branch .Group , branch .Resource )
@@ -304,15 +297,8 @@ func captureHttpLog(opts *RunnerOptions, branch Branch) {
304
297
defer close ()
305
298
workDir := filepath .Join (opts .branchRepoDir , "mockgcp" )
306
299
307
- log .Printf ("COMMAND: git checkout %s\r \n " , branch .Local )
308
- checkout := exec .Command ("git" , "checkout" , branch .Local )
309
- checkout .Dir = workDir
310
300
var out strings.Builder
311
- checkout .Stdout = & out
312
- if err := checkout .Run (); err != nil {
313
- log .Fatal (err )
314
- }
315
- log .Printf ("BRANCH CHECKOUT: %q\n " , out .String ())
301
+ checkoutBranch (branch , workDir , out )
316
302
317
303
// Check to see if the script file exists
318
304
scriptFile := fmt .Sprintf ("mock%s/testdata/%s/crud/script.yaml" , branch .Group , branch .Resource )
@@ -376,3 +362,169 @@ func captureHttpLog(opts *RunnerOptions, branch Branch) {
376
362
}
377
363
log .Printf ("BRANCH COMMIT: %q\n " , out .String ())
378
364
}
365
+
366
+ const MOCK_SERVICE_GO_GEN string = `mock<SERVICE>/service.go
367
+ // +tool:mockgcp-service
368
+ // http.host: <HTTP_HOST>
369
+ // proto.service: <PROTO_SERVICE>`
370
+
371
+ const MOCK_RESOURCE_GO_GEN string = `mock<SERVICE>/<RESOURCE>.go
372
+ // +tool:mockgcp-support
373
+ // proto.service: <PROTO_SERVICE>
374
+ // proto.message: <PROTO_MESSAGE>`
375
+
376
+ func generateMockGo (opts * RunnerOptions , branch Branch ) {
377
+ close := setLoggingWriter (opts , branch )
378
+ defer close ()
379
+ workDir := filepath .Join (opts .branchRepoDir , "mockgcp" )
380
+
381
+ var out strings.Builder
382
+ checkoutBranch (branch , workDir , out )
383
+
384
+ // Check to see if the http log file already exists
385
+ logFile := fmt .Sprintf ("mock%s/testdata/%s/crud/_http.log" , branch .Group , branch .Resource )
386
+ logFullPath := filepath .Join (workDir , logFile )
387
+ if _ , err := os .Stat (logFullPath ); errors .Is (err , os .ErrNotExist ) {
388
+ log .Printf ("SKIPPING %s, missing %s\r \n " , branch .Name , logFullPath )
389
+ return
390
+ }
391
+
392
+ // Check to see if the script file exists
393
+ serviceGoFile := fmt .Sprintf ("mock%s/service.go" , branch .Group )
394
+ serviceGoFullPath := filepath .Join (workDir , serviceGoFile )
395
+ if _ , err := os .Stat (serviceGoFullPath ); errors .Is (err , os .ErrNotExist ) {
396
+ log .Printf ("SKIPPING %s, %s already exists\r \n " , branch .Name , serviceGoFullPath )
397
+ return
398
+ }
399
+
400
+ tmp := strings .ReplaceAll (MOCK_SERVICE_GO_GEN , "<TICK>" , "`" )
401
+ tmp = strings .ReplaceAll (tmp , "<SERVICE>" , branch .Group )
402
+ tmp = strings .ReplaceAll (tmp , "<HTTP_HOST>" , branch .HostName )
403
+ service_prompt := strings .ReplaceAll (tmp , "<PROTO_SERVICE>" , branch .ProtoSvc )
404
+ log .Printf ("MOCK SERVICE GEN PROMPT %s\r \n " , service_prompt )
405
+
406
+ tmp = strings .ReplaceAll (MOCK_RESOURCE_GO_GEN , "<TICK>" , "`" )
407
+ tmp = strings .ReplaceAll (tmp , "<SERVICE>" , branch .Group )
408
+ tmp = strings .ReplaceAll (tmp , "<RESOURCE>" , strings .ToLower (branch .Resource ))
409
+ tmp = strings .ReplaceAll (tmp , "<PROTO_SERVICE>" , branch .ProtoSvc )
410
+ resource_prompt := strings .ReplaceAll (tmp , "<PROTO_MESSAGE>" , branch .ProtoPath )
411
+ log .Printf ("MOCK RESOURCE GEN PROMPT %s\r \n " , resource_prompt )
412
+
413
+ // Delete then write the service prompt file.
414
+ servicePromptPath := filepath .Join (opts .branchRepoDir , "mockgcp" , "service_prompt.txt" )
415
+ if _ , err := os .Stat (servicePromptPath ); ! errors .Is (err , os .ErrNotExist ) {
416
+ log .Println ("COMMAND: cleaning up old service_prompt.txt" )
417
+ err = os .Remove (servicePromptPath )
418
+ if err != nil {
419
+ log .Printf ("Attempt to clean up service_prompt.txt failed with %v" , err )
420
+ }
421
+ }
422
+ log .Println ("COMMAND: writing new service_prompt.txt" )
423
+ if err := os .WriteFile (servicePromptPath , []byte (service_prompt ), 0644 ); err != nil {
424
+ log .Fatal (err )
425
+ }
426
+
427
+ // Delete then write the resource prompt file.
428
+ resourcePromptPath := filepath .Join (opts .branchRepoDir , "mockgcp" , "resource_prompt.txt" )
429
+ if _ , err := os .Stat (resourcePromptPath ); ! errors .Is (err , os .ErrNotExist ) {
430
+ log .Println ("COMMAND: cleaning up old resource_prompt.txt" )
431
+ err = os .Remove (resourcePromptPath )
432
+ if err != nil {
433
+ log .Printf ("Attempt to clean up resource_prompt.txt failed with %v" , err )
434
+ }
435
+ }
436
+ log .Println ("COMMAND: writing new resource_prompt.txt" )
437
+ if err := os .WriteFile (resourcePromptPath , []byte (resource_prompt ), 0644 ); err != nil {
438
+ log .Fatal (err )
439
+ }
440
+
441
+ // Run the controller builder to generate the service go file.
442
+ serviceFile := filepath .Join (workDir , fmt .Sprintf ("mock%s" , branch .Group ), "service.go" )
443
+ if _ , err := os .Stat (serviceFile ); errors .Is (err , os .ErrNotExist ) {
444
+ start := time .Now ()
445
+ log .Printf ("COMMAND: controllerbuilder prompt --src-dir %s --proto-dir %s/.build/third_party/googleapis/ --input-file=service_prompt.txt" , opts .branchRepoDir , opts .branchRepoDir )
446
+ ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Minute )
447
+ defer cancel ()
448
+ service_go := exec .CommandContext (ctx , "controllerbuilder" , "prompt" ,
449
+ "--src-dir" , opts .branchRepoDir ,
450
+ "--proto-dir" , fmt .Sprintf ("%s/.build/third_party/googleapis/" , opts .branchRepoDir ),
451
+ "--input-file" , "service_prompt.txt" )
452
+ service_go .Dir = workDir
453
+ var serviceOut strings.Builder
454
+ service_go .Stdout = & serviceOut
455
+ if err := service_go .Run (); err != nil {
456
+ log .Printf ("MOCK SERVICE GENERATE error: %q\n " , err )
457
+ // Currently ignoring error and just basing on if the _http.log was generated.
458
+ // log.Fatal(err)
459
+ }
460
+ stop := time .Now ()
461
+ diff := stop .Sub (start )
462
+ if err := os .WriteFile (serviceFile , []byte (serviceOut .String ()), 0755 ); err != nil {
463
+ log .Printf ("WRITE MOCK SERVICE %s error: %q\n " , serviceFile , err )
464
+ }
465
+ log .Printf ("MOCK SERVICE GENERATE (%v): %q\n " , diff , serviceOut .String ())
466
+
467
+ // Check to see if the service go file was created
468
+ if _ , err := os .Stat (serviceFile ); errors .Is (err , os .ErrNotExist ) {
469
+ log .Printf ("SKIPPING %s, %s was not created\r \n " , branch .Name , serviceFile )
470
+ return
471
+ }
472
+ } else {
473
+ log .Printf ("SKIPPING generating service mock go, %s already exists\r \n " , serviceFile )
474
+ }
475
+
476
+ // Run the controller builder to generate the resource go file.
477
+ resourceFile := filepath .Join (workDir , fmt .Sprintf ("mock%s" , branch .Group ), fmt .Sprintf ("%s.go" , strings .ToLower (branch .Resource )))
478
+ if _ , err := os .Stat (resourceFile ); errors .Is (err , os .ErrNotExist ) {
479
+ start := time .Now ()
480
+ log .Printf ("COMMAND: controllerbuilder prompt --src-dir %s --proto-dir %s/.build/third_party/googleapis/ --input-file=resource_prompt.txt" , opts .branchRepoDir , opts .branchRepoDir )
481
+ ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Minute )
482
+ defer cancel ()
483
+ resource_go := exec .CommandContext (ctx , "controllerbuilder" , "prompt" ,
484
+ "--src-dir" , opts .branchRepoDir ,
485
+ "--proto-dir" , fmt .Sprintf ("%s/.build/third_party/googleapis/" , opts .branchRepoDir ),
486
+ "--input-file" , "resource_prompt.txt" )
487
+ resource_go .Dir = workDir
488
+ var resourceOut strings.Builder
489
+ resource_go .Stdout = & resourceOut
490
+ if err := resource_go .Run (); err != nil {
491
+ log .Printf ("MOCK RESOURCE GENERATE error: %q\n " , err )
492
+ // Currently ignoring error and just basing on if the _http.log was generated.
493
+ // log.Fatal(err)
494
+ }
495
+ stop := time .Now ()
496
+ diff := stop .Sub (start )
497
+ if err := os .WriteFile (resourceFile , []byte (resourceOut .String ()), 0755 ); err != nil {
498
+ log .Printf ("WRITE MOCK RESOURCE %s error: %q\n " , resourceFile , err )
499
+ }
500
+ log .Printf ("MOCK RESOURCE GENERATE (%v): %q\n " , diff , resourceOut .String ())
501
+
502
+ // Check to see if the service go file was created
503
+ if _ , err := os .Stat (resourceFile ); errors .Is (err , os .ErrNotExist ) {
504
+ log .Printf ("SKIPPING %s, %s was not created\r \n " , branch .Name , resourceFile )
505
+ return
506
+ }
507
+ } else {
508
+ log .Printf ("SKIPPING generating resource mock go, %s already exists\r \n " , resourceFile )
509
+ }
510
+
511
+ // Add the new files to the current branch.
512
+ log .Printf ("COMMAND: git add %s %s\r \n " , serviceFile , resourceFile )
513
+ gitadd := exec .Command ("git" , "add" , serviceFile , resourceFile )
514
+ gitadd .Dir = workDir
515
+ gitadd .Stdout = & out
516
+ if err := gitadd .Run (); err != nil {
517
+ log .Fatal (err )
518
+ }
519
+ log .Printf ("BRANCH ADD: %q\n " , out .String ())
520
+
521
+ // Commit the change to the current branch.
522
+ log .Printf ("COMMAND: git commit -m \" Adding mock service and resource for %s\" \r \n " , branch .Name )
523
+ gitcommit := exec .Command ("git" , "commit" , "-m" , fmt .Sprintf ("\" Adding mock service and resource for %s\" " , branch .Name ))
524
+ gitcommit .Dir = workDir
525
+ gitcommit .Stdout = & out
526
+ if err := gitcommit .Run (); err != nil {
527
+ log .Fatal (err )
528
+ }
529
+ log .Printf ("BRANCH COMMIT: %q\n " , out .String ())
530
+ }
0 commit comments