-
Notifications
You must be signed in to change notification settings - Fork 8
/
models.go
122 lines (109 loc) · 2.43 KB
/
models.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package platformifier
import (
"strings"
)
var (
databases = []string{
"mariadb",
"mysql",
"oracle-mysql",
"postgresql",
}
caches = []string{
"redis",
"redis-persistent",
"memcached",
}
)
const (
Generic Stack = iota
Django
Laravel
NextJS
Strapi
Flask
Express
)
type Stack int
func (s Stack) Name() string {
switch s {
case Generic:
return "generic"
case Django:
return "django"
case Laravel:
return "laravel"
case NextJS:
return "nextjs"
case Strapi:
return "strapi"
case Flask:
return "flask"
case Express:
return "express"
default:
return ""
}
}
// UserInput contains the configuration from user input.
type UserInput struct {
Stack Stack
Root string
ApplicationRoot string
Name string
Type string
Runtime string
Environment map[string]string
BuildSteps []string
WebCommand string
SocketFamily string
DeployCommand []string
DependencyManagers []string
Locations map[string]map[string]interface{}
Dependencies map[string]map[string]string
BuildFlavor string
Disk string
Mounts map[string]map[string]string
Services []Service
Relationships map[string]string
WorkingDirectory string
HasGit bool
}
// Service contains the configuration for a service needed by the application.
type Service struct {
Name string
Type string
TypeVersions []string
Disk string
DiskSizes []string
}
// Database returns the first service that is a database.
func (ui *UserInput) Database() string {
for _, service := range ui.Services {
for _, db := range databases {
if strings.Contains(service.Type, db) {
return service.Name
}
}
}
return ""
}
// DatabaseUpper returns the uppercase slug for the first service that is a database.
func (ui *UserInput) DatabaseUpper() string {
return strings.ToUpper(strings.ReplaceAll(ui.Database(), "-", "_"))
}
// Cache returns the first service that is a cache.
func (ui *UserInput) Cache() string {
for _, service := range ui.Services {
for _, cache := range caches {
if strings.Contains(service.Type, cache) {
return service.Name
}
}
}
return ""
}
// CacheUpper returns the uppercase slug for the first service that is a cache.
func (ui *UserInput) CacheUpper() string {
return strings.ToUpper(strings.ReplaceAll(ui.Cache(), "-", "_"))
}