refactor: configs dir

This commit is contained in:
Anton
2023-12-04 23:57:03 +05:00
parent ad79565a93
commit 07b523cd4d
9 changed files with 19 additions and 17 deletions

View File

@@ -34,8 +34,7 @@ jobs:
name: codapi
path: |
build/codapi
configs/
images/
*.json
codapi.service
Makefile
retention-days: 7

View File

@@ -11,7 +11,7 @@ builds:
archives:
- files:
- "*.json"
- configs/*
- images/*
- codapi.service
- LICENSE

View File

@@ -42,7 +42,7 @@ func main() {
port := flag.Int("port", 1313, "server port")
flag.Parse()
cfg, err := config.Read("config.json", "boxes.json", "commands.json")
cfg, err := config.Read("configs")
if err != nil {
logx.Log("missing config file")
os.Exit(1)

View File

@@ -45,7 +45,7 @@ Build the image:
docker build --file images/python/Dockerfile --tag codapi/python:latest images/python/
```
And register the image as a Codapi _box_ in `boxes.json`:
And register the image as a Codapi _box_ in `configs/boxes.json`:
```json
{
@@ -56,7 +56,7 @@ And register the image as a Codapi _box_ in `boxes.json`:
}
```
Finally, let's configure what happens when the client executes the `run` command in the `python` sandbox. To do this, we edit `commands.json`:
Finally, let's configure what happens when the client executes the `run` command in the `python` sandbox. To do this, we edit `configs/commands.json`:
```json
{
@@ -80,7 +80,7 @@ This is essentially what it says:
> When the client executes the `run` command in the `python` sandbox, save their code to the `main.py` file, then run it in the `python` box (Docker container) using the `python main.py` shell command.
What if we want to add another command (say, `test`) to the same sandbox? Let's edit `commands.json` again:
What if we want to add another command (say, `test`) to the same sandbox? Let's edit `configs/commands.json` again:
```json
{
@@ -104,7 +104,7 @@ What if we want to add another command (say, `test`) to the same sandbox? Let's
}
```
Besides configuring a different shell command, here we increased the maximum output size to 8Kb, as tests tend to be quite chatty (you can see the default value in `config.json`).
Besides configuring a different shell command, here we increased the maximum output size to 8Kb, as tests tend to be quite chatty (you can see the default value in `configs/config.json`).
To apply the changed configuration, restart Codapi (as root):

View File

@@ -3,21 +3,28 @@ package config
import (
"encoding/json"
"os"
"path/filepath"
)
const (
configFilename = "config.json"
boxesFilename = "boxes.json"
commandsFilename = "commands.json"
)
// Read reads application config from JSON files.
func Read(cfgPath, boxPath, cmdPath string) (*Config, error) {
cfg, err := ReadConfig(cfgPath)
func Read(path string) (*Config, error) {
cfg, err := ReadConfig(filepath.Join(path, configFilename))
if err != nil {
return nil, err
}
cfg, err = ReadBoxes(cfg, boxPath)
cfg, err = ReadBoxes(cfg, filepath.Join(path, boxesFilename))
if err != nil {
return nil, err
}
cfg, err = ReadCommands(cfg, cmdPath)
cfg, err = ReadCommands(cfg, filepath.Join(path, commandsFilename))
if err != nil {
return nil, err
}

View File

@@ -1,15 +1,11 @@
package config
import (
"path/filepath"
"testing"
)
func TestRead(t *testing.T) {
cfgPath := filepath.Join("testdata", "config.json")
boxPath := filepath.Join("testdata", "boxes.json")
cmdPath := filepath.Join("testdata", "commands.json")
cfg, err := Read(cfgPath, boxPath, cmdPath)
cfg, err := Read("testdata")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}