Compare commits

...
Author SHA1 Message Date
quietsyandGitHub ffd57f108f Merge pull request #245 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-22 22:14:34 +02:00
quietsy b3fbd06bd9 Add categories to readme-vars.yml 2025-01-22 20:43:57 +02:00
LinuxServer-CI 04fff57a35 Bot Updating Package Versions 2025-01-19 16:58:55 +00:00
LinuxServer-CI eb5c7e523f Bot Updating Package Versions 2025-01-12 16:57:50 +00:00
LinuxServer-CI 2992d72bca Bot Updating Package Versions 2025-01-05 12:29:19 +00:00
LinuxServer-CI af2b5216a8 Bot Updating Package Versions 2024-12-29 16:59:39 +00:00
LinuxServer-CI c2433bf370 Bot Updating Package Versions 2024-12-25 23:15:41 +00:00
LinuxServer-CI 24a36f1e0d Bot Updating Templated Files 2024-12-25 23:07:13 +00:00
RoxedusandGitHub f7f263c4b7 Merge pull request #244 from linuxserver/master-3.21 2024-12-26 00:02:21 +01:00
thespad 69376a23e7 Rebase to 3.21 2024-12-23 18:02:48 +00:00
LinuxServer-CI 010edf887f Bot Updating Package Versions 2024-12-16 18:12:31 +00:00
LinuxServer-CI f813b598aa Bot Updating Templated Files 2024-12-16 18:08:39 +00:00
LinuxServer-CI b6477bfc64 Bot Updating Templated Files 2024-12-15 17:00:31 +00:00
LinuxServer-CI 0d3f0cf1aa Bot Updating Templated Files 2024-12-15 16:57:12 +00:00
LinuxServer-CI 2762606e65 Bot Updating Package Versions 2024-12-08 17:01:24 +00:00
LinuxServer-CI 75fd94ae0e Bot Updating Templated Files 2024-12-08 16:58:13 +00:00
LinuxServer-CI a79dcabe22 Bot Updating Templated Files 2024-12-08 16:55:57 +00:00
LinuxServer-CI 8d4d282394 Bot Updating Templated Files 2024-12-01 17:00:01 +00:00
LinuxServer-CI d8142ca25f Bot Updating Templated Files 2024-12-01 16:58:13 +00:00
LinuxServer-CI 56dbfec4dd Bot Updating Templated Files 2024-12-01 16:56:23 +00:00
LinuxServer-CI 595a380d05 Bot Updating Package Versions 2024-11-19 07:53:00 +00:00
LinuxServer-CI bbf7c930ec Bot Updating Templated Files 2024-11-10 16:59:19 +00:00
LinuxServer-CI a89bc9e999 Bot Updating Templated Files 2024-11-10 16:56:47 +00:00
LinuxServer-CI ac77aa50d8 Bot Updating Package Versions 2024-10-26 14:43:41 +00:00
LinuxServer-CI 6f44961ead Bot Updating Package Versions 2024-10-26 06:13:10 +00:00
LinuxServer-CI e1d1fc38c9 Bot Updating Package Versions 2024-10-12 16:07:31 +00:00
LinuxServer-CI 4d7a883814 Bot Updating Package Versions 2024-09-29 17:03:27 +00:00
LinuxServer-CI 2aa2f9da6e Bot Updating Templated Files 2024-09-29 17:00:09 +00:00
LinuxServer-CI 27edab6177 Bot Updating Templated Files 2024-09-29 16:58:29 +00:00
LinuxServer-CI 2aa3913fd9 Bot Updating Templated Files 2024-09-29 16:56:12 +00:00
LinuxServer-CI dba996577f Bot Updating Package Versions 2024-09-25 08:42:56 +00:00
LinuxServer-CI d59d5b49fb Bot Updating Package Versions 2024-09-22 16:57:48 +00:00
LinuxServer-CI 1924934abc Bot Updating Package Versions 2024-09-21 00:45:08 +00:00
LinuxServer-CI 38317b3a26 Bot Updating Package Versions 2024-09-15 16:57:37 +00:00
LinuxServer-CI 8bd74a0f04 Bot Updating Package Versions 2024-09-08 16:57:54 +00:00
LinuxServer-CI ea73a8a9c3 Bot Updating Package Versions 2024-09-01 16:56:44 +00:00
LinuxServer-CI 18b8f000de Bot Updating Package Versions 2024-08-20 18:09:27 +00:00
LinuxServer-CI c76fe36fd9 Bot Updating Templated Files 2024-08-18 16:58:40 +00:00
LinuxServer-CI 73cb13e87f Bot Updating Templated Files 2024-08-18 16:56:09 +00:00
LinuxServer-CI 05535d853c Bot Updating Package Versions 2024-08-11 16:58:06 +00:00
LinuxServer-CI 7124535660 Bot Updating Package Versions 2024-07-28 16:57:07 +00:00
LinuxServer-CI cade8f8f5c Bot Updating Package Versions 2024-07-21 15:09:09 +00:00
LinuxServer-CI 3e5907a38b Bot Updating Package Versions 2024-07-14 17:05:27 +00:00
LinuxServer-CI 69d8f62fb7 Bot Updating Templated Files 2024-07-14 17:02:50 +00:00
LinuxServer-CI 39cce378fd Bot Updating Templated Files 2024-07-14 17:00:26 +00:00
RoxedusandGitHub 78e3ce75ab Merge pull request #235 from linuxserver/master-ro-tweaks
Move tmpdir, set COMPlus_EnableDiagnostics (master)
2024-07-08 01:17:00 +02:00
thespad f30bb696ba Move tmpdir, set COMPlus_EnableDiagnostics 2024-07-03 19:22:13 +01:00
LinuxServer-CI e5f5908a36 Bot Updating Package Versions 2024-06-30 16:57:00 +00:00
LinuxServer-CI 8e9abba250 Bot Updating Package Versions 2024-06-23 16:56:46 +00:00
LinuxServer-CI 4d436ec198 Bot Updating Package Versions 2024-06-20 14:03:54 +00:00
LinuxServer-CI d8004a9460 Bot Updating Package Versions 2024-06-16 16:57:14 +00:00
15 changed files with 909 additions and 628 deletions
+2 -2
View File
@@ -105,10 +105,10 @@ docker build \
-t linuxserver/radarr:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
+80 -48
View File
@@ -11,18 +11,23 @@ jobs:
- name: External Trigger
if: github.ref == 'refs/heads/master'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_RADARR_MASTER }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_RADARR_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_RADARR_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
printf "# External trigger for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^radarr_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`radarr_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_RADARR_MASTER\". ****"
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_RADARR_MASTER\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****"
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of master branch. To disable this trigger, add \`radarr_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -sL https://radarr.servarr.com/v1/update/master/changes?runtime=netcore%26os=linuxmusl | jq -r '.[0].version')
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
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 radarr branch master"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-radarr/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,
@@ -31,24 +36,42 @@ jobs:
exit 1
fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****"
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/radarr"
tag="latest"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fradarr%3Apull" \
| jq -r '.token')
multidigest=$(curl -s \
multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}")
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# If there's a layer element it's a single-arch manifest so just get that digest
digest=$(jq -r '.config.digest' <<< "${multidigest}")
else
# Otherwise it's multi-arch or has manifest annotations
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# Check for manifest annotations and delete if found
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
fi
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
# If there's still more than one digest, it's multi-arch
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
else
# Otherwise it's single arch
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
fi
if digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}" \
| jq -r 'first(.manifests[].digest)')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
digest=$(jq -r '.config.digest' <<< "${digest}");
fi
fi
image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}")
@@ -60,45 +83,54 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
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 radarr tag latest"
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"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
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
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
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/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
else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for radarr tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ "${artifacts_found}" == "false" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for radarr tag latest is detected, however not all artifacts are uploaded to upstream release 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,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else
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
if [[ "${artifacts_found}" == "true" ]]; then
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for radarr tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
fi
@@ -15,31 +15,31 @@ jobs:
- name: External Trigger Scheduler
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
printf "# External trigger scheduler for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
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:lstrip=3)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
if [[ "${br}" == "HEAD" ]]; then
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-radarr/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
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-radarr/${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 ${br}" >> $GITHUB_STEP_SUMMARY
echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-radarr/actions/workflows/external_trigger.yml/dispatches
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi
done
-42
View File
@@ -1,42 +0,0 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-master:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Package Trigger
if: github.ref == 'refs/heads/master'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_RADARR_MASTER }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_RADARR_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_RADARR_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/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 "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_RADARR_MASTER\". ****"
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_RADARR_MASTER\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/master/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
+76 -26
View File
@@ -14,37 +14,87 @@ jobs:
fetch-depth: '0'
- name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
printf "# Package trigger scheduler for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
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:lstrip=3)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${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
triggered_branches="${triggered_branches}${br} "
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-radarr/actions/workflows/package_trigger.yml/dispatches
sleep 30
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/jenkins-vars.yml)
if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/readme-vars.yml)
if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif grep -q "^radarr_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`radarr_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`radarr_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
if [[ -z "${response}" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Jenkins build could not be triggered. Skipping branch."
continue
fi
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
if ! curl -ifX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20
fi
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
fi
done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) Triggered for radarr** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-radarr/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
if [[ -n "${triggered_branches}" ]]; then
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-radarr/activity/ \n"
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) for radarr** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
+2
View File
@@ -5,6 +5,8 @@ on:
- '**/run'
- '**/finish'
- '**/check'
- 'root/migrations/*'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1
+4 -2
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:3.20
FROM ghcr.io/linuxserver/baseimage-alpine:3.21
# set version label
ARG BUILD_DATE
@@ -11,7 +11,9 @@ LABEL maintainer="Roxedus,thespad"
# environment settings
ARG RADARR_BRANCH="master"
ENV XDG_CONFIG_HOME="/config/xdg"
ENV XDG_CONFIG_HOME="/config/xdg" \
COMPlus_EnableDiagnostics=0 \
TMPDIR=/run/radarr-temp
RUN \
echo "**** install packages ****" && \
+4 -2
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.20
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.21
# set version label
ARG BUILD_DATE
@@ -10,7 +10,9 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
LABEL maintainer="Roxedus,thespad"
ARG RADARR_BRANCH="master"
ENV XDG_CONFIG_HOME="/config/xdg"
ENV XDG_CONFIG_HOME="/config/xdg" \
COMPlus_EnableDiagnostics=0 \
TMPDIR=/run/radarr-temp
RUN \
echo "**** install packages ****" && \
Vendored
+286 -116
View File
@@ -8,7 +8,7 @@ pipeline {
}
// Input to determine if this is a package check
parameters {
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
}
// Configuration for the variables used for this specific repo
environment {
@@ -17,6 +17,8 @@ pipeline {
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat')
QUAYIO_API_TOKEN=credentials('quayio-repo-api-token')
GIT_SIGNING_KEY=credentials('484fbca6-9a4f-455e-b9e3-97ac98785f5f')
BUILD_VERSION_ARG = 'RADARR_RELEASE'
LS_USER = 'linuxserver'
LS_REPO = 'docker-radarr'
@@ -30,15 +32,29 @@ pipeline {
CI_WEB='true'
CI_PORT='7878'
CI_SSL='false'
CI_DELAY='120'
CI_DELAY='240'
CI_DOCKERENV=''
CI_AUTH=''
CI_WEBPATH='/system/status'
}
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
stage("Set ENV Variables base"){
steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
@@ -65,7 +81,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml ./root/donate.txt'
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./root/donate.txt'
}
sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
@@ -175,6 +191,7 @@ pipeline {
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
}
}
}
@@ -199,6 +216,7 @@ pipeline {
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
}
}
}
@@ -223,6 +241,7 @@ pipeline {
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
}
}
}
@@ -245,7 +264,7 @@ pipeline {
-v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-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 && \
python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \
@@ -295,7 +314,7 @@ pipeline {
echo "Jenkinsfile is up to date."
fi
echo "Starting Stage 2 - Delete old templates"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml .github/workflows/package_trigger.yml"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
@@ -319,6 +338,35 @@ pipeline {
else
echo "No templates to delete"
fi
echo "Starting Stage 2.5 - Update init diagram"
if ! grep -q 'init_diagram:' readme-vars.yml; then
echo "Adding the key 'init_diagram' to readme-vars.yml"
sed -i '\\|^#.*changelog.*$|d' readme-vars.yml
sed -i 's|^changelogs:|# init diagram\\ninit_diagram:\\n\\n# changelog\\nchangelogs:|' readme-vars.yml
fi
mkdir -p ${TEMPDIR}/d2
docker run --rm -v ${TEMPDIR}/d2:/output -e PUID=$(id -u) -e PGID=$(id -g) -e RAW="true" ghcr.io/linuxserver/d2-builder:latest ${CONTAINER_NAME}:latest
ls -al ${TEMPDIR}/d2
yq -ei ".init_diagram |= load_str(\\"${TEMPDIR}/d2/${CONTAINER_NAME}-latest.d2\\")" readme-vars.yml
if [[ $(md5sum readme-vars.yml | cut -c1-8) != $(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/readme-vars.yml | cut -c1-8) ]]; then
echo "'init_diagram' has been updated. Updating repo and exiting build, new one will trigger based on commit."
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master
cp ${WORKSPACE}/readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/readme-vars.yml
git add readme-vars.yml
git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating templates and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
exit 0
else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Init diagram is unchanged"
fi
echo "Starting Stage 3 - Update templates"
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
@@ -352,7 +400,7 @@ pipeline {
fi
echo "Starting Stage 4 - External repo updates: Docs, Unraid Template and Readme Sync to Docker Hub"
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
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/
cd ${TEMPDIR}/docs/docker-documentation
@@ -370,8 +418,8 @@ pipeline {
echo "Docs update not needed, skipping"
fi
mkdir -p ${TEMPDIR}/unraid
git clone 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/docker-templates.git ${TEMPDIR}/unraid/docker-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
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
@@ -381,9 +429,9 @@ pipeline {
echo "Updating Unraid template"
cd ${TEMPDIR}/unraid/templates/
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."
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"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add -u unraid/${CONTAINER_NAME}.xml
@@ -476,10 +524,10 @@ pipeline {
}
}
/* #######################
GitLab Mirroring
GitLab Mirroring and Quay.io Repo Visibility
####################### */
// Ping into Gitlab to mirror this repo and have a registry endpoint
stage("GitLab Mirror"){
// Ping into Gitlab to mirror this repo and have a registry endpoint & mark this repo on Quay.io as public
stage("GitLab Mirror and Quay.io Visibility"){
when {
environment name: 'EXIT_STATUS', value: ''
}
@@ -495,6 +543,8 @@ pipeline {
"visibility":"public"}' '''
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" '''
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"}' ||: '''
}
}
/* ###############
@@ -525,8 +575,42 @@ pipeline {
--label \"org.opencontainers.image.title=Radarr\" \
--label \"org.opencontainers.image.description=[Radarr](https://github.com/Radarr/Radarr) - A fork of Sonarr to work with movies à la Couchpotato. \" \
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false \
--provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
done
for p in $(jobs -p); do
wait "$p" || { echo "job $p failed" >&2; exit 1; }
done
fi
'''
}
}
}
}
// Build MultiArch Docker containers for push to LS Repo
@@ -557,8 +641,42 @@ pipeline {
--label \"org.opencontainers.image.title=Radarr\" \
--label \"org.opencontainers.image.description=[Radarr](https://github.com/Radarr/Radarr) - A fork of Sonarr to work with movies à la Couchpotato. \" \
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false \
--provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
done
for p in $(jobs -p); do
wait "$p" || { echo "job $p failed" >&2; exit 1; }
done
fi
'''
}
}
}
}
stage('Build ARM64') {
@@ -567,10 +685,6 @@ pipeline {
}
steps {
echo "Running on node: ${NODE_NAME}"
echo 'Logging into Github'
sh '''#! /bin/bash
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
'''
sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
sh "docker buildx build \
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
@@ -586,18 +700,49 @@ pipeline {
--label \"org.opencontainers.image.title=Radarr\" \
--label \"org.opencontainers.image.description=[Radarr](https://github.com/Radarr/Radarr) - A fork of Sonarr to work with movies à la Couchpotato. \" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
--provenance=false --sbom=false \
--provenance=true --sbom=true --builder=container --load \
--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}"
retry(5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
done
for p in $(jobs -p); do
wait "$p" || { echo "job $p failed" >&2; exit 1; }
done
fi
'''
}
}
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
docker system prune -af --volumes || :
'''
}
}
}
@@ -701,9 +846,17 @@ pipeline {
}
sh '''#! /bin/bash
set -e
if grep -q 'docker-baseimage' <<< "${LS_REPO}"; then
echo "Detected baseimage, setting LSIO_FIRST_PARTY=true"
if [ -n "${CI_DOCKERENV}" ]; then
CI_DOCKERENV="LSIO_FIRST_PARTY=true|${CI_DOCKERENV}"
else
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi
fi
docker pull ghcr.io/linuxserver/ci:latest
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}
fi
docker run --rm \
@@ -713,6 +866,7 @@ pipeline {
-e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e RELEASE_TAG=\"latest\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
@@ -722,6 +876,7 @@ pipeline {
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \
-t ghcr.io/linuxserver/ci:latest \
python3 test_build.py'''
}
@@ -737,37 +892,23 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi
docker push ${PUSHIMAGE}:latest
docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${PUSHIMAGE}:${SEMVER}
fi
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
[[ ${PUSHIMAGE%%/*} =~ \\. ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
fi
done
'''
}
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
fi
done
'''
}
}
}
@@ -778,57 +919,34 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --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
if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
fi
done
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:amd64-latest
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-latest
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
'''
}
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
'''
}
}
}
@@ -849,14 +967,14 @@ pipeline {
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"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"
sh '''#! /bin/bash
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "master",\
"name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
"body": "**CI Report:**\\n\\n'${CI_URL:-N/A}'\\n\\n**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": false}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
@@ -981,18 +1099,53 @@ EOF
###################### */
post {
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{
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"'
}
else if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
else {
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
}else{
if (currentBuild.currentResult == "SUCCESS"){
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=1681177
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}else{
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=16711680
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"'color'": '${JOB_WEBHOOK_COLOUR}',\
"footer": {"text" : "'"${JOB_WEBHOOK_FOOTER}"'"},\
"timestamp": "'${JOB_DATE}'",\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** '${JOB_WEBHOOK_STATUS}'\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
@@ -1010,3 +1163,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
}
+19 -4
View File
@@ -79,10 +79,21 @@ Use the optional paths if you don't understand, or don't want hardlinks/atomic m
The folks over at servarr.com wrote a good [write-up](https://wiki.servarr.com/docker-guide#consistent-and-well-planned-paths) on how to get started with this.
## 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/).
## Non-Root Operation
This image can be run with a non-root user. For details please [read the docs](https://docs.linuxserver.io/misc/non-root/).
## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
>[!NOTE]
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml
@@ -126,13 +137,15 @@ Containers are configured using parameters passed at runtime (such as those abov
| Parameter | Function |
| :----: | --- |
| `-p 7878` | The port for the Radarr Web UI |
| `-p 7878:7878` | The port for the Radarr Web UI |
| `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-v /config` | Database and Radarr configs |
| `-v /movies` | Location of Movie library on disk (See note in Application setup) |
| `-v /downloads` | Location of download managers output directory (See note in Application setup) |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
## Environment variables from files (Docker secrets)
@@ -270,7 +283,8 @@ Below are the instructions for updating containers:
### Image Update Notifications - Diun (Docker Image Update Notifier)
**tip**: We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
>[!TIP]
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally
@@ -285,16 +299,17 @@ docker build \
-t lscr.io/linuxserver/radarr:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions
* **23.12.24:** - Rebase Alpine 3.21.
* **31.05.24:** - Rebase Alpine 3.20.
* **20.03.24:** - Rebase to Alpine 3.19.
* **06.06.23:** - Rebase master to Alpine 3.18, deprecate armhf as per [https://www.linuxserver.io/armhf](https://www.linuxserver.io/armhf).
+1 -1
View File
@@ -20,7 +20,7 @@ repo_vars:
- CI_WEB='true'
- CI_PORT='7878'
- CI_SSL='false'
- CI_DELAY='120'
- CI_DELAY='240'
- CI_DOCKERENV=''
- CI_AUTH=''
- CI_WEBPATH='/system/status'
+328 -325
View File
@@ -1,5 +1,5 @@
NAME VERSION TYPE
Bouncy Castle for .NET (netstandard2.0) 1.9.0.1 dotnet
BouncyCastle.NET 2.4.0.33771 dotnet
Dapper 2.0.151.35995 dotnet
Diacritical 1.0.4.0 dotnet
DryIoc 5.4.3.0 dotnet
@@ -9,98 +9,99 @@ Equ 2.3.0
FFMpegCore 4.0.0.0 dotnet
FluentMigrator 3.3.2.9 dotnet (+19 duplicates)
FluentValidation 9.5.4.0 dotnet
ICSharpCode.SharpZipLib 1.3.3.11 dotnet
Ical.Net 1.0.0.0 dotnet
ICSharpCode.SharpZipLib 1.4.2.13 dotnet
IPAddressRange 6.1.0.0 dotnet
Ical.Net 4.3.1+5889b14d90ccd3cd32b54229029dab52495a09b0 dotnet
ImpromptuInterface 7.0.1.0 dotnet
Instances 1.0.0.0 dotnet
Json.NET 13.0.3.27908 dotnet
MailKit 3.6.0.0 dotnet
Microsoft.AspNetCore 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Antiforgery 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authentication 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authentication.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authentication.Cookies 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authentication.Core 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authentication.OAuth 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authorization 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Authorization.Policy 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Components 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Components.Authorization 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Components.Forms 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Components.Server 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Components.Web 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Connections.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.CookiePolicy 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Cors 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Cryptography.Internal 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Cryptography.KeyDerivation 6.0.2924.17108 dotnet
Microsoft.AspNetCore.DataProtection 6.0.2924.17108 dotnet
Microsoft.AspNetCore.DataProtection.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.DataProtection.Extensions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Diagnostics 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Diagnostics.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Diagnostics.HealthChecks 6.0.2924.17108 dotnet
Microsoft.AspNetCore.HostFiltering 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Hosting 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Hosting.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Hosting.Server.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Html.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http.Connections 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http.Connections.Common 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http.Extensions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http.Features 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Http.Results 6.0.2924.17108 dotnet
Microsoft.AspNetCore.HttpLogging 6.0.2924.17108 dotnet
Microsoft.AspNetCore.HttpOverrides 6.0.2924.17108 dotnet
Microsoft.AspNetCore.HttpsPolicy 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Identity 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Localization 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Localization.Routing 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Metadata 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.ApiExplorer 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Core 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Cors 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.DataAnnotations 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Formatters.Json 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Formatters.Xml 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Localization 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.Razor 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.RazorPages 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.TagHelpers 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Mvc.ViewFeatures 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Razor 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Razor.Runtime 6.0.2924.17108 dotnet
Microsoft.AspNetCore.ResponseCaching 6.0.2924.17108 dotnet
Microsoft.AspNetCore.ResponseCaching.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.ResponseCompression 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Rewrite 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Routing 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Routing.Abstractions 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.HttpSys 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.IIS 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.IISIntegration 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.Kestrel 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.Kestrel.Core 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.Kestrel.Transport.Quic 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets 6.0.2924.17108 dotnet
Microsoft.AspNetCore.Session 6.0.2924.17108 dotnet
Microsoft.AspNetCore.SignalR 6.0.2924.17108 dotnet
Microsoft.AspNetCore.SignalR.Common 6.0.2924.17108 dotnet
Microsoft.AspNetCore.SignalR.Core 6.0.2924.17108 dotnet
Microsoft.AspNetCore.SignalR.Protocols.Json 6.0.2924.17108 dotnet
Microsoft.AspNetCore.StaticFiles 6.0.2924.17108 dotnet
Microsoft.AspNetCore.WebSockets 6.0.2924.17108 dotnet
Microsoft.AspNetCore.WebUtilities 6.0.2924.17108 dotnet
MailKit 4.8.0.0 dotnet
Microsoft.AspNetCore 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Antiforgery 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authentication 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authentication.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authentication.Cookies 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authentication.Core 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authentication.OAuth 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authorization 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Authorization.Policy 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Components 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Components.Authorization 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Components.Forms 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Components.Server 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Components.Web 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Connections.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.CookiePolicy 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Cors 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Cryptography.Internal 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Cryptography.KeyDerivation 6.0.3524.46214 dotnet
Microsoft.AspNetCore.DataProtection 6.0.3524.46214 dotnet
Microsoft.AspNetCore.DataProtection.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.DataProtection.Extensions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Diagnostics 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Diagnostics.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Diagnostics.HealthChecks 6.0.3524.46214 dotnet
Microsoft.AspNetCore.HostFiltering 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Hosting 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Hosting.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Hosting.Server.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Html.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http.Connections 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http.Connections.Common 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http.Extensions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http.Features 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Http.Results 6.0.3524.46214 dotnet
Microsoft.AspNetCore.HttpLogging 6.0.3524.46214 dotnet
Microsoft.AspNetCore.HttpOverrides 6.0.3524.46214 dotnet
Microsoft.AspNetCore.HttpsPolicy 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Identity 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Localization 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Localization.Routing 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Metadata 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.ApiExplorer 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Core 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Cors 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.DataAnnotations 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Formatters.Json 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Formatters.Xml 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Localization 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.Razor 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.RazorPages 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.TagHelpers 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Mvc.ViewFeatures 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Razor 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Razor.Runtime 6.0.3524.46214 dotnet
Microsoft.AspNetCore.ResponseCaching 6.0.3524.46214 dotnet
Microsoft.AspNetCore.ResponseCaching.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.ResponseCompression 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Rewrite 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Routing 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Routing.Abstractions 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.HttpSys 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.IIS 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.IISIntegration 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.Kestrel 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.Kestrel.Core 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.Kestrel.Transport.Quic 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets 6.0.3524.46214 dotnet
Microsoft.AspNetCore.Session 6.0.3524.46214 dotnet
Microsoft.AspNetCore.SignalR 6.0.3524.46214 dotnet
Microsoft.AspNetCore.SignalR.Common 6.0.3524.46214 dotnet
Microsoft.AspNetCore.SignalR.Core 6.0.3524.46214 dotnet
Microsoft.AspNetCore.SignalR.Protocols.Json 6.0.3524.46214 dotnet
Microsoft.AspNetCore.StaticFiles 6.0.3524.46214 dotnet
Microsoft.AspNetCore.WebSockets 6.0.3524.46214 dotnet
Microsoft.AspNetCore.WebUtilities 6.0.3524.46214 dotnet
Microsoft.Bcl.AsyncInterfaces 6.0.21.52210 dotnet
Microsoft.Bcl.TimeProvider 8.0.23.53103 dotnet
Microsoft.CSharp 6.0.2924.17105 dotnet
Microsoft.Data.SqlClient 2.1.2+2a61e8301e9d21ada2338a9279cf27653e781757 dotnet
Microsoft.CSharp 6.0.3524.45918 dotnet
Microsoft.Data.SqlClient 2.1.7+730a7d538680463c75dd8dceec5fb27d158abea4 dotnet
Microsoft.Extensions.Caching.Abstractions 6.0.21.52210 dotnet
Microsoft.Extensions.Caching.Memory 6.0.222.6406 dotnet
Microsoft.Extensions.Caching.Memory 6.0.3524.45918 dotnet
Microsoft.Extensions.Configuration 6.0.322.12309 dotnet
Microsoft.Extensions.Configuration.Abstractions 6.0.21.52210 dotnet
Microsoft.Extensions.Configuration.Binder 6.0.21.52210 dotnet
@@ -109,27 +110,27 @@ Microsoft.Extensions.Configuration.EnvironmentVariables 6.0.222.6406
Microsoft.Extensions.Configuration.FileExtensions 6.0.21.52210 dotnet
Microsoft.Extensions.Configuration.Ini 6.0.21.52210 dotnet
Microsoft.Extensions.Configuration.Json 6.0.21.52210 dotnet
Microsoft.Extensions.Configuration.KeyPerFile 6.0.2924.17108 dotnet
Microsoft.Extensions.Configuration.KeyPerFile 6.0.3524.46214 dotnet
Microsoft.Extensions.Configuration.UserSecrets 6.0.222.6406 dotnet
Microsoft.Extensions.Configuration.Xml 6.0.21.52210 dotnet
Microsoft.Extensions.DependencyInjection 6.0.1022.47605 dotnet
Microsoft.Extensions.DependencyInjection.Abstractions 7.0.22.51805 dotnet
Microsoft.Extensions.Diagnostics.HealthChecks 6.0.2924.17108 dotnet
Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions 6.0.2924.17108 dotnet
Microsoft.Extensions.Features 6.0.2924.17108 dotnet
Microsoft.Extensions.Diagnostics.HealthChecks 6.0.3524.46214 dotnet
Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions 6.0.3524.46214 dotnet
Microsoft.Extensions.Features 6.0.3524.46214 dotnet
Microsoft.Extensions.FileProviders.Abstractions 6.0.21.52210 dotnet
Microsoft.Extensions.FileProviders.Composite 6.0.21.52210 dotnet
Microsoft.Extensions.FileProviders.Embedded 6.0.2924.17108 dotnet
Microsoft.Extensions.FileProviders.Embedded 6.0.3524.46214 dotnet
Microsoft.Extensions.FileProviders.Physical 6.0.21.52210 dotnet
Microsoft.Extensions.FileSystemGlobbing 6.0.21.52210 dotnet
Microsoft.Extensions.Hosting 6.0.222.6406 dotnet
Microsoft.Extensions.Hosting.Abstractions 6.0.21.52210 dotnet
Microsoft.Extensions.Hosting.WindowsServices 6.0.1823.26907 dotnet
Microsoft.Extensions.Http 6.0.21.52210 dotnet
Microsoft.Extensions.Identity.Core 6.0.2924.17108 dotnet
Microsoft.Extensions.Identity.Stores 6.0.2924.17108 dotnet
Microsoft.Extensions.Localization 6.0.2924.17108 dotnet
Microsoft.Extensions.Localization.Abstractions 6.0.2924.17108 dotnet
Microsoft.Extensions.Identity.Core 6.0.3524.46214 dotnet
Microsoft.Extensions.Identity.Stores 6.0.3524.46214 dotnet
Microsoft.Extensions.Localization 6.0.3524.46214 dotnet
Microsoft.Extensions.Localization.Abstractions 6.0.3524.46214 dotnet
Microsoft.Extensions.Logging 6.0.21.52210 dotnet
Microsoft.Extensions.Logging.Abstractions 6.0.1823.26907 dotnet
Microsoft.Extensions.Logging.Configuration 6.0.21.52210 dotnet
@@ -138,275 +139,277 @@ Microsoft.Extensions.Logging.Debug 6.0.21.52210
Microsoft.Extensions.Logging.EventLog 6.0.21.52210 dotnet
Microsoft.Extensions.Logging.EventSource 6.0.21.52210 dotnet
Microsoft.Extensions.Logging.TraceSource 6.0.21.52210 dotnet
Microsoft.Extensions.ObjectPool 6.0.2924.17108 dotnet
Microsoft.Extensions.ObjectPool 6.0.3524.46214 dotnet
Microsoft.Extensions.Options 6.0.21.52210 dotnet
Microsoft.Extensions.Options.ConfigurationExtensions 6.0.21.52210 dotnet
Microsoft.Extensions.Options.DataAnnotations 6.0.21.52210 dotnet
Microsoft.Extensions.Primitives 6.0.21.52210 dotnet
Microsoft.Extensions.WebEncoders 6.0.2924.17108 dotnet
Microsoft.Extensions.WebEncoders 6.0.3524.46214 dotnet
Microsoft.Identity.Client 4.21.1.0 dotnet
Microsoft.IdentityModel.JsonWebTokens 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
Microsoft.IdentityModel.Logging 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
Microsoft.IdentityModel.Protocols 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
Microsoft.IdentityModel.Protocols.OpenIdConnect 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
Microsoft.IdentityModel.Tokens 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
Microsoft.JSInterop 6.0.2924.17108 dotnet
Microsoft.Net.Http.Headers 6.0.2924.17108 dotnet
Microsoft.OpenApi 1.2.3.0 dotnet
Microsoft.VisualBasic 6.0.2924.17105 dotnet
Microsoft.VisualBasic.Core 11.100.2924.17105 dotnet
Microsoft.Win32.Primitives 6.0.2924.17105 dotnet
Microsoft.Win32.Registry 6.0.2924.17105 dotnet
Microsoft.JSInterop 6.0.3524.46214 dotnet
Microsoft.Net.Http.Headers 6.0.3524.46214 dotnet
Microsoft.OpenApi 1.6.14.0 dotnet
Microsoft.VisualBasic 6.0.3524.45918 dotnet
Microsoft.VisualBasic.Core 11.100.3524.45918 dotnet
Microsoft.Win32.Primitives 6.0.3524.45918 dotnet
Microsoft.Win32.Registry 6.0.3524.45918 dotnet
Microsoft.Win32.SystemEvents 6.0.21.52210 dotnet
MimeKit 3.6.0.0 dotnet
MimeKit 4.8.0.0 dotnet
Mono.Nat 3.0.1 dotnet
Mono.Posix.NETStandard 1.0.0.0 dotnet
MonoTorrent 2.0.7 dotnet
NLog v5.2.3 5.2.3.1999 dotnet
NLog.Extensions.Logging v5.3.3 5.3.3.381 dotnet
NLog v5.3.4 5.3.4.2778 dotnet
NLog.Extensions.Logging v5.3.15 5.3.15.614 dotnet
NLog.Layouts.ClefJsonLayout 1.0.2.0 dotnet
NLog.Targets.Syslog 7.0.0.0 dotnet
NodaTime 3.0.0.0 dotnet
Npgsql 7.0.7.0 dotnet
Polly 8.3.1.3207 dotnet
NodaTime 3.2.0.0 dotnet
Npgsql 7.0.9.0 dotnet
Polly 8.5.0.4130 dotnet
Polly.Contrib.WaitAndRetry 1.1.1.0+7596d2dacf22d88bbd814bc49c28424fb6e921e9 dotnet
Polly.Core 8.3.1.3207 dotnet
Radarr 5.6.0.8846 dotnet (+7 duplicates)
Polly.Core 8.5.0.4130 dotnet
Radarr 5.17.2.9580 dotnet (+7 duplicates)
ReusableTasks 2.0.0 dotnet
Sentry 4.0.2.0 dotnet
SixLabors.ImageSharp 3.1.4.0 dotnet
Swashbuckle.AspNetCore.Swagger 6.5.0.0 dotnet
Swashbuckle.AspNetCore.SwaggerGen 6.5.0.0 dotnet
System 6.0.2924.17105 dotnet
System.AppContext 6.0.2924.17105 dotnet
System.Buffers 6.0.2924.17105 dotnet
System.Collections 6.0.2924.17105 dotnet
System.Collections.Concurrent 6.0.2924.17105 dotnet
System.Collections.Immutable 6.0.2924.17105 dotnet
System.Collections.NonGeneric 6.0.2924.17105 dotnet
System.Collections.Specialized 6.0.2924.17105 dotnet
System.ComponentModel 6.0.2924.17105 dotnet
System.ComponentModel.Annotations 6.0.2924.17105 dotnet
System.ComponentModel.DataAnnotations 6.0.2924.17105 dotnet
System.ComponentModel.EventBasedAsync 6.0.2924.17105 dotnet
System.ComponentModel.Primitives 6.0.2924.17105 dotnet
System.ComponentModel.TypeConverter 6.0.2924.17105 dotnet
System.Configuration 6.0.2924.17105 dotnet
SixLabors.ImageSharp 3.1.6.0 dotnet
Swashbuckle.AspNetCore.Annotations 6.6.2.401 dotnet
Swashbuckle.AspNetCore.Swagger 6.6.2.401 dotnet
Swashbuckle.AspNetCore.SwaggerGen 6.6.2.401 dotnet
System 6.0.3524.45918 dotnet
System.AppContext 6.0.3524.45918 dotnet
System.Buffers 6.0.3524.45918 dotnet
System.Collections 6.0.3524.45918 dotnet
System.Collections.Concurrent 6.0.3524.45918 dotnet
System.Collections.Immutable 6.0.3524.45918 dotnet
System.Collections.NonGeneric 6.0.3524.45918 dotnet
System.Collections.Specialized 6.0.3524.45918 dotnet
System.ComponentModel 6.0.3524.45918 dotnet
System.ComponentModel.Annotations 6.0.3524.45918 dotnet
System.ComponentModel.DataAnnotations 6.0.3524.45918 dotnet
System.ComponentModel.EventBasedAsync 6.0.3524.45918 dotnet
System.ComponentModel.Primitives 6.0.3524.45918 dotnet
System.ComponentModel.TypeConverter 6.0.3524.45918 dotnet
System.Configuration 6.0.3524.45918 dotnet
System.Configuration.ConfigurationManager 6.0.922.41905 dotnet
System.Console 6.0.2924.17105 dotnet
System.Core 6.0.2924.17105 dotnet
System.Data 6.0.2924.17105 dotnet
System.Data.Common 6.0.2924.17105 dotnet
System.Data.DataSetExtensions 6.0.2924.17105 dotnet
System.Console 6.0.3524.45918 dotnet
System.Core 6.0.3524.45918 dotnet
System.Data 6.0.3524.45918 dotnet
System.Data.Common 6.0.3524.45918 dotnet
System.Data.DataSetExtensions 6.0.3524.45918 dotnet
System.Data.SQLite 1.0.115.5 dotnet
System.Data.SqlServerCe 4.0.8876.1 dotnet
System.Diagnostics.Contracts 6.0.2924.17105 dotnet
System.Diagnostics.Debug 6.0.2924.17105 dotnet
System.Diagnostics.DiagnosticSource 6.0.2924.17105 dotnet
System.Diagnostics.Contracts 6.0.3524.45918 dotnet
System.Diagnostics.Debug 6.0.3524.45918 dotnet
System.Diagnostics.DiagnosticSource 6.0.3524.45918 dotnet
System.Diagnostics.EventLog 6.0.21.52210 dotnet
System.Diagnostics.FileVersionInfo 6.0.2924.17105 dotnet
System.Diagnostics.Process 6.0.2924.17105 dotnet
System.Diagnostics.StackTrace 6.0.2924.17105 dotnet
System.Diagnostics.TextWriterTraceListener 6.0.2924.17105 dotnet
System.Diagnostics.Tools 6.0.2924.17105 dotnet
System.Diagnostics.TraceSource 6.0.2924.17105 dotnet
System.Diagnostics.Tracing 6.0.2924.17105 dotnet
System.Drawing 6.0.2924.17105 dotnet
System.Diagnostics.FileVersionInfo 6.0.3524.45918 dotnet
System.Diagnostics.Process 6.0.3524.45918 dotnet
System.Diagnostics.StackTrace 6.0.3524.45918 dotnet
System.Diagnostics.TextWriterTraceListener 6.0.3524.45918 dotnet
System.Diagnostics.Tools 6.0.3524.45918 dotnet
System.Diagnostics.TraceSource 6.0.3524.45918 dotnet
System.Diagnostics.Tracing 6.0.3524.45918 dotnet
System.Drawing 6.0.3524.45918 dotnet
System.Drawing.Common 6.0.21.52210 dotnet
System.Drawing.Primitives 6.0.2924.17105 dotnet
System.Dynamic.Runtime 6.0.2924.17105 dotnet
System.Formats.Asn1 6.0.2924.17105 dotnet
System.Globalization 6.0.2924.17105 dotnet
System.Globalization.Calendars 6.0.2924.17105 dotnet
System.Globalization.Extensions 6.0.2924.17105 dotnet
System.IO 6.0.2924.17105 dotnet
System.IO.Compression 6.0.2924.17105 dotnet
System.IO.Compression.Brotli 6.0.2924.17105 dotnet
System.IO.Compression.FileSystem 6.0.2924.17105 dotnet
System.IO.Compression.ZipFile 6.0.2924.17105 dotnet
System.IO.FileSystem 6.0.2924.17105 dotnet
System.IO.FileSystem.AccessControl 6.0.2924.17105 dotnet
System.IO.FileSystem.DriveInfo 6.0.2924.17105 dotnet
System.IO.FileSystem.Primitives 6.0.2924.17105 dotnet
System.IO.FileSystem.Watcher 6.0.2924.17105 dotnet
System.IO.IsolatedStorage 6.0.2924.17105 dotnet
System.IO.MemoryMappedFiles 6.0.2924.17105 dotnet
System.Drawing.Primitives 6.0.3524.45918 dotnet
System.Dynamic.Runtime 6.0.3524.45918 dotnet
System.Formats.Asn1 6.0.3524.45918 dotnet
System.Globalization 6.0.3524.45918 dotnet
System.Globalization.Calendars 6.0.3524.45918 dotnet
System.Globalization.Extensions 6.0.3524.45918 dotnet
System.IO 6.0.3524.45918 dotnet
System.IO.Compression 6.0.3524.45918 dotnet
System.IO.Compression.Brotli 6.0.3524.45918 dotnet
System.IO.Compression.FileSystem 6.0.3524.45918 dotnet
System.IO.Compression.ZipFile 6.0.3524.45918 dotnet
System.IO.FileSystem 6.0.3524.45918 dotnet
System.IO.FileSystem.AccessControl 6.0.3524.45918 dotnet
System.IO.FileSystem.DriveInfo 6.0.3524.45918 dotnet
System.IO.FileSystem.Primitives 6.0.3524.45918 dotnet
System.IO.FileSystem.Watcher 6.0.3524.45918 dotnet
System.IO.IsolatedStorage 6.0.3524.45918 dotnet
System.IO.MemoryMappedFiles 6.0.3524.45918 dotnet
System.IO.Pipelines 6.0.522.21309 dotnet
System.IO.Pipes 6.0.2924.17105 dotnet
System.IO.Pipes.AccessControl 6.0.2924.17105 dotnet
System.IO.UnmanagedMemoryStream 6.0.2924.17105 dotnet
System.IO.Pipes 6.0.3524.45918 dotnet
System.IO.Pipes.AccessControl 6.0.3524.45918 dotnet
System.IO.UnmanagedMemoryStream 6.0.3524.45918 dotnet
System.IdentityModel.Tokens.Jwt 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
System.Linq 6.0.2924.17105 dotnet
System.Linq.Expressions 6.0.2924.17105 dotnet
System.Linq.Parallel 6.0.2924.17105 dotnet
System.Linq.Queryable 6.0.2924.17105 dotnet
System.Memory 6.0.2924.17105 dotnet
System.Net 6.0.2924.17105 dotnet
System.Net.Http 6.0.2924.17105 dotnet
System.Net.Http.Json 6.0.2924.17105 dotnet
System.Net.HttpListener 6.0.2924.17105 dotnet
System.Net.Mail 6.0.2924.17105 dotnet
System.Net.NameResolution 6.0.2924.17105 dotnet
System.Net.NetworkInformation 6.0.2924.17105 dotnet
System.Net.Ping 6.0.2924.17105 dotnet
System.Net.Primitives 6.0.2924.17105 dotnet
System.Net.Quic 6.0.2924.17105 dotnet
System.Net.Requests 6.0.2924.17105 dotnet
System.Net.Security 6.0.2924.17105 dotnet
System.Net.ServicePoint 6.0.2924.17105 dotnet
System.Net.Sockets 6.0.2924.17105 dotnet
System.Net.WebClient 6.0.2924.17105 dotnet
System.Net.WebHeaderCollection 6.0.2924.17105 dotnet
System.Net.WebProxy 6.0.2924.17105 dotnet
System.Net.WebSockets 6.0.2924.17105 dotnet
System.Net.WebSockets.Client 6.0.2924.17105 dotnet
System.Numerics 6.0.2924.17105 dotnet
System.Numerics.Vectors 6.0.2924.17105 dotnet
System.ObjectModel 6.0.2924.17105 dotnet
System.Private.CoreLib 6.0.2924.17105 dotnet
System.Private.DataContractSerialization 6.0.2924.17105 dotnet
System.Private.Uri 6.0.2924.17105 dotnet
System.Private.Xml 6.0.2924.17105 dotnet
System.Private.Xml.Linq 6.0.2924.17105 dotnet
System.Reflection 6.0.2924.17105 dotnet
System.Reflection.DispatchProxy 6.0.2924.17105 dotnet
System.Reflection.Emit 6.0.2924.17105 dotnet
System.Reflection.Emit.ILGeneration 6.0.2924.17105 dotnet
System.Reflection.Emit.Lightweight 6.0.2924.17105 dotnet
System.Reflection.Extensions 6.0.2924.17105 dotnet
System.Reflection.Metadata 6.0.2924.17105 dotnet
System.Reflection.Primitives 6.0.2924.17105 dotnet
System.Reflection.TypeExtensions 6.0.2924.17105 dotnet
System.Resources.Reader 6.0.2924.17105 dotnet
System.Resources.ResourceManager 6.0.2924.17105 dotnet
System.Resources.Writer 6.0.2924.17105 dotnet
System.Runtime 6.0.2924.17105 dotnet
System.Linq 6.0.3524.45918 dotnet
System.Linq.Expressions 6.0.3524.45918 dotnet
System.Linq.Parallel 6.0.3524.45918 dotnet
System.Linq.Queryable 6.0.3524.45918 dotnet
System.Memory 6.0.3524.45918 dotnet
System.Net 6.0.3524.45918 dotnet
System.Net.Http 6.0.3524.45918 dotnet
System.Net.Http.Json 6.0.3524.45918 dotnet
System.Net.HttpListener 6.0.3524.45918 dotnet
System.Net.Mail 6.0.3524.45918 dotnet
System.Net.NameResolution 6.0.3524.45918 dotnet
System.Net.NetworkInformation 6.0.3524.45918 dotnet
System.Net.Ping 6.0.3524.45918 dotnet
System.Net.Primitives 6.0.3524.45918 dotnet
System.Net.Quic 6.0.3524.45918 dotnet
System.Net.Requests 6.0.3524.45918 dotnet
System.Net.Security 6.0.3524.45918 dotnet
System.Net.ServicePoint 6.0.3524.45918 dotnet
System.Net.Sockets 6.0.3524.45918 dotnet
System.Net.WebClient 6.0.3524.45918 dotnet
System.Net.WebHeaderCollection 6.0.3524.45918 dotnet
System.Net.WebProxy 6.0.3524.45918 dotnet
System.Net.WebSockets 6.0.3524.45918 dotnet
System.Net.WebSockets.Client 6.0.3524.45918 dotnet
System.Numerics 6.0.3524.45918 dotnet
System.Numerics.Vectors 6.0.3524.45918 dotnet
System.ObjectModel 6.0.3524.45918 dotnet
System.Private.CoreLib 6.0.3524.45918 dotnet
System.Private.DataContractSerialization 6.0.3524.45918 dotnet
System.Private.Uri 6.0.3524.45918 dotnet
System.Private.Xml 6.0.3524.45918 dotnet
System.Private.Xml.Linq 6.0.3524.45918 dotnet
System.Reflection 6.0.3524.45918 dotnet
System.Reflection.DispatchProxy 6.0.3524.45918 dotnet
System.Reflection.Emit 6.0.3524.45918 dotnet
System.Reflection.Emit.ILGeneration 6.0.3524.45918 dotnet
System.Reflection.Emit.Lightweight 6.0.3524.45918 dotnet
System.Reflection.Extensions 6.0.3524.45918 dotnet
System.Reflection.Metadata 6.0.3524.45918 dotnet
System.Reflection.Primitives 6.0.3524.45918 dotnet
System.Reflection.TypeExtensions 6.0.3524.45918 dotnet
System.Resources.Reader 6.0.3524.45918 dotnet
System.Resources.ResourceManager 6.0.3524.45918 dotnet
System.Resources.Writer 6.0.3524.45918 dotnet
System.Runtime 6.0.3524.45918 dotnet
System.Runtime.Caching 4.700.19.56404 dotnet
System.Runtime.CompilerServices.VisualC 6.0.2924.17105 dotnet
System.Runtime.Extensions 6.0.2924.17105 dotnet
System.Runtime.Handles 6.0.2924.17105 dotnet
System.Runtime.InteropServices 6.0.2924.17105 dotnet
System.Runtime.InteropServices.RuntimeInformation 6.0.2924.17105 dotnet
System.Runtime.Intrinsics 6.0.2924.17105 dotnet
System.Runtime.Loader 6.0.2924.17105 dotnet
System.Runtime.Numerics 6.0.2924.17105 dotnet
System.Runtime.Serialization 6.0.2924.17105 dotnet
System.Runtime.Serialization.Formatters 6.0.2924.17105 dotnet
System.Runtime.Serialization.Json 6.0.2924.17105 dotnet
System.Runtime.Serialization.Primitives 6.0.2924.17105 dotnet
System.Runtime.Serialization.Xml 6.0.2924.17105 dotnet
System.Security 6.0.2924.17105 dotnet
System.Security.AccessControl 6.0.2924.17105 dotnet
System.Security.Claims 6.0.2924.17105 dotnet
System.Security.Cryptography.Algorithms 6.0.2924.17105 dotnet
System.Security.Cryptography.Cng 6.0.2924.17105 dotnet
System.Security.Cryptography.Csp 6.0.2924.17105 dotnet
System.Security.Cryptography.Encoding 6.0.2924.17105 dotnet
System.Security.Cryptography.OpenSsl 6.0.2924.17105 dotnet
System.Security.Cryptography.Pkcs 6.0.1823.26907 dotnet
System.Security.Cryptography.Primitives 6.0.2924.17105 dotnet
System.Runtime.CompilerServices.VisualC 6.0.3524.45918 dotnet
System.Runtime.Extensions 6.0.3524.45918 dotnet
System.Runtime.Handles 6.0.3524.45918 dotnet
System.Runtime.InteropServices 6.0.3524.45918 dotnet
System.Runtime.InteropServices.RuntimeInformation 6.0.3524.45918 dotnet
System.Runtime.Intrinsics 6.0.3524.45918 dotnet
System.Runtime.Loader 6.0.3524.45918 dotnet
System.Runtime.Numerics 6.0.3524.45918 dotnet
System.Runtime.Serialization 6.0.3524.45918 dotnet
System.Runtime.Serialization.Formatters 6.0.3524.45918 dotnet
System.Runtime.Serialization.Json 6.0.3524.45918 dotnet
System.Runtime.Serialization.Primitives 6.0.3524.45918 dotnet
System.Runtime.Serialization.Xml 6.0.3524.45918 dotnet
System.Security 6.0.3524.45918 dotnet
System.Security.AccessControl 6.0.3524.45918 dotnet
System.Security.Claims 6.0.3524.45918 dotnet
System.Security.Cryptography.Algorithms 6.0.3524.45918 dotnet
System.Security.Cryptography.Cng 6.0.3524.45918 dotnet
System.Security.Cryptography.Csp 6.0.3524.45918 dotnet
System.Security.Cryptography.Encoding 6.0.3524.45918 dotnet
System.Security.Cryptography.OpenSsl 6.0.3524.45918 dotnet
System.Security.Cryptography.Pkcs 8.0.23.53103 dotnet
System.Security.Cryptography.Primitives 6.0.3524.45918 dotnet
System.Security.Cryptography.ProtectedData 6.0.21.52210 dotnet
System.Security.Cryptography.X509Certificates 6.0.2924.17105 dotnet
System.Security.Cryptography.X509Certificates 6.0.3524.45918 dotnet
System.Security.Cryptography.Xml 6.0.822.36306 dotnet
System.Security.Permissions 6.0.21.52210 dotnet
System.Security.Principal 6.0.2924.17105 dotnet
System.Security.Principal.Windows 6.0.2924.17105 dotnet
System.Security.SecureString 6.0.2924.17105 dotnet
System.ServiceModel.Web 6.0.2924.17105 dotnet
System.ServiceProcess 6.0.2924.17105 dotnet
System.Security.Principal 6.0.3524.45918 dotnet
System.Security.Principal.Windows 6.0.3524.45918 dotnet
System.Security.SecureString 6.0.3524.45918 dotnet
System.ServiceModel.Web 6.0.3524.45918 dotnet
System.ServiceProcess 6.0.3524.45918 dotnet
System.ServiceProcess.ServiceController 6.0.1823.26907 dotnet
System.Text.Encoding 6.0.2924.17105 dotnet
System.Text.Encoding.CodePages 6.0.2924.17105 dotnet
System.Text.Encoding.Extensions 6.0.2924.17105 dotnet
System.Text.Encodings.Web 6.0.2924.17105 dotnet
System.Text.Json 6.0.2924.17105 dotnet
System.Text.RegularExpressions 6.0.2924.17105 dotnet
System.Threading 6.0.2924.17105 dotnet
System.Threading.Channels 6.0.2924.17105 dotnet
System.Threading.Overlapped 6.0.2924.17105 dotnet
System.Threading.Tasks 6.0.2924.17105 dotnet
System.Threading.Tasks.Dataflow 6.0.2924.17105 dotnet
System.Threading.Tasks.Extensions 6.0.2924.17105 dotnet
System.Threading.Tasks.Parallel 6.0.2924.17105 dotnet
System.Threading.Thread 6.0.2924.17105 dotnet
System.Threading.ThreadPool 6.0.2924.17105 dotnet
System.Threading.Timer 6.0.2924.17105 dotnet
System.Transactions 6.0.2924.17105 dotnet
System.Transactions.Local 6.0.2924.17105 dotnet
System.ValueTuple 6.0.2924.17105 dotnet
System.Web 6.0.2924.17105 dotnet
System.Web.HttpUtility 6.0.2924.17105 dotnet
System.Windows 6.0.2924.17105 dotnet
System.Text.Encoding 6.0.3524.45918 dotnet
System.Text.Encoding.CodePages 6.0.3524.45918 dotnet
System.Text.Encoding.Extensions 6.0.3524.45918 dotnet
System.Text.Encodings.Web 6.0.3524.45918 dotnet
System.Text.Json 6.0.3524.45918 dotnet
System.Text.RegularExpressions 6.0.3524.45918 dotnet
System.Threading 6.0.3524.45918 dotnet
System.Threading.Channels 6.0.3524.45918 dotnet
System.Threading.Overlapped 6.0.3524.45918 dotnet
System.Threading.Tasks 6.0.3524.45918 dotnet
System.Threading.Tasks.Dataflow 6.0.3524.45918 dotnet
System.Threading.Tasks.Extensions 6.0.3524.45918 dotnet
System.Threading.Tasks.Parallel 6.0.3524.45918 dotnet
System.Threading.Thread 6.0.3524.45918 dotnet
System.Threading.ThreadPool 6.0.3524.45918 dotnet
System.Threading.Timer 6.0.3524.45918 dotnet
System.Transactions 6.0.3524.45918 dotnet
System.Transactions.Local 6.0.3524.45918 dotnet
System.ValueTuple 6.0.3524.45918 dotnet
System.Web 6.0.3524.45918 dotnet
System.Web.HttpUtility 6.0.3524.45918 dotnet
System.Windows 6.0.3524.45918 dotnet
System.Windows.Extensions 6.0.21.52210 dotnet
System.Xml 6.0.2924.17105 dotnet
System.Xml.Linq 6.0.2924.17105 dotnet
System.Xml.ReaderWriter 6.0.2924.17105 dotnet
System.Xml.Serialization 6.0.2924.17105 dotnet
System.Xml.XDocument 6.0.2924.17105 dotnet
System.Xml.XPath 6.0.2924.17105 dotnet
System.Xml.XPath.XDocument 6.0.2924.17105 dotnet
System.Xml.XmlDocument 6.0.2924.17105 dotnet
System.Xml.XmlSerializer 6.0.2924.17105 dotnet
WindowsBase 6.0.2924.17105 dotnet
alpine-baselayout 3.6.5-r0 apk
alpine-baselayout-data 3.6.5-r0 apk
alpine-keys 2.4-r1 apk
alpine-release 3.20.0-r0 apk
apk-tools 2.14.4-r0 apk
bash 5.2.26-r0 apk
System.Xml 6.0.3524.45918 dotnet
System.Xml.Linq 6.0.3524.45918 dotnet
System.Xml.ReaderWriter 6.0.3524.45918 dotnet
System.Xml.Serialization 6.0.3524.45918 dotnet
System.Xml.XDocument 6.0.3524.45918 dotnet
System.Xml.XPath 6.0.3524.45918 dotnet
System.Xml.XPath.XDocument 6.0.3524.45918 dotnet
System.Xml.XmlDocument 6.0.3524.45918 dotnet
System.Xml.XmlSerializer 6.0.3524.45918 dotnet
WindowsBase 6.0.3524.45918 dotnet
acl-libs 2.3.2-r1 apk
alpine-baselayout 3.6.8-r1 apk
alpine-baselayout-data 3.6.8-r1 apk
alpine-keys 2.5-r0 apk
alpine-release 3.21.2-r0 apk
apk-tools 2.14.6-r2 apk
bash 5.2.37-r0 apk
brotli-libs 1.1.0-r2 apk
busybox 1.36.1-r28 apk
busybox-binsh 1.36.1-r28 apk
c-ares 1.28.1-r0 apk
ca-certificates 20240226-r0 apk
ca-certificates-bundle 20240226-r0 apk
busybox 1.37.0-r12 apk
busybox-binsh 1.37.0-r12 apk
c-ares 1.34.3-r0 apk
ca-certificates 20241121-r1 apk
ca-certificates-bundle 20241121-r1 apk
catatonit 0.2.0-r0 apk
coreutils 9.5-r1 apk
coreutils-env 9.5-r1 apk
coreutils-fmt 9.5-r1 apk
coreutils-sha512sum 9.5-r1 apk
curl 8.7.1-r0 apk
findutils 4.9.0-r5 apk
coreutils 9.5-r2 apk
coreutils-env 9.5-r2 apk
coreutils-fmt 9.5-r2 apk
coreutils-sha512sum 9.5-r2 apk
curl 8.11.1-r0 apk
findutils 4.10.0-r0 apk
icu-data-en 74.2-r0 apk
icu-libs 74.2-r0 apk
jq 1.7.1-r0 apk
libacl 2.3.2-r0 apk
libattr 2.5.2-r0 apk
libattr 2.5.2-r2 apk
libbsd 0.12.2-r0 apk
libcrypto3 3.3.1-r0 apk
libcurl 8.7.1-r0 apk
libgcc 13.2.1_git20240309-r0 apk
libgcrypt 1.10.3-r0 apk
libgpg-error 1.49-r0 apk
libcrypto3 3.3.2-r4 apk
libcurl 8.11.1-r0 apk
libgcc 14.2.0-r4 apk
libgcrypt 1.10.3-r1 apk
libgpg-error 1.51-r0 apk
libidn2 2.3.7-r0 apk
libintl 0.22.5-r0 apk
libmd 1.1.0-r0 apk
libncursesw 6.4_p20240420-r0 apk
libproc2 4.0.4-r0 apk
libpsl 0.21.5-r1 apk
libssl3 3.3.1-r0 apk
libstdc++ 13.2.1_git20240309-r0 apk
libncursesw 6.5_p20241006-r3 apk
libproc2 4.0.4-r2 apk
libpsl 0.21.5-r3 apk
libssl3 3.3.2-r4 apk
libstdc++ 14.2.0-r4 apk
libunistring 1.2-r0 apk
libxml2 2.12.7-r0 apk
libxslt 1.1.39-r1 apk
linux-pam 1.6.0-r0 apk
mscorlib 6.0.2924.17105 dotnet
musl 1.2.5-r0 apk
musl-utils 1.2.5-r0 apk
ncurses-terminfo-base 6.4_p20240420-r0 apk
netcat-openbsd 1.226-r0 apk
netstandard 6.0.2924.17105 dotnet
nghttp2-libs 1.62.0-r0 apk
libxml2 2.13.4-r3 apk
libxslt 1.1.42-r1 apk
linux-pam 1.6.1-r1 apk
mscorlib 6.0.3524.45918 dotnet
musl 1.2.5-r8 apk
musl-utils 1.2.5-r8 apk
ncurses-terminfo-base 6.5_p20241006-r3 apk
netcat-openbsd 1.226.1.1-r0 apk
netstandard 6.0.3524.45918 dotnet
nghttp2-libs 1.64.0-r0 apk
oniguruma 6.9.9-r0 apk
procps-ng 4.0.4-r0 apk
readline 8.2.10-r0 apk
scanelf 1.3.7-r2 apk
shadow 4.15.1-r0 apk
skalibs 2.14.1.1-r0 apk
sqlite-libs 3.45.3-r1 apk
ssl_client 1.36.1-r28 apk
tzdata 2024a-r1 apk
utmps-libs 0.1.2.2-r1 apk
procps-ng 4.0.4-r2 apk
readline 8.2.13-r0 apk
scanelf 1.3.8-r1 apk
shadow 4.16.0-r1 apk
skalibs-libs 2.14.3.0-r0 apk
sqlite-libs 3.47.1-r0 apk
ssl_client 1.37.0-r12 apk
tzdata 2024b-r1 apk
utmps-libs 0.1.2.3-r2 apk
xmlstarlet 1.6.1-r2 apk
xz-libs 5.6.1-r3 apk
zlib 1.3.1-r1 apk
zstd-libs 1.5.6-r0 apk
xz-libs 5.6.3-r0 apk
zlib 1.3.1-r2 apk
zstd-libs 1.5.6-r2 apk
+77 -41
View File
@@ -7,34 +7,31 @@ project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/ma
project_blurb: |
[{{ project_name|capitalize }}]({{ project_url }}) - A fork of Sonarr to work with movies à la Couchpotato.
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Media Management"
# supported architectures
available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
# development version
development_versions: true
development_versions_items:
- { tag: "latest", desc: "Stable Radarr releases" }
- { tag: "develop", desc: "Radarr releases from their develop branch" }
- { tag: "nightly", desc: "Radarr releases from their nightly branch" }
- {tag: "latest", desc: "Stable Radarr releases"}
- {tag: "develop", desc: "Radarr releases from their develop branch"}
- {tag: "nightly", desc: "Radarr releases from their nightly branch"}
# container parameters
param_container_name: "{{ project_name }}"
param_usage_include_vols: true
param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/data", desc: "Database and Radarr configs" }
- {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/data", desc: "Database and Radarr configs"}
opt_param_usage_include_vols: true
opt_param_volumes:
- { vol_path: "/movies", vol_host_path: "/path/to/movies", desc: "Location of Movie library on disk (See note in Application setup)" }
- { vol_path: "/downloads", vol_host_path: "/path/to/download-client-downloads", desc: "Location of download managers output directory (See note in Application setup)" }
- {vol_path: "/movies", vol_host_path: "/path/to/movies", desc: "Location of Movie library on disk (See note in Application setup)"}
- {vol_path: "/downloads", vol_host_path: "/path/to/download-client-downloads", desc: "Location of download managers output directory (See note in Application setup)"}
param_usage_include_ports: true
param_ports:
- { external_port: "7878", internal_port: "7878", port_desc: "The port for the Radarr Web UI" }
- {external_port: "7878", internal_port: "7878", port_desc: "The port for the Radarr Web UI"}
readonly_supported: true
nonroot_supported: true
# application setup block
app_setup_block_enabled: true
app_setup_block: |
@@ -47,31 +44,70 @@ app_setup_block: |
Use the optional paths if you don't understand, or don't want hardlinks/atomic moves.
The folks over at servarr.com wrote a good [write-up](https://wiki.servarr.com/docker-guide#consistent-and-well-planned-paths) on how to get started with this.
# init diagram
init_diagram: |
"radarr:latest": {
docker-mods
base {
fix-attr +\nlegacy cont-init
}
docker-mods -> base
legacy-services
custom services
init-services -> legacy-services
init-services -> custom services
custom services -> legacy-services
legacy-services -> ci-service-check
init-migrations -> init-adduser
init-os-end -> init-config
init-config -> init-config-end
init-crontab-config -> init-config-end
init-radarr-config -> init-config-end
init-config -> init-crontab-config
init-mods-end -> init-custom-files
base -> init-envfile
base -> init-migrations
init-config-end -> init-mods
init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install
init-adduser -> init-os-end
init-envfile -> init-os-end
init-config -> init-radarr-config
init-custom-files -> init-services
init-services -> svc-cron
svc-cron -> legacy-services
init-services -> svc-radarr
svc-radarr -> legacy-services
}
Base Images: {
"baseimage-alpine:3.21"
}
"radarr:latest" <- Base Images
# changelog
changelogs:
- { date: "31.05.24:", desc: "Rebase Alpine 3.20." }
- { date: "20.03.24:", desc: "Rebase to Alpine 3.19." }
- { date: "06.06.23:", desc: "Rebase master to Alpine 3.18, deprecate armhf as per [https://www.linuxserver.io/armhf](https://www.linuxserver.io/armhf)." }
- { date: "17.01.23:", desc: "Rebase master branch to Alpine 3.17, migrate to s6v3." }
- { date: "06.06.22:", desc: "Rebase master branch to Alpine 3.15." }
- { date: "20.02.22:", desc: "Rebase develop branch to Alpine." }
- { date: "04.02.22:", desc: "Rebase nightly branch to Alpine and deprecate nightly-alpine branch." }
- { date: "27.12.21:", desc: "Add nightly-alpine branch." }
- { date: "17.10.21:", desc: "Remove `UMASK_SET`." }
- { date: "08.05.21:", desc: "Make the paths clearer to the user" }
- { date: "17.01.21:", desc: "Deprecate `UMASK_SET` in favor of UMASK in baseimage, see above for more information." }
- { date: "11.30.20:", desc: "Publish `develop` tag." }
- { date: "11.28.20:", desc: "Switch to v3 .NET CORE builds (no more mono, `5.14` tag is deprecated). Rebase to Focal (for issues on arm32v7, [see here](https://docs.linuxserver.io/faq#my-host-is-incompatible-with-images-based-on-ubuntu-focal))." }
- { date: "05.04.20:", desc: "Move app to /app." }
- { date: "01.08.19:", desc: "Rebase to Linuxserver LTS mono version." }
- { date: "13.06.19:", desc: "Add env variable for setting umask." }
- { date: "10.05.19:", desc: "Rebase to Bionic." }
- { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." }
- { date: "09.09.18:", desc: "Add pipeline build process." }
- { date: "24.02.18:", desc: "Add nightly branch." }
- { date: "06.02.18:", desc: "Radarr repo changed owner." }
- { date: "15.12.17:", desc: "Fix continuation lines." }
- { date: "17.04.17:", desc: "Switch to using inhouse mono baseimage, adds python also." }
- { date: "13.04.17:", desc: "Switch to official mono repository." }
- { date: "10.01.17:", desc: "Initial Release." }
- {date: "23.12.24:", desc: "Rebase Alpine 3.21."}
- {date: "31.05.24:", desc: "Rebase Alpine 3.20."}
- {date: "20.03.24:", desc: "Rebase to Alpine 3.19."}
- {date: "06.06.23:", desc: "Rebase master to Alpine 3.18, deprecate armhf as per [https://www.linuxserver.io/armhf](https://www.linuxserver.io/armhf)."}
- {date: "17.01.23:", desc: "Rebase master branch to Alpine 3.17, migrate to s6v3."}
- {date: "06.06.22:", desc: "Rebase master branch to Alpine 3.15."}
- {date: "20.02.22:", desc: "Rebase develop branch to Alpine."}
- {date: "04.02.22:", desc: "Rebase nightly branch to Alpine and deprecate nightly-alpine branch."}
- {date: "27.12.21:", desc: "Add nightly-alpine branch."}
- {date: "17.10.21:", desc: "Remove `UMASK_SET`."}
- {date: "08.05.21:", desc: "Make the paths clearer to the user"}
- {date: "17.01.21:", desc: "Deprecate `UMASK_SET` in favor of UMASK in baseimage, see above for more information."}
- {date: "11.30.20:", desc: "Publish `develop` tag."}
- {date: "11.28.20:", desc: "Switch to v3 .NET CORE builds (no more mono, `5.14` tag is deprecated). Rebase to Focal (for issues on arm32v7, [see here](https://docs.linuxserver.io/faq#my-host-is-incompatible-with-images-based-on-ubuntu-focal))."}
- {date: "05.04.20:", desc: "Move app to /app."}
- {date: "01.08.19:", desc: "Rebase to Linuxserver LTS mono version."}
- {date: "13.06.19:", desc: "Add env variable for setting umask."}
- {date: "10.05.19:", desc: "Rebase to Bionic."}
- {date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag."}
- {date: "09.09.18:", desc: "Add pipeline build process."}
- {date: "24.02.18:", desc: "Add nightly branch."}
- {date: "06.02.18:", desc: "Radarr repo changed owner."}
- {date: "15.12.17:", desc: "Fix continuation lines."}
- {date: "17.04.17:", desc: "Switch to using inhouse mono baseimage, adds python also."}
- {date: "13.04.17:", desc: "Switch to official mono repository."}
- {date: "10.01.17:", desc: "Initial Release."}
@@ -1,6 +1,10 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# permissions
lsiown -R abc:abc \
/config
mkdir -p /run/radarr-temp
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
lsiown -R abc:abc \
/config \
/run/radarr-temp
fi
+11 -4
View File
@@ -1,7 +1,14 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
exec \
s6-notifyoncheck -d -n 300 -w 1000 \
cd /app/radarr/bin s6-setuidgid abc /app/radarr/bin/Radarr \
-nobrowser -data=/config
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
exec \
s6-notifyoncheck -d -n 300 -w 1000 \
cd /app/radarr/bin s6-setuidgid abc /app/radarr/bin/Radarr \
-nobrowser -data=/config
else
exec \
s6-notifyoncheck -d -n 300 -w 1000 \
cd /app/radarr/bin /app/radarr/bin/Radarr \
-nobrowser -data=/config
fi