Triggered on release published, builds and pushes to
droideparanoico/dostalgia on Docker Hub with tags:
- :latest (on default branch releases)
- :<version> (e.g. :1.2.3)
- :<major>.<minor> (e.g. :1.2)
Two bugs:
1. PlatformDetector buffer was 512 bytes — too small to read the NE
header at offset 0x0E00 in Blood's SETUP.EXE. Increased to 4096
bytes (0x1000), covering headers up to ~4KB.
2. findSetup() had no platform awareness — it picked SETUP.EXE
(Windows 3.x NE executable) over SETMAIN.EXE (actual DOS4GW
setup). Added platform detection to the sort, preferring DOS
executables over Windows ones.
Also added "setmain" to pattern list so Build engine games'
DOS setup utilities are detected.
When a game has both SETUP.BAT and SETUP.EXE, the sort comparator
was picking SETUP.BAT (smaller file size) over SETUP.EXE. Batch
files often contain 'win SETUP.EXE' to launch Windows-first — which
fails in DOSBox since WIN.COM isn't available.
Now .exe and .com files are sorted before .bat files at the same
directory depth, so the actual DOS setup utility is preferred.
- Add .env.example with Twitch credential instructions
- Update docker-compose.yml to use env_file instead of inline comments
- Add IGDB Metadata section to README with setup walkthrough
- Add .env / .env.local to .gitignore to prevent secret leaks
quarkus.resteasy-reactive.multipart.input-part.max-size was renamed
to quarkus.rest.multipart.input-part.max-size in Quarkus 3.x, but the
global quarkus.http.limits.max-body-size=2048M already caps upload
sizes so the property is redundant.
- GameService.load(): null-check bundleFile before resolving path
(Path.resolve(null) throws NullPointerException)
- ZipServiceTest: pass absolute exePath to createBundle (relativize
requires both paths to be absolute or both relative)
- Add exec-maven-plugin to pom.xml with 3 npm executions:
* npm-install (initialize phase)
* frontend-build (generate-resources phase)
* frontend-test (test phase)
- Add skipFrontend and skipFrontendTests Maven properties
- Dockerfile now runs npm test in frontend stage
- Dockerfile removes -DskipTests and passes -DskipFrontend=true
to the Maven stage (frontend already built in its own stage)
- Updated package declarations and cross-references in all 20 Java files
- Updated groupId in pom.xml
- Moved src/main/java/com/dostalgia/ → src/main/java/org/dostalgia/
- Moved src/test/java/com/dostalgia/ → src/test/java/org/dostalgia/
- Added FileUtils.findFilesByExtensions(dir, extensions) — generic
walk-and-collect utility for matching files by extension
- ExecutableDetector.findAll() now delegates to it, dropping
13 lines of boilerplate
- Created FileUtils.deleteDirectory() for recursive directory deletion
- GameService.delete() and UploadResource.deleteDir() now delegate to it
- Removed stale BasicFileAttributes import from GameService
PlatformDetector.detect() and GameService.detectPlatformInBundle()
both read only 0x80 bytes initially, but PE e_lfanew often points to
0x80 (128), putting the signature 2 bytes past the buffer. Added
fallback: re-read up to peOffset+2 bytes when needed.
Fixes PlatformDetectorTest detect_peHeader_returnsWindows and
detect_neHeader_returnsWindows assertions.
The sort order is: installer → platform → size → depth.
Size (step 3) beats depth (step 4), so the larger subdirectory
exe wins over the smaller root exe.
ExecutableDetector uses @Inject for PlatformDetector, but tests
instantiate it directly via 'new' — CDI doesn't run. Manually set
the package-private 'platform' field in an instance initializer.
Root cause: the separator check used '\\\\'.equals(sep) comparing a
2-char Java string literal to a 1-char substring result — always false.
This caused backslash paths (C:\FALLOUT1\MASTER.DAT) to never be split
into components, so stale prefixes were never detected or rewritten.
Fix: use char comparison (sep == '\\') which correctly identifies the
separator type. Affected both findReplacement and existsIgnoreCase.
This was a pre-existing bug from the original UploadResource code that
was carried over during the refactor. Re-uploading Fallout after this
fix will correctly patch FALLOUT.CFG paths.