mnamer 2.7.1.dev26__tar.gz → 2.7.1.dev27__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.
- mnamer-2.7.1.dev27/.dockerignore +8 -0
- mnamer-2.7.1.dev27/.github/workflows/publish-docker.yml +247 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/workflows/push.yml +39 -0
- mnamer-2.7.1.dev27/Dockerfile +20 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/PKG-INFO +1 -1
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/__version__.py +1 -1
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer.egg-info/PKG-INFO +1 -1
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer.egg-info/SOURCES.txt +2 -0
- mnamer-2.7.1.dev26/Dockerfile +0 -10
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/actions/init/action.yml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/actions/lint/action.yml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/actions/test/action.yml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/dependabot.yml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/workflows/publish.yml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.github/workflows/pull_request.yml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.gitignore +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.python-version +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/.vscode/settings.json +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/AGENTS.md +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/CLAUDE.md +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/LICENSE.txt +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/MANIFEST.in +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/README.md +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/design.eps +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/logo-2.png +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/logo-3.png +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/logo.png +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/recording.mov +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/screenshot.eps +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/assets/screenshot.png +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/makefile +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/__init__.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/__main__.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/argument.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/const.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/endpoints.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/exceptions.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/frontends.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/language.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/metadata.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/providers.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/py.typed +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/setting_spec.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/setting_store.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/target.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/tty.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/types.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer/utils.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer.egg-info/dependency_links.txt +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer.egg-info/entry_points.txt +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer.egg-info/requires.txt +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/mnamer.egg-info/top_level.txt +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/pyproject.toml +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/pytest.ini +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/setup.cfg +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/__init__.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/conftest.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/e2e/__init__.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/e2e/conftest.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/e2e/test_directives.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/e2e/test_errors.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/e2e/test_moving.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/__init__.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_argument.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_language.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_metadata.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_setting_spec.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_setting_store.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_target.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_tty.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/local/test_utils.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/__init__.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_endpoints__omdb.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_endpoints__tmdb.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_endpoints__tvdb.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_endpoints__tvmaze.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_providers__omdb.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_providers__tmdb.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_providers__tvdb.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/tests/network/test_providers__tvmaze.py +0 -0
- {mnamer-2.7.1.dev26 → mnamer-2.7.1.dev27}/uv.lock +0 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
name: publish docker
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
target:
|
|
7
|
+
required: true
|
|
8
|
+
type: string
|
|
9
|
+
release_tag:
|
|
10
|
+
required: false
|
|
11
|
+
type: string
|
|
12
|
+
default: ""
|
|
13
|
+
is_prerelease:
|
|
14
|
+
required: false
|
|
15
|
+
type: boolean
|
|
16
|
+
default: false
|
|
17
|
+
secrets:
|
|
18
|
+
DOCKERHUB_USERNAME:
|
|
19
|
+
required: true
|
|
20
|
+
DOCKERHUB_TOKEN:
|
|
21
|
+
required: true
|
|
22
|
+
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
inputs:
|
|
25
|
+
target:
|
|
26
|
+
description: What Docker image set to publish
|
|
27
|
+
required: true
|
|
28
|
+
type: choice
|
|
29
|
+
options:
|
|
30
|
+
- latest sha
|
|
31
|
+
- latest release
|
|
32
|
+
|
|
33
|
+
env:
|
|
34
|
+
DOCKERHUB_IMAGE: jkwill87/mnamer
|
|
35
|
+
GHCR_IMAGE: ghcr.io/jkwill87/mnamer/mnamer
|
|
36
|
+
|
|
37
|
+
jobs:
|
|
38
|
+
publish-docker:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
|
|
41
|
+
permissions:
|
|
42
|
+
contents: read
|
|
43
|
+
packages: write
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
- name: Resolving Source
|
|
47
|
+
id: resolve
|
|
48
|
+
env:
|
|
49
|
+
GH_TOKEN: ${{ github.token }}
|
|
50
|
+
RAW_TARGET: ${{ inputs.target || github.event.inputs.target }}
|
|
51
|
+
RELEASE_TAG: ${{ inputs.release_tag }}
|
|
52
|
+
IS_PRERELEASE: ${{ inputs.is_prerelease }}
|
|
53
|
+
run: |
|
|
54
|
+
set -euo pipefail
|
|
55
|
+
|
|
56
|
+
target="$(printf '%s' "$RAW_TARGET" | tr ' ' '-')"
|
|
57
|
+
main_sha="$(git ls-remote "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git" refs/heads/main | awk '{print $1}')"
|
|
58
|
+
|
|
59
|
+
case "$target" in
|
|
60
|
+
latest-sha)
|
|
61
|
+
checkout_ref="$main_sha"
|
|
62
|
+
release_tag=""
|
|
63
|
+
is_prerelease="false"
|
|
64
|
+
;;
|
|
65
|
+
latest-release)
|
|
66
|
+
release_json="$(gh release view --repo "$GITHUB_REPOSITORY" --json tagName,isPrerelease)"
|
|
67
|
+
release_tag="$(jq -r '.tagName' <<<"$release_json")"
|
|
68
|
+
is_prerelease="$(jq -r '.isPrerelease' <<<"$release_json")"
|
|
69
|
+
checkout_ref="$release_tag"
|
|
70
|
+
;;
|
|
71
|
+
event-release)
|
|
72
|
+
release_tag="$RELEASE_TAG"
|
|
73
|
+
is_prerelease="$IS_PRERELEASE"
|
|
74
|
+
checkout_ref="$release_tag"
|
|
75
|
+
;;
|
|
76
|
+
*)
|
|
77
|
+
echo "Unsupported Docker publish target: $RAW_TARGET" >&2
|
|
78
|
+
exit 1
|
|
79
|
+
;;
|
|
80
|
+
esac
|
|
81
|
+
|
|
82
|
+
if [ -z "$checkout_ref" ]; then
|
|
83
|
+
echo "Could not resolve a checkout ref for target: $RAW_TARGET" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
{
|
|
88
|
+
echo "target=$target"
|
|
89
|
+
echo "checkout_ref=$checkout_ref"
|
|
90
|
+
echo "main_sha=$main_sha"
|
|
91
|
+
echo "release_tag=$release_tag"
|
|
92
|
+
echo "is_prerelease=$is_prerelease"
|
|
93
|
+
} >> "$GITHUB_OUTPUT"
|
|
94
|
+
|
|
95
|
+
- uses: actions/checkout@v6
|
|
96
|
+
with:
|
|
97
|
+
ref: ${{ steps.resolve.outputs.checkout_ref }}
|
|
98
|
+
fetch-depth: 0
|
|
99
|
+
|
|
100
|
+
- name: Finalizing Tags
|
|
101
|
+
id: tags
|
|
102
|
+
env:
|
|
103
|
+
TARGET: ${{ steps.resolve.outputs.target }}
|
|
104
|
+
MAIN_SHA: ${{ steps.resolve.outputs.main_sha }}
|
|
105
|
+
RELEASE_TAG: ${{ steps.resolve.outputs.release_tag }}
|
|
106
|
+
IS_PRERELEASE: ${{ steps.resolve.outputs.is_prerelease }}
|
|
107
|
+
run: |
|
|
108
|
+
set -euo pipefail
|
|
109
|
+
|
|
110
|
+
source_sha="$(git rev-parse HEAD)"
|
|
111
|
+
aliases=()
|
|
112
|
+
|
|
113
|
+
if [ "$TARGET" = "latest-sha" ]; then
|
|
114
|
+
python -m pip install --quiet setuptools-scm[toml]
|
|
115
|
+
version="$(python -m setuptools_scm)"
|
|
116
|
+
aliases+=("dev")
|
|
117
|
+
else
|
|
118
|
+
version="${RELEASE_TAG#v}"
|
|
119
|
+
aliases+=("$version")
|
|
120
|
+
|
|
121
|
+
if [ "$IS_PRERELEASE" != "true" ]; then
|
|
122
|
+
aliases+=("latest")
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
if [ "$TARGET" = "latest-release" ] && [ "$source_sha" = "$MAIN_SHA" ]; then
|
|
126
|
+
aliases+=("dev")
|
|
127
|
+
fi
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
{
|
|
131
|
+
echo "source_sha=$source_sha"
|
|
132
|
+
echo "version=$version"
|
|
133
|
+
echo "aliases<<EOF"
|
|
134
|
+
printf '%s\n' "${aliases[@]}"
|
|
135
|
+
echo "EOF"
|
|
136
|
+
} >> "$GITHUB_OUTPUT"
|
|
137
|
+
|
|
138
|
+
- name: Logging In To GHCR
|
|
139
|
+
uses: docker/login-action@v4
|
|
140
|
+
with:
|
|
141
|
+
registry: ghcr.io
|
|
142
|
+
username: ${{ github.actor }}
|
|
143
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
144
|
+
|
|
145
|
+
- name: Logging In To Docker Hub
|
|
146
|
+
uses: docker/login-action@v4
|
|
147
|
+
with:
|
|
148
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
149
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
150
|
+
scope: jkwill87/mnamer@push
|
|
151
|
+
|
|
152
|
+
- name: Setting Up Docker Buildx
|
|
153
|
+
uses: docker/setup-buildx-action@v3
|
|
154
|
+
|
|
155
|
+
- name: Planning Docker Push
|
|
156
|
+
id: plan
|
|
157
|
+
env:
|
|
158
|
+
SOURCE_SHA: ${{ steps.tags.outputs.source_sha }}
|
|
159
|
+
ALIASES: ${{ steps.tags.outputs.aliases }}
|
|
160
|
+
run: |
|
|
161
|
+
set -euo pipefail
|
|
162
|
+
|
|
163
|
+
tag_is_current() {
|
|
164
|
+
local ref="$1"
|
|
165
|
+
local output
|
|
166
|
+
local error_file
|
|
167
|
+
error_file="$(mktemp)"
|
|
168
|
+
|
|
169
|
+
if ! output="$(docker buildx imagetools inspect "$ref" --raw 2>"$error_file")"; then
|
|
170
|
+
if grep -Eiq 'not found|manifest unknown|name unknown' "$error_file"; then
|
|
171
|
+
rm -f "$error_file"
|
|
172
|
+
return 1
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
cat "$error_file" >&2
|
|
176
|
+
rm -f "$error_file"
|
|
177
|
+
return 2
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
rm -f "$error_file"
|
|
181
|
+
revision="$(
|
|
182
|
+
jq -r '
|
|
183
|
+
.annotations["org.opencontainers.image.revision"]
|
|
184
|
+
// (.manifests[]?.annotations["org.opencontainers.image.revision"] // empty)
|
|
185
|
+
' <<<"$output" | head -n 1
|
|
186
|
+
)"
|
|
187
|
+
[ "$revision" = "$SOURCE_SHA" ]
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
tags=()
|
|
191
|
+
while IFS= read -r alias; do
|
|
192
|
+
[ -n "$alias" ] || continue
|
|
193
|
+
|
|
194
|
+
tags+=("$GHCR_IMAGE:$alias")
|
|
195
|
+
tags+=("$DOCKERHUB_IMAGE:$alias")
|
|
196
|
+
done <<<"$ALIASES"
|
|
197
|
+
|
|
198
|
+
publish_tags=()
|
|
199
|
+
for tag in "${tags[@]}"; do
|
|
200
|
+
if tag_is_current "$tag"; then
|
|
201
|
+
echo "$tag is already current"
|
|
202
|
+
else
|
|
203
|
+
echo "$tag needs publishing"
|
|
204
|
+
publish_tags+=("$tag")
|
|
205
|
+
fi
|
|
206
|
+
done
|
|
207
|
+
|
|
208
|
+
if [ "${#publish_tags[@]}" -eq 0 ]; then
|
|
209
|
+
echo "All requested Docker tags are already current."
|
|
210
|
+
echo "should_push=false" >> "$GITHUB_OUTPUT"
|
|
211
|
+
else
|
|
212
|
+
echo "should_push=true" >> "$GITHUB_OUTPUT"
|
|
213
|
+
{
|
|
214
|
+
echo "tags<<EOF"
|
|
215
|
+
printf '%s\n' "${publish_tags[@]}"
|
|
216
|
+
echo "EOF"
|
|
217
|
+
} >> "$GITHUB_OUTPUT"
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
- name: Extracting Docker Metadata
|
|
221
|
+
if: steps.plan.outputs.should_push == 'true'
|
|
222
|
+
id: meta
|
|
223
|
+
uses: docker/metadata-action@v6
|
|
224
|
+
with:
|
|
225
|
+
images: |
|
|
226
|
+
${{ env.GHCR_IMAGE }}
|
|
227
|
+
${{ env.DOCKERHUB_IMAGE }}
|
|
228
|
+
labels: |
|
|
229
|
+
org.opencontainers.image.title=mnamer
|
|
230
|
+
org.opencontainers.image.description=A command-line utility for organizing media files.
|
|
231
|
+
org.opencontainers.image.revision=${{ steps.tags.outputs.source_sha }}
|
|
232
|
+
org.opencontainers.image.version=${{ steps.tags.outputs.version }}
|
|
233
|
+
|
|
234
|
+
- name: Building And Publishing Docker Image
|
|
235
|
+
if: steps.plan.outputs.should_push == 'true'
|
|
236
|
+
uses: docker/build-push-action@v7
|
|
237
|
+
with:
|
|
238
|
+
context: .
|
|
239
|
+
push: true
|
|
240
|
+
tags: ${{ steps.plan.outputs.tags }}
|
|
241
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
242
|
+
annotations: |
|
|
243
|
+
org.opencontainers.image.revision=${{ steps.tags.outputs.source_sha }}
|
|
244
|
+
org.opencontainers.image.version=${{ steps.tags.outputs.version }}
|
|
245
|
+
org.opencontainers.image.source=https://github.com/${{ github.repository }}
|
|
246
|
+
cache-from: type=gha
|
|
247
|
+
cache-to: type=gha,mode=max
|
|
@@ -49,3 +49,42 @@ jobs:
|
|
|
49
49
|
inherit
|
|
50
50
|
|
|
51
51
|
uses: ./.github/workflows/publish.yml
|
|
52
|
+
|
|
53
|
+
publish-docker-main:
|
|
54
|
+
if: >-
|
|
55
|
+
success()
|
|
56
|
+
&& github.event_name == 'push'
|
|
57
|
+
&& github.ref == 'refs/heads/main'
|
|
58
|
+
|
|
59
|
+
needs:
|
|
60
|
+
- lint
|
|
61
|
+
- test
|
|
62
|
+
|
|
63
|
+
secrets:
|
|
64
|
+
inherit
|
|
65
|
+
|
|
66
|
+
uses: ./.github/workflows/publish-docker.yml
|
|
67
|
+
with:
|
|
68
|
+
target: latest-sha
|
|
69
|
+
|
|
70
|
+
publish-docker-release:
|
|
71
|
+
if: >-
|
|
72
|
+
success()
|
|
73
|
+
&& github.event_name == 'release'
|
|
74
|
+
&& (
|
|
75
|
+
github.event.action == 'published'
|
|
76
|
+
|| github.event.action == 'prereleased'
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
needs:
|
|
80
|
+
- lint
|
|
81
|
+
- test
|
|
82
|
+
|
|
83
|
+
secrets:
|
|
84
|
+
inherit
|
|
85
|
+
|
|
86
|
+
uses: ./.github/workflows/publish-docker.yml
|
|
87
|
+
with:
|
|
88
|
+
target: event-release
|
|
89
|
+
release_tag: ${{ github.event.release.tag_name }}
|
|
90
|
+
is_prerelease: ${{ github.event.release.prerelease }}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
FROM python:alpine AS builder
|
|
4
|
+
|
|
5
|
+
RUN apk add --no-cache git
|
|
6
|
+
WORKDIR /src
|
|
7
|
+
COPY . .
|
|
8
|
+
RUN pip wheel --no-cache-dir --wheel-dir /wheels .
|
|
9
|
+
|
|
10
|
+
FROM python:alpine
|
|
11
|
+
ARG UID=1000
|
|
12
|
+
ARG GID=1000
|
|
13
|
+
RUN addgroup mnamer -g "$GID"
|
|
14
|
+
RUN adduser mnamer -u "$UID" -G mnamer --disabled-password
|
|
15
|
+
COPY --from=builder /wheels/*.whl /tmp/
|
|
16
|
+
RUN pip3 install --no-cache-dir --upgrade pip /tmp/*.whl \
|
|
17
|
+
&& rm -f /tmp/*.whl
|
|
18
|
+
USER mnamer
|
|
19
|
+
ENTRYPOINT ["python", "-m", "mnamer"]
|
|
20
|
+
CMD ["--batch", "/mnt"]
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
.dockerignore
|
|
1
2
|
.gitignore
|
|
2
3
|
.python-version
|
|
3
4
|
AGENTS.md
|
|
@@ -14,6 +15,7 @@ uv.lock
|
|
|
14
15
|
.github/actions/init/action.yml
|
|
15
16
|
.github/actions/lint/action.yml
|
|
16
17
|
.github/actions/test/action.yml
|
|
18
|
+
.github/workflows/publish-docker.yml
|
|
17
19
|
.github/workflows/publish.yml
|
|
18
20
|
.github/workflows/pull_request.yml
|
|
19
21
|
.github/workflows/push.yml
|
mnamer-2.7.1.dev26/Dockerfile
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
FROM python:alpine
|
|
2
|
-
ARG MNAMER_VERSION=2.5.5
|
|
3
|
-
ARG UID=1000
|
|
4
|
-
ARG GID=1000
|
|
5
|
-
RUN addgroup mnamer -g $GID
|
|
6
|
-
RUN adduser mnamer -u $UID -G mnamer --disabled-password
|
|
7
|
-
USER mnamer
|
|
8
|
-
RUN pip3 install --no-cache-dir --upgrade pip mnamer==${MNAMER_VERSION}
|
|
9
|
-
ENTRYPOINT ["python", "-m", "mnamer"]
|
|
10
|
-
CMD ["--batch", "/mnt"]
|
|
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
|
|
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
|
|
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
|