plexdo 1.1.26__tar.gz → 2.0.3__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.
- {plexdo-1.1.26 → plexdo-2.0.3}/.github/workflows/ci.yml +18 -1
- {plexdo-1.1.26 → plexdo-2.0.3}/.github/workflows/publish.yml +34 -10
- plexdo-2.0.3/.github/workflows/wiki.yml +135 -0
- plexdo-2.0.3/.markdownlint-cli2.yaml +26 -0
- plexdo-2.0.3/.nvmrc +1 -0
- plexdo-2.0.3/.yamllint.yaml +21 -0
- plexdo-2.0.3/AI.policy.txt +6 -0
- plexdo-2.0.3/AI.prompt.txt +1496 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/CHANGELOG.md +281 -8
- plexdo-2.0.3/CONTRIBUTING.md +126 -0
- plexdo-2.0.3/LICENSE +674 -0
- plexdo-2.0.3/LICENSES/GPL-3.0-or-later.txt +674 -0
- plexdo-2.0.3/MANIFEST.in +20 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/Makefile +37 -14
- {plexdo-1.1.26/src/plexdo.egg-info → plexdo-2.0.3}/PKG-INFO +226 -97
- {plexdo-1.1.26 → plexdo-2.0.3}/README.md +222 -95
- plexdo-2.0.3/REUSE.toml +28 -0
- plexdo-2.0.3/SECURITY.md +50 -0
- {plexdo-1.1.26/src/plexdo/data → plexdo-2.0.3/completions}/_plexdo +30 -1
- {plexdo-1.1.26/src/plexdo/data → plexdo-2.0.3/completions}/plexdo.bash +79 -36
- {plexdo-1.1.26/src/plexdo/data → plexdo-2.0.3/completions}/plexdo.fish +22 -5
- {plexdo-1.1.26/src/plexdo/data → plexdo-2.0.3/completions}/plexdo.ps1 +14 -2
- plexdo-2.0.3/man/plexdo-append-playlist.1.scd +118 -0
- plexdo-2.0.3/man/plexdo-build-chronological.1.scd +177 -0
- plexdo-2.0.3/man/plexdo-build-concatenated.1.scd +181 -0
- plexdo-2.0.3/man/plexdo-build-interleaved.1.scd +172 -0
- plexdo-2.0.3/man/plexdo-build-randomize.1.scd +164 -0
- plexdo-2.0.3/man/plexdo-clean-playlist.1.scd +136 -0
- plexdo-2.0.3/man/plexdo-conventions.7.scd +282 -0
- plexdo-2.0.3/man/plexdo-copy-playlist-all-users.1.scd +151 -0
- plexdo-2.0.3/man/plexdo-copy-playlist-to-user.1.scd +145 -0
- plexdo-2.0.3/man/plexdo-copy-watched.1.scd +173 -0
- plexdo-2.0.3/man/plexdo-export-playlist.1.scd +119 -0
- plexdo-2.0.3/man/plexdo-export-titles.1.scd +174 -0
- plexdo-2.0.3/man/plexdo-find-missing.1.scd +178 -0
- plexdo-2.0.3/man/plexdo-list-libraries.1.scd +108 -0
- plexdo-2.0.3/man/plexdo-list-playlist.1.scd +127 -0
- plexdo-2.0.3/man/plexdo-list-playlists.1.scd +106 -0
- plexdo-2.0.3/man/plexdo-list-show.1.scd +126 -0
- plexdo-2.0.3/man/plexdo-list-titles.1.scd +173 -0
- plexdo-2.0.3/man/plexdo-list-users.1.scd +112 -0
- plexdo-2.0.3/man/plexdo-login.1.scd +160 -0
- plexdo-2.0.3/man/plexdo-logout.1.scd +150 -0
- plexdo-2.0.3/man/plexdo-player-remote-play.1.scd +354 -0
- plexdo-2.0.3/man/plexdo-read.1.scd +125 -0
- plexdo-2.0.3/man/plexdo-remove-playlist.1.scd +98 -0
- plexdo-2.0.3/man/plexdo-rescan.1.scd +136 -0
- plexdo-2.0.3/man/plexdo-search.1.scd +131 -0
- plexdo-2.0.3/man/plexdo-set-pin.1.scd +120 -0
- plexdo-2.0.3/man/plexdo-show-metadata.1.scd +143 -0
- plexdo-2.0.3/man/plexdo-status.1.scd +155 -0
- plexdo-2.0.3/man/plexdo-wait.1.scd +305 -0
- plexdo-2.0.3/man/plexdo-write-config-example.1.scd +144 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/man/plexdo.1 +189 -74
- plexdo-2.0.3/package-lock.json +1420 -0
- plexdo-2.0.3/package.json +12 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/pyproject.toml +36 -2
- {plexdo-1.1.26 → plexdo-2.0.3}/requirements.txt +6 -0
- plexdo-2.0.3/sbom.spdx.json +263 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/__init__.py +30 -3
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/__main__.py +4 -2
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/accounts.py +120 -44
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/airdates.py +63 -22
- plexdo-2.0.3/src/plexdo/arguments.py +83 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/cache.py +7 -5
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/cli.py +49 -19
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/__init__.py +26 -8
- plexdo-2.0.3/src/plexdo/commands/auth.py +458 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/build.py +87 -74
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/copy.py +54 -22
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/libraries.py +62 -35
- plexdo-2.0.3/src/plexdo/commands/metadata.py +149 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/missing.py +65 -29
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/playlists.py +101 -39
- plexdo-2.0.3/src/plexdo/commands/remote.py +650 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/rescan.py +54 -21
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/search.py +47 -29
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/status.py +69 -40
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/stream.py +11 -8
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/users.py +8 -2
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/wait.py +216 -108
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/commands/watched.py +71 -38
- plexdo-2.0.3/src/plexdo/config.py +237 -0
- plexdo-2.0.3/src/plexdo/connection.py +46 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/console.py +69 -32
- plexdo-2.0.3/src/plexdo/constants.py +280 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/convert.py +4 -3
- {plexdo-1.1.26/completions → plexdo-2.0.3/src/plexdo/data}/_plexdo +30 -1
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/data/plexdo.1 +189 -74
- {plexdo-1.1.26/completions → plexdo-2.0.3/src/plexdo/data}/plexdo.bash +79 -36
- {plexdo-1.1.26/completions → plexdo-2.0.3/src/plexdo/data}/plexdo.fish +22 -5
- {plexdo-1.1.26/completions → plexdo-2.0.3/src/plexdo/data}/plexdo.ps1 +14 -2
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/fanout.py +35 -20
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/formats.py +22 -14
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/gallery.py +54 -31
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/identify.py +12 -5
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/logs.py +5 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/m3u.py +4 -3
- plexdo-2.0.3/src/plexdo/migrate.py +192 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/paths.py +16 -9
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/photos.py +10 -9
- plexdo-2.0.3/src/plexdo/playback.py +263 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/playlists.py +28 -21
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/records.py +35 -27
- plexdo-2.0.3/src/plexdo/secret_store.py +241 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/sections.py +15 -6
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/security.py +6 -4
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/sorting.py +7 -6
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/throttle.py +8 -3
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/titles.py +10 -6
- plexdo-2.0.3/src/plexdo/tokens.py +113 -0
- {plexdo-1.1.26 → plexdo-2.0.3/src/plexdo.egg-info}/PKG-INFO +226 -97
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo.egg-info/SOURCES.txt +57 -2
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo.egg-info/requires.txt +3 -1
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/conftest.py +67 -13
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_airdates_misc.py +52 -24
- plexdo-2.0.3/tests/test_cli_and_config.py +416 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_console.py +48 -21
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_fanout.py +30 -8
- plexdo-2.0.3/tests/test_fixes.py +236 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_formats.py +3 -1
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_identify.py +5 -1
- plexdo-2.0.3/tests/test_logout.py +152 -0
- plexdo-2.0.3/tests/test_logs.py +40 -0
- plexdo-2.0.3/tests/test_paths_tokens.py +131 -0
- plexdo-2.0.3/tests/test_playback.py +235 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_playlists.py +26 -9
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_records_missing.py +77 -34
- plexdo-2.0.3/tests/test_remote_play.py +776 -0
- plexdo-2.0.3/tests/test_secret_store.py +330 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_throttle.py +9 -2
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_wait.py +148 -53
- {plexdo-1.1.26 → plexdo-2.0.3}/tests/test_watched.py +9 -5
- plexdo-2.0.3/tools/derive.py +262 -0
- plexdo-2.0.3/tools/wiki-pages.sh +84 -0
- plexdo-1.1.26/AI.prompt.md +0 -845
- plexdo-1.1.26/CONTRIBUTING.md +0 -82
- plexdo-1.1.26/LICENSE +0 -232
- plexdo-1.1.26/MANIFEST.in +0 -11
- plexdo-1.1.26/SECURITY.md +0 -35
- plexdo-1.1.26/src/plexdo/commands/auth.py +0 -201
- plexdo-1.1.26/src/plexdo/commands/metadata.py +0 -135
- plexdo-1.1.26/src/plexdo/config.py +0 -153
- plexdo-1.1.26/src/plexdo/constants.py +0 -111
- plexdo-1.1.26/src/plexdo/tokens.py +0 -88
- plexdo-1.1.26/tests/test_cli_and_config.py +0 -247
- plexdo-1.1.26/tests/test_paths_tokens.py +0 -103
- {plexdo-1.1.26 → plexdo-2.0.3}/setup.cfg +0 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo/py.typed +0 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo.egg-info/dependency_links.txt +0 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo.egg-info/entry_points.txt +0 -0
- {plexdo-1.1.26 → plexdo-2.0.3}/src/plexdo.egg-info/top_level.txt +0 -0
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 SidusNare
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
3
|
+
# SPDX-FileContributor: Claude Opus 5.5 (AI-generated)
|
|
4
|
+
|
|
5
|
+
---
|
|
1
6
|
name: CI
|
|
2
7
|
|
|
3
8
|
on:
|
|
@@ -26,10 +31,22 @@ jobs:
|
|
|
26
31
|
with:
|
|
27
32
|
python-version: ${{ matrix.python-version }}
|
|
28
33
|
|
|
34
|
+
# markdownlint-cli2 needs Node 22 or newer; .nvmrc names the version.
|
|
35
|
+
- uses: actions/setup-node@v7
|
|
36
|
+
with:
|
|
37
|
+
node-version-file: .nvmrc
|
|
38
|
+
|
|
39
|
+
# make check lints with every tool the project requires: ShellCheck
|
|
40
|
+
# and yamllint from apt, reuse from PyPI (apt's is too old to read
|
|
41
|
+
# REUSE.toml), and markdownlint-cli2 at the version package.json pins.
|
|
42
|
+
# publish.yml installs the same, since it runs the same make check.
|
|
29
43
|
- name: Install
|
|
30
44
|
run: |
|
|
31
45
|
python -m pip install --upgrade pip
|
|
32
|
-
pip install -e ".[dev]"
|
|
46
|
+
pip install -e ".[dev]" reuse
|
|
47
|
+
sudo apt-get update
|
|
48
|
+
sudo apt-get install -y shellcheck yamllint
|
|
49
|
+
npm ci
|
|
33
50
|
|
|
34
51
|
- name: Full check
|
|
35
52
|
run: make check
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 SidusNare
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
3
|
+
# SPDX-FileContributor: Claude Opus 5.5 (AI-generated)
|
|
4
|
+
|
|
5
|
+
---
|
|
1
6
|
name: Publish
|
|
2
7
|
|
|
3
8
|
# Publishes to PyPI through Trusted Publishing (OIDC), so no API token is
|
|
@@ -40,13 +45,25 @@ jobs:
|
|
|
40
45
|
with:
|
|
41
46
|
python-version: "3.12"
|
|
42
47
|
|
|
48
|
+
# markdownlint-cli2 needs Node 22 or newer; .nvmrc names the version.
|
|
49
|
+
- uses: actions/setup-node@v7
|
|
50
|
+
with:
|
|
51
|
+
node-version-file: .nvmrc
|
|
52
|
+
|
|
53
|
+
# make check lints with every tool the project requires: ShellCheck
|
|
54
|
+
# and yamllint from apt, reuse from PyPI (apt's is too old to read
|
|
55
|
+
# REUSE.toml), and markdownlint-cli2 at the version package.json pins.
|
|
56
|
+
# ci.yml installs the same, since it runs the same make check.
|
|
43
57
|
- name: Install
|
|
44
58
|
run: |
|
|
45
59
|
python -m pip install --upgrade pip
|
|
46
|
-
pip install -e ".[dev]"
|
|
60
|
+
pip install -e ".[dev]" reuse
|
|
61
|
+
sudo apt-get update
|
|
62
|
+
sudo apt-get install -y shellcheck yamllint
|
|
63
|
+
npm ci
|
|
47
64
|
|
|
48
65
|
# Everything that gates a normal pull request also gates a release:
|
|
49
|
-
#
|
|
66
|
+
# the man page and SBOM matching pyproject's version, packaged
|
|
50
67
|
# assets matching their sources, the smoke test, the suite, pylint,
|
|
51
68
|
# the build itself, and twine's metadata check.
|
|
52
69
|
- name: Full check
|
|
@@ -55,17 +72,24 @@ jobs:
|
|
|
55
72
|
# A release tagged v1.2.3 must contain version 1.2.3. Without this the
|
|
56
73
|
# wheel would upload under whatever version the source happened to
|
|
57
74
|
# carry, and PyPI would accept it: uploads are immutable, so the
|
|
58
|
-
# mistake could not be taken back.
|
|
75
|
+
# mistake could not be taken back. Compared as versions, not text: a
|
|
76
|
+
# tag is SemVer, v2.0.0-rc.1, and pyproject's PEP 440, 2.0.0rc1.
|
|
59
77
|
- name: Tag matches package version
|
|
60
78
|
if: github.event_name == 'release'
|
|
79
|
+
shell: python
|
|
61
80
|
run: |
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
import os
|
|
82
|
+
import sys
|
|
83
|
+
|
|
84
|
+
from packaging.version import Version
|
|
85
|
+
|
|
86
|
+
import plexdo
|
|
87
|
+
|
|
88
|
+
tag = os.environ["GITHUB_REF_NAME"]
|
|
89
|
+
if Version(tag.removeprefix("v")) != Version(plexdo.__version__):
|
|
90
|
+
print(f"::error::tag {tag} does not match {plexdo.__version__}")
|
|
91
|
+
sys.exit(1)
|
|
92
|
+
print(f"tag {tag} matches version {plexdo.__version__}")
|
|
69
93
|
|
|
70
94
|
# Exactly one job may upload a given artifact name: since v4 they are
|
|
71
95
|
# immutable, so a second upload of "dist" would fail rather than merge.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 SidusNare
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
3
|
+
# SPDX-FileContributor: Claude Opus 5.5 (AI-generated)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
name: Wiki
|
|
7
|
+
|
|
8
|
+
# Publishes one GitHub wiki page per man/*.scd page: tools/wiki-pages.sh
|
|
9
|
+
# converts each one scdoc -> roff -> pandoc -> GitHub-flavoured Markdown, and
|
|
10
|
+
# man/plexdo-wait.1.scd becomes the wiki page plexdo-wait.
|
|
11
|
+
#
|
|
12
|
+
# One-time setup: enable the wiki under Settings > Features > Wikis, then
|
|
13
|
+
# create its first page by hand. GitHub only creates the wiki's repository
|
|
14
|
+
# at that point, and until it exists there is nothing to push to.
|
|
15
|
+
#
|
|
16
|
+
# Generated pages begin with a hidden "Generated from" comment. A page that
|
|
17
|
+
# carries it and whose source has been removed is deleted; a page written by
|
|
18
|
+
# hand never carries it and is never deleted. Editing a generated page on the
|
|
19
|
+
# wiki is pointless: the next run overwrites it from its source.
|
|
20
|
+
|
|
21
|
+
on:
|
|
22
|
+
push:
|
|
23
|
+
branches: [main]
|
|
24
|
+
paths:
|
|
25
|
+
- "man/*.scd"
|
|
26
|
+
- "tools/wiki-pages.sh"
|
|
27
|
+
- ".github/workflows/wiki.yml"
|
|
28
|
+
# Pull requests convert the pages without publishing them, so a page that
|
|
29
|
+
# does not compile, or refers to one that does not exist, fails review.
|
|
30
|
+
pull_request:
|
|
31
|
+
paths:
|
|
32
|
+
- "man/*.scd"
|
|
33
|
+
- "tools/wiki-pages.sh"
|
|
34
|
+
- ".github/workflows/wiki.yml"
|
|
35
|
+
# A full resync, for after the wiki has been edited by hand.
|
|
36
|
+
workflow_dispatch:
|
|
37
|
+
|
|
38
|
+
# Converting the pages needs nothing more than reading the repository; only
|
|
39
|
+
# the publish job raises its own permission, to push to the wiki.
|
|
40
|
+
permissions:
|
|
41
|
+
contents: read
|
|
42
|
+
|
|
43
|
+
# Two runs pushing to the wiki at once would race, the later failing on a
|
|
44
|
+
# stale checkout; queue them instead of cancelling, so no update is lost.
|
|
45
|
+
concurrency:
|
|
46
|
+
group: wiki
|
|
47
|
+
cancel-in-progress: false
|
|
48
|
+
|
|
49
|
+
jobs:
|
|
50
|
+
build:
|
|
51
|
+
name: Build pages
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v7
|
|
55
|
+
|
|
56
|
+
- name: Install scdoc and pandoc
|
|
57
|
+
run: sudo apt-get update && sudo apt-get install -y scdoc pandoc
|
|
58
|
+
|
|
59
|
+
# Fails on a page scdoc rejects, and on a reference to a page that
|
|
60
|
+
# does not exist, rather than publishing a broken link.
|
|
61
|
+
- name: Convert
|
|
62
|
+
run: make wiki
|
|
63
|
+
|
|
64
|
+
- name: Upload pages
|
|
65
|
+
uses: actions/upload-artifact@v7
|
|
66
|
+
with:
|
|
67
|
+
name: wiki
|
|
68
|
+
path: build/wiki/
|
|
69
|
+
if-no-files-found: error
|
|
70
|
+
|
|
71
|
+
publish:
|
|
72
|
+
name: Publish to the wiki
|
|
73
|
+
needs: build
|
|
74
|
+
# Only what has reached main is published: a pull request, or a manual
|
|
75
|
+
# run from another branch, builds the pages and stops there.
|
|
76
|
+
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
|
|
77
|
+
runs-on: ubuntu-latest
|
|
78
|
+
permissions:
|
|
79
|
+
contents: write # GITHUB_TOKEN pushes to the wiki under this
|
|
80
|
+
steps:
|
|
81
|
+
# Without this, a missing wiki surfaces as checkout's bare "repository
|
|
82
|
+
# not found", which does not say what to do about it.
|
|
83
|
+
- name: Wiki exists
|
|
84
|
+
env:
|
|
85
|
+
GH_TOKEN: ${{ github.token }}
|
|
86
|
+
run: |
|
|
87
|
+
wiki="https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.wiki.git"
|
|
88
|
+
if ! git ls-remote "$wiki" > /dev/null 2>&1; then
|
|
89
|
+
echo "::error::The wiki has no repository yet. Enable it under" \
|
|
90
|
+
"Settings > Features > Wikis, create its first page by hand," \
|
|
91
|
+
"and run this workflow again."
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
- name: Check out the wiki
|
|
96
|
+
uses: actions/checkout@v7
|
|
97
|
+
with:
|
|
98
|
+
repository: ${{ github.repository }}.wiki
|
|
99
|
+
path: wiki
|
|
100
|
+
|
|
101
|
+
- name: Download pages
|
|
102
|
+
uses: actions/download-artifact@v8
|
|
103
|
+
with:
|
|
104
|
+
name: wiki
|
|
105
|
+
path: pages/
|
|
106
|
+
|
|
107
|
+
- name: Sync pages
|
|
108
|
+
working-directory: wiki
|
|
109
|
+
run: |
|
|
110
|
+
# A generated page whose source is gone goes too. Only pages
|
|
111
|
+
# carrying the mark are candidates: hand-written ones never are.
|
|
112
|
+
for page in *.md; do
|
|
113
|
+
[ -e "$page" ] || continue
|
|
114
|
+
if head -n 1 "$page" | grep -q '^<!-- Generated from ' &&
|
|
115
|
+
[ ! -e "../pages/$page" ]; then
|
|
116
|
+
git rm --quiet "$page"
|
|
117
|
+
echo "removed $page"
|
|
118
|
+
fi
|
|
119
|
+
done
|
|
120
|
+
|
|
121
|
+
cp ../pages/*.md .
|
|
122
|
+
git add --all
|
|
123
|
+
if git diff --cached --quiet; then
|
|
124
|
+
echo "The wiki is already up to date."
|
|
125
|
+
exit 0
|
|
126
|
+
fi
|
|
127
|
+
git diff --cached --stat
|
|
128
|
+
|
|
129
|
+
bot="github-actions[bot]"
|
|
130
|
+
git config user.name "$bot"
|
|
131
|
+
git config user.email "41898282+$bot@users.noreply.github.com"
|
|
132
|
+
git commit --quiet \
|
|
133
|
+
-m "Update manual pages from ${GITHUB_SHA::7}" \
|
|
134
|
+
-m "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}"
|
|
135
|
+
git push
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 SidusNare
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
3
|
+
# SPDX-FileContributor: Claude Opus 5.5 (AI-generated)
|
|
4
|
+
#
|
|
5
|
+
#
|
|
6
|
+
# markdownlint-cli2 configuration, following Google's Markdown style guide.
|
|
7
|
+
---
|
|
8
|
+
config:
|
|
9
|
+
# Each CHANGELOG release repeats the same Added/Changed/Fixed headings, so
|
|
10
|
+
# only headings that are siblings under one parent must differ.
|
|
11
|
+
MD024:
|
|
12
|
+
siblings_only: true
|
|
13
|
+
# Google's guide: 80 columns, except where a line cannot be broken, as in
|
|
14
|
+
# a code block or a table row.
|
|
15
|
+
MD013:
|
|
16
|
+
line_length: 80
|
|
17
|
+
code_blocks: false
|
|
18
|
+
tables: false
|
|
19
|
+
globs:
|
|
20
|
+
- "**/*.md"
|
|
21
|
+
ignores:
|
|
22
|
+
- "node_modules/**"
|
|
23
|
+
- "build/**"
|
|
24
|
+
- "dist/**"
|
|
25
|
+
# pytest writes a README of its own here while the tests run.
|
|
26
|
+
- ".pytest_cache/**"
|
plexdo-2.0.3/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
24
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 SidusNare
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
3
|
+
# SPDX-FileContributor: Claude Opus 5.5 (AI-generated)
|
|
4
|
+
#
|
|
5
|
+
#
|
|
6
|
+
# yamllint configuration: the default rules, at Google's 80 columns.
|
|
7
|
+
---
|
|
8
|
+
extends: default
|
|
9
|
+
|
|
10
|
+
ignore: |
|
|
11
|
+
node_modules/
|
|
12
|
+
build/
|
|
13
|
+
dist/
|
|
14
|
+
|
|
15
|
+
rules:
|
|
16
|
+
line-length:
|
|
17
|
+
max: 80
|
|
18
|
+
# GitHub Actions requires the key "on", which YAML 1.1 reads as a
|
|
19
|
+
# boolean; keys are exempt, values are still checked.
|
|
20
|
+
truthy:
|
|
21
|
+
check-keys: false
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
AI has been trained almost exclusively on open source. Ethically, all rights, AI generated code should be automatically encumbered by the licenses of the code that generated it. While I can't make any corporation, AI platform, or government adopt such a policy, I can commit to a personal policy pertaining to what I generate with AI.
|
|
3
|
+
|
|
4
|
+
All AI projects will be released GPL-3.
|
|
5
|
+
All AI projects will be released with all available platform and prompt information to aid in reproducing, modifying, and collaborating development in the spirit of the open source community that started this in the first place.
|
|
6
|
+
|