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.
Files changed (40) hide show
  1. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/dependabot.yml +1 -1
  2. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/workflows/openssf_scorecard.yml +1 -1
  3. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/workflows/release.yml +64 -22
  4. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/workflows/run_full_test_suite.yml +2 -2
  5. plexer_cli-0.1.18/.pre-commit-config.yaml +29 -0
  6. plexer_cli-0.1.18/.tool-versions +3 -0
  7. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.vscode/launch.json +2 -2
  8. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.vscode/plexer-cli.code-workspace +1 -1
  9. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.vscode/settings.json +1 -1
  10. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/PKG-INFO +1 -1
  11. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/main.py +3 -2
  12. plexer_cli-0.1.15/.pre-commit-config.yaml +0 -12
  13. plexer_cli-0.1.15/.tool-versions +0 -1
  14. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  15. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  16. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  17. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.gitignore +0 -0
  18. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.python-version +0 -0
  19. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/.trivyignore.yaml +0 -0
  20. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/CODE_OF_CONDUCT.md +0 -0
  21. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/Dockerfile +0 -0
  22. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/LICENSE +0 -0
  23. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/README.md +0 -0
  24. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/SECURITY.md +0 -0
  25. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/pyproject.toml +0 -0
  26. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/__init__.py +0 -0
  27. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/artifact.py +0 -0
  28. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/const.py +0 -0
  29. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/file_manager.py +0 -0
  30. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/src/plexer_cli/metadata.py +0 -0
  31. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/bootstrap/blank.mkv +0 -0
  32. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/bootstrap/blank.mp4 +0 -0
  33. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/bootstrap/bootstrap_plexer_e2e.sh +0 -0
  34. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/conftest.py +0 -0
  35. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/test_artifact.py +0 -0
  36. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/test_file_manager.py +0 -0
  37. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tests/test_metadata.py +0 -0
  38. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/tox.ini +0 -0
  39. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/trivyignore.yaml +0 -0
  40. {plexer_cli-0.1.15 → plexer_cli-0.1.18}/uv.lock +0 -0
@@ -20,4 +20,4 @@ updates:
20
20
  include: "scope"
21
21
  labels:
22
22
  - "dependencies"
23
- - "security"
23
+ - "security"
@@ -44,4 +44,4 @@ jobs:
44
44
  - name: "Upload to code-scanning"
45
45
  uses: github/codeql-action/upload-sarif@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
46
46
  with:
47
- sarif_file: results.sarif
47
+ sarif_file: results.sarif
@@ -16,18 +16,15 @@ permissions:
16
16
  contents: read
17
17
 
18
18
  jobs:
19
- release:
20
- name: Generate New Release - ${{ github.ref_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
- packages: write # required for pushing image to GHCR
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 publish
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
- # Docker Release
91
- # REF: https://docs.github.com/en/actions/use-cases-and-examples/publishing-packages/publishing-docker-images#publishing-images-to-docker-hub-and-github-packages
92
- ## Uploads to Docker.io and ghcr.io (GitHub Container Registry)
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) for Docker
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 automatic SBOM generation and provenance attestation
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: Build and push Docker images to all registries
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
- provenance: mode=max
126
- sbom: true
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
@@ -0,0 +1,3 @@
1
+ actionlint 1.7.9
2
+ pre-commit 4.5.0
3
+ uv 0.10.2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "0.2.0",
3
3
  "configurations": [
4
-
4
+
5
5
  {
6
6
  "name": "Run w/ Tmp Dirs",
7
7
  "type": "debugpy",
@@ -39,4 +39,4 @@
39
39
  "justMyCode": true,
40
40
  }
41
41
  ]
42
- }
42
+ }
@@ -8,4 +8,4 @@
8
8
  "trivy.useIgnoreFile": true,
9
9
  "trivy.secretScanning": true
10
10
  }
11
- }
11
+ }
@@ -4,4 +4,4 @@
4
4
  ],
5
5
  "python.testing.unittestEnabled": false,
6
6
  "python.testing.pytestEnabled": true
7
- }
7
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: plexer_cli
3
- Version: 0.1.15
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.15"
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
@@ -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