Skip to content

Commit 342bcc4

Browse files
committed
[usage] Configure Stripe Price IDs through installer
1 parent 6b24756 commit 342bcc4

File tree

6 files changed

+76
-11
lines changed

6 files changed

+76
-11
lines changed

Diff for: .werft/jobs/build/installer/installer.ts

+6
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,12 @@ EOF`);
277277
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.usage.defaultSpendingLimit.minForUsersOnStripe 1000`, { slice: slice })
278278
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.usage.creditsPerMinuteByWorkspaceClass['default'] 0.1666666667`, { slice: slice })
279279
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.usage.creditsPerMinuteByWorkspaceClass['gitpodio-internal-xl'] 0.3333333333`, { slice: slice })
280+
281+
// Configure Price IDs
282+
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.stripe.individualUsagePriceIds['EUR'] price_1LmYVxGadRXm50o3AiLq0Qmo`, { slice: slice })
283+
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.stripe.individualUsagePriceIds['USD'] price_1LmYWRGadRXm50o3Ym8PLqnG`, { slice: slice })
284+
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.stripe.teamUsagePriceIds['EUR'] price_1LiId7GadRXm50o3OayAS2y4`, { slice: slice })
285+
exec(`yq w -i ${this.options.installerConfigPath} experimental.webapp.stripe.teamUsagePriceIds['USD'] price_1LiIdbGadRXm50o3ylg5S44r`, { slice: slice })
280286
}
281287

282288
private configureConfigCat(slice: string) {

Diff for: components/usage/pkg/server/server.go

+13
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ type Config struct {
3838
Server *baseserver.Configuration `json:"server,omitempty"`
3939

4040
DefaultSpendingLimit db.DefaultSpendingLimit `json:"defaultSpendingLimit"`
41+
42+
// StripePrices configure which Stripe Price IDs should be used
43+
StripePrices StripePrices `json:"stripePrices"`
44+
}
45+
46+
type PriceConfig struct {
47+
EUR string `json:"eur"`
48+
USD string `json:"usd"`
49+
}
50+
51+
type StripePrices struct {
52+
IndividualUsagePriceIDs PriceConfig `json:"individualUsagePriceIds"`
53+
TeamUsagePriceIDs PriceConfig `json:"teamUsagePriceIds"`
4154
}
4255

4356
func Start(cfg Config, version string) error {

Diff for: install/installer/pkg/components/usage/configmap.go

+22-7
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,31 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
3434
MinForUsersOnStripe: 0,
3535
},
3636
}
37-
expConfig := getExperimentalConfig(ctx)
3837

39-
if expConfig != nil {
40-
if expConfig.Schedule != "" {
41-
cfg.ControllerSchedule = expConfig.Schedule
38+
expWebAppConfig := getExperimentalWebAppConfig(ctx)
39+
if expWebAppConfig != nil && expWebAppConfig.Stripe != nil {
40+
cfg.StripePrices = server.StripePrices{
41+
IndividualUsagePriceIDs: server.PriceConfig{
42+
EUR: expWebAppConfig.Stripe.IndividualUsagePriceIDs.EUR,
43+
USD: expWebAppConfig.Stripe.IndividualUsagePriceIDs.USD,
44+
},
45+
TeamUsagePriceIDs: server.PriceConfig{
46+
EUR: expWebAppConfig.Stripe.TeamUsagePriceIDs.EUR,
47+
USD: expWebAppConfig.Stripe.TeamUsagePriceIDs.USD,
48+
},
49+
}
50+
}
51+
52+
expUsageConfig := getExperimentalUsageConfig(ctx)
53+
54+
if expUsageConfig != nil {
55+
if expUsageConfig.Schedule != "" {
56+
cfg.ControllerSchedule = expUsageConfig.Schedule
4257
}
43-
if expConfig.DefaultSpendingLimit != nil {
44-
cfg.DefaultSpendingLimit = *expConfig.DefaultSpendingLimit
58+
if expUsageConfig.DefaultSpendingLimit != nil {
59+
cfg.DefaultSpendingLimit = *expUsageConfig.DefaultSpendingLimit
4560
}
46-
cfg.CreditsPerMinuteByWorkspaceClass = expConfig.CreditsPerMinuteByWorkspaceClass
61+
cfg.CreditsPerMinuteByWorkspaceClass = expUsageConfig.CreditsPerMinuteByWorkspaceClass
4762
}
4863

4964
_ = ctx.WithExperimental(func(ucfg *experimental.Config) error {

Diff for: install/installer/pkg/components/usage/configmap_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ func TestConfigMap_ContainsSchedule(t *testing.T) {
2929
"forTeams": 1000000000,
3030
"minForUsersOnStripe": 0
3131
},
32+
"stripePrices": {
33+
"individualUsagePriceIds": {
34+
"eur": "",
35+
"usd": ""
36+
},
37+
"teamUsagePriceIds": {
38+
"eur": "",
39+
"usd": ""
40+
}
41+
},
3242
"server": {
3343
"services": {
3444
"grpc": {

Diff for: install/installer/pkg/components/usage/objects.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
)
1212

1313
func Objects(ctx *common.RenderContext) ([]runtime.Object, error) {
14-
cfg := getExperimentalConfig(ctx)
14+
cfg := getExperimentalUsageConfig(ctx)
1515
if cfg == nil {
1616
return nil, nil
1717
}
@@ -27,17 +27,27 @@ func Objects(ctx *common.RenderContext) ([]runtime.Object, error) {
2727
)(ctx)
2828
}
2929

30-
func getExperimentalConfig(ctx *common.RenderContext) *experimental.UsageConfig {
30+
func getExperimentalWebAppConfig(ctx *common.RenderContext) *experimental.WebAppConfig {
3131
var experimentalCfg *experimental.Config
3232

3333
_ = ctx.WithExperimental(func(ucfg *experimental.Config) error {
3434
experimentalCfg = ucfg
3535
return nil
3636
})
3737

38-
if experimentalCfg == nil || experimentalCfg.WebApp == nil || experimentalCfg.WebApp.Usage == nil {
38+
if experimentalCfg == nil || experimentalCfg.WebApp == nil {
3939
return nil
4040
}
4141

42-
return experimentalCfg.WebApp.Usage
42+
return experimentalCfg.WebApp
43+
}
44+
45+
func getExperimentalUsageConfig(ctx *common.RenderContext) *experimental.UsageConfig {
46+
experimentalWebAppCfg := getExperimentalWebAppConfig(ctx)
47+
if experimentalWebAppCfg == nil || experimentalWebAppCfg.Usage == nil {
48+
49+
return nil
50+
}
51+
52+
return experimentalWebAppCfg.Usage
4353
}

Diff for: install/installer/pkg/config/v1/experimental/experimental.go

+11
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,16 @@ type WorkspaceTemplates struct {
167167
Regular *corev1.Pod `json:"regular"`
168168
}
169169

170+
type StripePriceIDs struct {
171+
EUR string `json:"eur"`
172+
USD string `json:"usd"`
173+
}
174+
175+
type StripeConfig struct {
176+
IndividualUsagePriceIDs StripePriceIDs `json:"individualUsagePriceIds"`
177+
TeamUsagePriceIDs StripePriceIDs `json:"teamUsagePriceIds"`
178+
}
179+
170180
type WebAppConfig struct {
171181
PublicAPI *PublicAPIConfig `json:"publicApi,omitempty"`
172182
Server *ServerConfig `json:"server,omitempty"`
@@ -178,6 +188,7 @@ type WebAppConfig struct {
178188
Usage *UsageConfig `json:"usage,omitempty"`
179189
ConfigcatKey string `json:"configcatKey"`
180190
WorkspaceClasses []WebAppWorkspaceClass `json:"workspaceClasses"`
191+
Stripe *StripeConfig `json:"stripe,omitempty"`
181192
}
182193

183194
type WorkspaceDefaults struct {

0 commit comments

Comments
 (0)