plex-tui 0.3.0__tar.gz → 0.3.6__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.3.0 → plex_tui-0.3.6}/.github/workflows/aur.yml +1 -1
- plex_tui-0.3.6/.github/workflows/post-release-aur.yml +141 -0
- plex_tui-0.3.6/.github/workflows/post-release-homebrew.yml +129 -0
- plex_tui-0.3.6/.github/workflows/publish-aur.yml +102 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/AGENTS.md +14 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/CHANGELOG.md +16 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/PACKAGING.md +17 -5
- {plex_tui-0.3.0 → plex_tui-0.3.6}/PKG-INFO +8 -1
- {plex_tui-0.3.0 → plex_tui-0.3.6}/README.md +7 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/RELEASE.md +23 -5
- plex_tui-0.3.6/ROADMAP.md +57 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/packaging/aur/.SRCINFO +3 -3
- {plex_tui-0.3.0 → plex_tui-0.3.6}/packaging/aur/PKGBUILD +2 -2
- {plex_tui-0.3.0 → plex_tui-0.3.6}/pyproject.toml +1 -1
- {plex_tui-0.3.0 → plex_tui-0.3.6}/scripts/check_release.py +7 -3
- plex_tui-0.3.6/scripts/update_aur_package.py +67 -0
- plex_tui-0.3.6/scripts/update_homebrew_formula.py +192 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/__init__.py +1 -1
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/app.py +154 -42
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_app_helpers.py +91 -11
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_app_navigation.py +1 -1
- plex_tui-0.3.6/tests/test_release_checks.py +210 -0
- plex_tui-0.3.0/ROADMAP.md +0 -39
- plex_tui-0.3.0/tests/test_release_checks.py +0 -109
- {plex_tui-0.3.0 → plex_tui-0.3.6}/.github/workflows/bump.yml +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/.github/workflows/ci.yml +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/.github/workflows/publish-pypi.yml +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/.github/workflows/publish-testpypi.yml +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/.gitignore +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/LICENSE +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/Makefile +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/config.example.toml +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/docs/assets/grid-view.png +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/docs/assets/list-view.png +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/packaging/aur/README.md +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/packaging/homebrew/README.md +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/__main__.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/artwork.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/auth.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/config.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/models.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/player.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/plex_service.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/src/plextui/smoke.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_artwork.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_auth.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_cli.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_config.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_player.py +0 -0
- {plex_tui-0.3.0 → plex_tui-0.3.6}/tests/test_plex_service.py +0 -0
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
- name: Generate .SRCINFO
|
|
44
44
|
working-directory: packaging/aur
|
|
45
45
|
run: |
|
|
46
|
-
sudo -u builder makepkg --printsrcinfo
|
|
46
|
+
sudo -u builder makepkg --printsrcinfo | sudo -u builder tee .SRCINFO.generated > /dev/null
|
|
47
47
|
diff -u .SRCINFO .SRCINFO.generated
|
|
48
48
|
|
|
49
49
|
- name: Run namcap
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
name: Post-release AUR Update
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_run:
|
|
5
|
+
workflows: ["Version Bump and Release"]
|
|
6
|
+
types: ["completed"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
tag:
|
|
10
|
+
description: "Release tag to package, such as v0.3.0. Defaults to the latest GitHub Release."
|
|
11
|
+
required: false
|
|
12
|
+
type: string
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
aur-pr:
|
|
19
|
+
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: write
|
|
23
|
+
pull-requests: write
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: Check out repository
|
|
27
|
+
uses: actions/checkout@v5
|
|
28
|
+
|
|
29
|
+
- name: Check packaging PR token
|
|
30
|
+
env:
|
|
31
|
+
PACKAGING_PR_TOKEN: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
32
|
+
run: |
|
|
33
|
+
if [ -z "$PACKAGING_PR_TOKEN" ]; then
|
|
34
|
+
echo "PACKAGING_PR_TOKEN secret is required to create, approve, and auto-merge packaging PRs" >&2
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
- name: Determine release tag
|
|
39
|
+
id: release
|
|
40
|
+
env:
|
|
41
|
+
GH_TOKEN: ${{ github.token }}
|
|
42
|
+
REQUESTED_TAG: ${{ github.event.inputs.tag }}
|
|
43
|
+
run: |
|
|
44
|
+
set -euo pipefail
|
|
45
|
+
|
|
46
|
+
if [ -n "$REQUESTED_TAG" ]; then
|
|
47
|
+
tag="$REQUESTED_TAG"
|
|
48
|
+
else
|
|
49
|
+
tag="$(gh release list --limit 1 --json tagName --jq '.[0].tagName')"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
if ! [[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
53
|
+
echo "Release tag must look like vX.Y.Z: $tag" >&2
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
version="${tag#v}"
|
|
58
|
+
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
59
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
60
|
+
|
|
61
|
+
- name: Download source archive and checksum
|
|
62
|
+
id: archive
|
|
63
|
+
env:
|
|
64
|
+
TAG: ${{ steps.release.outputs.tag }}
|
|
65
|
+
run: |
|
|
66
|
+
set -euo pipefail
|
|
67
|
+
|
|
68
|
+
url="https://github.com/${GITHUB_REPOSITORY}/archive/refs/tags/${TAG}.tar.gz"
|
|
69
|
+
curl --fail --location --retry 5 --retry-delay 2 --output source.tar.gz "$url"
|
|
70
|
+
sha256="$(sha256sum source.tar.gz | awk '{print $1}')"
|
|
71
|
+
echo "sha256=$sha256" >> "$GITHUB_OUTPUT"
|
|
72
|
+
|
|
73
|
+
- name: Update PKGBUILD
|
|
74
|
+
run: |
|
|
75
|
+
python scripts/update_aur_package.py \
|
|
76
|
+
"${{ steps.release.outputs.version }}" \
|
|
77
|
+
"${{ steps.archive.outputs.sha256 }}"
|
|
78
|
+
|
|
79
|
+
- name: Regenerate and validate AUR package
|
|
80
|
+
run: |
|
|
81
|
+
set -euo pipefail
|
|
82
|
+
|
|
83
|
+
docker run --rm \
|
|
84
|
+
-v "$PWD:/workspace" \
|
|
85
|
+
-w /workspace/packaging/aur \
|
|
86
|
+
archlinux:base-devel \
|
|
87
|
+
bash -lc '
|
|
88
|
+
set -euo pipefail
|
|
89
|
+
pacman -Syu --noconfirm git namcap sudo
|
|
90
|
+
useradd --create-home --shell /bin/bash builder
|
|
91
|
+
echo "builder ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/builder
|
|
92
|
+
chown -R builder:builder /workspace/packaging/aur
|
|
93
|
+
sudo -u builder makepkg --printsrcinfo | sudo -u builder tee .SRCINFO > /dev/null
|
|
94
|
+
sudo -u builder makepkg --clean --syncdeps --noconfirm --check
|
|
95
|
+
namcap PKGBUILD ./*.pkg.tar.*
|
|
96
|
+
'
|
|
97
|
+
|
|
98
|
+
sudo chown -R "$(id -u):$(id -g)" packaging/aur
|
|
99
|
+
|
|
100
|
+
- name: Remove generated package artifacts
|
|
101
|
+
run: |
|
|
102
|
+
rm -f source.tar.gz
|
|
103
|
+
find packaging/aur -maxdepth 1 -type f \
|
|
104
|
+
\( -name "*.pkg.tar.*" -o -name "*.tar.gz" \) \
|
|
105
|
+
-delete
|
|
106
|
+
|
|
107
|
+
- name: Create packaging pull request
|
|
108
|
+
id: create-pr
|
|
109
|
+
uses: peter-evans/create-pull-request@v7
|
|
110
|
+
with:
|
|
111
|
+
token: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
112
|
+
branch: automation/aur-${{ steps.release.outputs.tag }}
|
|
113
|
+
delete-branch: true
|
|
114
|
+
commit-message: Update AUR package to ${{ steps.release.outputs.tag }}
|
|
115
|
+
title: Update AUR package to ${{ steps.release.outputs.tag }}
|
|
116
|
+
body: |
|
|
117
|
+
Updates Arch AUR packaging metadata for `${{ steps.release.outputs.tag }}`.
|
|
118
|
+
|
|
119
|
+
Validation performed by this workflow:
|
|
120
|
+
- downloaded the release source archive and computed the sha256
|
|
121
|
+
- regenerated `packaging/aur/.SRCINFO`
|
|
122
|
+
- ran `makepkg --clean --syncdeps --noconfirm --check`
|
|
123
|
+
- ran `namcap`
|
|
124
|
+
|
|
125
|
+
This is a packaging-only PR and intentionally has no semver bump marker.
|
|
126
|
+
|
|
127
|
+
- name: Approve packaging pull request
|
|
128
|
+
if: steps.create-pr.outputs.pull-request-number != ''
|
|
129
|
+
env:
|
|
130
|
+
GH_TOKEN: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
131
|
+
PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
|
|
132
|
+
run: |
|
|
133
|
+
gh pr review "$PR_NUMBER" --approve
|
|
134
|
+
|
|
135
|
+
- name: Enable packaging pull request auto-merge
|
|
136
|
+
if: steps.create-pr.outputs.pull-request-number != ''
|
|
137
|
+
env:
|
|
138
|
+
GH_TOKEN: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
139
|
+
PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
|
|
140
|
+
run: |
|
|
141
|
+
gh pr merge "$PR_NUMBER" --auto --squash --delete-branch
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
name: Post-release Homebrew Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_run:
|
|
5
|
+
workflows: ["Version Bump and Release"]
|
|
6
|
+
types: ["completed"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
tag:
|
|
10
|
+
description: "Release tag to package, such as v0.3.0. Defaults to the latest GitHub Release."
|
|
11
|
+
required: false
|
|
12
|
+
type: string
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
publish-tap:
|
|
19
|
+
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
|
20
|
+
runs-on: macos-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
steps:
|
|
25
|
+
- name: Check out repository
|
|
26
|
+
uses: actions/checkout@v5
|
|
27
|
+
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v6
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.13"
|
|
32
|
+
|
|
33
|
+
- name: Check packaging PR token
|
|
34
|
+
env:
|
|
35
|
+
PACKAGING_PR_TOKEN: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
36
|
+
run: |
|
|
37
|
+
if [ -z "$PACKAGING_PR_TOKEN" ]; then
|
|
38
|
+
echo "PACKAGING_PR_TOKEN secret is required to publish the Homebrew tap" >&2
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
- name: Determine release tag
|
|
43
|
+
id: release
|
|
44
|
+
env:
|
|
45
|
+
GH_TOKEN: ${{ github.token }}
|
|
46
|
+
REQUESTED_TAG: ${{ github.event.inputs.tag }}
|
|
47
|
+
run: |
|
|
48
|
+
set -euo pipefail
|
|
49
|
+
|
|
50
|
+
if [ -n "$REQUESTED_TAG" ]; then
|
|
51
|
+
tag="$REQUESTED_TAG"
|
|
52
|
+
else
|
|
53
|
+
tag="$(gh release list --limit 1 --json tagName --jq '.[0].tagName')"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if ! [[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
57
|
+
echo "Release tag must look like vX.Y.Z: $tag" >&2
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
version="${tag#v}"
|
|
62
|
+
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
63
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
64
|
+
|
|
65
|
+
- name: Tap Homebrew repository
|
|
66
|
+
id: tap
|
|
67
|
+
env:
|
|
68
|
+
PACKAGING_PR_TOKEN: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
69
|
+
run: |
|
|
70
|
+
brew tap so1omon563/plex-tui "https://x-access-token:${PACKAGING_PR_TOKEN}@github.com/so1omon563/homebrew-plex-tui.git"
|
|
71
|
+
echo "path=$(brew --repo so1omon563/plex-tui)" >> "$GITHUB_OUTPUT"
|
|
72
|
+
|
|
73
|
+
- name: Update formula source
|
|
74
|
+
run: |
|
|
75
|
+
python scripts/update_homebrew_formula.py \
|
|
76
|
+
"${{ steps.tap.outputs.path }}/Formula/plex-tui.rb" \
|
|
77
|
+
"${{ steps.release.outputs.version }}"
|
|
78
|
+
|
|
79
|
+
- name: Audit formula
|
|
80
|
+
working-directory: ${{ steps.tap.outputs.path }}
|
|
81
|
+
run: |
|
|
82
|
+
brew audit --strict --online so1omon563/plex-tui/plex-tui
|
|
83
|
+
|
|
84
|
+
- name: Commit tap update
|
|
85
|
+
id: commit
|
|
86
|
+
working-directory: ${{ steps.tap.outputs.path }}
|
|
87
|
+
env:
|
|
88
|
+
VERSION: ${{ steps.release.outputs.version }}
|
|
89
|
+
run: |
|
|
90
|
+
set -euo pipefail
|
|
91
|
+
|
|
92
|
+
if git diff --quiet -- Formula/plex-tui.rb; then
|
|
93
|
+
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
94
|
+
echo "Homebrew tap is already up to date."
|
|
95
|
+
exit 0
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
branch="automation/plex-tui-v${VERSION}"
|
|
99
|
+
git switch -c "$branch"
|
|
100
|
+
git config user.name "github-actions[bot]"
|
|
101
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
102
|
+
git add Formula/plex-tui.rb
|
|
103
|
+
git commit -m "Update plex-tui to ${VERSION}"
|
|
104
|
+
git push origin "$branch"
|
|
105
|
+
|
|
106
|
+
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
107
|
+
echo "branch=$branch" >> "$GITHUB_OUTPUT"
|
|
108
|
+
|
|
109
|
+
- name: Open and merge tap pull request
|
|
110
|
+
if: steps.commit.outputs.changed == 'true'
|
|
111
|
+
working-directory: ${{ steps.tap.outputs.path }}
|
|
112
|
+
env:
|
|
113
|
+
GH_TOKEN: ${{ secrets.PACKAGING_PR_TOKEN }}
|
|
114
|
+
VERSION: ${{ steps.release.outputs.version }}
|
|
115
|
+
BRANCH: ${{ steps.commit.outputs.branch }}
|
|
116
|
+
run: |
|
|
117
|
+
set -euo pipefail
|
|
118
|
+
|
|
119
|
+
pr_url="$(gh pr create \
|
|
120
|
+
--repo so1omon563/homebrew-plex-tui \
|
|
121
|
+
--base main \
|
|
122
|
+
--head "$BRANCH" \
|
|
123
|
+
--title "Update plex-tui to ${VERSION}" \
|
|
124
|
+
--body "Automated Homebrew tap update for plex-tui ${VERSION}.")"
|
|
125
|
+
|
|
126
|
+
gh pr merge "$pr_url" \
|
|
127
|
+
--repo so1omon563/homebrew-plex-tui \
|
|
128
|
+
--squash \
|
|
129
|
+
--delete-branch
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: Publish AUR Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_run:
|
|
5
|
+
workflows: ["AUR Package"]
|
|
6
|
+
types: ["completed"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
publish:
|
|
14
|
+
if: |
|
|
15
|
+
github.event_name == 'workflow_dispatch' ||
|
|
16
|
+
(
|
|
17
|
+
github.event.workflow_run.conclusion == 'success' &&
|
|
18
|
+
github.event.workflow_run.head_branch == 'main' &&
|
|
19
|
+
github.event.workflow_run.event == 'push'
|
|
20
|
+
)
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: Check out repository
|
|
27
|
+
uses: actions/checkout@v5
|
|
28
|
+
with:
|
|
29
|
+
ref: ${{ github.event.workflow_run.head_sha || github.sha }}
|
|
30
|
+
|
|
31
|
+
- name: Read package version
|
|
32
|
+
id: package
|
|
33
|
+
run: |
|
|
34
|
+
set -euo pipefail
|
|
35
|
+
|
|
36
|
+
version="$(sed -n 's/^pkgver=//p' packaging/aur/PKGBUILD)"
|
|
37
|
+
release="$(sed -n 's/^pkgrel=//p' packaging/aur/PKGBUILD)"
|
|
38
|
+
|
|
39
|
+
if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
40
|
+
echo "pkgver must look like X.Y.Z: $version" >&2
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
if ! [[ "$release" =~ ^[0-9]+$ ]]; then
|
|
44
|
+
echo "pkgrel must be numeric: $release" >&2
|
|
45
|
+
exit 1
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
49
|
+
echo "release=$release" >> "$GITHUB_OUTPUT"
|
|
50
|
+
|
|
51
|
+
- name: Configure AUR SSH
|
|
52
|
+
env:
|
|
53
|
+
AUR_SSH_PRIVATE_KEY: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
|
|
54
|
+
run: |
|
|
55
|
+
set -euo pipefail
|
|
56
|
+
|
|
57
|
+
if [ -z "$AUR_SSH_PRIVATE_KEY" ]; then
|
|
58
|
+
echo "AUR_SSH_PRIVATE_KEY secret is required to publish to AUR" >&2
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
install -m 700 -d ~/.ssh
|
|
63
|
+
printf '%s\n' "$AUR_SSH_PRIVATE_KEY" > ~/.ssh/aur
|
|
64
|
+
chmod 600 ~/.ssh/aur
|
|
65
|
+
ssh-keyscan -H aur.archlinux.org >> ~/.ssh/known_hosts
|
|
66
|
+
|
|
67
|
+
cat > ~/.ssh/config <<'EOF'
|
|
68
|
+
Host aur.archlinux.org
|
|
69
|
+
IdentityFile ~/.ssh/aur
|
|
70
|
+
IdentitiesOnly yes
|
|
71
|
+
User aur
|
|
72
|
+
EOF
|
|
73
|
+
chmod 600 ~/.ssh/config
|
|
74
|
+
|
|
75
|
+
- name: Clone AUR package repository
|
|
76
|
+
run: |
|
|
77
|
+
git clone ssh://aur@aur.archlinux.org/plex-tui.git aur-package
|
|
78
|
+
|
|
79
|
+
- name: Copy package metadata
|
|
80
|
+
run: |
|
|
81
|
+
cp packaging/aur/PKGBUILD aur-package/PKGBUILD
|
|
82
|
+
cp packaging/aur/.SRCINFO aur-package/.SRCINFO
|
|
83
|
+
|
|
84
|
+
- name: Commit and push AUR package
|
|
85
|
+
working-directory: aur-package
|
|
86
|
+
env:
|
|
87
|
+
VERSION: ${{ steps.package.outputs.version }}
|
|
88
|
+
RELEASE: ${{ steps.package.outputs.release }}
|
|
89
|
+
run: |
|
|
90
|
+
set -euo pipefail
|
|
91
|
+
|
|
92
|
+
git config user.name "github-actions[bot]"
|
|
93
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
94
|
+
|
|
95
|
+
if git diff --quiet -- PKGBUILD .SRCINFO; then
|
|
96
|
+
echo "AUR package repository is already up to date."
|
|
97
|
+
exit 0
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
git add PKGBUILD .SRCINFO
|
|
101
|
+
git commit -m "Update to ${VERSION}-${RELEASE}"
|
|
102
|
+
git push origin master
|
|
@@ -83,6 +83,20 @@ Use PRs for repository changes. When publishing local commits, branch from
|
|
|
83
83
|
open a draft PR instead of pushing directly to `main`. Treat `main` as a
|
|
84
84
|
protected branch even before GitHub branch protection or rulesets are enabled.
|
|
85
85
|
|
|
86
|
+
By default, PR titles or bodies should include exactly one semver bump marker:
|
|
87
|
+
`#patch`, `#minor`, or `#major`. Most changes should advance tags when merged,
|
|
88
|
+
even when they do not publish a GitHub Release. Add `#release` only when the
|
|
89
|
+
merge should create the GitHub Release and publish package channels. Exceptions
|
|
90
|
+
are allowed for packaging-only follow-ups, automation repair, docs-only
|
|
91
|
+
maintenance, or other changes that should not create a new version tag; call out
|
|
92
|
+
the reason in the PR body when omitting a bump marker.
|
|
93
|
+
|
|
94
|
+
When preparing or estimating a release version, fetch remote tags first with
|
|
95
|
+
`git fetch --tags origin` and base the decision on the latest origin tag, not
|
|
96
|
+
only local tags or the latest GitHub Release. Non-release PRs with `#patch`,
|
|
97
|
+
`#minor`, or `#major` still create tags, so release prep files should match the
|
|
98
|
+
tag that the release PR merge will create.
|
|
99
|
+
|
|
86
100
|
GitHub CLI notes:
|
|
87
101
|
|
|
88
102
|
- `gh auth status` may fail inside the sandbox even when the user is logged in
|
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.3.6 - 2026-06-12
|
|
6
|
+
|
|
7
|
+
- Polished grid cards so poster placeholders, cached artwork, titles,
|
|
8
|
+
subtitles, and selected status align more evenly in the media pane.
|
|
9
|
+
- Improved the details pane hierarchy with clearer playback readiness,
|
|
10
|
+
explicit empty metadata/stream states, tighter preference rows, and wrapped
|
|
11
|
+
summaries.
|
|
12
|
+
- Improved Settings detail feedback with consistent controls guidance, clearer
|
|
13
|
+
armed-confirmation text, and more useful saved-setting summaries.
|
|
14
|
+
- Polished playback diagnostics with clearer active playback status, structured
|
|
15
|
+
playback error details, and more direct debug-log follow-up guidance.
|
|
16
|
+
- Added shieldcn.dev README badges for CI, release, PyPI, AUR, Homebrew tap,
|
|
17
|
+
and license status.
|
|
18
|
+
- Documented release-prep guidance for fetching origin tags before deciding the
|
|
19
|
+
next release version.
|
|
20
|
+
|
|
5
21
|
## 0.3.0 - 2026-06-12
|
|
6
22
|
|
|
7
23
|
- Added `plex-tui --diagnostics` for collecting environment and playback setup details.
|
|
@@ -90,13 +90,25 @@ Validation is handled by `.github/workflows/aur.yml`, which runs inside
|
|
|
90
90
|
For each new app release:
|
|
91
91
|
|
|
92
92
|
1. Publish and validate PyPI.
|
|
93
|
-
2.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
2. Let the `Post-release Homebrew Publish` workflow update, validate, and merge
|
|
94
|
+
the Homebrew tap formula.
|
|
95
|
+
3. Let the `Post-release AUR Update` workflow update AUR metadata, open the
|
|
96
|
+
packaging PR, approve it, and enable auto-merge.
|
|
97
|
+
4. After the packaging PR merges and the `AUR Package` workflow passes on
|
|
98
|
+
`main`, the `Publish AUR Package` workflow pushes the validated `PKGBUILD`
|
|
99
|
+
and `.SRCINFO` to AUR.
|
|
100
|
+
|
|
101
|
+
The AUR automation requires:
|
|
102
|
+
|
|
103
|
+
- `PACKAGING_PR_TOKEN`: a token that can create, approve, and auto-merge the
|
|
104
|
+
generated packaging PR when branch protection requires those actions.
|
|
105
|
+
- `AUR_SSH_PRIVATE_KEY`: the private SSH key for pushing to
|
|
106
|
+
`ssh://aur@aur.archlinux.org/plex-tui.git`.
|
|
107
|
+
|
|
108
|
+
The Homebrew automation uses `PACKAGING_PR_TOKEN`; that token must also be able
|
|
109
|
+
to push branches and merge pull requests in `so1omon563/homebrew-plex-tui`.
|
|
97
110
|
|
|
98
111
|
## Known Follow-Up
|
|
99
112
|
|
|
100
|
-
- Automate Homebrew tap updates after PyPI publishing.
|
|
101
113
|
- Investigate faster Homebrew installs without compromising formula quality.
|
|
102
114
|
- Consider standalone artifacts only after the app behavior stabilizes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plex-tui
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.6
|
|
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
|
|
@@ -36,6 +36,13 @@ Description-Content-Type: text/markdown
|
|
|
36
36
|
|
|
37
37
|
# plex-tui
|
|
38
38
|
|
|
39
|
+
[](https://github.com/so1omon563/plex-tui/actions/workflows/ci.yml)
|
|
40
|
+
[](https://github.com/so1omon563/plex-tui/releases/latest)
|
|
41
|
+
[](https://pypi.org/project/plex-tui/)
|
|
42
|
+
[](https://aur.archlinux.org/packages/plex-tui)
|
|
43
|
+
[](https://github.com/so1omon563/homebrew-plex-tui)
|
|
44
|
+
[](LICENSE)
|
|
45
|
+
|
|
39
46
|
A standalone Python/Textual terminal UI for browsing Plex and launching playback
|
|
40
47
|
through `mpv`.
|
|
41
48
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# plex-tui
|
|
2
2
|
|
|
3
|
+
[](https://github.com/so1omon563/plex-tui/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/so1omon563/plex-tui/releases/latest)
|
|
5
|
+
[](https://pypi.org/project/plex-tui/)
|
|
6
|
+
[](https://aur.archlinux.org/packages/plex-tui)
|
|
7
|
+
[](https://github.com/so1omon563/homebrew-plex-tui)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
3
10
|
A standalone Python/Textual terminal UI for browsing Plex and launching playback
|
|
4
11
|
through `mpv`.
|
|
5
12
|
|
|
@@ -100,24 +100,41 @@ python -m venv /tmp/plex-tui-pypi
|
|
|
100
100
|
|
|
101
101
|
## 6. Homebrew Tap
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
The `Post-release Homebrew Publish` workflow updates
|
|
104
|
+
`so1omon563/homebrew-plex-tui` after a successful release workflow. It can also
|
|
105
|
+
be run manually with a release tag. The workflow updates:
|
|
104
106
|
|
|
105
107
|
- Formula URL and sha256.
|
|
106
108
|
- Python resource blocks if dependencies changed.
|
|
107
109
|
- Formula test expectations if version output changed.
|
|
108
110
|
|
|
109
|
-
|
|
111
|
+
It then runs `brew audit --strict --online`, opens a tap PR, and merges it. This
|
|
112
|
+
uses `PACKAGING_PR_TOKEN`, which must have access to the tap repository.
|
|
113
|
+
|
|
114
|
+
If the automated workflow cannot run, update and validate manually:
|
|
110
115
|
|
|
111
116
|
```bash
|
|
112
117
|
brew test so1omon563/plex-tui/plex-tui
|
|
113
118
|
brew audit --strict --online so1omon563/plex-tui/plex-tui
|
|
114
119
|
```
|
|
115
120
|
|
|
116
|
-
Open
|
|
121
|
+
Open tap updates as packaging-only PRs without semver bump markers.
|
|
117
122
|
|
|
118
123
|
## 7. Arch AUR
|
|
119
124
|
|
|
120
|
-
|
|
125
|
+
The `Post-release AUR Update` workflow opens a packaging-only PR after a
|
|
126
|
+
successful release workflow. It can also be run manually with a release tag. The
|
|
127
|
+
workflow updates `packaging/aur/PKGBUILD`, regenerates `.SRCINFO`, validates the
|
|
128
|
+
package with `makepkg`, runs `namcap`, opens a PR without a semver bump marker,
|
|
129
|
+
approves it, and enables auto-merge.
|
|
130
|
+
|
|
131
|
+
After that PR merges, the `AUR Package` workflow validates the merged metadata
|
|
132
|
+
on `main`. A successful `AUR Package` run triggers `Publish AUR Package`, which
|
|
133
|
+
pushes `PKGBUILD` and `.SRCINFO` to `ssh://aur@aur.archlinux.org/plex-tui.git`.
|
|
134
|
+
This requires the `AUR_SSH_PRIVATE_KEY` repository secret.
|
|
135
|
+
|
|
136
|
+
If the automated workflow cannot run, update `packaging/aur/PKGBUILD` and
|
|
137
|
+
regenerate `.SRCINFO` manually:
|
|
121
138
|
|
|
122
139
|
```bash
|
|
123
140
|
cd packaging/aur
|
|
@@ -136,7 +153,8 @@ git commit -m "Update to X.Y.Z-1"
|
|
|
136
153
|
git push
|
|
137
154
|
```
|
|
138
155
|
|
|
139
|
-
Open
|
|
156
|
+
Open repository metadata updates as packaging-only PRs without semver bump
|
|
157
|
+
markers.
|
|
140
158
|
|
|
141
159
|
## Manual Fallbacks
|
|
142
160
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
## App UX
|
|
4
|
+
|
|
5
|
+
- Rework grid view presentation so poster/title blocks feel balanced across
|
|
6
|
+
terminal sizes. The current grid is functional but visually uneven: poster
|
|
7
|
+
blocks, titles, and pane content can look lopsided or off-center.
|
|
8
|
+
- Continue tuning focus, row markers, and selection affordances based on real
|
|
9
|
+
terminal themes.
|
|
10
|
+
- Polish the details pane hierarchy for long summaries, missing metadata, and
|
|
11
|
+
playback readiness hints.
|
|
12
|
+
- Continue refining Settings ergonomics as new preferences are added, especially
|
|
13
|
+
grouping, current-value scanning, and change feedback.
|
|
14
|
+
- Tune real-library browsing only when verification shows a specific issue; the
|
|
15
|
+
latest perf pass showed fast grid rendering and poster fetches dominated by
|
|
16
|
+
network/cache timing.
|
|
17
|
+
- Tune grid artwork defaults such as `grid_prefetch_pages` only if future logs
|
|
18
|
+
show the current defaults are too aggressive or too conservative.
|
|
19
|
+
- Consider separate poster-size controls only if density presets are not enough
|
|
20
|
+
after real-library verification.
|
|
21
|
+
- Continue improving playback diagnostics as real-world `mpv` and Plex stream
|
|
22
|
+
failures show up in use.
|
|
23
|
+
|
|
24
|
+
## Packaging & Distribution
|
|
25
|
+
|
|
26
|
+
- Keep planned releases moving through PRs so merged release PRs drive automatic
|
|
27
|
+
tagging, GitHub Release creation, PyPI publishing, Homebrew tap publishing,
|
|
28
|
+
and AUR publishing.
|
|
29
|
+
- Keep `main` protected in both `plex-tui` and `homebrew-plex-tui`; `plex-tui`
|
|
30
|
+
requires the Python 3.11 and 3.13 checks before merge.
|
|
31
|
+
- Improve Homebrew install time; the current formula works but builds native
|
|
32
|
+
Python resources such as `pillow` from source.
|
|
33
|
+
- Keep post-release package publishing fully automated across PyPI, Homebrew,
|
|
34
|
+
and AUR.
|
|
35
|
+
- Consider standalone artifacts only after the app behavior stabilizes.
|
|
36
|
+
|
|
37
|
+
## Plex Integration Research
|
|
38
|
+
|
|
39
|
+
- Review the Plex module in
|
|
40
|
+
[`anthonycaccese/240-MP`](https://github.com/anthonycaccese/240-MP/tree/main)
|
|
41
|
+
for ideas that fit a terminal-first Plex client. Areas to evaluate include
|
|
42
|
+
profile switching, selective library display, Continue Watching/Resume, hubs,
|
|
43
|
+
playlists, collections, categories, movie editions, pre-play audio/subtitle
|
|
44
|
+
selection, alphabet browsing, show/season browsing, and direct-play versus
|
|
45
|
+
transcode quality choices.
|
|
46
|
+
|
|
47
|
+
## Technical Follow-Up
|
|
48
|
+
|
|
49
|
+
- Use `PLEX_TUI_PERF_LOG=1` for focused regression checks when changing grid,
|
|
50
|
+
artwork, pagination, or detail-loading behavior.
|
|
51
|
+
- Revisit whether verbose `PLEX_TUI_ARTWORK_LOG=1` should expose more structured artwork counters.
|
|
52
|
+
- Revisit native terminal image support with a Kitty Unicode-placeholder
|
|
53
|
+
prototype. Direct Kitty graphics protocol placement inside Textual caused UI
|
|
54
|
+
hangs, so any future implementation should transmit images quietly, render
|
|
55
|
+
normal placeholder text that Textual can redraw safely, and keep block art as
|
|
56
|
+
the mandatory fallback.
|
|
57
|
+
- Add focused regression tests for any real-world Plex media edge cases discovered during use.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
pkgbase = plex-tui
|
|
2
2
|
pkgdesc = Standalone Plex terminal UI with mpv playback
|
|
3
|
-
pkgver = 0.
|
|
3
|
+
pkgver = 0.3.0
|
|
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.
|
|
21
|
-
sha256sums =
|
|
20
|
+
source = plex-tui-0.3.0.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.3.0.tar.gz
|
|
21
|
+
sha256sums = a8a9e104c97dcd57a1a1fc7e499a5afa32f86f11d14f79245f264335b36c97c0
|
|
22
22
|
|
|
23
23
|
pkgname = plex-tui
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Maintainer: so1omon
|
|
2
2
|
pkgname=plex-tui
|
|
3
|
-
pkgver=0.
|
|
3
|
+
pkgver=0.3.0
|
|
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=("a8a9e104c97dcd57a1a1fc7e499a5afa32f86f11d14f79245f264335b36c97c0")
|
|
27
27
|
|
|
28
28
|
build() {
|
|
29
29
|
cd "$pkgname-$pkgver"
|