Compare commits

...

30 Commits

Author SHA1 Message Date
LinuxServer-CI
71ee7f2648 Bot Updating Package Versions 2024-08-18 06:54:49 +00:00
LinuxServer-CI
9968a694df Bot Updating Templated Files 2024-08-18 06:52:32 +00:00
LinuxServer-CI
b192447473 Bot Updating Templated Files 2024-08-18 06:51:02 +00:00
LinuxServer-CI
7363dd5dda Bot Updating Package Versions 2024-08-11 06:52:03 +00:00
LinuxServer-CI
9cb07c720e Bot Updating Package Versions 2024-08-04 06:51:55 +00:00
LinuxServer-CI
843a85bbfb Bot Updating Package Versions 2024-07-28 06:52:11 +00:00
LinuxServer-CI
6b9f69684e Bot Updating Package Versions 2024-07-17 12:24:04 +00:00
LinuxServer-CI
91490c2651 Bot Updating Templated Files 2024-07-17 12:20:53 +00:00
Adam
0c7cf285b6 Merge pull request #317 from linuxserver/master-cli
Restore qbittorrent-cli (master)
2024-07-17 13:18:35 +01:00
thespad
41cd38a43c Fix static version in url 2024-07-17 11:43:28 +01:00
thespad
5e4d830356 Use netcore 6 version 2024-07-17 11:22:18 +01:00
thespad
7b4c3d8977 Fix arm cli path 2024-07-17 11:18:58 +01:00
thespad
5f06988083 Restore qbittorrent-cli 2024-07-17 11:16:02 +01:00
LinuxServer-CI
fe0e7b895a Bot Updating Package Versions 2024-07-14 06:55:19 +00:00
LinuxServer-CI
95f5fee13f Bot Updating Templated Files 2024-07-14 06:53:26 +00:00
LinuxServer-CI
e1158e49f9 Bot Updating Templated Files 2024-07-14 06:52:10 +00:00
LinuxServer-CI
2f35590762 Bot Updating Package Versions 2024-07-08 15:09:33 +00:00
Roxedus
ac6dc105ed Merge pull request #314 from linuxserver/master-ro-tweaks
Don't chown /downloads unless it's mounted (master)
2024-07-08 17:07:00 +02:00
LinuxServer-CI
4fe6aac159 Bot Updating Package Versions 2024-07-07 06:52:28 +00:00
thespad
005e8e0501 Don't chown /downloads unless it's mounted 2024-07-03 19:17:09 +01:00
LinuxServer-CI
3841f98110 Bot Updating Package Versions 2024-06-30 06:52:39 +00:00
LinuxServer-CI
1018aaa7f3 Bot Updating Package Versions 2024-06-23 06:51:57 +00:00
LinuxServer-CI
e8e44a5cc5 Bot Updating Package Versions 2024-06-12 20:11:59 +00:00
LinuxServer-CI
50903e2435 Bot Updating Package Versions 2024-06-09 06:51:54 +00:00
LinuxServer-CI
5f3183e182 Bot Updating Package Versions 2024-05-30 01:46:00 +00:00
LinuxServer-CI
40bba54f1f Bot Updating Package Versions 2024-05-26 13:46:58 +00:00
LinuxServer-CI
b979ef979b Bot Updating Templated Files 2024-05-26 13:44:16 +00:00
Adam
7a67323642 Merge pull request #310 from linuxserver/drop-cli
Drop qbittorrent-cli
2024-05-26 14:42:58 +01:00
thespad
77c3446685 Remove qbt wrapper 2024-05-25 21:25:54 +01:00
thespad
5dabf23090 Drop qbittorrent-cli 2024-05-25 21:20:46 +01:00
14 changed files with 366 additions and 310 deletions

View File

@@ -12,18 +12,21 @@ jobs:
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
run: | run: |
printf "# External trigger for docker-qbittorrent\n\n" >> $GITHUB_STEP_SUMMARY
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER }}" ]; then if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER is set; skipping trigger. ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> Github secret \`PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER\". ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER\`" >> $GITHUB_STEP_SUMMARY echo "> External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_MASTER\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****" printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \ EXT_RELEASE=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
&& awk '/^P:'"qbittorrent-nox"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') && awk '/^P:'"qbittorrent-nox"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://')
echo "Type is \`alpine_repo\`" >> $GITHUB_STEP_SUMMARY
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for qbittorrent branch master" FAILURE_REASON="Can't retrieve external version for qbittorrent branch master"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-qbittorrent/actions/runs/${{ github.run_id }}" GHA_TRIGGER_URL="https://github.com/linuxserver/docker-qbittorrent/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
@@ -32,9 +35,8 @@ jobs:
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****" echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
image="linuxserver/qbittorrent" image="linuxserver/qbittorrent"
tag="latest" tag="latest"
token=$(curl -sX GET \ token=$(curl -sX GET \
@@ -61,45 +63,41 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then if [ -z "${IMAGE_VERSION}" ]; then
echo "**** Can't retrieve last pushed version, exiting ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for qbittorrent tag latest" FAILURE_REASON="Can't retrieve last pushed version for qbittorrent tag latest"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****" echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****" echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [[ $(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/aarch64/APKINDEX.tar.gz" | tar -xz -C /tmp && awk '/^P:'"qbittorrent-nox"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') != "${EXT_RELEASE}" ]]; then elif [[ $(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/aarch64/APKINDEX.tar.gz" | tar -xz -C /tmp && awk '/^P:'"qbittorrent-nox"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') != "${EXT_RELEASE}" ]]; then
echo "**** New version ${EXT_RELEASE} found; but not all arch repos updated yet; exiting ****" echo "New version \`${EXT_RELEASE}\` found; but not all arch repos updated yet; exiting" >> $GITHUB_STEP_SUMMARY
echo "New version ${EXT_RELEASE} found; but not all arch repos updated yet; exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for qbittorrent tag latest is detected, however not all arch repos are updated yet. Will try again later." FAILURE_REASON="New version ${EXT_RELEASE} for qbittorrent tag latest is detected, however not all arch repos are updated yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****" echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
echo "New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
else else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****" printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/buildWithParameters?PACKAGE_CHECK=false \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****" echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "**** Sleeping 10 seconds until job starts ****" echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10 sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}" buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****" echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \ curl -iX POST \
"${buildurl}submitDescription" \ "${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \

View File

@@ -15,31 +15,31 @@ jobs:
- name: External Trigger Scheduler - name: External Trigger Scheduler
run: | run: |
echo "**** Branches found: ****" printf "# External trigger scheduler for docker-qbittorrent\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/jenkins-vars.yml) ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch') ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type') ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****" echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****." echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
curl -iX POST \ curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \ -H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \ -d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-qbittorrent/actions/workflows/external_trigger.yml/dispatches https://api.github.com/repos/linuxserver/docker-qbittorrent/actions/workflows/external_trigger.yml/dispatches
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi fi
else else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****" echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi fi
done done

View File

@@ -12,29 +12,29 @@ jobs:
- name: Package Trigger - name: Package Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
run: | run: |
printf "# Package trigger for docker-qbittorrent\n\n" >> $GITHUB_STEP_SUMMARY
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER }}" ]; then if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER is set; skipping trigger. ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> Github secret \`PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY echo "> There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER\". ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER\`" >> $GITHUB_STEP_SUMMARY echo "> Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_QBITTORRENT_MASTER\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/buildWithParameters?PACKAGE_CHECK=true \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****" echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "**** Sleeping 10 seconds until job starts ****" echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10 sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}" buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****" echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \ curl -iX POST \
"${buildurl}submitDescription" \ "${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \

View File

@@ -15,17 +15,19 @@ jobs:
- name: Package Trigger Scheduler - name: Package Trigger Scheduler
run: | run: |
echo "**** Branches found: ****" printf "# Package trigger scheduler for docker-qbittorrent\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/jenkins-vars.yml | yq -r '.ls_branch') ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****" echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} " triggered_branches="${triggered_branches}${br} "
curl -iX POST \ curl -iX POST \
@@ -35,11 +37,9 @@ jobs:
https://api.github.com/repos/linuxserver/docker-qbittorrent/actions/workflows/package_trigger.yml/dispatches https://api.github.com/repos/linuxserver/docker-qbittorrent/actions/workflows/package_trigger.yml/dispatches
sleep 30 sleep 30
else else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi fi
else else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi fi
done done

