Files
GarandPLG c3dbfe435a
Nix package / build (push) Successful in 7m20s
Linux package builds (test) / linux (push) Successful in 3m17s
Linux package builds (test) / aur (push) Failing after 1m2s
Rust checks / check (push) Successful in 2m42s
Add Linux packaging workflow and related scripts
Introduce a new CI workflow `.gitea/workflows/packages.yml` that builds
deb, rpm, AppImage, Flatpak and AUR packages on push and PR events.
Add packaging helpers (`build.sh`, `stage.sh`, spec file, PKGBUILD,
desktop entry, SVG icon) and supporting assets under `packaging/`.
Update `.gitignore` to ignore the generated `dist` directory.
Expand documentation (CODE_MAP, AGENTS, PROGRESS, TESTING and new
PACKAGING.md) to describe the packaging process and its limitations.
Adjust `src/app/threads/audio.rs` and `tests/audio.rs` imports to
support loading audio files from installed package layouts.
2026-10-19 15:04:36 +02:00

66 lines
2.1 KiB
Rust

use rodio::Decoder;
use std::{
fs::{self, read},
io::{BufReader, Cursor},
path::PathBuf,
process::{Command, Output},
};
use war_in_tunnels::app::threads::{SoundrackParts, Soundtrack, load_audio};
#[test]
fn audio_repeats_after_end_of_file() {
let data = read("soundtracks/default/calm.ogg").unwrap();
let sample_count = Decoder::new(BufReader::new(Cursor::new(data)))
.unwrap()
.count();
assert!(sample_count > 0);
let mut source = load_audio(&Soundtrack::Default, &SoundrackParts::Calm);
assert_eq!(source.by_ref().take(sample_count).count(), sample_count);
assert_eq!(source.take(1024).count(), 1024);
}
#[test]
fn packaged_audio_loads_without_project_working_directory() -> () {
if std::env::var_os("WAR_IN_TUNNELS_PACKAGED_AUDIO_TEST").is_some() {
let mut source: rodio::source::Amplify<
rodio::decoder::LoopedDecoder<BufReader<Cursor<Vec<u8>>>>,
> = load_audio(&Soundtrack::Default, &SoundrackParts::Calm);
assert_eq!(source.by_ref().take(1024).count(), 1024);
return;
}
let directory: PathBuf = std::env::temp_dir().join(format!(
"war-in-tunnels-packaged-audio-{}",
std::process::id()
));
fs::create_dir_all(directory.join("soundtracks/default")).unwrap();
fs::create_dir_all(directory.join("working-directory")).unwrap();
let executable: PathBuf = directory.join("audio-test");
fs::copy(std::env::current_exe().unwrap(), &executable).unwrap();
for filename in ["calm.ogg", "test.ogg"] {
fs::copy(
PathBuf::from("soundtracks/default").join(filename),
directory.join("soundtracks/default").join(filename),
)
.unwrap();
}
let output: Output = Command::new(executable)
.args([
"--exact",
"packaged_audio_loads_without_project_working_directory",
"--nocapture",
])
.env("WAR_IN_TUNNELS_PACKAGED_AUDIO_TEST", "1")
.current_dir(directory.join("working-directory"))
.output()
.unwrap();
fs::remove_dir_all(directory).unwrap();
assert!(
output.status.success(),
"{}{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
}