quasarr 2.6.1__tar.gz → 2.7.1__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.
Potentially problematic release.
This version of quasarr might be problematic. Click here for more details.
- quasarr-2.7.1/.env.example +54 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/.github/workflows/HostnameRedaction.yml +1 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/.github/workflows/PullRequests.yml +12 -1
- {quasarr-2.6.1 → quasarr-2.7.1}/.github/workflows/Release.yml +18 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/.gitignore +1 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/.pre-commit-config.yaml +1 -1
- {quasarr-2.6.1 → quasarr-2.7.1}/CONTRIBUTING.md +15 -6
- {quasarr-2.6.1 → quasarr-2.7.1}/PKG-INFO +4 -1
- quasarr-2.7.1/cli_tester.py +955 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/docker/Dockerfile +1 -0
- quasarr-2.7.1/docker/dev-services-compose.yml +100 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/pre-commit.py +24 -33
- {quasarr-2.6.1 → quasarr-2.7.1}/pyproject.toml +10 -2
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/__init__.py +71 -61
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/__init__.py +1 -2
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/arr/__init__.py +66 -57
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/captcha/__init__.py +203 -154
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/__init__.py +12 -8
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/linkcrypters/al.py +4 -4
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/linkcrypters/filecrypt.py +1 -2
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/packages/__init__.py +62 -88
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/al.py +3 -3
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/by.py +3 -3
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/he.py +8 -9
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/nk.py +3 -3
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/sl.py +6 -1
- quasarr-2.7.1/quasarr/downloads/sources/wd.py +225 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/wx.py +11 -17
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/auth.py +9 -13
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/cloudflare.py +5 -4
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/imdb_metadata.py +1 -3
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/jd_cache.py +64 -90
- quasarr-2.7.1/quasarr/providers/log.py +237 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/myjd_api.py +116 -94
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/sessions/al.py +20 -22
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/sessions/dd.py +1 -1
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/sessions/dl.py +8 -10
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/sessions/nx.py +1 -1
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/shared_state.py +26 -15
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/utils.py +15 -6
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/version.py +1 -1
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/__init__.py +113 -82
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/al.py +19 -23
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/by.py +6 -6
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/dd.py +8 -10
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/dj.py +15 -18
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/dl.py +25 -37
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/dt.py +13 -15
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/dw.py +24 -16
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/fx.py +25 -11
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/he.py +16 -14
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/hs.py +7 -7
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/mb.py +7 -7
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/nk.py +24 -25
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/nx.py +22 -15
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/sf.py +18 -9
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/sj.py +7 -7
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/sl.py +26 -14
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/wd.py +61 -31
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/wx.py +33 -47
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/storage/config.py +1 -3
- {quasarr-2.6.1 → quasarr-2.7.1}/uv.lock +126 -0
- quasarr-2.6.1/docker/dev-services-compose.yml +0 -98
- quasarr-2.6.1/quasarr/downloads/sources/wd.py +0 -169
- quasarr-2.6.1/quasarr/providers/log.py +0 -19
- {quasarr-2.6.1 → quasarr-2.7.1}/.github/FUNDING.yml +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/LICENSE +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/Quasarr.png +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/Quasarr.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/README.md +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/docker/docker-compose.yml +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/config/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/jdownloader/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/packages/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/sponsors_helper/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/api/statistics/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/linkcrypters/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/linkcrypters/hide.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/dd.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/dj.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/dl.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/dt.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/dw.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/hs.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/mb.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/nx.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/sf.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/downloads/sources/sj.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/hostname_issues.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/html_images.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/html_templates.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/notifications.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/obfuscated.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/sessions/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/statistics.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/providers/web_server.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/search/sources/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/storage/__init__.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/storage/setup.py +0 -0
- {quasarr-2.6.1 → quasarr-2.7.1}/quasarr/storage/sqlite_database.py +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Copy this file to .env and set your environment variables
|
|
2
|
+
|
|
3
|
+
# Available log levels:
|
|
4
|
+
# CRIT 50
|
|
5
|
+
# ERROR 40
|
|
6
|
+
# WARN 30
|
|
7
|
+
# INFO 20 (default)
|
|
8
|
+
# DEBUG 10
|
|
9
|
+
# TRACE 5
|
|
10
|
+
#
|
|
11
|
+
# Each log line can have multiple contexts, each context can have its own log level.
|
|
12
|
+
# The most verbose/lowest log level among the contexts will decide whether to log that line.
|
|
13
|
+
|
|
14
|
+
# Base log level
|
|
15
|
+
LOG=INFO
|
|
16
|
+
|
|
17
|
+
# Enable/disable colored log output
|
|
18
|
+
LOG_COLOR=1
|
|
19
|
+
|
|
20
|
+
# Maximum width of log lines (in characters)
|
|
21
|
+
#LOG_MAX_WIDTH=160
|
|
22
|
+
|
|
23
|
+
# Log levels per action:
|
|
24
|
+
#LOG_SEARCH = DEBUG
|
|
25
|
+
#LOG_SOURCES = DEBUG
|
|
26
|
+
#LOG_PROVIDERS = DEBUG
|
|
27
|
+
#LOG_DOWNLOADS = DEBUG
|
|
28
|
+
#LOG_PACKAGES = DEBUG
|
|
29
|
+
#LOG_SHARED_STATE = DEBUG
|
|
30
|
+
#LOG_API = DEBUG
|
|
31
|
+
#LOG_SESSIONS = DEBUG
|
|
32
|
+
#LOG_JD_CACHE = DEBUG
|
|
33
|
+
#LOG_JDPACKAGECACHE = DEBUG
|
|
34
|
+
#LOG_GET_PACKAGES = DEBUG
|
|
35
|
+
|
|
36
|
+
# Log levels per source:
|
|
37
|
+
#LOG_AL = DEBUG
|
|
38
|
+
#LOG_BY = DEBUG
|
|
39
|
+
#LOG_DD = DEBUG
|
|
40
|
+
#LOG_DJ = DEBUG
|
|
41
|
+
#LOG_DD = DEBUG
|
|
42
|
+
#LOG_DT = DEBUG
|
|
43
|
+
#LOG_DW = DEBUG
|
|
44
|
+
#LOG_FX = DEBUG
|
|
45
|
+
#LOG_HE = DEBUG
|
|
46
|
+
#LOG_HS = DEBUG
|
|
47
|
+
#LOG_MB = DEBUG
|
|
48
|
+
#LOG_NK = DEBUG
|
|
49
|
+
#LOG_NX = DEBUG
|
|
50
|
+
#LOG_SF = DEBUG
|
|
51
|
+
#LOG_SJ = DEBUG
|
|
52
|
+
#LOG_SL = DEBUG
|
|
53
|
+
#LOG_WD = DEBUG
|
|
54
|
+
#LOG_WX = DEBUG
|
|
@@ -16,6 +16,7 @@ jobs:
|
|
|
16
16
|
quality-check:
|
|
17
17
|
name: Check & Auto-Fix
|
|
18
18
|
runs-on: ubuntu-latest
|
|
19
|
+
timeout-minutes: 1
|
|
19
20
|
permissions:
|
|
20
21
|
contents: write
|
|
21
22
|
pull-requests: write
|
|
@@ -55,6 +56,7 @@ jobs:
|
|
|
55
56
|
needs: [ quality-check ]
|
|
56
57
|
if: needs.quality-check.outputs.changes_pushed != 'true' && ((github.head_ref == 'dev' && github.base_ref == 'main') || (github.event_name == 'workflow_dispatch' && github.ref_name == 'dev'))
|
|
57
58
|
runs-on: ubuntu-latest
|
|
59
|
+
timeout-minutes: 1
|
|
58
60
|
outputs:
|
|
59
61
|
version: ${{ steps.version.outputs.version }}
|
|
60
62
|
epoch: ${{ steps.version.outputs.epoch }}
|
|
@@ -78,6 +80,7 @@ jobs:
|
|
|
78
80
|
needs: [ quality-check, version ]
|
|
79
81
|
if: needs.quality-check.outputs.changes_pushed != 'true' && ((github.head_ref == 'dev' && github.base_ref == 'main') || (github.event_name == 'workflow_dispatch' && github.ref_name == 'dev'))
|
|
80
82
|
runs-on: ubuntu-latest
|
|
83
|
+
timeout-minutes: 3
|
|
81
84
|
outputs:
|
|
82
85
|
attestation-id: ${{ steps.attest.outputs.attestation-id }}
|
|
83
86
|
permissions:
|
|
@@ -108,9 +111,11 @@ jobs:
|
|
|
108
111
|
needs: [ quality-check, version ]
|
|
109
112
|
if: needs.quality-check.outputs.changes_pushed != 'true' && ((github.head_ref == 'dev' && github.base_ref == 'main') || (github.event_name == 'workflow_dispatch' && github.ref_name == 'dev'))
|
|
110
113
|
runs-on: windows-latest
|
|
114
|
+
timeout-minutes: 3
|
|
111
115
|
env:
|
|
112
116
|
TMP: "D:\\a\\temp"
|
|
113
117
|
TEMP: "D:\\a\\temp"
|
|
118
|
+
PYINSTALLER_CONFIG_DIR: ".pyinstaller-cache"
|
|
114
119
|
steps:
|
|
115
120
|
- run: mkdir D:\a\temp -Force
|
|
116
121
|
- uses: actions/checkout@v6
|
|
@@ -126,7 +131,7 @@ jobs:
|
|
|
126
131
|
with:
|
|
127
132
|
path: |
|
|
128
133
|
build
|
|
129
|
-
|
|
134
|
+
.pyinstaller-cache
|
|
130
135
|
key: pyinstaller-analysis-${{ runner.os }}-${{ hashFiles('uv.lock') }}
|
|
131
136
|
restore-keys: |
|
|
132
137
|
pyinstaller-analysis-${{ runner.os }}-
|
|
@@ -151,6 +156,7 @@ jobs:
|
|
|
151
156
|
beta-release:
|
|
152
157
|
needs: [ version, build-wheel, build-exe ]
|
|
153
158
|
runs-on: ubuntu-latest
|
|
159
|
+
timeout-minutes: 1
|
|
154
160
|
permissions: { contents: write }
|
|
155
161
|
steps:
|
|
156
162
|
- uses: actions/checkout@v6
|
|
@@ -196,6 +202,7 @@ jobs:
|
|
|
196
202
|
needs: [ quality-check, version, build-wheel ]
|
|
197
203
|
if: needs.quality-check.outputs.changes_pushed != 'true' && ((github.head_ref == 'dev' && github.base_ref == 'main') || (github.event_name == 'workflow_dispatch' && github.ref_name == 'dev'))
|
|
198
204
|
runs-on: ubuntu-latest
|
|
205
|
+
timeout-minutes: 3
|
|
199
206
|
steps:
|
|
200
207
|
- uses: actions/checkout@v6
|
|
201
208
|
- uses: actions/download-artifact@v4
|
|
@@ -228,6 +235,7 @@ jobs:
|
|
|
228
235
|
needs: [ quality-check, version, build-wheel ]
|
|
229
236
|
if: needs.quality-check.outputs.changes_pushed != 'true' && ((github.head_ref == 'dev' && github.base_ref == 'main') || (github.event_name == 'workflow_dispatch' && github.ref_name == 'dev'))
|
|
230
237
|
runs-on: ubuntu-24.04-arm
|
|
238
|
+
timeout-minutes: 3
|
|
231
239
|
steps:
|
|
232
240
|
- uses: actions/checkout@v6
|
|
233
241
|
- uses: actions/download-artifact@v4
|
|
@@ -259,6 +267,7 @@ jobs:
|
|
|
259
267
|
merge-docker-manifest:
|
|
260
268
|
needs: [ version, build-docker-amd64, build-docker-arm64 ]
|
|
261
269
|
runs-on: ubuntu-latest
|
|
270
|
+
timeout-minutes: 1
|
|
262
271
|
steps:
|
|
263
272
|
- uses: docker/setup-buildx-action@v3
|
|
264
273
|
- uses: docker/login-action@v3
|
|
@@ -287,6 +296,7 @@ jobs:
|
|
|
287
296
|
needs: [ quality-check, version, beta-release, merge-docker-manifest ]
|
|
288
297
|
if: needs.quality-check.outputs.changes_pushed != 'true' && needs.beta-release.result == 'success'
|
|
289
298
|
runs-on: ubuntu-latest
|
|
299
|
+
timeout-minutes: 1
|
|
290
300
|
permissions:
|
|
291
301
|
pull-requests: write
|
|
292
302
|
contents: read
|
|
@@ -316,6 +326,7 @@ jobs:
|
|
|
316
326
|
job-summary:
|
|
317
327
|
name: 📊 Beta Summary
|
|
318
328
|
runs-on: ubuntu-latest
|
|
329
|
+
timeout-minutes: 1
|
|
319
330
|
needs: [ quality-check, version, beta-release ]
|
|
320
331
|
if: always()
|
|
321
332
|
steps:
|
|
@@ -23,6 +23,7 @@ jobs:
|
|
|
23
23
|
version:
|
|
24
24
|
name: Get Version
|
|
25
25
|
runs-on: ubuntu-latest
|
|
26
|
+
timeout-minutes: 1
|
|
26
27
|
outputs:
|
|
27
28
|
version: ${{ steps.version.outputs.version }}
|
|
28
29
|
steps:
|
|
@@ -44,6 +45,7 @@ jobs:
|
|
|
44
45
|
build-wheel:
|
|
45
46
|
name: Build Wheel
|
|
46
47
|
runs-on: ubuntu-latest
|
|
48
|
+
timeout-minutes: 3
|
|
47
49
|
outputs:
|
|
48
50
|
attestation-id: ${{ steps.attest.outputs.attestation-id }}
|
|
49
51
|
permissions:
|
|
@@ -76,7 +78,10 @@ jobs:
|
|
|
76
78
|
build-exe:
|
|
77
79
|
name: Build Exe (Windows)
|
|
78
80
|
runs-on: windows-latest
|
|
81
|
+
timeout-minutes: 3
|
|
79
82
|
needs: version
|
|
83
|
+
outputs:
|
|
84
|
+
cache-hit: ${{ steps.pyinstaller-cache.outputs.cache-hit }}
|
|
80
85
|
env:
|
|
81
86
|
BUILD_PATH: "build"
|
|
82
87
|
steps:
|
|
@@ -121,6 +126,7 @@ jobs:
|
|
|
121
126
|
build-docker-amd64:
|
|
122
127
|
name: Build Docker (AMD64)
|
|
123
128
|
runs-on: ubuntu-latest
|
|
129
|
+
timeout-minutes: 3
|
|
124
130
|
needs: [ version, build-wheel ]
|
|
125
131
|
steps:
|
|
126
132
|
- uses: actions/checkout@v6
|
|
@@ -151,8 +157,10 @@ jobs:
|
|
|
151
157
|
tags: |
|
|
152
158
|
${{ env.ENDPOINT }}:latest-amd64
|
|
153
159
|
${{ env.ENDPOINT }}:${{ needs.version.outputs.version }}-amd64
|
|
160
|
+
${{ env.ENDPOINT }}:beta-amd64
|
|
154
161
|
${{ env.GHCR_ENDPOINT }}:latest-amd64
|
|
155
162
|
${{ env.GHCR_ENDPOINT }}:${{ needs.version.outputs.version }}-amd64
|
|
163
|
+
${{ env.GHCR_ENDPOINT }}:beta-amd64
|
|
156
164
|
build-args: VS=${{ needs.version.outputs.version }}
|
|
157
165
|
cache-from: type=gha,scope=amd64
|
|
158
166
|
cache-to: type=gha,mode=max,scope=amd64
|
|
@@ -160,6 +168,7 @@ jobs:
|
|
|
160
168
|
build-docker-arm64:
|
|
161
169
|
name: Build Docker (ARM64)
|
|
162
170
|
runs-on: ubuntu-24.04-arm
|
|
171
|
+
timeout-minutes: 3
|
|
163
172
|
needs: [ version, build-wheel ]
|
|
164
173
|
steps:
|
|
165
174
|
- uses: actions/checkout@v6
|
|
@@ -190,8 +199,10 @@ jobs:
|
|
|
190
199
|
tags: |
|
|
191
200
|
${{ env.ENDPOINT }}:latest-arm64
|
|
192
201
|
${{ env.ENDPOINT }}:${{ needs.version.outputs.version }}-arm64
|
|
202
|
+
${{ env.ENDPOINT }}:beta-arm64
|
|
193
203
|
${{ env.GHCR_ENDPOINT }}:latest-arm64
|
|
194
204
|
${{ env.GHCR_ENDPOINT }}:${{ needs.version.outputs.version }}-arm64
|
|
205
|
+
${{ env.GHCR_ENDPOINT }}:beta-arm64
|
|
195
206
|
build-args: VS=${{ needs.version.outputs.version }}
|
|
196
207
|
cache-from: type=gha,scope=arm64
|
|
197
208
|
cache-to: type=gha,mode=max,scope=arm64
|
|
@@ -199,6 +210,7 @@ jobs:
|
|
|
199
210
|
merge-docker-manifest:
|
|
200
211
|
name: Merge Docker Manifests
|
|
201
212
|
runs-on: ubuntu-latest
|
|
213
|
+
timeout-minutes: 1
|
|
202
214
|
needs: [ version, build-docker-amd64, build-docker-arm64 ]
|
|
203
215
|
steps:
|
|
204
216
|
- uses: docker/setup-buildx-action@v3
|
|
@@ -219,12 +231,15 @@ jobs:
|
|
|
219
231
|
ANNOTATION="index:org.opencontainers.image.description=$DESCRIPTION"
|
|
220
232
|
docker buildx imagetools create -t ${{ env.ENDPOINT }}:latest ${{ env.ENDPOINT }}:latest-amd64 ${{ env.ENDPOINT }}:latest-arm64
|
|
221
233
|
docker buildx imagetools create -t ${{ env.ENDPOINT }}:${{ needs.version.outputs.version }} ${{ env.ENDPOINT }}:${TAG_AMD64} ${{ env.ENDPOINT }}:${TAG_ARM64}
|
|
234
|
+
docker buildx imagetools create -t ${{ env.ENDPOINT }}:beta ${{ env.ENDPOINT }}:beta-amd64 ${{ env.ENDPOINT }}:beta-arm64
|
|
222
235
|
docker buildx imagetools create -t ${{ env.GHCR_ENDPOINT }}:latest --annotation "$ANNOTATION" ${{ env.GHCR_ENDPOINT }}:latest-amd64 ${{ env.GHCR_ENDPOINT }}:latest-arm64
|
|
223
236
|
docker buildx imagetools create -t ${{ env.GHCR_ENDPOINT }}:${{ needs.version.outputs.version }} --annotation "$ANNOTATION" ${{ env.GHCR_ENDPOINT }}:${TAG_AMD64} ${{ env.GHCR_ENDPOINT }}:${TAG_ARM64}
|
|
237
|
+
docker buildx imagetools create -t ${{ env.GHCR_ENDPOINT }}:beta --annotation "$ANNOTATION" ${{ env.GHCR_ENDPOINT }}:beta-amd64 ${{ env.GHCR_ENDPOINT }}:beta-arm64
|
|
224
238
|
|
|
225
239
|
release:
|
|
226
240
|
name: Create Release
|
|
227
241
|
runs-on: ubuntu-latest
|
|
242
|
+
timeout-minutes: 1
|
|
228
243
|
needs: [ version, build-wheel, build-exe, build-docker-amd64, build-docker-arm64 ]
|
|
229
244
|
permissions:
|
|
230
245
|
contents: write
|
|
@@ -269,6 +284,7 @@ jobs:
|
|
|
269
284
|
echo "### Python:" >> release_body.md
|
|
270
285
|
echo "\`uv tool upgrade quasarr\`" >> release_body.md
|
|
271
286
|
if [ -f pr_body.txt ]; then
|
|
287
|
+
echo "" >> release_body.md
|
|
272
288
|
cat pr_body.txt >> release_body.md
|
|
273
289
|
echo "" >> release_body.md
|
|
274
290
|
fi
|
|
@@ -288,6 +304,7 @@ jobs:
|
|
|
288
304
|
needs: [ version, release, merge-docker-manifest ]
|
|
289
305
|
if: always() && needs.release.result == 'success'
|
|
290
306
|
runs-on: ubuntu-latest
|
|
307
|
+
timeout-minutes: 1
|
|
291
308
|
steps:
|
|
292
309
|
- uses: actions/checkout@v6
|
|
293
310
|
- name: Send Discord Webhook
|
|
@@ -313,6 +330,7 @@ jobs:
|
|
|
313
330
|
job-summary:
|
|
314
331
|
name: 📈 Build Report
|
|
315
332
|
runs-on: ubuntu-latest
|
|
333
|
+
timeout-minutes: 1
|
|
316
334
|
needs: [ version, build-wheel, build-exe, build-docker-amd64, build-docker-arm64, release ]
|
|
317
335
|
if: always()
|
|
318
336
|
steps:
|
|
@@ -16,15 +16,12 @@ Install the pre-commit hook that ensures linting, formatting and version upgrade
|
|
|
16
16
|
uv run pre-commit install
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
**2. Run Quasarr
|
|
19
|
+
**2. Run Quasarr**
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
uv run Quasarr.py
|
|
22
|
+
uv run Quasarr.py
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Replace `<host-ip>` and `<port>` with the scheme, IP, and port of your host machine.
|
|
26
|
-
The `--internal_address` parameter is **mandatory**.
|
|
27
|
-
|
|
28
25
|
**3. Start the required services using the `dev-services-compose.yml` file**
|
|
29
26
|
|
|
30
27
|
```bash
|
|
@@ -34,12 +31,24 @@ CONFIG_VOLUMES=/path/to/config docker-compose -f docker/dev-services-compose.yml
|
|
|
34
31
|
Replace `/path/to/config` with your desired configuration location.
|
|
35
32
|
The `CONFIG_VOLUMES` environment variable is **mandatory**.
|
|
36
33
|
|
|
34
|
+
By default only JDownloader and Flaresolverr are enabled. See next step how to emulate supported *arr services.
|
|
35
|
+
|
|
36
|
+
**4. Validate your changes**
|
|
37
|
+
|
|
38
|
+
Use the `cli_tester.py` script to simulate Radarr, Sonarr, and LazyLibrarian interactions.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
uv run cli_tester.py
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This tool allows you to test searches, feeds, and downloads without needing the full stack of services running.
|
|
45
|
+
|
|
37
46
|
---
|
|
38
47
|
|
|
39
48
|
### Code Quality & Maintenance
|
|
40
49
|
|
|
41
50
|
The CI pipeline enforces strict code styling and import optimization. Please run this commands before pushing your
|
|
42
|
-
changes. Alternatively,
|
|
51
|
+
changes. Alternatively, set up the pre-commit hook as described above.
|
|
43
52
|
|
|
44
53
|
**Format code AND upgrade dependencie manually:**
|
|
45
54
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quasarr
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: Quasarr connects JDownloader with Radarr, Sonarr and LazyLibrarian. It also decrypts links protected by CAPTCHAs.
|
|
5
5
|
Author-email: rix1337 <rix1337@users.noreply.github.com>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -11,9 +11,12 @@ Requires-Python: >=3.12
|
|
|
11
11
|
Requires-Dist: beautifulsoup4>=4.14.3
|
|
12
12
|
Requires-Dist: bottle>=0.13.4
|
|
13
13
|
Requires-Dist: dukpy>=0.5.0
|
|
14
|
+
Requires-Dist: loguru>=0.7.3
|
|
14
15
|
Requires-Dist: pillow>=12.1.0
|
|
15
16
|
Requires-Dist: pycryptodomex>=3.23.0
|
|
17
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
16
18
|
Requires-Dist: requests>=2.32.5
|
|
19
|
+
Requires-Dist: wcwidth>=0.5.3
|
|
17
20
|
Description-Content-Type: text/markdown
|
|
18
21
|
|
|
19
22
|
#
|