No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
blancodagoat 1def28ca64 Add tests, CI, logging, crash reporting, live tail, auto-updater
Round 2: ship-readiness foundations plus the live tail feature and
in-app updater. Version bump 4.1.8 -> 5.0.0.

Foundations
- CHANGELOG.md following Keep a Changelog format
- AssemblyVersion bumped to 5.0.0 in both controllers
- <Nullable>enable</Nullable> across all projects; 45 nullable
  warnings fixed (sender parameters, possibly-null registry/
  TryGetValue out params, uninitialised singleton fields)
- xUnit test project Shared.Tests with 19 tests covering
  ChatLogParser (Utf8JsonReader parsing, HTML entity decode,
  timestamp stripping), ChatLogScanner (server detection, newest-
  storage selection), LocalizationController. Parallelism disabled
  to keep the static-state tests deterministic.
- GitHub Actions: build.yml on push/PR runs build+test on
  windows-latest. release.yml on tag push publishes 4 single-file
  artifacts (fdd + self-contained for both apps) and creates a
  GitHub release.

Observability
- Serilog rolling-file sink under %LocalAppData%\GTAW-Log-Parser\
  logs\, retained 7 days. Replaces 14 silent Debug.WriteLine
  call sites with structured Log.Error/Information.
- Sentry.Serilog sink wired up; gated by GTAW_SENTRY_DSN env var
  so it stays off by default (privacy by default).
- Shared/Logging.cs centralises both sinks; Parser and Assistant
  call Logging.Initialize() at startup and Logging.Shutdown() at
  exit.

New features
- Live Tail (Assistant/UI/LiveTailWindow): FileSystemWatcher on the
  .storage file with 200ms debounce; on every change, re-parses,
  diffs against the previous full log, appends only the new lines.
  Auto-scrolls. Toggleable timestamp strip. Clear button. Reachable
  from MainWindow's menu strip.
- In-app auto-updater (Assistant/Controllers/AutoUpdater): when an
  update is available, the user can now choose Yes = download and
  swap automatically, No = open releases page, Cancel = nothing.
  Uses Octokit to locate the matching fdd asset, downloads it next
  to the running exe, then spawns a cmd.exe one-liner that waits
  2s, move /y over the running exe, restarts. On failure falls
  back to opening the releases page.

Documentation
- README rewritten with fdd vs self-contained release matrix,
  build/test/publish commands, env-var setup for crash reporting,
  code signing notes (SignPath.io for OSS, commercial cert), and
  project structure overview.
2026-05-17 00:07:03 +02:00
.github/workflows Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
Assistant Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
Parser Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
Shared Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
Shared.Tests Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
.gitignore Initial commit 2020-06-10 22:15:35 +03:00
CHANGELOG.md Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
GTAW-Log-Parser.sln Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00
header.png Push code 2020-06-10 22:24:08 +03:00
LICENSE Initial commit 2020-06-10 22:15:35 +03:00
README.md Add tests, CI, logging, crash reporting, live tail, auto-updater 2026-05-17 00:07:03 +02:00

GTA World Chat Log Assistant

This program converts the chat logs generated while playing on GTA World into readable text.

Getting Started

No installation is required. Download the latest release and run the executable.

Two flavours are published for each app:

Suffix Size Requirements
*-fdd-win-x64.exe (framework-dependent) ~5–10 MB .NET 8 Desktop Runtime must be installed
*-selfcontained-win-x64.exe ~80–100 MB No runtime install needed

If you have the .NET 8 Desktop Runtime (most users on a modern Windows do), the framework-dependent build is recommended.

Optional: crash reporting

Set the GTAW_SENTRY_DSN environment variable to a Sentry DSN to enable opt-in crash reporting. Leave it unset (default) and nothing is sent.

[Environment]::SetEnvironmentVariable("GTAW_SENTRY_DSN", "https://your-dsn@oXXXXX.ingest.sentry.io/YYYYY", "User")

Logs are always written to %LocalAppData%\GTAW-Log-Parser\logs\ regardless of Sentry.

Building from source

Requires the .NET 8 SDK.

# Build everything (Parser, Assistant, Shared, Shared.Tests)
dotnet build GTAW-Log-Parser.sln

# Run tests
dotnet test Shared.Tests/Shared.Tests.csproj

# Run Parser locally
dotnet run --project Parser

# Run Assistant locally
dotnet run --project Assistant

The solution uses SDK-style csproj. No special MSBuild flags are required.

Publishing release binaries

The .github/workflows/release.yml workflow does this automatically on tag push (git tag v5.0.0 && git push --tags). To reproduce locally:

# Framework-dependent (small)
dotnet publish Assistant/Assistant.csproj -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true

# Self-contained (no runtime needed on target machine)
dotnet publish Assistant/Assistant.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true

Output: Assistant/bin/Release/net8.0-windows/win-x64/publish/GTAWAssistant.exe.

Code signing (optional)

Released EXEs trigger Windows SmartScreen warnings unless code-signed. For OSS projects, two options:

  • SignPath.io — free Authenticode signing for OSS via GitHub Actions. Apply once, then sign every release.
  • Commercial cert — buy a certificate from a CA (DigiCert, Sectigo, GlobalSign) for ~$200–600/year and sign with signtool.exe in the release workflow.

Neither is wired up by default — both produce trust-warning-free downloads but require an external account.

Contributing

  1. Fork the project (https://github.com/blancodagoat/GTAW-Log-Parser)
  2. Create a branch (git checkout -b feature/your-feature)
  3. Commit (git commit -am "Add feature_name")
  4. Push (git push origin feature/your-feature)
  5. Open a pull request

CI builds and runs tests on every PR.

Project structure

Parser/         — WinForms minimal parser (ParserMini.exe)
Assistant/      — WPF full-featured app with backup, filtering, themes (GTAWAssistant.exe)
Shared/         — Class library: ChatLogParser, ChatLogScanner, LocalizationController, Logging
Shared.Tests/   — xUnit tests for Shared/

License

Distributed under the GPLv3 license. See LICENSE for more information.