plex-tui 0.2.1__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/aur.yml +4 -1
- plex_tui-0.3.0/.github/workflows/bump.yml +108 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/ci.yml +5 -2
- {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/publish-pypi.yml +5 -2
- {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/publish-testpypi.yml +5 -2
- {plex_tui-0.2.1 → plex_tui-0.3.0}/AGENTS.md +16 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/CHANGELOG.md +11 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/Makefile +5 -2
- {plex_tui-0.2.1 → plex_tui-0.3.0}/PKG-INFO +17 -4
- {plex_tui-0.2.1 → plex_tui-0.3.0}/README.md +16 -3
- {plex_tui-0.2.1 → plex_tui-0.3.0}/RELEASE.md +40 -14
- plex_tui-0.3.0/ROADMAP.md +39 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/config.example.toml +1 -1
- {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/aur/.SRCINFO +3 -3
- {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/aur/PKGBUILD +2 -2
- {plex_tui-0.2.1 → plex_tui-0.3.0}/pyproject.toml +1 -1
- plex_tui-0.3.0/scripts/check_release.py +172 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/__init__.py +1 -1
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/__main__.py +6 -1
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/app.py +351 -47
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/artwork.py +35 -13
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_app_helpers.py +146 -10
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_app_navigation.py +116 -1
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_artwork.py +51 -3
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_cli.py +16 -0
- plex_tui-0.3.0/tests/test_release_checks.py +109 -0
- plex_tui-0.2.1/ROADMAP.md +0 -32
- {plex_tui-0.2.1 → plex_tui-0.3.0}/.gitignore +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/LICENSE +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/PACKAGING.md +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/docs/assets/grid-view.png +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/docs/assets/list-view.png +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/aur/README.md +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/homebrew/README.md +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/auth.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/config.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/models.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/player.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/plex_service.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/smoke.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_auth.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_config.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_player.py +0 -0
- {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_plex_service.py +0 -0
|
@@ -13,6 +13,9 @@ on:
|
|
|
13
13
|
- "packaging/aur/**"
|
|
14
14
|
workflow_dispatch:
|
|
15
15
|
|
|
16
|
+
env:
|
|
17
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
18
|
+
|
|
16
19
|
jobs:
|
|
17
20
|
makepkg:
|
|
18
21
|
runs-on: ubuntu-latest
|
|
@@ -24,7 +27,7 @@ jobs:
|
|
|
24
27
|
pacman -Syu --noconfirm git namcap sudo
|
|
25
28
|
|
|
26
29
|
- name: Check out repository
|
|
27
|
-
uses: actions/checkout@
|
|
30
|
+
uses: actions/checkout@v5
|
|
28
31
|
|
|
29
32
|
- name: Create build user
|
|
30
33
|
run: |
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
name: Version Bump and Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: ["closed"]
|
|
6
|
+
branches: ["main"]
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
bump-version:
|
|
13
|
+
if: |
|
|
14
|
+
github.event.pull_request.merged == true &&
|
|
15
|
+
(
|
|
16
|
+
contains(github.event.pull_request.title, '#patch') ||
|
|
17
|
+
contains(github.event.pull_request.title, '#minor') ||
|
|
18
|
+
contains(github.event.pull_request.title, '#major') ||
|
|
19
|
+
contains(github.event.pull_request.body, '#patch') ||
|
|
20
|
+
contains(github.event.pull_request.body, '#minor') ||
|
|
21
|
+
contains(github.event.pull_request.body, '#major')
|
|
22
|
+
)
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
permissions:
|
|
25
|
+
contents: write
|
|
26
|
+
outputs:
|
|
27
|
+
new_tag: ${{ steps.bump.outputs.new_version }}
|
|
28
|
+
previous_tag: ${{ steps.bump.outputs.previous_version }}
|
|
29
|
+
skipped: ${{ steps.bump.outputs.skipped }}
|
|
30
|
+
release_requested: ${{ steps.bump.outputs.should_release }}
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- name: Check out repository
|
|
34
|
+
uses: actions/checkout@v5
|
|
35
|
+
with:
|
|
36
|
+
fetch-depth: 0
|
|
37
|
+
|
|
38
|
+
- name: Bump version tag
|
|
39
|
+
id: bump
|
|
40
|
+
uses: so1omon563/custom-semver-bumper@v1
|
|
41
|
+
with:
|
|
42
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
43
|
+
branch_name: ${{ github.event.pull_request.head.ref }}
|
|
44
|
+
# Floating pointer tags are owned by release-creator so they only move
|
|
45
|
+
# when a GitHub Release is intentionally published.
|
|
46
|
+
|
|
47
|
+
create-release:
|
|
48
|
+
name: Create GitHub Release
|
|
49
|
+
needs: bump-version
|
|
50
|
+
if: |
|
|
51
|
+
needs.bump-version.outputs.release_requested == 'true' &&
|
|
52
|
+
needs.bump-version.outputs.skipped != 'true'
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
permissions:
|
|
55
|
+
contents: write
|
|
56
|
+
|
|
57
|
+
steps:
|
|
58
|
+
- name: Check out repository
|
|
59
|
+
uses: actions/checkout@v5
|
|
60
|
+
with:
|
|
61
|
+
fetch-depth: 0
|
|
62
|
+
|
|
63
|
+
- name: Create release
|
|
64
|
+
uses: so1omon563/release-creator@v1
|
|
65
|
+
with:
|
|
66
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
67
|
+
tag: ${{ needs.bump-version.outputs.new_tag }}
|
|
68
|
+
from-tag: ${{ needs.bump-version.outputs.previous_tag }}
|
|
69
|
+
tag-prefix: v
|
|
70
|
+
notes-format: grouped
|
|
71
|
+
move-major-tag: "true"
|
|
72
|
+
move-minor-tag: "true"
|
|
73
|
+
|
|
74
|
+
publish-pypi:
|
|
75
|
+
name: Publish to PyPI
|
|
76
|
+
needs:
|
|
77
|
+
- bump-version
|
|
78
|
+
- create-release
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
environment: pypi
|
|
81
|
+
permissions:
|
|
82
|
+
contents: read
|
|
83
|
+
id-token: write
|
|
84
|
+
|
|
85
|
+
steps:
|
|
86
|
+
- name: Check out release tag
|
|
87
|
+
uses: actions/checkout@v5
|
|
88
|
+
with:
|
|
89
|
+
ref: ${{ needs.bump-version.outputs.new_tag }}
|
|
90
|
+
|
|
91
|
+
- name: Set up Python
|
|
92
|
+
uses: actions/setup-python@v6
|
|
93
|
+
with:
|
|
94
|
+
python-version: "3.13"
|
|
95
|
+
|
|
96
|
+
- name: Install build tools
|
|
97
|
+
run: |
|
|
98
|
+
python -m pip install --upgrade pip
|
|
99
|
+
python -m pip install build twine
|
|
100
|
+
|
|
101
|
+
- name: Build package
|
|
102
|
+
run: python -m build
|
|
103
|
+
|
|
104
|
+
- name: Check package metadata
|
|
105
|
+
run: python -m twine check dist/*
|
|
106
|
+
|
|
107
|
+
- name: Publish package
|
|
108
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -6,6 +6,9 @@ on:
|
|
|
6
6
|
pull_request:
|
|
7
7
|
branches: ["main"]
|
|
8
8
|
|
|
9
|
+
env:
|
|
10
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
11
|
+
|
|
9
12
|
jobs:
|
|
10
13
|
check:
|
|
11
14
|
name: Python ${{ matrix.python-version }}
|
|
@@ -17,10 +20,10 @@ jobs:
|
|
|
17
20
|
|
|
18
21
|
steps:
|
|
19
22
|
- name: Check out repository
|
|
20
|
-
uses: actions/checkout@
|
|
23
|
+
uses: actions/checkout@v5
|
|
21
24
|
|
|
22
25
|
- name: Set up Python
|
|
23
|
-
uses: actions/setup-python@
|
|
26
|
+
uses: actions/setup-python@v6
|
|
24
27
|
with:
|
|
25
28
|
python-version: ${{ matrix.python-version }}
|
|
26
29
|
|
|
@@ -14,6 +14,9 @@ permissions:
|
|
|
14
14
|
contents: read
|
|
15
15
|
id-token: write
|
|
16
16
|
|
|
17
|
+
env:
|
|
18
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
19
|
+
|
|
17
20
|
jobs:
|
|
18
21
|
publish:
|
|
19
22
|
runs-on: ubuntu-latest
|
|
@@ -21,12 +24,12 @@ jobs:
|
|
|
21
24
|
|
|
22
25
|
steps:
|
|
23
26
|
- name: Check out repository
|
|
24
|
-
uses: actions/checkout@
|
|
27
|
+
uses: actions/checkout@v5
|
|
25
28
|
with:
|
|
26
29
|
ref: ${{ github.event.release.tag_name || inputs.ref }}
|
|
27
30
|
|
|
28
31
|
- name: Set up Python
|
|
29
|
-
uses: actions/setup-python@
|
|
32
|
+
uses: actions/setup-python@v6
|
|
30
33
|
with:
|
|
31
34
|
python-version: "3.13"
|
|
32
35
|
|
|
@@ -7,6 +7,9 @@ permissions:
|
|
|
7
7
|
contents: read
|
|
8
8
|
id-token: write
|
|
9
9
|
|
|
10
|
+
env:
|
|
11
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
12
|
+
|
|
10
13
|
jobs:
|
|
11
14
|
publish:
|
|
12
15
|
runs-on: ubuntu-latest
|
|
@@ -14,10 +17,10 @@ jobs:
|
|
|
14
17
|
|
|
15
18
|
steps:
|
|
16
19
|
- name: Check out repository
|
|
17
|
-
uses: actions/checkout@
|
|
20
|
+
uses: actions/checkout@v5
|
|
18
21
|
|
|
19
22
|
- name: Set up Python
|
|
20
|
-
uses: actions/setup-python@
|
|
23
|
+
uses: actions/setup-python@v6
|
|
21
24
|
with:
|
|
22
25
|
python-version: "3.13"
|
|
23
26
|
|
|
@@ -78,6 +78,22 @@ Pull requests should include:
|
|
|
78
78
|
- Screenshots or terminal notes for TUI changes when useful.
|
|
79
79
|
- Any config, packaging, or migration impact.
|
|
80
80
|
|
|
81
|
+
Use PRs for repository changes. When publishing local commits, branch from
|
|
82
|
+
`main` with a scoped name such as `codex/release-prep`, push that branch, and
|
|
83
|
+
open a draft PR instead of pushing directly to `main`. Treat `main` as a
|
|
84
|
+
protected branch even before GitHub branch protection or rulesets are enabled.
|
|
85
|
+
|
|
86
|
+
GitHub CLI notes:
|
|
87
|
+
|
|
88
|
+
- `gh auth status` may fail inside the sandbox even when the user is logged in
|
|
89
|
+
via the macOS keyring. Re-run `gh` auth, PR, and push operations outside the
|
|
90
|
+
sandbox when keyring access is required.
|
|
91
|
+
- Prefer the GitHub connector for PR creation when it has access. If it returns
|
|
92
|
+
`403 Resource not accessible by integration`, fall back to
|
|
93
|
+
`gh pr create --draft` using the authenticated CLI session.
|
|
94
|
+
- Keep PR bodies explicit about validation, especially `make check` results and
|
|
95
|
+
release workflow checks such as `actionlint`.
|
|
96
|
+
|
|
81
97
|
## Security & Configuration Tips
|
|
82
98
|
|
|
83
99
|
Never commit real Plex tokens, account tokens, debug logs, or local config files.
|
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.3.0 - 2026-06-12
|
|
6
|
+
|
|
7
|
+
- Added `plex-tui --diagnostics` for collecting environment and playback setup details.
|
|
8
|
+
- Added PR-merge version tagging, GitHub Release creation, and PyPI publishing workflow automation.
|
|
9
|
+
- Added a local release workflow and version metadata verification target.
|
|
10
|
+
- Added targeted playback troubleshooting hints for common `mpv` and Plex stream failures.
|
|
11
|
+
- Added a compact active-playback footer while media is playing.
|
|
12
|
+
- Simplified Settings rows into inline controls for numeric values, toggles, and option cycling.
|
|
13
|
+
- Tuned grid density geometry and stabilized unloaded poster placeholders.
|
|
14
|
+
- Added explicit Kitty renderer fallback diagnostics while native images remain disabled inside Textual.
|
|
15
|
+
|
|
5
16
|
## 0.2.1 - 2026-06-11
|
|
6
17
|
|
|
7
18
|
- Added GitHub Actions CI and PyPI Trusted Publishing workflow scaffolding.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: install-dev run test compile smoke build check-package check clean
|
|
1
|
+
.PHONY: install-dev run test compile smoke build check-package check-release check clean
|
|
2
2
|
|
|
3
3
|
PYTHON ?= .venv/bin/python
|
|
4
4
|
|
|
@@ -23,7 +23,10 @@ build:
|
|
|
23
23
|
check-package: build
|
|
24
24
|
$(PYTHON) -m twine check dist/*
|
|
25
25
|
|
|
26
|
-
check:
|
|
26
|
+
check-release:
|
|
27
|
+
$(PYTHON) scripts/check_release.py
|
|
28
|
+
|
|
29
|
+
check: smoke test compile check-release check-package
|
|
27
30
|
|
|
28
31
|
clean:
|
|
29
32
|
rm -rf build dist *.egg-info src/*.egg-info
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plex-tui
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A small standalone Plex terminal UI.
|
|
5
5
|
Project-URL: Homepage, https://github.com/so1omon563/plex-tui
|
|
6
6
|
Project-URL: Issues, https://github.com/so1omon563/plex-tui/issues
|
|
@@ -128,6 +128,7 @@ Useful CLI checks:
|
|
|
128
128
|
plex-tui --version
|
|
129
129
|
plex-tui --config-path
|
|
130
130
|
plex-tui --debug-log-path
|
|
131
|
+
plex-tui --diagnostics
|
|
131
132
|
plex-tui --smoke
|
|
132
133
|
```
|
|
133
134
|
|
|
@@ -222,13 +223,17 @@ available, and the details pane shows the effective playback choices.
|
|
|
222
223
|
- Settings screen for stream preferences, artwork modes, grid density, page
|
|
223
224
|
size, auto-load threshold, grid artwork prefetching, media view, and `mpv`
|
|
224
225
|
window size.
|
|
226
|
+
- App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
|
|
227
|
+
browsing settings.
|
|
225
228
|
|
|
226
229
|
## Artwork
|
|
227
230
|
|
|
228
231
|
Poster artwork renders as portable colored block art, so it works in ordinary
|
|
229
|
-
terminals without Kitty, iTerm2, or Sixel support. Native
|
|
230
|
-
|
|
231
|
-
|
|
232
|
+
terminals without Kitty, iTerm2, or Sixel support. Native Kitty image output is
|
|
233
|
+
disabled inside the Textual app because direct Kitty graphics protocol placement
|
|
234
|
+
can destabilize the UI. If `artwork_renderer` is set to `auto` or `kitty`, the
|
|
235
|
+
app falls back to block art and summarizes the fallback in
|
|
236
|
+
`plex-tui --diagnostics`.
|
|
232
237
|
|
|
233
238
|
Grid view prefetches artwork for the visible page immediately and, by default,
|
|
234
239
|
prepares three pages ahead in the background. `grid_prefetch_pages` can be set
|
|
@@ -241,6 +246,8 @@ Settings.
|
|
|
241
246
|
|
|
242
247
|
Playback diagnostics are written to `debug.log` in the app config directory.
|
|
243
248
|
Tokens are redacted from logged `mpv` arguments.
|
|
249
|
+
The Settings diagnostics section can show the debug log path, recent log lines,
|
|
250
|
+
and an app diagnostics summary for support reports.
|
|
244
251
|
|
|
245
252
|
Useful paths:
|
|
246
253
|
|
|
@@ -255,6 +262,12 @@ Enable browsing performance timings before launch:
|
|
|
255
262
|
PLEX_TUI_PERF_LOG=1 plex-tui
|
|
256
263
|
```
|
|
257
264
|
|
|
265
|
+
To collect environment information for issue reports:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
plex-tui --diagnostics
|
|
269
|
+
```
|
|
270
|
+
|
|
258
271
|
Verbose grid artwork internals are quieter by default. Include them only when
|
|
259
272
|
debugging poster loading:
|
|
260
273
|
|
|
@@ -92,6 +92,7 @@ Useful CLI checks:
|
|
|
92
92
|
plex-tui --version
|
|
93
93
|
plex-tui --config-path
|
|
94
94
|
plex-tui --debug-log-path
|
|
95
|
+
plex-tui --diagnostics
|
|
95
96
|
plex-tui --smoke
|
|
96
97
|
```
|
|
97
98
|
|
|
@@ -186,13 +187,17 @@ available, and the details pane shows the effective playback choices.
|
|
|
186
187
|
- Settings screen for stream preferences, artwork modes, grid density, page
|
|
187
188
|
size, auto-load threshold, grid artwork prefetching, media view, and `mpv`
|
|
188
189
|
window size.
|
|
190
|
+
- App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
|
|
191
|
+
browsing settings.
|
|
189
192
|
|
|
190
193
|
## Artwork
|
|
191
194
|
|
|
192
195
|
Poster artwork renders as portable colored block art, so it works in ordinary
|
|
193
|
-
terminals without Kitty, iTerm2, or Sixel support. Native
|
|
194
|
-
|
|
195
|
-
|
|
196
|
+
terminals without Kitty, iTerm2, or Sixel support. Native Kitty image output is
|
|
197
|
+
disabled inside the Textual app because direct Kitty graphics protocol placement
|
|
198
|
+
can destabilize the UI. If `artwork_renderer` is set to `auto` or `kitty`, the
|
|
199
|
+
app falls back to block art and summarizes the fallback in
|
|
200
|
+
`plex-tui --diagnostics`.
|
|
196
201
|
|
|
197
202
|
Grid view prefetches artwork for the visible page immediately and, by default,
|
|
198
203
|
prepares three pages ahead in the background. `grid_prefetch_pages` can be set
|
|
@@ -205,6 +210,8 @@ Settings.
|
|
|
205
210
|
|
|
206
211
|
Playback diagnostics are written to `debug.log` in the app config directory.
|
|
207
212
|
Tokens are redacted from logged `mpv` arguments.
|
|
213
|
+
The Settings diagnostics section can show the debug log path, recent log lines,
|
|
214
|
+
and an app diagnostics summary for support reports.
|
|
208
215
|
|
|
209
216
|
Useful paths:
|
|
210
217
|
|
|
@@ -219,6 +226,12 @@ Enable browsing performance timings before launch:
|
|
|
219
226
|
PLEX_TUI_PERF_LOG=1 plex-tui
|
|
220
227
|
```
|
|
221
228
|
|
|
229
|
+
To collect environment information for issue reports:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
plex-tui --diagnostics
|
|
233
|
+
```
|
|
234
|
+
|
|
222
235
|
Verbose grid artwork internals are quieter by default. Include them only when
|
|
223
236
|
debugging poster loading:
|
|
224
237
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Release Checklist
|
|
2
2
|
|
|
3
|
-
Use this checklist for
|
|
3
|
+
Use this checklist for planned app releases from `so1omon563/plex-tui`.
|
|
4
|
+
Normal releases now move through a pull request into `main`; the merge runs
|
|
5
|
+
`.github/workflows/bump.yml`, creates the version tag, optionally creates the
|
|
6
|
+
GitHub Release, and publishes to PyPI in the same workflow run.
|
|
4
7
|
|
|
5
8
|
## 1. Local Validation
|
|
6
9
|
|
|
@@ -13,15 +16,28 @@ make check
|
|
|
13
16
|
|
|
14
17
|
`make check` runs smoke, tests, compile, and package metadata validation.
|
|
15
18
|
|
|
16
|
-
## 2.
|
|
19
|
+
## 2. Release PR Prep
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
Prepare a release PR:
|
|
19
22
|
|
|
20
23
|
- Update `version` in `pyproject.toml`.
|
|
21
24
|
- Update `src/plextui/__init__.py`.
|
|
22
|
-
- Move `CHANGELOG.md` entries from `Unreleased` to the release date.
|
|
25
|
+
- Move `CHANGELOG.md` entries from `Unreleased` to the release version and date.
|
|
23
26
|
- Confirm `README.md`, `PACKAGING.md`, and `config.example.toml` match current behavior.
|
|
24
27
|
- Confirm the Git remote points to `https://github.com/so1omon563/plex-tui`.
|
|
28
|
+
- Make sure the PR title or body includes the right bump marker:
|
|
29
|
+
`#patch`, `#minor`, or `#major`.
|
|
30
|
+
- Add `#release`, `#publish`, or `#ship` when the merge should create the
|
|
31
|
+
GitHub Release and publish to PyPI.
|
|
32
|
+
|
|
33
|
+
The semver bumper creates tags from merge metadata, but it does not edit project
|
|
34
|
+
files. Keep the version files and changelog in the PR aligned with the tag the
|
|
35
|
+
merge will create.
|
|
36
|
+
|
|
37
|
+
Do not update Homebrew or AUR checksums in the release PR. Those checksums depend
|
|
38
|
+
on the tag or published artifact that does not exist until after merge. Handle
|
|
39
|
+
packaging repository updates in a follow-up PR that does not include `#patch`,
|
|
40
|
+
`#minor`, or `#major`, so it cannot create another version tag.
|
|
25
41
|
|
|
26
42
|
## 3. Build Artifacts
|
|
27
43
|
|
|
@@ -57,18 +73,20 @@ python -m venv /tmp/plex-tui-testpypi
|
|
|
57
73
|
/tmp/plex-tui-testpypi/bin/plex-tui --smoke
|
|
58
74
|
```
|
|
59
75
|
|
|
60
|
-
## 5.
|
|
76
|
+
## 5. Merge And Publish
|
|
61
77
|
|
|
62
|
-
|
|
78
|
+
Merge the release PR after CI passes. The `Version Bump and Release` workflow:
|
|
63
79
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
80
|
+
1. Runs `so1omon563/custom-semver-bumper@v1` on the merged PR and creates the
|
|
81
|
+
next `vX.Y.Z` tag when the merged PR title or body includes `#patch`,
|
|
82
|
+
`#minor`, or `#major`.
|
|
83
|
+
2. Runs `so1omon563/release-creator@v1` when the merge message includes
|
|
84
|
+
`#release`, `#publish`, or `#ship`.
|
|
85
|
+
3. Publishes the tagged package to PyPI through Trusted Publishing after the
|
|
86
|
+
GitHub Release is created.
|
|
68
87
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
the same workflow can be run manually with `ref=vX.Y.Z`.
|
|
88
|
+
The older `Publish to PyPI` workflow remains available as a manual fallback with
|
|
89
|
+
`ref=vX.Y.Z`, and still supports manually created GitHub Releases.
|
|
72
90
|
|
|
73
91
|
After PyPI publishes, validate the real package:
|
|
74
92
|
|
|
@@ -95,6 +113,8 @@ brew test so1omon563/plex-tui/plex-tui
|
|
|
95
113
|
brew audit --strict --online so1omon563/plex-tui/plex-tui
|
|
96
114
|
```
|
|
97
115
|
|
|
116
|
+
Open this as a packaging-only PR without a semver bump marker.
|
|
117
|
+
|
|
98
118
|
## 7. Arch AUR
|
|
99
119
|
|
|
100
120
|
Update `packaging/aur/PKGBUILD` and regenerate `.SRCINFO`:
|
|
@@ -116,7 +136,13 @@ git commit -m "Update to X.Y.Z-1"
|
|
|
116
136
|
git push
|
|
117
137
|
```
|
|
118
138
|
|
|
119
|
-
|
|
139
|
+
Open this as a packaging-only PR without a semver bump marker.
|
|
140
|
+
|
|
141
|
+
## Manual Fallbacks
|
|
142
|
+
|
|
143
|
+
If a tag exists but the release step needs to be retried, create the GitHub
|
|
144
|
+
Release manually or with `so1omon563/release-creator@v1`, then run
|
|
145
|
+
`Publish to PyPI` manually with `ref=vX.Y.Z`.
|
|
120
146
|
|
|
121
147
|
Prefer Trusted Publishing. If it is not available and a PyPI token is
|
|
122
148
|
configured, upload validated artifacts manually:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
## App UX
|
|
4
|
+
|
|
5
|
+
- Verify real library browsing after the prefetch/rendering and idle-detail
|
|
6
|
+
passes, especially any remaining list/grid latency on large remote libraries.
|
|
7
|
+
- Tune grid artwork defaults such as `grid_prefetch_pages` only if verification
|
|
8
|
+
shows the current defaults are too aggressive or too conservative.
|
|
9
|
+
- Continue tuning focus and selection affordances based on real terminal themes.
|
|
10
|
+
- Continue refining Settings ergonomics as new preferences are added.
|
|
11
|
+
- Consider separate poster-size controls only if density presets are not enough
|
|
12
|
+
after real-library verification.
|
|
13
|
+
- Continue improving playback diagnostics as real-world `mpv` and Plex stream
|
|
14
|
+
failures show up in use.
|
|
15
|
+
|
|
16
|
+
## Packaging & Distribution
|
|
17
|
+
|
|
18
|
+
- Keep planned releases moving through PRs so merged release PRs drive automatic
|
|
19
|
+
tagging, GitHub Release creation, and PyPI publishing.
|
|
20
|
+
- Add a GitHub ruleset or branch protection for `main` that requires branch
|
|
21
|
+
work, pull requests, and passing checks before merge.
|
|
22
|
+
- Improve Homebrew install time; the current formula works but builds native
|
|
23
|
+
Python resources such as `pillow` from source.
|
|
24
|
+
- Automate Homebrew tap and AUR metadata updates after PyPI releases by opening
|
|
25
|
+
packaging-only pull requests with the new artifact URLs and checksums. These
|
|
26
|
+
PRs must omit semver bump markers so they do not create another release tag.
|
|
27
|
+
- Consider standalone artifacts only after the app behavior stabilizes.
|
|
28
|
+
|
|
29
|
+
## Technical Follow-Up
|
|
30
|
+
|
|
31
|
+
- Use `PLEX_TUI_PERF_LOG=1` for focused regression checks when changing grid,
|
|
32
|
+
artwork, pagination, or detail-loading behavior.
|
|
33
|
+
- Revisit whether verbose `PLEX_TUI_ARTWORK_LOG=1` should expose more structured artwork counters.
|
|
34
|
+
- Revisit native terminal image support with a Kitty Unicode-placeholder
|
|
35
|
+
prototype. Direct Kitty graphics protocol placement inside Textual caused UI
|
|
36
|
+
hangs, so any future implementation should transmit images quietly, render
|
|
37
|
+
normal placeholder text that Textual can redraw safely, and keep block art as
|
|
38
|
+
the mandatory fallback.
|
|
39
|
+
- Add focused regression tests for any real-world Plex media edge cases discovered during use.
|
|
@@ -31,7 +31,7 @@ client_identifier = "plex-tui-your-stable-client-id"
|
|
|
31
31
|
# artwork_mode can be "on" or "off".
|
|
32
32
|
# artwork_mode = "on"
|
|
33
33
|
# artwork_renderer can be "block", "auto", or "kitty". Auto/kitty currently
|
|
34
|
-
# fall back to block art
|
|
34
|
+
# fall back to block art because direct Kitty image placement is unsafe in Textual.
|
|
35
35
|
# artwork_renderer = "block"
|
|
36
36
|
# detail_artwork_mode can be "list_only", "on", or "off".
|
|
37
37
|
# detail_artwork_mode = "list_only"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
pkgbase = plex-tui
|
|
2
2
|
pkgdesc = Standalone Plex terminal UI with mpv playback
|
|
3
|
-
pkgver = 0.2.
|
|
3
|
+
pkgver = 0.2.1
|
|
4
4
|
pkgrel = 1
|
|
5
5
|
url = https://github.com/so1omon563/plex-tui
|
|
6
6
|
arch = any
|
|
@@ -17,7 +17,7 @@ pkgbase = plex-tui
|
|
|
17
17
|
depends = python-plexapi
|
|
18
18
|
depends = python-rich
|
|
19
19
|
depends = python-textual
|
|
20
|
-
source = plex-tui-0.2.
|
|
21
|
-
sha256sums =
|
|
20
|
+
source = plex-tui-0.2.1.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.2.1.tar.gz
|
|
21
|
+
sha256sums = f1b84354e5a0f7885fb7391d81f6d15ddece55822c8a5d5d08d01b4fadffbbeb
|
|
22
22
|
|
|
23
23
|
pkgname = plex-tui
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Maintainer: so1omon
|
|
2
2
|
pkgname=plex-tui
|
|
3
|
-
pkgver=0.2.
|
|
3
|
+
pkgver=0.2.1
|
|
4
4
|
pkgrel=1
|
|
5
5
|
pkgdesc="Standalone Plex terminal UI with mpv playback"
|
|
6
6
|
arch=("any")
|
|
@@ -23,7 +23,7 @@ makedepends=(
|
|
|
23
23
|
)
|
|
24
24
|
checkdepends=("python-pytest")
|
|
25
25
|
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
|
|
26
|
-
sha256sums=("
|
|
26
|
+
sha256sums=("f1b84354e5a0f7885fb7391d81f6d15ddece55822c8a5d5d08d01b4fadffbbeb")
|
|
27
27
|
|
|
28
28
|
build() {
|
|
29
29
|
cd "$pkgname-$pkgver"
|