View File

@@ -5,6 +5,8 @@ on:
- '**/run' - '**/run'
- '**/finish' - '**/finish'
- '**/check' - '**/check'
- 'root/migrations/*'
jobs: jobs:
permission_check: permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1 uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/unrar:latest as unrar FROM ghcr.io/linuxserver/unrar:latest AS unrar
FROM ghcr.io/linuxserver/baseimage-alpine:edge FROM ghcr.io/linuxserver/baseimage-alpine:edge
@@ -35,14 +35,15 @@ RUN \
mkdir /qbt && \ mkdir /qbt && \
if [ -z ${QBT_CLI_VERSION+x} ]; then \ if [ -z ${QBT_CLI_VERSION+x} ]; then \
QBT_CLI_VERSION=$(curl -sL "https://api.github.com/repos/fedarovich/qbittorrent-cli/releases/latest" \ QBT_CLI_VERSION=$(curl -sL "https://api.github.com/repos/fedarovich/qbittorrent-cli/releases/latest" \
| jq -r '. | .tag_name'); \ | jq -r '. | .tag_name'); \
fi && \ fi && \
curl -o \ curl -o \
/tmp/qbt.tar.gz -L \ /tmp/qbt.tar.gz -L \
"https://github.com/fedarovich/qbittorrent-cli/releases/download/${QBT_CLI_VERSION}/qbt-linux-alpine-x64-${QBT_CLI_VERSION#v}.tar.gz" && \ "https://github.com/fedarovich/qbittorrent-cli/releases/download/${QBT_CLI_VERSION}/qbt-linux-alpine-x64-net6-${QBT_CLI_VERSION#v}.tar.gz" && \
tar xf \ tar xf \
/tmp/qbt.tar.gz -C \ /tmp/qbt.tar.gz -C \
/qbt && \ /qbt && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
rm -rf \ rm -rf \
/root/.cache \ /root/.cache \

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/unrar:arm64v8-latest as unrar FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-edge FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-edge
@@ -35,14 +35,15 @@ RUN \
mkdir /qbt && \ mkdir /qbt && \
if [ -z ${QBT_CLI_VERSION+x} ]; then \ if [ -z ${QBT_CLI_VERSION+x} ]; then \
QBT_CLI_VERSION=$(curl -sL "https://api.github.com/repos/fedarovich/qbittorrent-cli/releases/latest" \ QBT_CLI_VERSION=$(curl -sL "https://api.github.com/repos/fedarovich/qbittorrent-cli/releases/latest" \
| jq -r '. | .tag_name'); \ | jq -r '. | .tag_name'); \
fi && \ fi && \
curl -o \ curl -o \
/tmp/qbt.tar.gz -L \ /tmp/qbt.tar.gz -L \
"https://github.com/fedarovich/qbittorrent-cli/releases/download/${QBT_CLI_VERSION}/qbt-linux-alpine-arm64-${QBT_CLI_VERSION#v}.tar.gz" && \ "https://github.com/fedarovich/qbittorrent-cli/releases/download/${QBT_CLI_VERSION}/qbt-linux-alpine-arm64-net6-${QBT_CLI_VERSION#v}.tar.gz" && \
tar xf \ tar xf \
/tmp/qbt.tar.gz -C \ /tmp/qbt.tar.gz -C \
/qbt && \ /qbt && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
rm -rf \ rm -rf \
/root/.cache \ /root/.cache \

80
Jenkinsfile vendored
View File

