Initial commit
CI / test (push) Canceled after 0s

This commit is contained in:
2026-09-12 22:22:17 +02:00
commit 904d14b64c
314 changed files with 31884 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
package main
import (
"errors"
"fmt"
"net/url"
"gardomatic.kleiax.de/internal/platform/environment"
"gardomatic.kleiax.de/internal/web"
)
func configFromEnvironment() (web.Config, error) {
port, err := environment.Int("GARDOMATIC_WEB_PORT", 4040)
if err != nil {
return web.Config{}, err
}
cookieSecure, err := environment.Bool("GARDOMATIC_COOKIE_SECURE", false)
if err != nil {
return web.Config{}, err
}
cfg := web.Config{Host: environment.String("GARDOMATIC_WEB_HOST", ""), Port: port, Env: environment.String("GARDOMATIC_ENV", "development"), APIBaseURL: environment.String("GARDOMATIC_API_BASE_URL", "http://localhost:4000"), SessionCookieName: environment.String("GARDOMATIC_SESSION_COOKIE_NAME", "gardomatic_session"), CookieSecure: cookieSecure}
var errs []error
if cfg.Port < 1 || cfg.Port > 65535 {
errs = append(errs, errors.New("GARDOMATIC_WEB_PORT must be between 1 and 65535"))
}
parsed, parseErr := url.ParseRequestURI(cfg.APIBaseURL)
if parseErr != nil || parsed.Scheme == "" || parsed.Host == "" {
errs = append(errs, fmt.Errorf("GARDOMATIC_API_BASE_URL must be an absolute HTTP URL"))
}
if cfg.Env == "production" && !cfg.CookieSecure {
errs = append(errs, errors.New("GARDOMATIC_COOKIE_SECURE must be true in production"))
}
return cfg, errors.Join(errs...)
}
+16
View File
@@ -0,0 +1,16 @@
package main
import "testing"
func TestConfigFromEnvironment(t *testing.T) {
t.Setenv("GARDOMATIC_WEB_HOST", "0.0.0.0")
t.Setenv("GARDOMATIC_WEB_PORT", "4444")
t.Setenv("GARDOMATIC_API_BASE_URL", "https://api.example.com")
cfg, err := configFromEnvironment()
if err != nil {
t.Fatal(err)
}
if cfg.Host != "0.0.0.0" || cfg.Port != 4444 || cfg.APIBaseURL != "https://api.example.com" {
t.Fatalf("unexpected config: %#v", cfg)
}
}
+2
View File
@@ -0,0 +1,2 @@
// Package main starts the Gardomatic server-rendered web application.
package main
+20
View File
@@ -0,0 +1,20 @@
package main
import (
"log"
"gardomatic.kleiax.de/internal/web"
)
func main() {
cfg, err := configFromEnvironment()
if err != nil {
log.Fatal(err)
}
server, err := web.New(cfg)
if err != nil {
log.Fatal(err)
}
server.Run()
}