Embed config.yaml into both apps

This commit is contained in:
Sergey Stepanov 2023-04-25 20:53:06 +03:00 committed by sergystepanov
parent 9231120a55
commit b227260060
11 changed files with 31 additions and 21 deletions

View file

@ -72,7 +72,6 @@ WORKERS=${WORKERS:-4}
USER=${USER:-root}
compose_src=$(cat $LOCAL_WORK_DIR/docker-compose.yml)
config_src=$(cat $LOCAL_WORK_DIR/configs/config.yaml)
function remote_run_commands() {
ret=""

View file

@ -59,7 +59,6 @@ RUN mkdir -p ./assets/cache && \
mkdir -p ./assets/games && \
mkdir -p ./libretro && \
mkdir -p /root/.cr
COPY configs ./configs
COPY web ./web
ARG VERSION
COPY scripts/version.sh version.sh

View file

@ -10,12 +10,12 @@ import (
var Version = "?"
func main() {
conf := config.NewCoordinatorConfig()
conf, paths := config.NewCoordinatorConfig()
conf.ParseFlags()
log := logger.NewConsole(conf.Coordinator.Debug, "c", false)
log.Info().Msgf("version %s", Version)
log.Info().Msgf("conf: v%v", conf.Version)
log.Info().Msgf("conf: v%v, loaded: %v", conf.Version, paths)
if log.GetLevel() < logger.InfoLevel {
log.Debug().Msgf("conf: %+v", conf)
}

View file

@ -13,12 +13,12 @@ import (
var Version = "?"
func run() {
conf := config.NewWorkerConfig()
conf, paths := config.NewWorkerConfig()
conf.ParseFlags()
log := logger.NewConsole(conf.Worker.Debug, "w", false)
log.Info().Msgf("version %s", Version)
log.Info().Msgf("conf: v%v", conf.Version)
log.Info().Msgf("conf: v%v, loaded: %v", conf.Version, paths)
if log.GetLevel() < logger.InfoLevel {
log.Debug().Msgf("conf: %+v", conf)
}

View file

@ -34,8 +34,8 @@ const SelectByPing = "ping"
// allows custom config path
var coordinatorConfigPath string
func NewCoordinatorConfig() (conf CoordinatorConfig) {
err := LoadConfig(&conf, coordinatorConfigPath)
func NewCoordinatorConfig() (conf CoordinatorConfig, paths []string) {
paths, err := LoadConfig(&conf, coordinatorConfigPath)
if err != nil {
panic(err)
}

View file

@ -5,6 +5,7 @@ import (
"path/filepath"
"strings"
_ "embed"
"github.com/knadh/koanf/maps"
"github.com/knadh/koanf/v2"
"gopkg.in/yaml.v3"
@ -12,6 +13,11 @@ import (
const EnvPrefix = "CLOUD_GAME_"
var (
//go:embed config.yaml
conf Bytes
)
type Kv = map[string]any
type Bytes []byte
@ -104,7 +110,7 @@ var k = koanf.New("_")
// LoadConfig loads a configuration file into the given struct.
// The path param specifies a custom path to the configuration file.
// Reads and puts environment variables with the prefix CLOUD_GAME_.
func LoadConfig(config any, path string) (err error) {
func LoadConfig(config any, path string) (loaded []string, err error) {
dirs := []string{".", "configs", "../../../configs"}
if path != "" {
dirs = append([]string{path}, dirs...)
@ -116,23 +122,31 @@ func LoadConfig(config any, path string) (err error) {
dirs = append(dirs, homeDir)
}
if err := k.Load(&conf, &YAML{}); err != nil {
return nil, err
}
conf = nil
loaded = append(loaded, "default")
for _, dir := range dirs {
f := File(filepath.Join(filepath.Clean(dir), "config.yaml"))
path := filepath.Join(filepath.Clean(dir), "config.yaml")
f := File(path)
if _, err := os.Stat(string(f)); !os.IsNotExist(err) {
if err := k.Load(&f, &YAML{}); err != nil {
return err
return loaded, err
}
loaded = append(loaded, path)
}
}
env := Env(EnvPrefix)
if err := k.Load(&env, nil); err != nil {
return err
return loaded, err
}
if err := k.Unmarshal("", config); err != nil {
return err
return loaded, err
}
return nil
return loaded, nil
}

View file

@ -17,7 +17,7 @@ func TestConfigEnv(t *testing.T) {
_ = os.Unsetenv("CLOUD_GAME_EMULATOR_LIBRETRO_CORES_LIST_PCSX_OPTIONS__PCSX_REARMED_DRC")
}()
err := LoadConfig(&out, "../../configs")
_, err := LoadConfig(&out, "")
if err != nil {
t.Fatal(err)
}

View file

@ -70,8 +70,8 @@ type Video struct {
// allows custom config path
var workerConfigPath string
func NewWorkerConfig() (conf WorkerConfig) {
err := LoadConfig(&conf, workerConfigPath)
func NewWorkerConfig() (conf WorkerConfig, paths []string) {
paths, err := LoadConfig(&conf, workerConfigPath)
if err != nil {
panic(err)
}

View file

@ -47,10 +47,9 @@ type EmulatorPaths struct {
// Make sure you call shutdownEmulator().
func GetEmulatorMock(room string, system string) *EmulatorMock {
rootPath := getRootPath()
configPath := rootPath + "configs/"
var conf config.WorkerConfig
if err := config.LoadConfig(&conf, configPath); err != nil {
if _, err := config.LoadConfig(&conf, ""); err != nil {
panic(err)
}

View file

@ -60,7 +60,6 @@ type roomMockConfig struct {
// Store absolute path to test games
var whereIsGames = getRootPath() + "assets/games/"
var whereIsConfigs = getRootPath() + "configs/"
var testTempDir = filepath.Join(os.TempDir(), "cloud-game-core-tests")
// games
@ -204,7 +203,7 @@ func dumpCanvas(frame *image2.Frame, name string, caption string, path string) {
// getRoomMock returns mocked Room struct.
func getRoomMock(cfg roomMockConfig) roomMock {
var conf config.WorkerConfig
if err := config.LoadConfig(&conf, whereIsConfigs); err != nil {
if _, err := config.LoadConfig(&conf, ""); err != nil {
panic(err)
}