Skip to content

Commit 938d048

Browse files
committed
add opt-in analytics, refactoring, update gateway middleware, code cleanup
1 parent 973aa36 commit 938d048

File tree

8 files changed

+275
-50
lines changed

8 files changed

+275
-50
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ The `settings` section of the configuration file is used to configure the applic
6565

6666
| field | description | required? |
6767
|-----------|------------------------------------|-----------|
68+
| `anonymous-stats` | `boolean` value specifying whether to send anonymous usage statistics, defaults to `false` | no |
6869
| `defaults.tasks.path` | default path for tasks | no |
6970
| `defaults.tasks.platforms` | default platforms for tasks | no |
7071
| `defaults.tasks.silent` | default silent setting for tasks | no |
@@ -81,6 +82,7 @@ name: my stack
8182
version: 1.0.0
8283

8384
settings:
85+
anonymous-stats: true # opt-in to sending anonymous usage statistics, default is false.
8486
dotenv: ['.env', '.env.local'] # loads both `.env` and `.env.local` files, defaults to `.env`.
8587
exit-on-checksum-mismatch: false # do not exit if a checksum mismatch occurs, defaults to true.
8688
checksum-verification: false # do not verify checksums, defaults to true.
@@ -135,6 +137,19 @@ env:
135137
- MY_ENV_VAR_TWO=1234test
136138
```
137139

140+
#### Integration: dotenv-vault
141+
142+
`StackUp` supports loading encrypted values from `.env.vault` files (see the [dotenv-vault website](https://vault.dotenv.org)).
143+
144+
To load a `.env.vault` file, add an entry to the `env` section named `dotenv://vault`. This item will cause the `.env.vault` file to
145+
be loaded into the environment, if it exists. If it does not exist, no action is taken.
146+
147+
```yaml
148+
env:
149+
- MY_ENV_VAR_ONE=test1234
150+
- dotenv://vault # loads .env.vault, if it exists
151+
```
152+
138153
### Configuration: Includes
139154

140155
The `includes` section of the configuration file is used to specify a list of filenames, file urls, or s3 urls that should be merged with the configuration. This is useful for splitting up a large configuration file into smaller, more manageable files or reusing commonly-used tasks, init scripts, or preconditions. Startup, shutdown, servers, and scheduled tasks are not merged from the included files.

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.20
44

