Skip to content

Commit 5c17f8e

Browse files
committed
load bot config using environment variables
1 parent e9e762d commit 5c17f8e

File tree

4 files changed

+73
-1
lines changed

4 files changed

+73
-1
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ config:
4848
- `provider` (optional) - which client to use for git connection - the bot tries to figure out which client to use automatically (currently only `github` is supported but others are on the way)
4949
- `secret` (optional) - webhook secret to be used for content validation (recommended)
5050

51+
### Environment Variables
52+
53+
You can set the values for `token` and `secret` via environment variables:
54+
`RIVI_CONFIG_TOKEN` and `RIVI_CONFIG_SECRET` respectively.
55+
56+
It is common to configure the bot by injecting environment variables via CI server.
57+
5158
## Roles Section
5259

5360
List of roles for selecting (login) users for assignment.

bot/config.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ type clientConfig struct {
1919
}
2020

2121
func (c *clientConfig) GetOAuthToken() string {
22+
c.internal.SetEnvPrefix("rivi_config")
23+
c.internal.BindEnv("token")
2224
return c.internal.GetString("token")
2325
}
2426

2527
func (c *clientConfig) GetSecret() string {
28+
c.internal.SetEnvPrefix("rivi_config")
29+
c.internal.BindEnv("secret")
2630
return c.internal.GetString("secret")
2731
}
2832

@@ -80,7 +84,11 @@ func (c *config) GetRules() []Rule {
8084
}
8185

8286
func (c *config) readConfigSection() error {
83-
c.clientConfig = &clientConfig{c.internal["config"]}
87+
internal := c.internal["config"]
88+
if internal == nil {
89+
internal = viper.New()
90+
}
91+
c.clientConfig = &clientConfig{internal}
8492
return nil
8593
}
8694

bot/config_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package bot
22

33
import (
44
"github.com/stretchr/testify/assert"
5+
"os"
56
. "testing"
67
)
78

@@ -59,3 +60,25 @@ func TestReadConfig(t *T) {
5960
assertRoles(t, c)
6061
assertRules(t, c)
6162
}
63+
64+
func TestClientConfigFromEnv(t *T) {
65+
os.Setenv("RIVI_CONFIG_TOKEN", "token-from-env")
66+
os.Setenv("RIVI_CONFIG_SECRET", "secret-from-env")
67+
c, err := newConfiguration("config_test.yml")
68+
if err != nil {
69+
t.Fatalf("Got error during config read. %s", err)
70+
}
71+
assert.Equal(t, "token-from-env", c.GetClientConfig().GetOAuthToken(), "token from env")
72+
assert.Equal(t, "secret-from-env", c.GetClientConfig().GetSecret(), "secret from env")
73+
}
74+
75+
func TestEmptyConfigTest(t *T) {
76+
os.Setenv("RIVI_CONFIG_TOKEN", "token-from-env")
77+
os.Setenv("RIVI_CONFIG_SECRET", "secret-from-env")
78+
c, err := newConfiguration("empty_config_test.yml")
79+
if err != nil {
80+
t.Fatalf("Got error during config read. %s", err)
81+
}
82+
assert.Equal(t, "token-from-env", c.GetClientConfig().GetOAuthToken(), "token from env")
83+
assert.Equal(t, "secret-from-env", c.GetClientConfig().GetSecret(), "secret from env")
84+
}

bot/empty_config_test.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# test
2+
3+
roles:
4+
admins:
5+
- user1
6+
- user2
7+
reviewers:
8+
- user1
9+
- user3
10+
testers:
11+
- user2
12+
13+
rules:
14+
rule1:
15+
condition:
16+
order: 5
17+
if-labeled:
18+
- label1
19+
rule2:
20+
condition:
21+
order: 2
22+
skip-if-labeled:
23+
- pending-approval
24+
rule3:
25+
condition:
26+
order: 1
27+
filter:
28+
extensions:
29+
- ".go"
30+
rule4:
31+
condition:
32+
filter:
33+
patterns:
34+
- ".*/docs/.*"

0 commit comments

Comments
 (0)