Skip to content

Commit 998d976

Browse files
ci (docs): add dynamic downloads section, consolidate feature listing, move dev section
1 parent a4cf9b0 commit 998d976

2 files changed

Lines changed: 88 additions & 28 deletions

File tree

.github/workflows/release.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,3 +304,70 @@ jobs:
304304
Remove-Item -Force "${{ runner.temp }}\mt-cert.pfx" -ErrorAction SilentlyContinue
305305
Remove-Item -Force "${{ runner.temp }}\sign-override.json" -ErrorAction SilentlyContinue
306306
Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert | Where-Object { $_.Subject -eq 'CN=MT' } | Remove-Item
307+
308+
update-readme:
309+
name: Update README download links
310+
needs: [build-macos, build-linux-amd64, build-linux-arm64, build-windows]
311+
if: github.event_name == 'release'
312+
runs-on: blacksmith-4vcpu-ubuntu-2404
313+
314+
steps:
315+
- uses: actions/checkout@v4
316+
with:
317+
ref: main
318+
token: ${{ secrets.GITHUB_TOKEN }}
319+
320+
- name: Update download table
321+
env:
322+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
323+
TAG: ${{ github.event.release.tag_name }}
324+
run: |
325+
python3 << 'EOF'
326+
import json, os, re, subprocess
327+
328+
tag = os.environ['TAG']
329+
result = subprocess.run(
330+
['gh', 'api', f'repos/pythoninthegrass/mt/releases/tags/{tag}'],
331+
capture_output=True, text=True, check=True
332+
)
333+
assets = json.loads(result.stdout)['assets']
334+
335+
PLATFORM_MAP = [
336+
('.dmg', 'macOS', 'Apple Silicon (ARM64)'),
337+
('amd64', 'Linux', 'x86_64 (amd64)'),
338+
('arm64', 'Linux', 'ARM64'),
339+
('.exe', 'Windows', 'x64'),
340+
]
341+
342+
rows = []
343+
for asset in sorted(assets, key=lambda a: a['name']):
344+
name = asset['name']
345+
url = asset['browser_download_url']
346+
for key, platform, arch in PLATFORM_MAP:
347+
if key in name:
348+
rows.append(f'| {platform} | {arch} | [{name}]({url}) |')
349+
break
350+
351+
table = '\n'.join([
352+
'| Platform | Architecture | Download |',
353+
'|----------|--------------|----------|',
354+
*rows,
355+
])
356+
section = f'<!-- DOWNLOADS:START -->\n{table}\n<!-- DOWNLOADS:END -->'
357+
358+
readme = open('README.md').read()
359+
updated = re.sub(
360+
r'<!-- DOWNLOADS:START -->.*?<!-- DOWNLOADS:END -->',
361+
section, readme, flags=re.DOTALL
362+
)
363+
open('README.md', 'w').write(updated)
364+
print(f"Updated README with {len(rows)} download link(s)")
365+
EOF
366+
367+
- name: Commit and push
368+
run: |
369+
git config user.name "github-actions[bot]"
370+
git config user.email "github-actions[bot]@users.noreply.github.com"
371+
git add README.md
372+
git diff --staged --quiet || git commit -m "chore: update download links for ${{ github.event.release.tag_name }} [skip ci]"
373+
git push origin main

README.md

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,43 @@
44

55
![mt](static/cover.png)
66

7+
## Minimum Requirements
8+
9+
* OS
10+
* macOS Sequoia (15.7+)
11+
* Linux
12+
* Debian
13+
* Ubuntu
14+
* Windows 11 (21H2+)
15+
716
## Features
817

918
* **Built for large libraries**: virtual scrolling, content-aware reloading, and LRU-cached artwork
1019
* **Cross-platform**: macOS, Linux, and Windows with native media key and OS Now Playing support
1120
* **Themeable**: light, dark, and system themes with customizable columns
21+
* **Artists and Albums views**: split-pane artist browser and album grid with detail view
1222
* **Playlists and queue management**: drag-and-drop reordering, play next, play history navigation
1323
* **Metadata editing**: read and write tags directly on audio files, including batch editing
1424
* **Watched folders**: multi-directory monitoring with real-time filesystem events, duplicate detection, and move tracking
1525
* **Keyboard-driven**: shortcuts for playback, search, navigation, and type-to-jump by artist
16-
* **Last.fm integration**: scrobbling, now playing, loved track sync, and queued retry on failure
26+
* **Last.fm integration**: scrobbling, now playing, loved track sync, queued retry on failure, and bidirectional loved tracks sync
1727

18-
## Minimum Requirements
28+
## Downloads
29+
30+
Download the latest release from [GitHub Releases](https://github.com/pythoninthegrass/mt/releases).
31+
32+
## Development
33+
34+
See [Builds](docs/builds.md) for build configuration, performance tuning, and signing.
35+
36+
### Requirements
1937

20-
* OS
21-
* macOS Sequoia (15.7+)
22-
* Linux
23-
* Debian
24-
* Ubuntu
25-
* Windows 11 (21H2+)
2638
* [node 24.2.0](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
2739
* [rust 1.92.0](https://doc.rust-lang.org/book/ch01-01-installation.html)
2840
* Be sure to install `rustup`!
2941
* [task](https://taskfile.dev/docs/installation)
3042

31-
## Setup
43+
### Setup
3244

3345
```bash
3446
# install deps
@@ -38,25 +50,6 @@ task npm:install
3850
task tauri:dev
3951
```
4052

41-
## 1.0.0 Highlights
42-
43-
1. **Pure Rust backend** -- complete migration from Python/FastAPI to Tauri commands; Python sidecar removed
44-
2. **Last.fm scrobbling** -- now playing, loved track sync, queued retry on failure, bidirectional love sync
45-
3. **Cross-platform builds** -- macOS code signing and notarization, Windows NSIS installer, Linux AMD64 and ARM64 Docker builds
46-
4. **Virtual scrolling** -- smooth rendering for libraries with tens of thousands of tracks
47-
5. **Artists and Albums views** -- split-pane artist browser and album grid with detail view
48-
6. **Watched folders** -- multi-directory monitoring with real-time filesystem events, duplicate detection, and move tracking
49-
7. **Keyboard shortcuts** -- global playback controls, type-to-jump artist navigation with same-letter cycling
50-
8. **Drag-and-drop playlists** -- reorder tracks, columns, sidebar playlists; library-to-playlist drops
51-
9. **Performance tuning** -- artwork LRU cache, parallel scanning with rayon, SQLite connection pooling, CSS containment
52-
10. **Structured logging and diagnostics** -- tracing-based backend logging, frontend error capture, exportable log files
53-
54-
See the full [release notes](https://github.com/pythoninthegrass/mt/releases) for details.
55-
56-
## Development
57-
58-
See [Builds](docs/builds.md) for build configuration, performance tuning, and signing.
59-
6053
## Credit
6154

6255
* MusicBee for years of rock-solid playback and inspiration to build a subset of its features for other operating systems

0 commit comments

Comments
 (0)