Skip to content

Commit 51d5970

Browse files
committed
partial rcds config reference
Signed-off-by: Robert Detjens <[email protected]>
1 parent 62c469e commit 51d5970

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

docs/reference/rcds-yaml-reference.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,141 @@ are available, where to deploy them to, and what credentials to use for building
99
and deploying them.
1010

1111
This will always be at `/rcds.yaml` in the challenges repository.
12+
13+
Available fields:
14+
15+
[[toc]]
16+
17+
## `flag_regex`
18+
19+
Regex for the flag format. This is used to validate challenges' flags, and in
20+
the future will be sent to the scoreboard to help validate submissions.
21+
22+
```yaml
23+
flag_regex: 'example{.+}'
24+
```
25+
26+
## `registry`
27+
28+
Challenge container registry config. This is where the container images will be
29+
stored. This registry should be kept private in order to prevent leaks of
30+
challenge secrets or hidden challenges.
31+
32+
```yaml
33+
registry:
34+
domain: registry.io/myctf
35+
tag_format: "{{domain}}/{{challenge}}-{{container}}:{{profile}}"
36+
build:
37+
user: pushuser
38+
pass: fakepassword
39+
cluster:
40+
user: pulluser
41+
pass: alsofake
42+
43+
```
44+
45+
### `domain`
46+
47+
This is the shared portion of the container image spec for the registry that
48+
will be used in the `tag_format` template. This should include the hostname and
49+
any persistent components.
50+
51+
Examples: `docker.io/yourorg`, `ghcr.io/examplesec`
52+
53+
### `tag_format`
54+
55+
Specifies the container image and tag that challenge containers will be built
56+
as. This is used as a template with the challenge information to produce the
57+
final container image and tag for each challenge. Almost all registries work
58+
with the default format string.
59+
60+
Default, works for most registries (Docker, GHCR, DigitalOcean, self-hosted, ...):
61+
- `"{{domain}}/{{challenge}}-{{container}}:{{profile}}"`
62+
63+
For registries like AWS ECR that require all image registries to be precreated
64+
ahead-of-time, this keeps all the challenge info in the tag so only one ECR
65+
registry needs to be created:
66+
- `"{{domain}}:{{challenge}}-{{container}}-{{profile}}"`
67+
68+
Format: Jinja-style double-braces around field name (`{{ field_name }}`)
69+
70+
The required and only fields are:
71+
72+
- `domain`: the domain config field above; the repository base URL
73+
- `challenge`: challenge name, slugified
74+
- `container`: name of the specific pod in the challenge this image is for
75+
- `profile`: the current deployment profile, for isolating images between environments
76+
77+
If setting a custom format, you must use all four of these fields in order for challenge images to not overwrite each other.
78+
79+
Example:
80+
81+
For challenge `pwn/notsh`, chal pod container `main`, profile `prod`, and domain `registry.io/myctf`:
82+
83+
```yaml
84+
registry:
85+
domain: registry.io/myctf
86+
# default tag_format
87+
# --> registry.io/myctf/pwn-notsh-main:prod
88+
```
89+
90+
```yaml
91+
registry:
92+
domain: registry.gitlab.com/ourteam/challenges-2025
93+
tag_format: "{{domain}}/{{challenge}}/{{container}}:{{profile}}"
94+
# --> registry.gitlab.com/ourteam/challenges-2025/pwn-notsh/main:prod
95+
```
96+
97+
### `build`
98+
99+
Registry credentials that will be used locally to push up challenge container images. This must have push permissions.
100+
101+
Format: `{ user: "registry-username", pass: "registry-password" }`
102+
103+
```yaml
104+
registry:
105+
build:
106+
user: fakeuser
107+
pass: notrealpass
108+
```
109+
110+
### `cluster`
111+
112+
Registry credentials that will be used in the Kubernetes cluster to pull the challenge container images. This must have pull permissions, but does not need push.
113+
114+
Format: `{ user: "registry-username", pass: "registry-password" }`
115+
116+
```yaml
117+
registry:
118+
cluster:
119+
user: alsofake
120+
pass: stillnotreal
121+
```
122+
123+
## `defaults`
124+
125+
### `difficulty`
126+
127+
### `resources`
128+
129+
130+
## `points`
131+
132+
133+
## `deploy`
134+
135+
136+
## `profiles`
137+
138+
### `frontend_url`
139+
### `frontend_token`
140+
### `challenges_domain`
141+
### `kubeconfig`
142+
### `kubecontext`
143+
### `s3`
144+
#### `bucket_name`
145+
#### `endpoint`
146+
#### `region`
147+
#### `access_key`
148+
#### `secret_key`
149+
### `dns`

0 commit comments

Comments
 (0)