@@ -17,6 +17,8 @@ pipeline {
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0') GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id') GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat') DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat')
QUAYIO_API_TOKEN=credentials('quayio-repo-api-token')
GIT_SIGNING_KEY=credentials('484fbca6-9a4f-455e-b9e3-97ac98785f5f')
CONTAINER_NAME = 'qbittorrent' CONTAINER_NAME = 'qbittorrent'
BUILD_VERSION_ARG = 'QBITTORRENT_VERSION' BUILD_VERSION_ARG = 'QBITTORRENT_VERSION'
LS_USER = 'linuxserver' LS_USER = 'linuxserver'
@@ -33,15 +35,29 @@ pipeline {
CI_WEB='true' CI_WEB='true'
CI_PORT='8080' CI_PORT='8080'
CI_SSL='false' CI_SSL='false'
CI_DELAY='120' CI_DELAY='60'
CI_DOCKERENV='TZ=US/Pacific' CI_DOCKERENV=''
CI_AUTH='user:password' CI_AUTH=''
CI_WEBPATH='' CI_WEBPATH=''
} }
stages { stages {
stage("Set git config"){
steps{
sh '''#!/bin/bash
cat ${GIT_SIGNING_KEY} > /config/.ssh/id_sign
chmod 600 /config/.ssh/id_sign
ssh-keygen -y -f /config/.ssh/id_sign > /config/.ssh/id_sign.pub
echo "Using $(ssh-keygen -lf /config/.ssh/id_sign) to sign commits"
git config --global gpg.format ssh
git config --global user.signingkey /config/.ssh/id_sign
git config --global commit.gpgsign true
'''
}
}
// Setup all the basic environment variables needed for the build // Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){ stage("Set ENV Variables base"){
steps{ steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash sh '''#! /bin/bash
containers=$(docker ps -aq) containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
@@ -249,7 +265,7 @@ pipeline {
-v ${WORKSPACE}:/mnt \ -v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
ghcr.io/linuxserver/baseimage-alpine:3.19 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ ghcr.io/linuxserver/baseimage-alpine:3.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache python3 && \ apk add --no-cache python3 && \
python3 -m venv /lsiopy && \ python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \ pip install --no-cache-dir -U pip && \
@@ -356,7 +372,7 @@ pipeline {
fi fi
echo "Starting Stage 4 - External repo updates: Docs, Unraid Template and Readme Sync to Docker Hub" echo "Starting Stage 4 - External repo updates: Docs, Unraid Template and Readme Sync to Docker Hub"
mkdir -p ${TEMPDIR}/docs mkdir -p ${TEMPDIR}/docs
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation git clone --depth=1 https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/
cd ${TEMPDIR}/docs/docker-documentation cd ${TEMPDIR}/docs/docker-documentation
@@ -374,8 +390,8 @@ pipeline {
echo "Docs update not needed, skipping" echo "Docs update not needed, skipping"
fi fi
mkdir -p ${TEMPDIR}/unraid mkdir -p ${TEMPDIR}/unraid
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates git clone --depth=1 https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates git clone --depth=1 https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
@@ -385,9 +401,9 @@ pipeline {
echo "Updating Unraid template" echo "Updating Unraid template"
cd ${TEMPDIR}/unraid/templates/ cd ${TEMPDIR}/unraid/templates/
GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||') GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list && [[ -f ${TEMPDIR}/unraid/templates/unraid/deprecated/${CONTAINER_NAME}.xml ]]; then if grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list && [[ -f ${TEMPDIR}/unraid/templates/unraid/deprecated/${CONTAINER_NAME}.xml ]]; then
echo "Image is on the ignore list, and already in the deprecation folder." echo "Image is on the ignore list, and already in the deprecation folder."
elif grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then elif grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated" echo "Image is on the ignore list, marking Unraid template as deprecated"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add -u unraid/${CONTAINER_NAME}.xml git add -u unraid/${CONTAINER_NAME}.xml
@@ -480,10 +496,10 @@ pipeline {
} }
} }
/* ####################### /* #######################
GitLab Mirroring GitLab Mirroring and Quay.io Repo Visibility
####################### */ ####################### */
// Ping into Gitlab to mirror this repo and have a registry endpoint // Ping into Gitlab to mirror this repo and have a registry endpoint & mark this repo on Quay.io as public
stage("GitLab Mirror"){ stage("GitLab Mirror and Quay.io Visibility"){
when { when {
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
@@ -499,6 +515,8 @@ pipeline {
"visibility":"public"}' ''' "visibility":"public"}' '''
sh '''curl -H "Private-Token: ${GITLAB_TOKEN}" -X PUT "https://gitlab.com/api/v4/projects/Linuxserver.io%2F${LS_REPO}" \ sh '''curl -H "Private-Token: ${GITLAB_TOKEN}" -X PUT "https://gitlab.com/api/v4/projects/Linuxserver.io%2F${LS_REPO}" \
-d "mirror=true&import_url=https://github.com/linuxserver/${LS_REPO}.git" ''' -d "mirror=true&import_url=https://github.com/linuxserver/${LS_REPO}.git" '''
sh '''curl -H "Content-Type: application/json" -H "Authorization: Bearer ${QUAYIO_API_TOKEN}" -X POST "https://quay.io/api/v1/repository${QUAYIMAGE/quay.io/}/changevisibility" \
-d '{"visibility":"public"}' ||: '''
} }
} }
/* ############### /* ###############
@@ -593,7 +611,7 @@ pipeline {
--provenance=false --sbom=false \ --provenance=false --sbom=false \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) { retry_backoff(5,5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
} }
sh '''#! /bin/bash sh '''#! /bin/bash
@@ -707,7 +725,7 @@ pipeline {
set -e set -e
docker pull ghcr.io/linuxserver/ci:latest docker pull ghcr.io/linuxserver/ci:latest
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
docker run --rm \ docker run --rm \
@@ -749,7 +767,7 @@ pipeline {
passwordVariable: 'QUAYPASS' passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry_backoff(5,5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
@@ -767,7 +785,7 @@ pipeline {
docker push ${PUSHIMAGE}:${META_TAG} docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG} docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker push ${PUSHIMAGE}:${SEMVER} docker push ${PUSHIMAGE}:${SEMVER}
fi fi
done done
''' '''
@@ -790,7 +808,7 @@ pipeline {
passwordVariable: 'QUAYPASS' passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry_backoff(5,5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
@@ -798,7 +816,7 @@ pipeline {
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
@@ -853,7 +871,7 @@ pipeline {
"object": "'${COMMIT_SHA}'",\ "object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\ "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\ "type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' "tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag" echo "Pushing New release for Tag"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Updating external repo packages to ${EXT_RELEASE_CLEAN}" > releasebody.json echo "Updating external repo packages to ${EXT_RELEASE_CLEAN}" > releasebody.json
@@ -985,6 +1003,13 @@ EOF
###################### */ ###################### */
post { post {
always { always {
sh '''#!/bin/bash
rm -rf /config/.ssh/id_sign
rm -rf /config/.ssh/id_sign.pub
git config --global --unset gpg.format
git config --global --unset user.signingkey
git config --global --unset commit.gpgsign
'''
script{ script{
if (env.EXIT_STATUS == "ABORTED"){ if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"' sh 'echo "build aborted"'
@@ -1014,3 +1039,20 @@ EOF
} }
} }
} }
def retry_backoff(int max_attempts, int power_base, Closure c) {
int n = 0
while (n < max_attempts) {
try {
c()
return
} catch (err) {
if ((n + 1) >= max_attempts) {
throw err
}
sleep(power_base ** n)
n++
}
}
return
}

View File

@@ -86,6 +86,11 @@ A bittorrent client can be an active or a passive node. Running your client as a
Similarly to the WEBUI_PORT, to set the port to 6887 you need to pass -p 6887:6887, -p 6887:6887/udp and -e TORRENTING_PORT=6887 arguments to Docker. Similarly to the WEBUI_PORT, to set the port to 6887 you need to pass -p 6887:6887, -p 6887:6887/udp and -e TORRENTING_PORT=6887 arguments to Docker.
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
## Usage ## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli. To help you get started creating a container from this image you can either use docker-compose or the docker cli.
@@ -105,8 +110,8 @@ services:
- WEBUI_PORT=8080 - WEBUI_PORT=8080
- TORRENTING_PORT=6881 - TORRENTING_PORT=6881
volumes: volumes:
- /path/to/appdata/config:/config - /path/to/qbittorrent/appdata:/config
- /path/to/downloads:/downloads - /path/to/downloads:/downloads #optional
ports: ports:
- 8080:8080 - 8080:8080
- 6881:6881 - 6881:6881
@@ -127,8 +132,8 @@ docker run -d \
-p 8080:8080 \ -p 8080:8080 \
-p 6881:6881 \ -p 6881:6881 \
-p 6881:6881/udp \ -p 6881:6881/udp \
-v /path/to/appdata/config:/config \ -v /path/to/qbittorrent/appdata:/config \
-v /path/to/downloads:/downloads \ -v /path/to/downloads:/downloads `#optional` \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/qbittorrent:latest lscr.io/linuxserver/qbittorrent:latest
``` ```
@@ -149,6 +154,7 @@ Containers are configured using parameters passed at runtime (such as those abov
| `-e TORRENTING_PORT=6881` | for changing the port of tcp/udp connection, see below for explanation | | `-e TORRENTING_PORT=6881` | for changing the port of tcp/udp connection, see below for explanation |
| `-v /config` | Contains all relevant configuration files. | | `-v /config` | Contains all relevant configuration files. |
| `-v /downloads` | Location of downloads on disk. | | `-v /downloads` | Location of downloads on disk. |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@@ -311,6 +317,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **17.07.24:** - Restore qbittorrent-cli as it now supports openssl 3.
* **25.05.24:** - Remove qbittorrent-cli as it still requires openssl 1.1 which is EOL.
* **14.02.24:** - Only set/override torrenting port if the optional env var is set. * **14.02.24:** - Only set/override torrenting port if the optional env var is set.
* **14.02.24:** - Add torrenting port support. * **14.02.24:** - Add torrenting port support.
* **31.01.24:** - Remove obsolete compat packages. * **31.01.24:** - Remove obsolete compat packages.

View File

@@ -6,7 +6,6 @@ external_type: alpine_repo
release_type: stable release_type: stable
release_tag: latest release_tag: latest
ls_branch: master ls_branch: master
build_armhf: false
repo_vars: repo_vars:
- CONTAINER_NAME = 'qbittorrent' - CONTAINER_NAME = 'qbittorrent'
- BUILD_VERSION_ARG = 'QBITTORRENT_VERSION' - BUILD_VERSION_ARG = 'QBITTORRENT_VERSION'
@@ -24,7 +23,7 @@ repo_vars:
- CI_WEB='true' - CI_WEB='true'
- CI_PORT='8080' - CI_PORT='8080'
- CI_SSL='false' - CI_SSL='false'
- CI_DELAY='120' - CI_DELAY='60'
- CI_DOCKERENV='TZ=US/Pacific' - CI_DOCKERENV=''
- CI_AUTH='user:password' - CI_AUTH=''
- CI_WEBPATH='' - CI_WEBPATH=''

View File

@@ -6,255 +6,255 @@ Bouncy Castle for .NET (netstandard2.0) 1.8.8.2
CommandLineUtils 2.4.4+3c2a4909757a51602dcca9b961d577511b85fd31.3c2a4909757a51602dcca9b961d577511b85fd31 dotnet CommandLineUtils 2.4.4+3c2a4909757a51602dcca9b961d577511b85fd31.3c2a4909757a51602dcca9b961d577511b85fd31 dotnet
CsvHelper 12.1.2 dotnet CsvHelper 12.1.2 dotnet
Json.NET 13.0.3.27908 dotnet Json.NET 13.0.3.27908 dotnet
Microsoft.CSharp 4.700.22.56512 dotnet Microsoft.CSharp 6.0.3024.21525 dotnet
Microsoft.VisualBasic 4.700.22.56512 dotnet Microsoft.VisualBasic 6.0.3024.21525 dotnet
Microsoft.VisualBasic.Core 4.700.22.56512 dotnet Microsoft.VisualBasic.Core 11.100.3024.21525 dotnet
Microsoft.Win32.Primitives 4.700.22.56512 dotnet Microsoft.Win32.Primitives 6.0.3024.21525 dotnet
Microsoft.Win32.Registry 4.700.22.56512 dotnet Microsoft.Win32.Registry 6.0.3024.21525 dotnet
Mono.Posix.NETStandard 1.0.0.0 dotnet Mono.Posix.NETStandard 1.0.0.0 dotnet
NJsonSchema 9.14.1.0 dotnet NJsonSchema 9.14.1.0 dotnet
Portable.Xaml.dll 0.18.0.0 dotnet Portable.Xaml.dll 0.18.0.0 dotnet
QBittorrent.Client 1.9.23349.1 dotnet QBittorrent.Client 1.9.23349.1 dotnet
System 4.700.22.56512 dotnet System 6.0.3024.21525 dotnet
System.AppContext 4.700.22.56512 dotnet System.AppContext 6.0.3024.21525 dotnet
System.Buffers 4.700.22.56512 dotnet System.Buffers 6.0.3024.21525 dotnet
System.Collections 4.700.22.56512 dotnet System.Collections 6.0.3024.21525 dotnet
System.Collections.Concurrent 4.700.22.56512 dotnet System.Collections.Concurrent 6.0.3024.21525 dotnet
System.Collections.Immutable 4.700.22.56512 dotnet System.Collections.Immutable 6.0.3024.21525 dotnet
System.Collections.NonGeneric 4.700.22.56512 dotnet System.Collections.NonGeneric 6.0.3024.21525 dotnet
System.Collections.Specialized 4.700.22.56512 dotnet System.Collections.Specialized 6.0.3024.21525 dotnet
System.ComponentModel 4.700.22.56512 dotnet System.ComponentModel 6.0.3024.21525 dotnet
System.ComponentModel.Annotations 4.700.22.56512 dotnet System.ComponentModel.Annotations 6.0.3024.21525 dotnet
System.ComponentModel.DataAnnotations 4.700.22.56512 dotnet System.ComponentModel.DataAnnotations 6.0.3024.21525 dotnet
System.ComponentModel.EventBasedAsync 4.700.22.56512 dotnet System.ComponentModel.EventBasedAsync 6.0.3024.21525 dotnet
System.ComponentModel.Primitives 4.700.22.56512 dotnet System.ComponentModel.Primitives 6.0.3024.21525 dotnet
System.ComponentModel.TypeConverter 4.700.22.56512 dotnet System.ComponentModel.TypeConverter 6.0.3024.21525 dotnet
System.Configuration 4.700.22.56512 dotnet System.Configuration 6.0.3024.21525 dotnet
System.Console 4.700.22.56512 dotnet System.Console 6.0.3024.21525 dotnet
System.Core 4.700.22.56512 dotnet System.Core 6.0.3024.21525 dotnet
System.Data 4.700.22.56512 dotnet System.Data 6.0.3024.21525 dotnet
System.Data.Common 4.700.22.56512 dotnet System.Data.Common 6.0.3024.21525 dotnet
System.Data.DataSetExtensions 4.700.22.56512 dotnet System.Data.DataSetExtensions 6.0.3024.21525 dotnet
System.Diagnostics.Contracts 4.700.22.56512 dotnet System.Diagnostics.Contracts 6.0.3024.21525 dotnet
System.Diagnostics.Debug 4.700.22.56512 dotnet System.Diagnostics.Debug 6.0.3024.21525 dotnet
System.Diagnostics.DiagnosticSource 4.700.22.56512 dotnet System.Diagnostics.DiagnosticSource 6.0.3024.21525 dotnet
System.Diagnostics.FileVersionInfo 4.700.22.56512 dotnet System.Diagnostics.FileVersionInfo 6.0.3024.21525 dotnet
System.Diagnostics.Process 4.700.22.56512 dotnet System.Diagnostics.Process 6.0.3024.21525 dotnet
System.Diagnostics.StackTrace 4.700.22.56512 dotnet System.Diagnostics.StackTrace 6.0.3024.21525 dotnet
System.Diagnostics.TextWriterTraceListener 4.700.22.56512 dotnet System.Diagnostics.TextWriterTraceListener 6.0.3024.21525 dotnet
System.Diagnostics.Tools 4.700.22.56512 dotnet System.Diagnostics.Tools 6.0.3024.21525 dotnet
System.Diagnostics.TraceSource 4.700.22.56512 dotnet System.Diagnostics.TraceSource 6.0.3024.21525 dotnet
System.Diagnostics.Tracing 4.700.22.56512 dotnet System.Diagnostics.Tracing 6.0.3024.21525 dotnet
System.Drawing 4.700.22.56512 dotnet System.Drawing 6.0.3024.21525 dotnet
System.Drawing.Primitives 4.700.22.56512 dotnet System.Drawing.Primitives 6.0.3024.21525 dotnet
System.Dynamic.Runtime 4.700.22.56512 dotnet System.Dynamic.Runtime 6.0.3024.21525 dotnet
System.Globalization 4.700.22.56512 dotnet System.Formats.Asn1 6.0.3024.21525 dotnet
System.Globalization.Calendars 4.700.22.56512 dotnet System.Globalization 6.0.3024.21525 dotnet
System.Globalization.Extensions 4.700.22.56512 dotnet System.Globalization.Calendars 6.0.3024.21525 dotnet
System.IO 4.700.22.56512 dotnet System.Globalization.Extensions 6.0.3024.21525 dotnet
System.IO.Compression 4.700.22.56512 dotnet System.IO 6.0.3024.21525 dotnet
System.IO.Compression.Brotli 4.700.22.56512 dotnet System.IO.Compression 6.0.3024.21525 dotnet
System.IO.Compression.FileSystem 4.700.22.56512 dotnet System.IO.Compression.Brotli 6.0.3024.21525 dotnet
System.IO.Compression.ZipFile 4.700.22.56512 dotnet System.IO.Compression.FileSystem 6.0.3024.21525 dotnet
System.IO.FileSystem 4.700.22.56512 dotnet System.IO.Compression.ZipFile 6.0.3024.21525 dotnet
System.IO.FileSystem.AccessControl 4.700.22.56512 dotnet System.IO.FileSystem 6.0.3024.21525 dotnet
System.IO.FileSystem.DriveInfo 4.700.22.56512 dotnet System.IO.FileSystem.AccessControl 6.0.3024.21525 dotnet
System.IO.FileSystem.Primitives 4.700.22.56512 dotnet System.IO.FileSystem.DriveInfo 6.0.3024.21525 dotnet
System.IO.FileSystem.Watcher 4.700.22.56512 dotnet System.IO.FileSystem.Primitives 6.0.3024.21525 dotnet
System.IO.IsolatedStorage 4.700.22.56512 dotnet System.IO.FileSystem.Watcher 6.0.3024.21525 dotnet
System.IO.MemoryMappedFiles 4.700.22.56512 dotnet System.IO.IsolatedStorage 6.0.3024.21525 dotnet
System.IO.Pipes 4.700.22.56512 dotnet System.IO.MemoryMappedFiles 6.0.3024.21525 dotnet
System.IO.Pipes.AccessControl 4.700.22.56512 dotnet System.IO.Pipes 6.0.3024.21525 dotnet
System.IO.UnmanagedMemoryStream 4.700.22.56512 dotnet System.IO.Pipes.AccessControl 6.0.3024.21525 dotnet
System.Linq 4.700.22.56512 dotnet System.IO.UnmanagedMemoryStream 6.0.3024.21525 dotnet
System.Linq.Expressions 4.700.22.56512 dotnet System.Linq 6.0.3024.21525 dotnet
System.Linq.Parallel 4.700.22.56512 dotnet System.Linq.Expressions 6.0.3024.21525 dotnet
System.Linq.Queryable 4.700.22.56512 dotnet System.Linq.Parallel 6.0.3024.21525 dotnet
System.Memory 4.700.22.56512 dotnet System.Linq.Queryable 6.0.3024.21525 dotnet
System.Net 4.700.22.56512 dotnet System.Memory 6.0.3024.21525 dotnet
System.Net.Http 4.700.22.56512 dotnet System.Net 6.0.3024.21525 dotnet
System.Net.HttpListener 4.700.22.56512 dotnet System.Net.Http 6.0.3024.21525 dotnet
System.Net.Http.Json 6.0.3024.21525 dotnet
System.Net.HttpListener 6.0.3024.21525 dotnet
System.Net.IPNetwork 2.5.235 dotnet System.Net.IPNetwork 2.5.235 dotnet
System.Net.Mail 4.700.22.56512 dotnet System.Net.Mail 6.0.3024.21525 dotnet
System.Net.NameResolution 4.700.22.56512 dotnet System.Net.NameResolution 6.0.3024.21525 dotnet
System.Net.NetworkInformation 4.700.22.56512 dotnet System.Net.NetworkInformation 6.0.3024.21525 dotnet
System.Net.Ping 4.700.22.56512 dotnet System.Net.Ping 6.0.3024.21525 dotnet
System.Net.Primitives 4.700.22.56512 dotnet System.Net.Primitives 6.0.3024.21525 dotnet
System.Net.Requests 4.700.22.56512 dotnet System.Net.Quic 6.0.3024.21525 dotnet
System.Net.Security 4.700.22.56512 dotnet System.Net.Requests 6.0.3024.21525 dotnet
System.Net.ServicePoint 4.700.22.56512 dotnet System.Net.Security 6.0.3024.21525 dotnet
System.Net.Sockets 4.700.22.56512 dotnet System.Net.ServicePoint 6.0.3024.21525 dotnet
System.Net.WebClient 4.700.22.56512 dotnet System.Net.Sockets 6.0.3024.21525 dotnet
System.Net.WebHeaderCollection 4.700.22.56512 dotnet System.Net.WebClient 6.0.3024.21525 dotnet
System.Net.WebProxy 4.700.22.56512 dotnet System.Net.WebHeaderCollection 6.0.3024.21525 dotnet
System.Net.WebSockets 4.700.22.56512 dotnet System.Net.WebProxy 6.0.3024.21525 dotnet
System.Net.WebSockets.Client 4.700.22.56512 dotnet System.Net.WebSockets 6.0.3024.21525 dotnet
System.Numerics 4.700.22.56512 dotnet System.Net.WebSockets.Client 6.0.3024.21525 dotnet
System.Numerics.Vectors 4.700.22.56512 dotnet System.Numerics 6.0.3024.21525 dotnet
System.ObjectModel 4.700.22.56512 dotnet System.Numerics.Vectors 6.0.3024.21525 dotnet
System.Private.CoreLib 4.700.22.55902 dotnet System.ObjectModel 6.0.3024.21525 dotnet
System.Private.DataContractSerialization 4.700.22.56512 dotnet System.Private.CoreLib 6.0.3024.21525 dotnet
System.Private.Uri 4.700.22.56512 dotnet System.Private.DataContractSerialization 6.0.3024.21525 dotnet
System.Private.Xml 4.700.22.56512 dotnet System.Private.Uri 6.0.3024.21525 dotnet
System.Private.Xml.Linq 4.700.22.56512 dotnet System.Private.Xml 6.0.3024.21525 dotnet
System.Reflection 4.700.22.56512 dotnet System.Private.Xml.Linq 6.0.3024.21525 dotnet
System.Reflection.DispatchProxy 4.700.22.56512 dotnet System.Reflection 6.0.3024.21525 dotnet
System.Reflection.Emit 4.700.22.56512 dotnet System.Reflection.DispatchProxy 6.0.3024.21525 dotnet
System.Reflection.Emit.ILGeneration 4.700.22.56512 dotnet System.Reflection.Emit 6.0.3024.21525 dotnet
System.Reflection.Emit.Lightweight 4.700.22.56512 dotnet System.Reflection.Emit.ILGeneration 6.0.3024.21525 dotnet
System.Reflection.Extensions 4.700.22.56512 dotnet System.Reflection.Emit.Lightweight 6.0.3024.21525 dotnet
System.Reflection.Metadata 4.700.22.56512 dotnet System.Reflection.Extensions 6.0.3024.21525 dotnet
System.Reflection.Primitives 4.700.22.56512 dotnet System.Reflection.Metadata 6.0.3024.21525 dotnet
System.Reflection.TypeExtensions 4.700.22.56512 dotnet System.Reflection.Primitives 6.0.3024.21525 dotnet
System.Resources.Reader 4.700.22.56512 dotnet System.Reflection.TypeExtensions 6.0.3024.21525 dotnet
System.Resources.ResourceManager 4.700.22.56512 dotnet System.Resources.Reader 6.0.3024.21525 dotnet
System.Resources.Writer 4.700.22.56512 dotnet System.Resources.ResourceManager 6.0.3024.21525 dotnet
System.Runtime 4.700.22.56512 dotnet System.Resources.Writer 6.0.3024.21525 dotnet
System.Runtime.CompilerServices.VisualC 4.700.22.56512 dotnet System.Runtime 6.0.3024.21525 dotnet
System.Runtime.Extensions 4.700.22.56512 dotnet System.Runtime.CompilerServices.VisualC 6.0.3024.21525 dotnet
System.Runtime.Handles 4.700.22.56512 dotnet System.Runtime.Extensions 6.0.3024.21525 dotnet
System.Runtime.InteropServices 4.700.22.56512 dotnet System.Runtime.Handles 6.0.3024.21525 dotnet
System.Runtime.InteropServices.RuntimeInformation 4.700.22.56512 dotnet System.Runtime.InteropServices 6.0.3024.21525 dotnet
System.Runtime.InteropServices.WindowsRuntime 4.700.22.56512 dotnet System.Runtime.InteropServices.RuntimeInformation 6.0.3024.21525 dotnet
System.Runtime.Intrinsics 4.700.22.56512 dotnet System.Runtime.Intrinsics 6.0.3024.21525 dotnet
System.Runtime.Loader 4.700.22.56512 dotnet System.Runtime.Loader 6.0.3024.21525 dotnet
System.Runtime.Numerics 4.700.22.56512 dotnet System.Runtime.Numerics 6.0.3024.21525 dotnet
System.Runtime.Serialization 4.700.22.56512 dotnet System.Runtime.Serialization 6.0.3024.21525 dotnet
System.Runtime.Serialization.Formatters 4.700.22.56512 dotnet System.Runtime.Serialization.Formatters 6.0.3024.21525 dotnet
System.Runtime.Serialization.Json 4.700.22.56512 dotnet System.Runtime.Serialization.Json 6.0.3024.21525 dotnet
System.Runtime.Serialization.Primitives 4.700.22.56512 dotnet System.Runtime.Serialization.Primitives 6.0.3024.21525 dotnet
System.Runtime.Serialization.Xml 4.700.22.56512 dotnet System.Runtime.Serialization.Xml 6.0.3024.21525 dotnet
System.Runtime.WindowsRuntime 4.700.22.56512 dotnet System.Security 6.0.3024.21525 dotnet
System.Runtime.WindowsRuntime.UI.Xaml 4.700.22.56512 dotnet System.Security.AccessControl 6.0.3024.21525 dotnet
System.Security 4.700.22.56512 dotnet System.Security.Claims 6.0.3024.21525 dotnet
System.Security.AccessControl 4.700.22.56512 dotnet System.Security.Cryptography.Algorithms 6.0.3024.21525 dotnet
System.Security.Claims 4.700.22.56512 dotnet System.Security.Cryptography.Cng 6.0.3024.21525 dotnet
System.Security.Cryptography.Algorithms 4.700.22.56512 dotnet System.Security.Cryptography.Csp 6.0.3024.21525 dotnet
System.Security.Cryptography.Cng 4.700.22.56512 dotnet System.Security.Cryptography.Encoding 6.0.3024.21525 dotnet
System.Security.Cryptography.Csp 4.700.22.56512 dotnet System.Security.Cryptography.OpenSsl 6.0.3024.21525 dotnet
System.Security.Cryptography.Encoding 4.700.22.56512 dotnet System.Security.Cryptography.Primitives 6.0.3024.21525 dotnet
System.Security.Cryptography.OpenSsl 4.700.22.56512 dotnet
System.Security.Cryptography.Primitives 4.700.22.56512 dotnet
System.Security.Cryptography.ProtectedData 5.0.20.51904 dotnet System.Security.Cryptography.ProtectedData 5.0.20.51904 dotnet
System.Security.Cryptography.X509Certificates 4.700.22.56512 dotnet System.Security.Cryptography.X509Certificates 6.0.3024.21525 dotnet
System.Security.Principal 4.700.22.56512 dotnet System.Security.Principal 6.0.3024.21525 dotnet
System.Security.Principal.Windows 4.700.22.56512 dotnet System.Security.Principal.Windows 6.0.3024.21525 dotnet
System.Security.SecureString 4.700.22.56512 dotnet System.Security.SecureString 6.0.3024.21525 dotnet
System.ServiceModel.Web 4.700.22.56512 dotnet System.ServiceModel.Web 6.0.3024.21525 dotnet
System.ServiceProcess 4.700.22.56512 dotnet System.ServiceProcess 6.0.3024.21525 dotnet
System.Text.Encoding 4.700.22.56512 dotnet System.Text.Encoding 6.0.3024.21525 dotnet
System.Text.Encoding.CodePages 4.700.22.56512 dotnet System.Text.Encoding.CodePages 6.0.3024.21525 dotnet
System.Text.Encoding.Extensions 4.700.22.56512 dotnet System.Text.Encoding.Extensions 6.0.3024.21525 dotnet
System.Text.Encodings.Web 4.700.22.56512 dotnet System.Text.Encodings.Web 6.0.3024.21525 dotnet
System.Text.Json 4.700.22.56512 dotnet System.Text.Json 6.0.3024.21525 dotnet
System.Text.RegularExpressions 4.700.22.56512 dotnet System.Text.RegularExpressions 6.0.3024.21525 dotnet
System.Threading 4.700.22.56512 dotnet System.Threading 6.0.3024.21525 dotnet
System.Threading.Channels 4.700.22.56512 dotnet System.Threading.Channels 6.0.3024.21525 dotnet
System.Threading.Overlapped 4.700.22.56512 dotnet System.Threading.Overlapped 6.0.3024.21525 dotnet
System.Threading.Tasks 4.700.22.56512 dotnet System.Threading.Tasks 6.0.3024.21525 dotnet
System.Threading.Tasks.Dataflow 4.700.22.56512 dotnet System.Threading.Tasks.Dataflow 6.0.3024.21525 dotnet
System.Threading.Tasks.Extensions 4.700.22.56512 dotnet System.Threading.Tasks.Extensions 6.0.3024.21525 dotnet
System.Threading.Tasks.Parallel 4.700.22.56512 dotnet System.Threading.Tasks.Parallel 6.0.3024.21525 dotnet
System.Threading.Thread 4.700.22.56512 dotnet System.Threading.Thread 6.0.3024.21525 dotnet
System.Threading.ThreadPool 4.700.22.56512 dotnet System.Threading.ThreadPool 6.0.3024.21525 dotnet
System.Threading.Timer 4.700.22.56512 dotnet System.Threading.Timer 6.0.3024.21525 dotnet
System.Transactions 4.700.22.56512 dotnet System.Transactions 6.0.3024.21525 dotnet
System.Transactions.Local 4.700.22.56512 dotnet System.Transactions.Local 6.0.3024.21525 dotnet
System.ValueTuple 4.700.22.56512 dotnet System.ValueTuple 6.0.3024.21525 dotnet
System.Web 4.700.22.56512 dotnet System.Web 6.0.3024.21525 dotnet
System.Web.HttpUtility 4.700.22.56512 dotnet System.Web.HttpUtility 6.0.3024.21525 dotnet
System.Windows 4.700.22.56512 dotnet System.Windows 6.0.3024.21525 dotnet
System.Xml 4.700.22.56512 dotnet System.Xml 6.0.3024.21525 dotnet
System.Xml.Linq 4.700.22.56512 dotnet System.Xml.Linq 6.0.3024.21525 dotnet
System.Xml.ReaderWriter 4.700.22.56512 dotnet System.Xml.ReaderWriter 6.0.3024.21525 dotnet
System.Xml.Serialization 4.700.22.56512 dotnet System.Xml.Serialization 6.0.3024.21525 dotnet
System.Xml.XDocument 4.700.22.56512 dotnet System.Xml.XDocument 6.0.3024.21525 dotnet
System.Xml.XPath 4.700.22.56512 dotnet System.Xml.XPath 6.0.3024.21525 dotnet
System.Xml.XPath.XDocument 4.700.22.56512 dotnet System.Xml.XPath.XDocument 6.0.3024.21525 dotnet
System.Xml.XmlDocument 4.700.22.56512 dotnet System.Xml.XmlDocument 6.0.3024.21525 dotnet
System.Xml.XmlSerializer 4.700.22.56512 dotnet System.Xml.XmlSerializer 6.0.3024.21525 dotnet
WindowsBase 4.700.22.56512 dotnet WindowsBase 6.0.3024.21525 dotnet
alpine-baselayout 3.6.5-r0 apk alpine-baselayout 3.6.6-r0 apk
alpine-baselayout-data 3.6.5-r0 apk alpine-baselayout-data 3.6.6-r0 apk
alpine-keys 2.4-r1 apk alpine-keys 2.5-r0 apk
apk-tools 2.14.4-r0 apk apk-tools 2.14.4-r2 apk
bash 5.2.26-r0 apk bash 5.2.32-r0 apk
brotli-libs 1.1.0-r2 apk brotli-libs 1.1.0-r2 apk
busybox 1.36.1-r28 apk busybox 1.36.1-r31 apk
busybox-binsh 1.36.1-r28 apk busybox-binsh 1.36.1-r31 apk
c-ares 1.28.1-r0 apk c-ares 1.33.0-r0 apk
ca-certificates 20240226-r0 apk ca-certificates 20240705-r0 apk
ca-certificates-bundle 20240226-r0 apk ca-certificates-bundle 20240705-r0 apk
catatonit 0.2.0-r0 apk catatonit 0.2.0-r0 apk
coreutils 9.5-r1 apk coreutils 9.5-r1 apk
coreutils-env 9.5-r1 apk coreutils-env 9.5-r1 apk
coreutils-fmt 9.5-r1 apk coreutils-fmt 9.5-r1 apk
coreutils-sha512sum 9.5-r1 apk coreutils-sha512sum 9.5-r1 apk
curl 8.8.0-r0 apk curl 8.9.1-r1 apk
dbus-libs 1.14.10-r1 apk dbus-libs 1.14.10-r3 apk
double-conversion 3.3.0-r0 apk double-conversion 3.3.0-r0 apk
duktape 2.7.0-r1 apk duktape 2.7.0-r1 apk
findutils 4.9.0-r5 apk findutils 4.10.0-r0 apk
gdbm 1.23-r1 apk gdbm 1.24-r0 apk
glib 2.80.2-r0 apk glib 2.80.4-r0 apk
icu-data-en 74.2-r0 apk icu-data-en 74.2-r0 apk
icu-libs 74.2-r0 apk icu-libs 74.2-r0 apk
jq 1.7.1-r0 apk jq 1.7.1-r0 apk
libacl 2.3.2-r0 apk libacl 2.3.2-r0 apk
libattr 2.5.2-r0 apk libattr 2.5.2-r1 apk
libb2 0.98.1-r3 apk libb2 0.98.1-r3 apk
libblkid 2.40.1-r1 apk libblkid 2.40.2-r0 apk
libbsd 0.12.2-r0 apk libbsd 0.12.2-r0 apk
libbz2 1.0.8-r6 apk libbz2 1.0.8-r6 apk
libcrypto3 3.3.0-r2 apk libcrypto3 3.3.1-r3 apk
libcurl 8.8.0-r0 apk libcurl 8.9.1-r1 apk
libeconf 0.6.3-r0 apk libeconf 0.6.3-r0 apk
libexpat 2.6.2-r0 apk libexpat 2.6.2-r0 apk
libffi 3.4.6-r0 apk libffi 3.4.6-r0 apk
libgcc 13.2.1_git20240309-r0 apk libgcc 14.2.0-r1 apk
libgomp 13.2.1_git20240309-r0 apk libgomp 14.2.0-r1 apk
libidn2 2.3.7-r0 apk libidn2 2.3.7-r0 apk
libintl 0.22.5-r0 apk libintl 0.22.5-r0 apk
libmd 1.1.0-r0 apk libmd 1.1.0-r0 apk
libmount 2.40.1-r1 apk libmount 2.40.2-r0 apk
libncursesw 6.4_p20240420-r0 apk libncursesw 6.5_p20240601-r0 apk
libpanelw 6.4_p20240420-r0 apk libpanelw 6.5_p20240601-r0 apk
libpcre2-16 10.43-r0 apk libpcre2-16 10.43-r0 apk
libproc2 4.0.4-r0 apk libproc2 4.0.4-r1 apk
libproxy 0.5.6-r0 apk libproxy 0.5.8-r0 apk
libpsl 0.21.5-r1 apk libpsl 0.21.5-r2 apk
libssl3 3.3.0-r2 apk libssl3 3.3.1-r3 apk
libstdc++ 13.2.1_git20240309-r0 apk libstdc++ 14.2.0-r1 apk
libtorrent-rasterbar 2.0.10-r2 apk libtorrent-rasterbar 2.0.10-r2 apk
libunistring 1.2-r0 apk libunistring 1.2-r0 apk
linux-pam 1.6.0-r0 apk linux-pam 1.6.1-r0 apk
mpdecimal 4.0.0-r0 apk mpdecimal 4.0.0-r0 apk
mscorlib 4.700.22.56512 dotnet mscorlib 6.0.3024.21525 dotnet
musl 1.2.5-r1 apk musl 1.2.5-r2 apk
musl-utils 1.2.5-r1 apk musl-utils 1.2.5-r2 apk
ncurses-terminfo-base 6.4_p20240420-r0 apk ncurses-terminfo-base 6.5_p20240601-r0 apk
netcat-openbsd 1.226-r0 apk netcat-openbsd 1.226-r0 apk
netstandard 4.700.22.56512 dotnet netstandard 6.0.3024.21525 dotnet
nghttp2-libs 1.62.0-r0 apk nghttp2-libs 1.62.1-r0 apk
oniguruma 6.9.9-r0 apk oniguruma 6.9.9-r0 apk
pcre2 10.43-r0 apk pcre2 10.43-r0 apk
procps-ng 4.0.4-r0 apk procps-ng 4.0.4-r1 apk
pyc 3.12.3-r1 apk pyc 3.12.5-r0 apk
python3 3.12.3-r1 apk python3 3.12.5-r0 apk
python3-pyc 3.12.3-r1 apk python3-pyc 3.12.5-r0 apk
python3-pycache-pyc0 3.12.3-r1 apk python3-pycache-pyc0 3.12.5-r0 apk
qbittorrent-nox 4.6.4-r1 apk qbittorrent-nox 4.6.5-r0 apk
qbt 1.8.24012.1+00a638ba43f1a80a03cc8be139f586ce9886c908 dotnet qbt 1.8.24199.1+738bca0d7d7585cf40629f13a59b6198eaf6fe64 dotnet
qt6-qtbase 6.6.3-r0 apk qt6-qtbase 6.7.2-r1 apk
qt6-qtbase-sqlite 6.6.3-r0 apk qt6-qtbase-sqlite 6.7.2-r1 apk
readline 8.2.10-r0 apk readline 8.2.13-r0 apk
scanelf 1.3.7-r2 apk scanelf 1.3.7-r2 apk
shadow 4.15.1-r0 apk shadow 4.16.0-r0 apk
skalibs 2.14.1.1-r0 apk skalibs 2.14.2.0-r0 apk
sqlite-libs 3.46.0-r0 apk sqlite-libs 3.46.1-r0 apk
ssl_client 1.36.1-r28 apk ssl_client 1.36.1-r31 apk
tzdata 2024a-r1 apk tzdata 2024a-r1 apk
utmps-libs 0.1.2.2-r1 apk utmps-libs 0.1.2.2-r1 apk
xz-libs 5.6.1-r3 apk xz-libs 5.6.2-r0 apk
zlib 1.3.1-r1 apk zlib 1.3.1-r1 apk
zstd-libs 1.5.6-r0 apk zstd-libs 1.5.6-r1 apk

View File

@@ -23,8 +23,7 @@ common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "Contains all relevant configuration files." } - { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/appdata", desc: "Contains all relevant configuration files." }
- { vol_path: "/downloads", vol_host_path: "/path/to/downloads", desc: "Location of downloads on disk." }
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "8080", internal_port: "8080", port_desc: "WebUI" } - { external_port: "8080", internal_port: "8080", port_desc: "WebUI" }
@@ -34,6 +33,11 @@ param_usage_include_env: true
param_env_vars: param_env_vars:
- { env_var: "WEBUI_PORT", env_value: "8080", desc: "for changing the port of the web UI, see below for explanation"} - { env_var: "WEBUI_PORT", env_value: "8080", desc: "for changing the port of the web UI, see below for explanation"}
- { env_var: "TORRENTING_PORT", env_value: "6881", desc: "for changing the port of tcp/udp connection, see below for explanation" } - { env_var: "TORRENTING_PORT", env_value: "6881", desc: "for changing the port of tcp/udp connection, see below for explanation" }
opt_param_usage_include_vols: true
opt_param_volumes:
- { vol_path: "/downloads", vol_host_path: "/path/to/downloads", desc: "Location of downloads on disk." }
readonly_supported: true
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
@@ -58,6 +62,8 @@ app_setup_block: |
# changelog # changelog
changelogs: changelogs:
- { date: "17.07.24:", desc: "Restore qbittorrent-cli as it now supports openssl 3." }
- { date: "25.05.24:", desc: "Remove qbittorrent-cli as it still requires openssl 1.1 which is EOL." }
- { date: "14.02.24:", desc: "Only set/override torrenting port if the optional env var is set." } - { date: "14.02.24:", desc: "Only set/override torrenting port if the optional env var is set." }
- { date: "14.02.24:", desc: "Add torrenting port support." } - { date: "14.02.24:", desc: "Add torrenting port support." }
- { date: "31.01.24:", desc: "Remove obsolete compat packages."} - { date: "31.01.24:", desc: "Remove obsolete compat packages."}

View File

@@ -10,10 +10,8 @@ if [[ ! -f /config/qBittorrent/qBittorrent.conf ]]; then
fi fi
# chown download directory if currently not set to abc # chown download directory if currently not set to abc
if [[ -d /downloads ]]; then if grep -qe ' /downloads ' /proc/mounts; then
if [[ "$(stat -c '%U' /downloads)" != "abc" ]]; then lsiown abc:abc /downloads
lsiown -R abc:abc /downloads
fi
fi fi
# permissions # permissions

View File

@@ -1,4 +1,5 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
# shellcheck shell=bash
# qbt bash wrapper to prompt user when trying to save password # qbt bash wrapper to prompt user when trying to save password
if [[ "$@" == "settings set password" ]]; then if [[ "$@" == "settings set password" ]]; then