| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 2ecd2d1 commit 3623ecb
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -32,8 +32,9 @@ func (c CDKTF) OutputDir() string { | |||
| 32 | 32 | // configured. | |
| 33 | 33 | func (c CDKTF) Synthesize() error { | |
| 34 | 34 | // Forcibly shut down the JSII runtime post-Synth to make sure that we don't | |
| 35 | - // get bizarre side-effects from multiple apps being rendered. | ||
| 36 | - defer jsiiruntime.Close() | ||
| 35 | + // get bizarre side-effects from multiple apps being rendered. We use a panic | ||
| 36 | + // catcher to discard useless panics from the library. | ||
| 37 | + defer (&panics.Catcher{}).Try(jsiiruntime.Close) | ||
| 37 | 38 | ||
| 38 | 39 | // CDKTF is prone to panics for no good reason, so make a best-effort | |
| 39 | 40 | // attempt to capture them. | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -155,6 +155,8 @@ func syncEnvironmentWorkspaces(c *cli.Context, tfc *terraformcloud.Client, servi | |||
| 155 | 155 | type generateTerraformOptions struct { | |
| 156 | 156 | // targetEnv generates the specified env only, otherwise generates all | |
| 157 | 157 | targetEnv string | |
| 158 | + // targetCategory generates the specified category only | ||
| 159 | + targetCategory spec.EnvironmentCategory | ||
| 158 | 160 | // stableGenerate disables updating of any values that are evaluated at | |
| 159 | 161 | // generation time | |
| 160 | 162 | stableGenerate bool | |
@@ -178,8 +180,16 @@ func generateTerraform(service *spec.Spec, opts generateTerraformOptions) error | |||
| 178 | 180 | for _, env := range envs { | |
| 179 | 181 | env := env | |
| 180 | 182 | ||
| 181 | - pending := std.Out.Pending(output.Styledf(output.StylePending, | ||
| 182 | - "[%s] Preparing Terraform for environment %q", serviceID, env.ID)) | ||
| 183 | + if opts.targetCategory != "" && env.Category != opts.targetCategory { | ||
| 184 | + // Quietly skip environments that don't match specified category | ||
| 185 | + std.Out.WriteLine(output.StyleSuggestion.Linef( | ||
| 186 | + "[%s] Skipping non-%q environment %q (category %q)", | ||
| 187 | + serviceID, opts.targetCategory, env.ID, env.Category)) | ||
| 188 | + continue | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + pending := std.Out.Pending(output.StylePending.Linef( | ||
| 192 | + "[%s] Preparing Terraform for %q environment %q", serviceID, env.Category, env.ID)) | ||
| 183 | 193 | renderer := managedservicesplatform.Renderer{ | |
| 184 | 194 | OutputDir: filepath.Join(filepath.Dir(serviceSpecPath), "terraform", env.ID), | |
| 185 | 195 | StableGenerate: opts.stableGenerate, | |
@@ -204,8 +214,8 @@ func generateTerraform(service *spec.Spec, opts generateTerraformOptions) error | |||
| 204 | 214 | return err | |
| 205 | 215 | } | |
| 206 | 216 | ||
| 207 | - pending.Updatef("[%s] Generating Terraform assets in %q for environment %q...", | ||
| 208 | - serviceID, renderer.OutputDir, env.ID) | ||
| 217 | + pending.Updatef("[%s] Generating Terraform assets in %q for %q environment %q...", | ||
| 218 | + serviceID, renderer.OutputDir, env.Category, env.ID) | ||
| 209 | 219 | if err := cdktf.Synthesize(); err != nil { | |
| 210 | 220 | return err | |
| 211 | 221 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -272,10 +272,15 @@ Supports completions on services and environments.`, | |||
| 272 | 272 | UsageText: ` | |
| 273 | 273 | # generate single env for a single service | |
| 274 | 274 | sg msp generate <service> <env> | |
| 275 | + | ||
| 275 | 276 | # generate all envs for a single service | |
| 276 | 277 | sg msp generate -all <service> | |
| 278 | + | ||
| 277 | 279 | # generate all envs across all services | |
| 278 | 280 | sg msp generate -all | |
| 281 | + | ||
| 282 | + # generate all test envs across all services | ||
| 283 | + sg msp generate -all -category=test | ||
| 279 | 284 | `, | |
| 280 | 285 | Before: msprepo.UseManagedServicesRepo, | |
| 281 | 286 | Flags: []cli.Flag{ | |
@@ -284,6 +289,10 @@ sg msp generate -all | |||
| 284 | 289 | Usage: "Generate infrastructure stacks for all services, or all envs for a service if service ID is provided", | |
| 285 | 290 | Value: false, | |
| 286 | 291 | }, | |
| 292 | + &cli.StringFlag{ | ||
| 293 | + Name: "category", | ||
| 294 | + Usage: "Filter generated environments by category (one of 'test', 'internal', 'external') - must be used with '-all'", | ||
| 295 | + }, | ||
| 287 | 296 | &cli.BoolFlag{ | |
| 288 | 297 | Name: "stable", | |
| 289 | 298 | Usage: "Configure updating of any values that are evaluated at generation time", | |
@@ -293,14 +302,24 @@ sg msp generate -all | |||
| 293 | 302 | BashComplete: msprepo.ServicesAndEnvironmentsCompletion(), | |
| 294 | 303 | Action: func(c *cli.Context) error { | |
| 295 | 304 | var ( | |
| 296 | - generateAll = c.Bool("all") | ||
| 297 | - stableGenerate = c.Bool("stable") | ||
| 305 | + generateAll = c.Bool("all") | ||
| 306 | + generateCategory = spec.EnvironmentCategory(c.String("category")) | ||
| 307 | + stableGenerate = c.Bool("stable") | ||
| 298 | 308 | ) | |
| 299 | 309 | ||
| 300 | 310 | if stableGenerate { | |
| 301 | 311 | std.Out.WriteSuggestionf("Using stable generate - tfvars will not be updated.") | |
| 302 | 312 | } | |
| 303 | 313 | ||
| 314 | + if generateCategory != "" { | ||
| 315 | + if !generateAll { | ||
| 316 | + return errors.New("'-category' must be used with '-all'") | ||
| 317 | + } | ||
| 318 | + if err := generateCategory.Validate(); err != nil { | ||
| 319 | + return errors.Wrap(err, "invalid value for '-category'") | ||
| 320 | + } | ||
| 321 | + } | ||
| 322 | + | ||
| 304 | 323 | // Generate a specific service environment if '-all' is not provided | |
| 305 | 324 | if !generateAll { | |
| 306 | 325 | std.Out.WriteNoticef("Generating a specific service environment...") | |
@@ -323,6 +342,7 @@ sg msp generate -all | |||
| 323 | 342 | } | |
| 324 | 343 | return generateTerraform(svc, generateTerraformOptions{ | |
| 325 | 344 | stableGenerate: stableGenerate, | |
| 345 | + targetCategory: generateCategory, | ||
| 326 | 346 | }) | |
| 327 | 347 | } | |
| 328 | 348 | ||
@@ -341,6 +361,7 @@ sg msp generate -all | |||
| 341 | 361 | } | |
| 342 | 362 | if err := generateTerraform(s, generateTerraformOptions{ | |
| 343 | 363 | stableGenerate: stableGenerate, | |
| 364 | + targetCategory: generateCategory, | ||
| 344 | 365 | }); err != nil { | |
| 345 | 366 | return errors.Wrap(err, serviceID) | |
| 346 | 367 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -45,7 +45,7 @@ func Emoji(emoji string, s string) FancyLine { | |||
| 45 | 45 | return Line(emoji, StyleReset, s) | |
| 46 | 46 | } | |
| 47 | 47 | ||
| 48 | - // Emoji creates a new FancyLine with an emoji prefix and style. | ||
| 48 | + // Emoji creates a new FancyLine with an emoji prefix and format string. | ||
| 49 | 49 | func Emojif(emoji string, s string, a ...any) FancyLine { | |
| 50 | 50 | return Linef(emoji, StyleReset, s, a...) | |
| 51 | 51 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,6 +9,14 @@ type Style struct{ code string } | |||
| 9 | 9 | ||
| 10 | 10 | func (s Style) String() string { return s.code } | |
| 11 | 11 | ||
| 12 | + // Line returns a FancyLine using this style as an alias for using output.Styledf(...) | ||
| 13 | + func (s Style) Line(format string) FancyLine { return Styled(s, format) } | ||
| 14 | + | ||
| 15 | + // Linef returns a FancyLine using this style as an alias for using output.Styledf(...) | ||
| 16 | + func (s Style) Linef(format string, args ...interface{}) FancyLine { | ||
| 17 | + return Styledf(s, format, args...) | ||
| 18 | + } | ||
| 19 | + | ||
| 12 | 20 | func CombineStyles(styles ...Style) Style { | |
| 13 | 21 | sb := strings.Builder{} | |
| 14 | 22 | for _, s := range styles { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments