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