plexer-cli 0.1.15__tar.gz → 0.1.18__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.
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/dependabot.yml +1 -1
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/workflows/openssf_scorecard.yml +1 -1
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/workflows/release.yml +64 -22
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/workflows/run_full_test_suite.yml +2 -2
- plexer_cli-0.1.18/.pre-commit-config.yaml +29 -0
- plexer_cli-0.1.18/.tool-versions +3 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.vscode/launch.json +2 -2
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.vscode/plexer-cli.code-workspace +1 -1
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.vscode/settings.json +1 -1
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/PKG-INFO +1 -1
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/main.py +3 -2
- plexer_cli-0.1.15/.pre-commit-config.yaml +0 -12
- plexer_cli-0.1.15/.tool-versions +0 -1
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.gitignore +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.python-version +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.trivyignore.yaml +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/CODE_OF_CONDUCT.md +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/Dockerfile +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/LICENSE +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/README.md +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/SECURITY.md +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/pyproject.toml +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/__init__.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/artifact.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/const.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/file_manager.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/metadata.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/bootstrap/blank.mkv +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/bootstrap/blank.mp4 +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/bootstrap/bootstrap_plexer_e2e.sh +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/conftest.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/test_artifact.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/test_file_manager.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/test_metadata.py +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tox.ini +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/trivyignore.yaml +0 -0
- {plexer_cli-0.1.15 → plexer_cli-0.1.18}/uv.lock +0 -0
|
@@ -16,18 +16,15 @@ permissions:
|
|
|
16
16
|
contents: read
|
|
17
17
|
|
|
18
18
|
jobs:
|
|
19
|
-
|
|
20
|
-
name:
|
|
19
|
+
build_and_release_project:
|
|
20
|
+
name: Build and Release Project - ${{ github.ref_name }}
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
environment: release
|
|
23
23
|
|
|
24
24
|
permissions:
|
|
25
|
-
artifact-metadata: write # needed to push SBOM and provenance attestation (GHCR)
|
|
26
|
-
attestations: write
|
|
27
25
|
contents: write # needed to create GH Release
|
|
28
26
|
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing to PyPI
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
|
|
31
28
|
steps:
|
|
32
29
|
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
33
30
|
if: ${{ github.event_name == 'push' }}
|
|
@@ -40,7 +37,7 @@ jobs:
|
|
|
40
37
|
with:
|
|
41
38
|
ref: ${{ github.event.inputs.tag }}
|
|
42
39
|
fetch-depth: 0
|
|
43
|
-
|
|
40
|
+
|
|
44
41
|
- name: Install uv
|
|
45
42
|
uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
|
|
46
43
|
with:
|
|
@@ -53,14 +50,14 @@ jobs:
|
|
|
53
50
|
|
|
54
51
|
- name: Setup and run test suite
|
|
55
52
|
run: uvx tox -vv -e test
|
|
56
|
-
|
|
57
|
-
# build and
|
|
53
|
+
|
|
54
|
+
# build and upload Python packages
|
|
58
55
|
- name: Install Hatch
|
|
59
56
|
run: uvx pipx install hatch
|
|
60
57
|
|
|
61
58
|
- name: Build dist artifacts
|
|
62
59
|
run: hatch build
|
|
63
|
-
|
|
60
|
+
|
|
64
61
|
# PyPI Release
|
|
65
62
|
# required instead of using hatch due to usage of trusted publishers
|
|
66
63
|
- name: Publish to TestPyPI
|
|
@@ -75,7 +72,7 @@ jobs:
|
|
|
75
72
|
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
76
73
|
with:
|
|
77
74
|
attestations: true
|
|
78
|
-
|
|
75
|
+
|
|
79
76
|
# Github Release
|
|
80
77
|
- name: Create Github Release
|
|
81
78
|
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
|
|
@@ -86,16 +83,36 @@ jobs:
|
|
|
86
83
|
fail_on_unmatched_files: true
|
|
87
84
|
generate_release_notes: true
|
|
88
85
|
make_latest: true
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
|
|
87
|
+
#############
|
|
88
|
+
|
|
89
|
+
build_and_push_container:
|
|
90
|
+
name: Build and Push Container - ${{ github.ref_name }}
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
environment: release
|
|
93
|
+
|
|
94
|
+
permissions:
|
|
95
|
+
packages: write # required for pushing image to GHCR
|
|
96
|
+
|
|
97
|
+
steps:
|
|
98
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
99
|
+
if: ${{ github.event_name == 'push' }}
|
|
100
|
+
with:
|
|
101
|
+
ref: ${{ github.ref_name }}
|
|
102
|
+
fetch-depth: 0
|
|
103
|
+
|
|
104
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
105
|
+
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
106
|
+
with:
|
|
107
|
+
ref: ${{ github.event.inputs.tag }}
|
|
108
|
+
fetch-depth: 0
|
|
109
|
+
|
|
93
110
|
- name: Log in to Docker Hub
|
|
94
111
|
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
|
95
112
|
with:
|
|
96
113
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
97
114
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
98
|
-
|
|
115
|
+
|
|
99
116
|
- name: Log in to Github Container registry
|
|
100
117
|
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
|
101
118
|
with:
|
|
@@ -103,7 +120,7 @@ jobs:
|
|
|
103
120
|
username: ${{ github.actor }}
|
|
104
121
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
105
122
|
|
|
106
|
-
- name: Extract metadata (tags, labels)
|
|
123
|
+
- name: Extract metadata (tags, labels)
|
|
107
124
|
id: meta
|
|
108
125
|
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5.10.0
|
|
109
126
|
with:
|
|
@@ -111,19 +128,44 @@ jobs:
|
|
|
111
128
|
magneticstain/plexer
|
|
112
129
|
ghcr.io/${{ github.repository }}
|
|
113
130
|
|
|
114
|
-
# required for
|
|
131
|
+
# required for multi-platform builds (e.g. arm64)
|
|
132
|
+
- name: Set up QEMU
|
|
133
|
+
uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4.4.0
|
|
134
|
+
|
|
135
|
+
# explicitly required for automatic SBOM generation and provenance attestation
|
|
115
136
|
# REF: https://docs.docker.com/guides/gha
|
|
116
137
|
- name: Set up Docker Buildx
|
|
117
138
|
uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
|
|
118
139
|
|
|
119
|
-
- name:
|
|
140
|
+
- name: Validate Docker build configuration
|
|
141
|
+
uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
142
|
+
with:
|
|
143
|
+
call: check
|
|
144
|
+
|
|
145
|
+
# required for reproducible builds
|
|
146
|
+
# REF: https://docs.docker.com/build/ci/github-actions/reproducible-builds/
|
|
147
|
+
- name: Get Git commit timestamps
|
|
148
|
+
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
|
|
149
|
+
|
|
150
|
+
- name: Build and push Docker image
|
|
120
151
|
id: push
|
|
121
152
|
uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
153
|
+
env:
|
|
154
|
+
SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
|
|
122
155
|
with:
|
|
123
156
|
context: .
|
|
124
157
|
push: true
|
|
125
|
-
|
|
126
|
-
|
|
158
|
+
platforms: linux/amd64,linux/arm64
|
|
159
|
+
annotations: ${{ steps.meta.outputs.annotations }}
|
|
127
160
|
tags: ${{ steps.meta.outputs.tags }}
|
|
128
161
|
labels: ${{ steps.meta.outputs.labels }}
|
|
129
|
-
|
|
162
|
+
provenance: mode=max
|
|
163
|
+
sbom: true
|
|
164
|
+
|
|
165
|
+
- name: Generate artifact attestation for GHCR container image
|
|
166
|
+
uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2
|
|
167
|
+
with:
|
|
168
|
+
subject-name: ghcr.io/${{ github.repository }}
|
|
169
|
+
subject-digest: ${{ steps.push.outputs.digest }}
|
|
170
|
+
sbom-path: "sbom.spdx.json" # REF: https://docs.docker.com/build/metadata/attestations/sbom/#verify-sbom-attestations
|
|
171
|
+
push-to-registry: true
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
unit-test:
|
|
15
15
|
name: Run unit tests with version ${{ matrix.py }} on ${{ matrix.os }}
|
|
16
16
|
runs-on: ${{ matrix.os }}
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
strategy:
|
|
19
19
|
matrix:
|
|
20
20
|
py:
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
32
32
|
with:
|
|
33
33
|
fetch-depth: 0
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
- name: Install uv and set python versions
|
|
36
36
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
37
37
|
with:
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v6.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: debug-statements
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: forbid-submodules
|
|
8
|
+
- id: mixed-line-ending
|
|
9
|
+
- id: name-tests-test
|
|
10
|
+
args: [ --pytest-test-first ]
|
|
11
|
+
- id: trailing-whitespace
|
|
12
|
+
|
|
13
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
14
|
+
rev: v0.17.2
|
|
15
|
+
hooks:
|
|
16
|
+
- id: ruff-format
|
|
17
|
+
- id: ruff-check
|
|
18
|
+
args: [ --fix ]
|
|
19
|
+
|
|
20
|
+
# REF: https://docs.astral.sh/uv/guides/integration/pre-commit/
|
|
21
|
+
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
22
|
+
rev: 0.13.5
|
|
23
|
+
hooks:
|
|
24
|
+
- id: uv-lock
|
|
25
|
+
|
|
26
|
+
- repo: https://github.com/rhysd/actionlint
|
|
27
|
+
rev: v1.7.12
|
|
28
|
+
hooks:
|
|
29
|
+
- id: actionlint
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: plexer_cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.18
|
|
4
4
|
Summary: Normalize media files and directories for use with Plex Media Server
|
|
5
5
|
Project-URL: Repository, https://github.com/magneticstain/plexer
|
|
6
6
|
Project-URL: Documentation, https://github.com/magneticstain/plexer-cli/wiki
|
|
@@ -6,15 +6,16 @@ Main App Entrypoint
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
__author__ = "magneticstain"
|
|
9
|
-
__version__ = "0.1.
|
|
9
|
+
__version__ = "0.1.18"
|
|
10
10
|
__license__ = "MIT"
|
|
11
11
|
|
|
12
12
|
import argparse
|
|
13
|
+
|
|
13
14
|
import logzero
|
|
14
15
|
from logzero import logger
|
|
16
|
+
|
|
15
17
|
# yes, docs suggest importing it twice:
|
|
16
18
|
# https://logzero.readthedocs.io/en/latest/#advanced-usage-examples
|
|
17
|
-
|
|
18
19
|
from plexer_cli.file_manager import FileManager
|
|
19
20
|
|
|
20
21
|
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
repos:
|
|
2
|
-
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
-
rev: v0.15.1
|
|
4
|
-
hooks:
|
|
5
|
-
- id: ruff-format
|
|
6
|
-
- id: ruff-check
|
|
7
|
-
args: [ --fix ]
|
|
8
|
-
# REF: https://docs.astral.sh/uv/guides/integration/pre-commit/
|
|
9
|
-
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
10
|
-
rev: 0.10.2
|
|
11
|
-
hooks:
|
|
12
|
-
- id: uv-lock
|
plexer_cli-0.1.15/.tool-versions
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
uv 0.10.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|