Default Eagle history backend to Postgres (#6982)

This commit is contained in:
2026-06-08 16:58:01 -07:00
committed by GitHub
parent ed47b5769d
commit 7685f4470c
9 changed files with 18 additions and 5 deletions
+1 -1
View File
@@ -431,7 +431,7 @@ jobs:
export FASTMAIL_API_TOKEN="${FASTMAIL_API_TOKEN}"
export FASTMAIL_FROM_EMAIL="${FASTMAIL_FROM_EMAIL}"
export FASTMAIL_FROM_NAME="${FASTMAIL_FROM_NAME}"
export EAGLE_HISTORY_BACKEND="${EAGLE_HISTORY_BACKEND:-sqlite}"
export EAGLE_HISTORY_BACKEND="${EAGLE_HISTORY_BACKEND:-postgres}"
export EAGLE_POSTGRES_HOST="${EAGLE_POSTGRES_HOST}"
export EAGLE_POSTGRES_PORT="${EAGLE_POSTGRES_PORT}"
export EAGLE_POSTGRES_DATABASE="${EAGLE_POSTGRES_DATABASE}"
+2 -2
View File
@@ -32,7 +32,7 @@ services:
DO_SPACES_ENDPOINT: "${DO_SPACES_ENDPOINT:-https://sfo3.digitaloceanspaces.com}"
DO_SPACES_ACCESS_KEY: "${DO_SPACES_ACCESS_KEY:-}"
DO_SPACES_SECRET_KEY: "${DO_SPACES_SECRET_KEY:-}"
EAGLE_HISTORY_BACKEND: "${EAGLE_HISTORY_BACKEND:-sqlite}"
EAGLE_HISTORY_BACKEND: "${EAGLE_HISTORY_BACKEND:-postgres}"
EAGLE_POSTGRES_HOST: "${EAGLE_POSTGRES_HOST:-}"
EAGLE_POSTGRES_PORT: "${EAGLE_POSTGRES_PORT:-}"
EAGLE_POSTGRES_DATABASE: "${EAGLE_POSTGRES_DATABASE:-}"
@@ -88,7 +88,7 @@ services:
DO_SPACES_ENDPOINT: "${DO_SPACES_ENDPOINT:-https://sfo3.digitaloceanspaces.com}"
DO_SPACES_ACCESS_KEY: "${DO_SPACES_ACCESS_KEY:-}"
DO_SPACES_SECRET_KEY: "${DO_SPACES_SECRET_KEY:-}"
EAGLE_HISTORY_BACKEND: "${EAGLE_HISTORY_BACKEND:-sqlite}"
EAGLE_HISTORY_BACKEND: "${EAGLE_HISTORY_BACKEND:-postgres}"
EAGLE_POSTGRES_HOST: "${EAGLE_POSTGRES_HOST:-}"
EAGLE_POSTGRES_PORT: "${EAGLE_POSTGRES_PORT:-}"
EAGLE_POSTGRES_DATABASE: "${EAGLE_POSTGRES_DATABASE:-}"
@@ -18,7 +18,7 @@ private[service] object HistoryBackendConfig {
.get(HistoryBackendEnv)
.map(_.trim.toLowerCase)
.filter(_.nonEmpty)
.getOrElse(SqliteValue)
.getOrElse(PostgresValue)
else settingValue
}
@@ -151,6 +151,7 @@ scala_test(
"//src/main/scala/net/eagle0/eagle/client_text:sqlite_client_text_store",
"//src/main/scala/net/eagle0/eagle/client_text:text_generation_result",
"//src/main/scala/net/eagle0/eagle/library:engine",
"//src/main/scala/net/eagle0/eagle/library/settings:history_backend",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/hero/concrete",
@@ -16,6 +16,7 @@ import net.eagle0.eagle.auth.NoOpUserService
import net.eagle0.eagle.client_text.{PregeneratedClientTextStore, SqliteClientTextStore}
import net.eagle0.eagle.internal.game_parameters.GameParameters
import net.eagle0.eagle.library.{Engine, EngineAndResults}
import net.eagle0.eagle.library.settings.HistoryBackend
import net.eagle0.eagle.model.state.{GameType, RoundPhase}
import net.eagle0.eagle.model.state.game_state.GameState
import net.eagle0.eagle.model.state.run_status.RunStatus
@@ -74,6 +75,7 @@ class GamesManagerTest extends AnyFlatSpec with MockFactory with Matchers with B
private val mockEngine = mock[Engine]
private val mockHistory = mock[FullGameHistory]
private val mockPersister = mock[Persister]
private var previousHistoryBackend = "env"
private val greatPerson1 =
GreatPersonWithBackstory(
@@ -109,10 +111,14 @@ class GamesManagerTest extends AnyFlatSpec with MockFactory with Matchers with B
val dir = new File("/tmp/eagle0")
override def beforeEach(): Unit =
override def beforeEach(): Unit = {
previousHistoryBackend = HistoryBackend.stringValue
HistoryBackend.setStringValue("sqlite")
mockRandom.reset()
}
override def afterEach(): Unit = {
HistoryBackend.setStringValue(previousHistoryBackend)
// Clean up SQLite files created during tests
val saveDir = new File(SaveDirectory.saveDirectoryForGame(gameId))
if saveDir.exists() then {
@@ -43,6 +43,7 @@ scala_test(
deps = [
"//src/main/protobuf/net/eagle0/common:tutorial_battle_config_scala_proto",
"//src/main/scala/net/eagle0/eagle/library:engine",
"//src/main/scala/net/eagle0/eagle/library/settings:history_backend",
"//src/main/scala/net/eagle0/eagle/library/settings/loaders:battalion_type_loader",
"//src/main/scala/net/eagle0/eagle/model/state:battalion_type",
"//src/main/scala/net/eagle0/eagle/service/new_game_creation:game_parameters_utils",
@@ -7,6 +7,7 @@ import scala.util.{Failure, Try}
import net.eagle0.common.tutorial_battle_config.TutorialTrigger
import net.eagle0.eagle.library.settings.loaders.BattalionTypeLoader
import net.eagle0.eagle.library.settings.HistoryBackend
import net.eagle0.eagle.service.persistence.Persister
import net.eagle0.util.hero_generation.LoadedHero
import org.scalatest.flatspec.AnyFlatSpec
@@ -19,6 +20,7 @@ class TutorialGameCreationTest extends AnyFlatSpec with Matchers {
// sandbox-writable temp directory. SaveDirectory reads the system property on first access (it's a `val`), so this
// must run before any code touches SaveDirectory.
System.setProperty("eagle.save.dir", Files.createTempDirectory("tutorial_game_creation_test").toString)
HistoryBackend.setStringValue("sqlite")
// No-op persister for testing - we don't need actual persistence
private object NoOpPersister extends Persister {
@@ -61,6 +61,7 @@ scala_test(
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/library:engine",
"//src/main/scala/net/eagle0/eagle/library/settings:history_backend",
"//src/main/scala/net/eagle0/eagle/library/settings/loaders:battalion_type_loader",
"//src/main/scala/net/eagle0/eagle/model/action_result/changed_province/concrete",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:action_result_concrete",
@@ -6,6 +6,7 @@ import java.nio.file.Files
import scala.util.{Failure, Try}
import net.eagle0.eagle.library.settings.loaders.BattalionTypeLoader
import net.eagle0.eagle.library.settings.HistoryBackend
import net.eagle0.eagle.model.action_result.changed_province.concrete.ChangedProvinceC
import net.eagle0.eagle.model.action_result.concrete.{ActionResultC, ChangedHeroC, StatAbsolute}
import net.eagle0.eagle.model.state.battalion.concrete.BattalionC
@@ -28,6 +29,7 @@ class EagleAppearsActionTest extends AnyFlatSpec with Matchers {
// See note in TutorialGameCreationTest — SqliteHistory writes game.db under SaveDirectory.saveDirectoryForGame, so
// point it at a sandbox-writable temp directory before any code touches SaveDirectory.
System.setProperty("eagle.save.dir", Files.createTempDirectory("eagle_appears_action_test").toString)
HistoryBackend.setStringValue("sqlite")
private object NoOpPersister extends Persister {
override def save(key: String, bytes: Array[Byte]): Boolean = true