Skip to content

Commit f5adaa9

Browse files
committed
Release v0.8.0: Windows support
Windows now builds, tests, and runs (verified on a real machine). - Bump version 0.7.0 -> 0.8.0. - README: add Windows to the platform badge/tagline, document the prebuilt bundle install path, list the Windows default playlist location, and drop the 'Windows not a v1 goal' note. - Add a release workflow that builds the self-contained Windows bundle (static-CRT exe + libopenmpt + audio deps + MSVC runtime DLLs) and attaches rtrax-windows-x64.zip to the GitHub Release on 'v*' tag push, so the README's 'download from Assets' instructions are real.
1 parent e0a3f4e commit f5adaa9

4 files changed

Lines changed: 87 additions & 6 deletions

File tree

.github/workflows/release.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags: ['v*']
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
windows-bundle:
12+
name: Windows bundle
13+
runs-on: windows-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
- name: Install libopenmpt
18+
shell: pwsh
19+
run: |
20+
# vcpkg is pre-installed on GitHub's Windows runners.
21+
vcpkg install libopenmpt:x64-windows
22+
$root = "$env:VCPKG_INSTALLATION_ROOT/installed/x64-windows"
23+
# openmpt-sys's build.rs emits `-lopenmpt`; vcpkg ships libopenmpt.lib.
24+
if ((Test-Path "$root/lib/libopenmpt.lib") -and -not (Test-Path "$root/lib/openmpt.lib")) {
25+
Copy-Item "$root/lib/libopenmpt.lib" "$root/lib/openmpt.lib"
26+
}
27+
echo "RTRAX_OPENMPT_LIB_DIR=$root/lib" >> $env:GITHUB_ENV
28+
29+
- name: Install Rust toolchain
30+
uses: dtolnay/rust-toolchain@stable
31+
32+
- uses: Swatinem/rust-cache@v2
33+
34+
# Static CRT so the target machine needs no Visual C++ redistributable
35+
# for the exe itself; the bundled vcpkg DLLs still need the runtime DLLs,
36+
# which are bundled below.
37+
- name: Build release (static CRT)
38+
shell: pwsh
39+
env:
40+
RUSTFLAGS: -C target-feature=+crt-static
41+
run: cargo build --release --bin rtrax
42+
43+
- name: Stage bundle
44+
shell: pwsh
45+
run: |
46+
$stage = "rtrax-windows-x64"
47+
New-Item -ItemType Directory -Force -Path $stage | Out-Null
48+
Copy-Item target/release/rtrax.exe $stage/
49+
# libopenmpt.dll plus its runtime dependencies.
50+
Copy-Item "$env:VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin/*.dll" $stage/
51+
# MSVC runtime DLLs the vcpkg DLLs link dynamically — bundle them so
52+
# the target machine needs no Visual C++ redistributable at all.
53+
foreach ($dll in 'msvcp140.dll', 'vcruntime140.dll', 'vcruntime140_1.dll') {
54+
Copy-Item "$env:SystemRoot/System32/$dll" $stage/
55+
}
56+
Copy-Item README.md, LICENSE $stage/
57+
Compress-Archive -Path "$stage/*" -DestinationPath "rtrax-windows-x64.zip"
58+
59+
- name: Attach bundle to release
60+
uses: softprops/action-gh-release@v2
61+
with:
62+
files: rtrax-windows-x64.zip

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rtrax"
3-
version = "0.7.0"
3+
version = "0.8.0"
44
edition = "2021"
55
description = "TUI MOD/XM/IT/S3M/MTM module player"
66
license = "MIT OR Apache-2.0"

README.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
66
[![Made with Rust](https://img.shields.io/badge/made_with-rust-CE412B?logo=rust&logoColor=white)](https://www.rust-lang.org/)
77
[![Edition 2021](https://img.shields.io/badge/edition-2021-blue.svg)](https://doc.rust-lang.org/edition-guide/rust-2021/index.html)
8-
[![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey.svg)](#install)
8+
[![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey.svg)](#install)
99
[![Type: TUI](https://img.shields.io/badge/type-TUI-9cf.svg)](https://github.com/ratatui-org/ratatui)
1010
[![Audio: libopenmpt](https://img.shields.io/badge/audio-libopenmpt-purple.svg)](https://lib.openmpt.org/libopenmpt/)
1111
[![Latest release](https://img.shields.io/github/v/release/swilcox/rtrax?sort=semver&display_name=tag)](https://github.com/swilcox/rtrax/releases/latest)
@@ -15,7 +15,7 @@
1515

1616
A TUI module player for `.mod` / `.xm` / `.it` / `.s3m` / `.mtm` (and anything
1717
else libopenmpt reads). Per-channel level meters, scrolling pattern view,
18-
master spectrum analyzer, file browser. macOS + Linux.
18+
master spectrum analyzer, file browser. macOS, Linux, and Windows.
1919

2020
![rtrax screenshot](docs/screenshot.png)
2121

@@ -24,7 +24,26 @@ master spectrum analyzer, file browser. macOS + Linux.
2424
2525
## Install
2626

27-
System library — libopenmpt is a runtime dependency, not vendored.
27+
### Windows (prebuilt bundle)
28+
29+
No toolchain needed. A self-contained bundle is attached to every
30+
[release](https://github.com/swilcox/rtrax/releases/latest) under **Assets** as
31+
`rtrax-windows-x64.zip`:
32+
33+
1. Download `rtrax-windows-x64.zip` from the latest release and unzip it.
34+
2. Keep `rtrax.exe` and the bundled `.dll` files together in one folder.
35+
3. Run `rtrax.exe` — pass a module path (`rtrax.exe song.xm`) or launch with no
36+
argument to open the file browser.
37+
38+
The zip ships libopenmpt, its audio dependencies, and the MSVC runtime DLLs, so
39+
**nothing else needs installing** — no Visual C++ redistributable required. For
40+
the best rendering (truecolor, Unicode box-drawing), run it from
41+
[Windows Terminal](https://aka.ms/terminal). If SmartScreen warns about an
42+
unsigned binary, choose **More info → Run anyway**.
43+
44+
### macOS / Linux (build from source)
45+
46+
libopenmpt is a runtime dependency, installed as a system library:
2847

2948
```sh
3049
# macOS
@@ -118,6 +137,7 @@ Press `a` to append the currently-playing file to the playlist. Without a
118137

119138
- **Linux:** `~/.local/share/rtrax/playlist.m3u`
120139
- **macOS:** `~/Library/Application Support/rtrax/playlist.m3u`
140+
- **Windows:** `%LOCALAPPDATA%\rtrax\playlist.m3u`
121141

122142
The file is created automatically (with an `#EXTM3U` header) if it doesn't
123143
exist yet. Pressing `a` multiple times is safe — each press appends one entry.
@@ -253,4 +273,3 @@ stdout, because that would corrupt ratatui's alternate-screen rendering.
253273
- Network features, streaming protocols, web UI.
254274
- Format conversion (libopenmpt is read-only here).
255275
- Plugin systems, scripting, custom DSP effects.
256-
- Windows support — not blocked, but not a v1 goal.

0 commit comments

Comments
 (0)