55
require (
66
github.com/blang/semver v3.5.1+incompatible
7+
github.com/dotenv-org/godotenvvault v0.6.0
78
github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203
89
github.com/joho/godotenv v1.5.1
910
github.com/logrusorgru/aurora v2.0.3+incompatible
@@ -41,11 +42,14 @@ require (
4142

4243
require (
4344
github.com/AlecAivazis/survey/v2 v2.3.7
45+
github.com/denisbrodbeck/machineid v1.0.1
4446
github.com/emirpasic/gods v1.18.1
4547
github.com/golang-module/carbon/v2 v2.2.3
4648
github.com/kr/pretty v0.3.1 // indirect
4749
github.com/minio/minio-go v6.0.14+incompatible
4850
github.com/minio/minio-go/v7 v7.0.61
51+
github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69
52+
github.com/rs/zerolog v1.30.0
4953
github.com/ryanuber/go-glob v1.0.0
5054
go.etcd.io/bbolt v1.3.7
5155
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect

go.sum

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ=
22
github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo=
3+
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
34
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
45
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
56
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
67
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
8+
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
9+
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
710
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
811
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
912
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
1013
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
1114
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1215
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1316
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
17+
github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ=
18+
github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
19+
github.com/dotenv-org/godotenvvault v0.6.0 h1:e6rUPELZaPmf6SgxxdB3nACG9VQAE8+omrSSZm0QUgk=
20+
github.com/dotenv-org/godotenvvault v0.6.0/go.mod h1:q/635WfmO04uUBVwrDWchRPOvPWaplWC6Udm+illcS4=
1421
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
1522
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
1623
github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203 h1:XBBHcIb256gUJtLmY22n99HaZTz+r2Z51xUPi01m3wg=
1724
github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203/go.mod h1:E1jcSv8FaEny+OP/5k9UxZVw9YFWGj7eI4KR/iOBqCg=
1825
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
1926
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
27+
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
2028
github.com/golang-module/carbon/v2 v2.2.3 h1:WvGIc5+qzq9drNzH+Gnjh1TZ0JgDY/IA+m2Dvk7Qm4Q=
2129
github.com/golang-module/carbon/v2 v2.2.3/go.mod h1:LdzRApgmDT/wt0eNT8MEJbHfJdSqCtT46uZhfF30dqI=
2230
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -45,9 +53,11 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
4553
github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8=
4654
github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
4755
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
56+
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
4857
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
4958
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
5059
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
60+
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
5161
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
5262
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
5363
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
@@ -68,8 +78,11 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
6878
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
6979
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
7080
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
81+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
7182
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
7283
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
84+
github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69 h1:01dHVodha5BzrMtVmcpPeA4VYbZEsTXQ6m4123zQXJk=
85+
github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69/go.mod h1:migYMxlAqcnQy+3eN8mcL0b2tpKy6R+8Zc0lxwk4dKM=
7386
github.com/robertkrimen/otto v0.2.1 h1:FVP0PJ0AHIjC+N4pKCG9yCDz6LHNPCwi/GKID5pGGF0=
7487
github.com/robertkrimen/otto v0.2.1/go.mod h1:UPwtJ1Xu7JrLcZjNWN8orJaM5n5YEtqL//farB5FlRY=
7588
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
@@ -78,8 +91,12 @@ github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZV
7891
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
7992
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
8093
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
94+
github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
95+
github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
96+
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
8197
github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
8298
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
99+
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
83100
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
84101
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
85102
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -93,6 +110,7 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
93110
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
94111
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
95112
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
113+
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
96114
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
97115
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
98116
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
@@ -112,6 +130,8 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
112130
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
113131
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
114132
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
133+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
134+
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
115135
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
116136
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
117137
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -141,6 +161,7 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
141161
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
142162
gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI=
143163
gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78=
164+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
144165
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
145166
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
146167
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

lib/app/app.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/robfig/cron/v3"
1717
"github.com/stackup-app/stackup/lib/gateway"
1818
"github.com/stackup-app/stackup/lib/support"
19+
"github.com/stackup-app/stackup/lib/telemetry"
1920
"github.com/stackup-app/stackup/lib/updater"
2021
"github.com/stackup-app/stackup/lib/utils"
2122
"github.com/stackup-app/stackup/lib/version"
@@ -44,6 +45,7 @@ type Application struct {
4445
KillCommandCallback CommandCallback
4546
ConfigFilename string
4647
Gateway *gateway.Gateway
48+
Analytics *telemetry.Telemetry
4749
}
4850

4951
func (a *Application) loadWorkflowFile(filename string) *StackupWorkflow {
@@ -336,9 +338,14 @@ func (a *Application) Run() {
336338
a.init()
337339
a.handleFlagOptions()
338340

341+
a.Analytics = telemetry.New(true, a.Gateway)
339342
a.Workflow.Initialize()
340343
a.Gateway.SetAllowedDomains(a.Workflow.Settings.Domains.Allowed)
341344

345+
if *a.Workflow.Settings.AnonymousStatistics {
346+
a.Analytics.EventOnly("app.start")
347+
}
348+
342349
if len(a.Workflow.Settings.DotEnvFiles) > 0 {
343350
godotenv.Load(a.Workflow.Settings.DotEnvFiles...)
344351
}

lib/app/workflow.go

Lines changed: 85 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package app
22

33
import (
44
"fmt"
5+
"net/url"
56
"os"
67
"path"
78
"regexp"
89
"strings"
910
"sync"
1011

12+
"github.com/dotenv-org/godotenvvault"
1113
lla "github.com/emirpasic/gods/lists/arraylist"
1214
lls "github.com/emirpasic/gods/stacks/linkedliststack"
1315
"github.com/golang-module/carbon/v2"
@@ -65,6 +67,7 @@ type WorkflowSettings struct {
6567
DotEnvFiles []string `yaml:"dotenv"`
6668
Cache *WorkflowSettingsCache `yaml:"cache"`
6769
Domains *WorkflowSettingsDomains `yaml:"domains"`
70+
AnonymousStatistics *bool `yaml:"anonymous-stats"`
6871
}
6972

7073
type WorkflowSettingsDomains struct {
@@ -346,6 +349,28 @@ func (workflow *StackupWorkflow) reversePreconditions(items []*Precondition) []*
346349
return items
347350
}
348351

352+
func (workflow *StackupWorkflow) TryLoadDotEnvVaultFile(value string) bool {
353+
if !utils.IsFile(utils.WorkingDir(".env.vault")) {
354+
return false
355+
}
356+
357+
parsedUrl, err := url.Parse(value)
358+
if err != nil || parsedUrl.Scheme != "dotenv" || parsedUrl.Hostname() != "vault" {
359+
return false
360+
}
361+
362+
vars, err := godotenvvault.Read()
363+
if err != nil {
364+
return false
365+
}
366+
367+
for key, value := range vars {
368+
os.Setenv(key, value)
369+
}
370+
371+
return true
372+
}
373+
349374
func (workflow *StackupWorkflow) Initialize() {
350375
workflow.Cache = cache.CreateCache("")
351376

@@ -354,38 +379,35 @@ func (workflow *StackupWorkflow) Initialize() {
354379
task.Uuid = utils.GenerateTaskUuid()
355380
}
356381

357-
if len(workflow.Env) > 0 {
358-
for _, def := range workflow.Env {
359-
key, value, _ := strings.Cut(def, "=")
360-
os.Setenv(key, value)
361-
}
382+
workflow.processEnvSection()
383+
workflow.createMissingSettingsSection()
384+
workflow.configureDefaultSettings()
385+
workflow.ProcessIncludes()
386+
387+
if len(workflow.Init) > 0 {
388+
App.JsEngine.Evaluate(workflow.Init)
362389
}
363390

364-
// no default settings were provided, so create sensible defaults
365-
if workflow.Settings == nil {
366-
verifyChecksums := true
367-
workflow.Settings = &WorkflowSettings{
368-
DotEnvFiles: []string{".env"},
369-
Cache: &WorkflowSettingsCache{TtlMinutes: 5},
370-
ChecksumVerification: &verifyChecksums,
371-
Domains: &WorkflowSettingsDomains{
372-
Allowed: []string{"raw.githubusercontent.com", "api.github.com"},
373-
},
374-
Defaults: &WorkflowSettingsDefaults{
375-
Tasks: &WorkflowSettingsDefaultsTasks{
376-
Silent: false,
377-
Path: App.JsEngine.MakeStringEvaluatable("getCwd()"),
378-
Platforms: []string{"windows", "linux", "darwin"},
379-
},
380-
},
381-
}
391+
for _, pc := range workflow.Preconditions {
392+
pc.Initialize()
382393
}
383394

395+
for _, task := range workflow.Tasks {
396+
task.Initialize()
397+
}
398+
}
399+
400+
func (workflow *StackupWorkflow) configureDefaultSettings() {
384401
if workflow.Settings.ChecksumVerification == nil {
385402
verifyChecksums := true
386403
workflow.Settings.ChecksumVerification = &verifyChecksums
387404
}
388405

406+
if workflow.Settings.AnonymousStatistics == nil {
407+
enableStats := false
408+
workflow.Settings.AnonymousStatistics = &enableStats
409+
}
410+
389411
if workflow.Settings.Domains == nil {
390412
workflow.Settings.Domains = &WorkflowSettingsDomains{Allowed: []string{}}
391413
}
@@ -418,37 +440,45 @@ func (workflow *StackupWorkflow) Initialize() {
418440
task.Platforms = workflow.Settings.Defaults.Tasks.Platforms
419441
}
420442
}
443+
}
421444

422-
// // ensure that the allowed domains are in the correct format, i.e. without a protocol or port
423-
// tempDomains := []string{}
424-
// for _, domain := range workflow.Settings.Domains.Allowed {
425-
// if strings.Contains(domain, "://") {
426-
// parsedUrl, _ := url.Parse(domain)
427-
// tempDomains = append(tempDomains, parsedUrl.Host)
428-
// } else {
429-
// tempDomains = append(tempDomains, domain)
430-
// }
431-
// }
432-
// copy(workflow.Settings.Domains.Allowed, tempDomains)
433-
// workflow.Settings.Domains.Allowed = tempDomains
434-
435-
// initialize the includes
436-
for _, inc := range workflow.Includes {
437-
inc.Initialize()
438-
}
439-
440-
workflow.ProcessIncludes()
441-
442-
if len(workflow.Init) > 0 {
443-
App.JsEngine.Evaluate(workflow.Init)
445+
func (workflow *StackupWorkflow) createMissingSettingsSection() {
446+
// no default settings were provided, so create sensible defaults
447+
if workflow.Settings == nil {
448+
verifyChecksums := true
449+
enableStats := false
450+
workflow.Settings = &WorkflowSettings{
451+
AnonymousStatistics: &enableStats,
452+
DotEnvFiles: []string{".env"},
453+
Cache: &WorkflowSettingsCache{TtlMinutes: 5},
454+
ChecksumVerification: &verifyChecksums,
455+
Domains: &WorkflowSettingsDomains{
456+
Allowed: []string{"raw.githubusercontent.com", "api.github.com"},
457+
},
458+
Defaults: &WorkflowSettingsDefaults{
459+
Tasks: &WorkflowSettingsDefaultsTasks{
460+
Silent: false,
461+
Path: App.JsEngine.MakeStringEvaluatable("getCwd()"),
462+
Platforms: []string{"windows", "linux", "darwin"},
463+
},
464+
},
465+
}
444466
}
467+
}
445468

446-
for _, pc := range workflow.Preconditions {
447-
pc.Initialize()
448-
}
469+
func (workflow *StackupWorkflow) processEnvSection() {
470+
if len(workflow.Env) > 0 {
471+
for _, def := range workflow.Env {
472+
if strings.Contains(def, "://") {
473+
workflow.TryLoadDotEnvVaultFile(def)
474+
continue
475+
}
449476

450-
for _, task := range workflow.Tasks {
451-
task.Initialize()
477+
if strings.Contains(def, "=") {
478+
key, value, _ := strings.Cut(def, "=")
479+
os.Setenv(key, value)
480+
}
481+
}
452482
}
453483
}
454484

@@ -470,6 +500,11 @@ func (workflow *StackupWorkflow) RemoveTasks(uuidsToRemove []string) {
470500
}
471501

472502
func (workflow *StackupWorkflow) ProcessIncludes() {
503+
// initialize the includes
504+
for _, inc := range workflow.Includes {
505+
inc.Initialize()
506+
}
507+
473508
var wg sync.WaitGroup
474509
for _, include := range workflow.Includes {
475510
wg.Add(1)

lib/gateway/middleware.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ func verifyFileTypeHandler(g *Gateway, link string) error {
4747
baseName := path.Base(parsedUrl.Path)
4848
fileExt := path.Ext(baseName)
4949

50+
if fileExt == "" {
51+
return nil
52+
}
53+
5054
allowedFileNames := []string{"checksums.txt", "checksums.sha256.txt", "checksums.sha512.txt", "sha256sum", "sha512sum"}
5155
allowedExts := []string{".yaml", ".yml", ".txt", ".sha256", ".sha512"}
5256

0 commit comments

Comments
 (0)