chore: rename app from Solitaire Quest to Ferrous Solitaire
Build and Deploy / build-and-push (push) Successful in 4m40s
Build and Deploy / build-and-push (push) Successful in 4m40s
Updates all in-tree references: - Android package: com.solitairequest.app → com.ferrousapp.solitaire - APK name: solitaire-quest → ferrous-solitaire - Data dir: solitaire_quest → ferrous_solitaire (across all 6 data modules + engine) - Keyring service: solitaire_quest_server → ferrous_solitaire_server - Android Keystore key: solitaire_quest_token_key → ferrous_solitaire_token_key - Gitea repo: Rusty_Solitare → Ferrous-Solitaire (also fixes "Solitare" typo) - Renamed pkg/solitaire-quest* → pkg/ferrous-solitaire* - Updated ArgoCD, docker-compose, CI workflow, build script, all docs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -29,7 +29,7 @@ static USER_THEME_DIR_OVERRIDE: OnceLock<PathBuf> = OnceLock::new();
|
||||
/// Sub-folder under `dirs::data_dir()` where the project keeps every
|
||||
/// per-user file. Matches the existing convention used by
|
||||
/// `solitaire_data` for `settings.json`, `stats.json`, etc.
|
||||
const APP_DIR_NAME: &str = "solitaire_quest";
|
||||
const APP_DIR_NAME: &str = "ferrous_solitaire";
|
||||
|
||||
/// Sub-folder under [`APP_DIR_NAME`] dedicated to user themes.
|
||||
const THEME_DIR_NAME: &str = "themes";
|
||||
@@ -97,19 +97,19 @@ mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn user_theme_dir_for_appends_solitaire_quest_themes() {
|
||||
fn user_theme_dir_for_appends_ferrous_solitaire_themes() {
|
||||
let dir = user_theme_dir_for(PathBuf::from("/tmp/data"));
|
||||
assert_eq!(
|
||||
dir,
|
||||
PathBuf::from("/tmp/data/solitaire_quest/themes"),
|
||||
"user dir must nest under solitaire_quest/themes"
|
||||
PathBuf::from("/tmp/data/ferrous_solitaire/themes"),
|
||||
"user dir must nest under ferrous_solitaire/themes"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn user_theme_dir_for_handles_empty_root() {
|
||||
let dir = user_theme_dir_for(PathBuf::new());
|
||||
assert_eq!(dir, PathBuf::from("solitaire_quest/themes"));
|
||||
assert_eq!(dir, PathBuf::from("ferrous_solitaire/themes"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1302,7 +1302,7 @@ mod tests {
|
||||
|
||||
/// Build a minimal headless `App` with just `GamePlugin` installed.
|
||||
/// Disables persistence and overrides the seed so tests are deterministic
|
||||
/// and don't touch `~/.local/share/solitaire_quest/game_state.json`.
|
||||
/// and don't touch `~/.local/share/ferrous_solitaire/game_state.json`.
|
||||
fn test_app(seed: u64) -> App {
|
||||
let mut app = App::new();
|
||||
app.add_plugins(MinimalPlugins).add_plugins(GamePlugin);
|
||||
@@ -1316,7 +1316,7 @@ mod tests {
|
||||
// can't leak into per-test world state and trip the
|
||||
// `pending.0.is_some()` guard in `auto_save_game_state` /
|
||||
// `save_game_state_on_exit`. Without this clear, an
|
||||
// unrelated `~/.local/share/solitaire_quest/game_state.json`
|
||||
// unrelated `~/.local/share/ferrous_solitaire/game_state.json`
|
||||
// would silently disable the auto-save path under test.
|
||||
app.insert_resource(PendingRestoredGame(None));
|
||||
// Override the system-time seed with a known value.
|
||||
|
||||
@@ -552,7 +552,7 @@ mod tests {
|
||||
.add_plugins(GamePlugin::headless())
|
||||
.add_plugins(ReplayPlaybackPlugin);
|
||||
// Disable game-state persistence so tests don't touch the
|
||||
// real ~/.local/share/solitaire_quest/game_state.json.
|
||||
// real ~/.local/share/ferrous_solitaire/game_state.json.
|
||||
app.insert_resource(crate::game_plugin::GameStatePath(None));
|
||||
app.insert_resource(crate::game_plugin::ReplayPath(None));
|
||||
// Tick once so any startup systems flush before the first
|
||||
|
||||
@@ -64,7 +64,7 @@ pub struct StatsCell;
|
||||
/// Resource holding the rolling [`ReplayHistory`] of recent winning
|
||||
/// replays.
|
||||
///
|
||||
/// Populated from `<data_dir>/solitaire_quest/replays.json` at startup
|
||||
/// Populated from `<data_dir>/ferrous_solitaire/replays.json` at startup
|
||||
/// and refreshed in-place whenever the engine writes a new winning
|
||||
/// replay so the Stats overlay's selector always reflects the current
|
||||
/// on-disk history.
|
||||
@@ -166,7 +166,7 @@ impl Default for StatsPlugin {
|
||||
|
||||
impl StatsPlugin {
|
||||
/// Plugin configured with no persistence. Use in tests and headless apps
|
||||
/// where touching `~/.local/share/solitaire_quest/stats.json` would be
|
||||
/// where touching `~/.local/share/ferrous_solitaire/stats.json` would be
|
||||
/// incorrect.
|
||||
pub fn headless() -> Self {
|
||||
Self { storage_path: None }
|
||||
|
||||
@@ -307,7 +307,7 @@ mod tests {
|
||||
.add_plugins(TimeAttackPlugin);
|
||||
app.init_resource::<ButtonInput<KeyCode>>();
|
||||
// Disable session persistence — tests must not touch the real
|
||||
// ~/.local/share/solitaire_quest/time_attack_session.json.
|
||||
// ~/.local/share/ferrous_solitaire/time_attack_session.json.
|
||||
app.insert_resource(TimeAttackSessionPath(None));
|
||||
// The plugin's startup-load hook may have populated TimeAttackResource
|
||||
// from a real on-disk session. Reset it so each test starts inactive.
|
||||
|
||||
Reference in New Issue
Block a user