Compare commits

...
Author SHA1 Message Date
LinuxServer-CI 5215c25ba1 Bot Updating Package Versions 2026-07-12 19:54:27 +00:00
LinuxServer-CI bece423873 Bot Updating Package Versions 2026-07-12 17:47:34 +00:00
LinuxServer-CI 5365f942c6 Bot Updating Package Versions 2026-07-09 08:38:01 +00:00
LinuxServer-CI 40d3a98496 Bot Updating Templated Files 2026-07-09 08:33:38 +00:00
LinuxServer-CI b1e97f37f8 Bot Updating Templated Files 2026-07-09 08:31:10 +00:00
AdamandGitHub 06cddbd6bc Merge pull request #265 from linuxserver/master-3.24
Rebase to Alpine 3.24 (master)
2026-07-09 09:28:42 +01:00
thespad c9619c8883 Rebase to Alpine 3.24 2026-07-04 14:48:35 +00:00
LinuxServer-CI c98aea4ba9 Bot Updating Package Versions 2026-06-28 17:55:12 +00:00
LinuxServer-CI f8c75d4e61 Bot Updating Package Versions 2026-06-21 18:13:26 +00:00
LinuxServer-CI 4d7747b74c Bot Updating Package Versions 2026-06-14 18:05:48 +00:00
LinuxServer-CI 9a071233e1 Bot Updating Package Versions 2026-06-10 07:25:10 +00:00
LinuxServer-CI 069832c8da Bot Updating Package Versions 2026-05-31 17:50:07 +00:00
LinuxServer-CI cdb071c943 Bot Updating Package Versions 2026-05-17 17:46:27 +00:00
LinuxServer-CI bb785dcbd7 Bot Updating Templated Files 2026-05-10 17:40:34 +00:00
LinuxServer-CI 097c8279f3 Bot Updating Package Versions 2026-05-03 17:37:35 +00:00
LinuxServer-CI 4abe547c5c Bot Updating Package Versions 2026-04-19 17:25:58 +00:00
LinuxServer-CI 0d60201824 Bot Updating Package Versions 2026-04-12 17:24:06 +00:00
LinuxServer-CI 9c7b40e00b Bot Updating Templated Files 2026-04-05 17:18:48 +00:00
LinuxServer-CI 5d211927fa Bot Updating Package Versions 2026-04-02 16:14:20 +00:00
LinuxServer-CI fb34a5b823 Bot Updating Package Versions 2026-03-29 17:20:01 +00:00
LinuxServer-CI 98928f9216 Bot Updating Package Versions 2026-03-08 17:05:09 +00:00
LinuxServer-CI 5fd23ebcb4 Bot Updating Package Versions 2026-03-01 17:04:29 +00:00
LinuxServer-CI 53ac62e01e Bot Updating Templated Files 2026-02-15 17:08:03 +00:00
LinuxServer-CI 9bc699d82f Bot Updating Templated Files 2026-02-15 17:05:41 +00:00
LinuxServer-CI 0023b50214 Bot Updating Package Versions 2026-02-08 17:07:04 +00:00
LinuxServer-CI ae2c474852 Bot Updating Package Versions 2026-02-01 17:05:39 +00:00
LinuxServer-CI 9c49e94f55 Bot Updating Package Versions 2026-01-16 17:06:47 +00:00
LinuxServer-CI 5076684d7f Bot Updating Templated Files 2026-01-16 17:02:52 +00:00
SimenandGitHub 5243703bea Merge pull request #264 from linuxserver/master-3.23 2026-01-16 18:00:24 +01:00
thespad b2d7ce1939 Rebase to 3.23 2026-01-15 09:22:17 +00:00
LinuxServer-CI 900c668f0d Bot Updating Package Versions 2025-12-14 16:58:24 +00:00
LinuxServer-CI 2af6aea50f Bot Updating Package Versions 2025-11-23 16:59:31 +00:00
LinuxServer-CI a34cea2c79 Bot Updating Templated Files 2025-11-23 16:56:08 +00:00
LinuxServer-CI 05ec7ef382 Bot Updating Package Versions 2025-11-16 23:34:49 +00:00
LinuxServer-CI 0c96a2d479 Bot Updating Templated Files 2025-10-26 16:56:25 +00:00
LinuxServer-CI e8e0bc1fb2 Bot Updating Package Versions 2025-10-12 16:57:33 +00:00
LinuxServer-CI 2bb915944a Bot Updating Package Versions 2025-10-05 16:57:34 +00:00
LinuxServer-CI 82abdaa8f2 Bot Updating Package Versions 2025-09-28 17:12:58 +00:00
LinuxServer-CI 27f87e222d Bot Updating Package Versions 2025-09-14 16:57:45 +00:00
LinuxServer-CI 23e388789c Bot Updating Package Versions 2025-09-03 12:13:01 +00:00
LinuxServer-CI 9880041430 Bot Updating Package Versions 2025-08-24 16:57:41 +00:00
LinuxServer-CI b3747331bf Bot Updating Package Versions 2025-08-10 17:00:32 +00:00
LinuxServer-CI 2396b73523 Bot Updating Package Versions 2025-07-20 17:00:41 +00:00
LinuxServer-CI e6b24e3ed9 Bot Updating Package Versions 2025-07-13 17:02:34 +00:00
LinuxServer-CI 955e346a89 Bot Updating Package Versions 2025-07-05 16:04:56 +00:00
LinuxServer-CI 5a46f97677 Bot Updating Templated Files 2025-07-05 15:59:34 +00:00
AdamandGitHub ce61b2ec53 Merge pull request #258 from linuxserver/master-3.22 2025-07-05 16:57:15 +01:00
thespad 418897513a Rebase to 3.22 2025-07-05 15:02:52 +01:00
LinuxServer-CI a587df8e84 Bot Updating Package Versions 2025-06-15 04:51:49 +00:00
LinuxServer-CI ba3baaedc4 Bot Updating Templated Files 2025-06-15 04:48:20 +00:00
LinuxServer-CI abfb55040a Bot Updating Package Versions 2025-05-17 13:47:16 +00:00
LinuxServer-CI 797a279f0e Bot Updating Templated Files 2025-05-17 13:38:55 +00:00
LinuxServer-CI a3f8bd16ee Bot Updating Package Versions 2025-05-11 16:58:25 +00:00
LinuxServer-CI eee58672e9 Bot Updating Templated Files 2025-05-02 00:46:27 +00:00
RoxedusandGitHub 8f55777b0d Merge pull request #250 from linuxserver/master-media-blurb 2025-05-02 02:44:13 +02:00
LinuxServer-CI 1d88a7626e Bot Updating Package Versions 2025-04-27 16:58:41 +00:00
LinuxServer-CI 94a34153df Bot Updating Package Versions 2025-04-23 18:55:02 +00:00
LinuxServer-CI 00f6247b8f Bot Updating Package Versions 2025-04-20 16:56:53 +00:00
LinuxServer-CI 7efe71b5a8 Bot Updating Package Versions 2025-04-13 16:57:27 +00:00
LinuxServer-CI bd27ee8a93 Bot Updating Package Versions 2025-04-06 16:57:41 +00:00
LinuxServer-CI 23a40b7899 Bot Updating Package Versions 2025-03-30 16:57:26 +00:00
LinuxServer-CI 18506c3e32 Bot Updating Package Versions 2025-03-24 16:33:23 +00:00
LinuxServer-CI 17844ee8d2 Bot Updating Package Versions 2025-03-23 16:57:29 +00:00
LinuxServer-CI de1f4735a3 Bot Updating Package Versions 2025-03-18 13:43:39 +00:00
LinuxServer-CI 9e27211081 Bot Updating Package Versions 2025-03-16 16:59:06 +00:00
Roxedus 1ea4ab0c1f Use media blurb 2025-03-16 14:36:28 +01:00
LinuxServer-CI 5c2fe653eb Bot Updating Package Versions 2025-03-09 16:56:59 +00:00
LinuxServer-CI 5b78f43a9e Bot Updating Package Versions 2025-02-25 17:34:28 +00:00
LinuxServer-CI c2a9433ab0 Bot Updating Package Versions 2025-02-16 17:00:07 +00:00
LinuxServer-CI e657acba40 Bot Updating Templated Files 2025-02-16 16:56:28 +00:00
LinuxServer-CI 60028b44db Bot Updating Package Versions 2025-02-09 16:57:00 +00:00
LinuxServer-CI bf51714473 Bot Updating Package Versions 2025-02-03 12:23:41 +00:00
LinuxServer-CI 25b8727630 Bot Updating Templated Files 2025-02-02 16:58:03 +00:00
LinuxServer-CI 57d1bddd08 Bot Updating Templated Files 2025-02-02 16:56:14 +00:00
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
24 changed files with 791 additions and 717 deletions
Executable → Regular
View File
Executable → Regular
+3 -3
View File
@@ -6,7 +6,7 @@
* Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn)
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
## Common files
@@ -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`.
Executable → Regular
View File
+1 -1
View File
@@ -1,7 +1,7 @@
blank_issues_enabled: false
contact_links:
- name: Discord chat support
url: https://discord.gg/YWrKVTn
url: https://linuxserver.io/discord
about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum
View File
View File
+3
View File
@@ -8,6 +8,9 @@ on:
pull_request_review:
types: [submitted,edited,dismissed]
permissions:
contents: read
jobs:
manage-project:
permissions:
+3
View File
@@ -4,6 +4,9 @@ on:
- cron: '58 22 * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
stale:
permissions:
+46 -16
View File
@@ -3,6 +3,9 @@ name: External Trigger Main
on:
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-master:
runs-on: ubuntu-latest
@@ -15,7 +18,10 @@ jobs:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: |
printf "# External trigger for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^radarr_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
if grep -q "^radarr_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`radarr_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif 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
@@ -25,6 +31,11 @@ jobs:
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 grep -q "^radarr_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
@@ -35,24 +46,43 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $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}")
@@ -73,8 +103,8 @@ jobs:
exit 1
fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` 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" >> $GITHUB_STEP_SUMMARY
@@ -89,8 +119,8 @@ jobs:
"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 "New sanitized version \`${EXT_RELEASE_SANITIZED}\` 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 \
@@ -109,7 +139,7 @@ jobs:
--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}"
TRIGGER_REASON="A version change was detected for radarr tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
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 }}
@@ -5,6 +5,9 @@ on:
- cron: '25 * * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
Executable → Regular
+6
View File
@@ -2,8 +2,14 @@ name: Greetings
on: [pull_request_target, issues]
permissions:
contents: read
jobs:
greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1
@@ -5,6 +5,9 @@ on:
- cron: '49 16 * * 0'
workflow_dispatch:
permissions:
contents: read
jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
@@ -27,9 +30,18 @@ jobs:
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 [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
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
if [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
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} "
@@ -37,7 +49,7 @@ jobs:
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') == "true" ]; then
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} "
@@ -49,6 +61,11 @@ jobs:
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
@@ -56,11 +73,14 @@ jobs:
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 \
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"
--data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20
fi
else
@@ -70,13 +90,14 @@ jobs:
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 "**** 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'"${NOTIFY_BRANCHES}"'**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-radarr/activity/"' \n"}],
"description": "**Package Check Build(s) for radarr** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
View File
+1 -1
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.24
# set version label
ARG BUILD_DATE
+1 -1
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.24
# set version label
ARG BUILD_DATE
Vendored
+379 -205
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 {
@@ -32,7 +32,7 @@ pipeline {
CI_WEB='true'
CI_PORT='7878'
CI_SSL='false'
CI_DELAY='120'
CI_DELAY='240'
CI_DOCKERENV=''
CI_AUTH=''
CI_WEBPATH='/system/status'
@@ -56,13 +56,27 @@ pipeline {
steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash
containers=$(docker ps -aq)
echo "Pruning builder"
docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi
docker system prune -af --volumes || : '''
docker system prune -f --volumes || :
docker image prune -af || :
'''
script{
env.EXIT_STATUS = ''
env.CI_TEST_ATTEMPTED = ''
env.PUSH_ATTEMPTED = ''
env.LS_RELEASE = sh(
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:latest 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
returnStdout: true).trim()
@@ -82,7 +96,11 @@ pipeline {
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 ./root/donate.txt'
if ( env.SYFT_IMAGE_TAG == null ) {
env.SYFT_IMAGE_TAG = 'latest'
}
}
echo "Using syft image tag ${SYFT_IMAGE_TAG}"
sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{
@@ -191,6 +209,8 @@ 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'
env.CITEST_IMAGETAG = 'latest'
}
}
}
@@ -215,6 +235,8 @@ 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'
env.CITEST_IMAGETAG = 'develop'
}
}
}
@@ -239,6 +261,8 @@ 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'
env.CITEST_IMAGETAG = 'develop'
}
}
}
@@ -261,7 +285,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.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
ghcr.io/linuxserver/baseimage-alpine:3.23 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 && \
@@ -335,6 +359,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}
@@ -543,8 +596,45 @@ 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
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done
for p in "${!pids[@]}"; do
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done
fi
'''
}
}
}
}
// Build MultiArch Docker containers for push to LS Repo
@@ -575,8 +665,45 @@ 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
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done
for p in "${!pids[@]}"; do
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done
fi
'''
}
}
}
}
stage('Build ARM64') {
@@ -585,10 +712,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}\" \
@@ -604,18 +727,52 @@ 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_backoff(5,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
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done
for p in "${!pids[@]}"; do
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && 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 -f --volumes || :
docker image prune -af || :
'''
}
}
}
@@ -640,7 +797,7 @@ pipeline {
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v ${TEMPDIR}:/tmp \
ghcr.io/anchore/syft:latest \
ghcr.io/anchore/syft:${SYFT_IMAGE_TAG} \
${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
@@ -716,6 +873,7 @@ pipeline {
script{
env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json'
env.CI_TEST_ATTEMPTED = 'true'
}
sh '''#! /bin/bash
set -e
@@ -727,7 +885,7 @@ pipeline {
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi
fi
docker pull ghcr.io/linuxserver/ci:latest
docker pull ghcr.io/linuxserver/ci:${CITEST_IMAGETAG}
if [ "${MULTIARCH}" == "true" ]; then
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}
@@ -750,7 +908,10 @@ pipeline {
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \
-t ghcr.io/linuxserver/ci:latest \
-e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \
-e COMMIT_SHA=\"${COMMIT_SHA}\" \
-e BUILD_NUMBER=\"${BUILD_NUMBER}\" \
-t ghcr.io/linuxserver/ci:${CITEST_IMAGETAG} \
python3 test_build.py'''
}
}
@@ -765,37 +926,28 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
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
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
script{
env.PUSH_ATTEMPTED = 'true'
}
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 [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
fi
done
'''
}
}
}
@@ -806,57 +958,48 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
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 [ "${CI}" == "false" ]; then
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}
script{
env.PUSH_ATTEMPTED = 'true'
}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
if [[ "${MANIFESTIMAGE%%/*}" =~ \\. ]]; then
MANIFESTIMAGEPLUS="${MANIFESTIMAGE}"
else
MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
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
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
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
'''
}
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} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
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 [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
fi
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
fi
done
'''
}
}
}
@@ -871,23 +1014,41 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
echo "Pushing New tag for current commit ${META_TAG}"
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag"
sh '''#! /bin/bash
echo "Auto-generating release notes"
if [ "$(git tag --points-at HEAD)" != "" ]; then
echo "Existing tag points to current commit, suggesting no new LS changes"
AUTO_RELEASE_NOTES="No changes"
else
AUTO_RELEASE_NOTES=$(curl -fsL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github+json" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/generate-notes \
-d '{"tag_name":"'${META_TAG}'",\
"target_commitish": "master"}' \
| jq -r '.body' | sed 's|## What.s Changed||')
fi
echo "Pushing New tag for current commit ${META_TAG}"
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}'
echo "Pushing New release for Tag"
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
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'''
jq -n \
--arg tag_name "$META_TAG" \
--arg target_commitish "master" \
--arg ci_url "${CI_URL:-N/A}" \
--arg ls_notes "$AUTO_RELEASE_NOTES" \
--arg remote_notes "$(cat releasebody.json)" \
'{
"tag_name": $tag_name,
"target_commitish": $target_commitish,
"name": $tag_name,
"body": ("**CI Report:**\\n\\n" + $ci_url + "\\n\\n**LinuxServer Changes:**\\n\\n" + $ls_notes + "\\n\\n**Remote Changes:**\\n\\n" + $remote_notes),
"draft": false,
"prerelease": false }' > 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
'''
}
}
// Add protection to the release branch
@@ -925,98 +1086,13 @@ EOF
) '''
}
}
// If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') {
when {
not {environment name: 'CHANGE_ID', value: ''}
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''#! /bin/bash
# Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
}
}
}
/* ######################
Send status to Discord
Comment on PR and Send status to Discord
###################### */
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{
script {
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
@@ -1059,15 +1135,113 @@ EOF
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
script {
if (env.GITHUBIMAGE =~ /lspipepr/){
if (env.CI_TEST_ATTEMPTED == "true" || env.PUSH_ATTEMPTED == "true"){
sh '''#! /bin/bash
# Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR for commit ${COMMIT_SHA:0:7} : \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR for commit ${COMMIT_SHA:0:7} : \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
} else {
sh '''#! /bin/bash
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, the build for PR commit ${COMMIT_SHA:0:7} failed and as a result no CI test was attempted and no images were pushed.\\"}"
'''
}
}
}
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
'''
}
cleanup {
sh '''#! /bin/bash
echo "Performing docker system prune!!"
containers=$(docker ps -aq)
echo "Pruning builder!!"
docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi
docker system prune -af --volumes || :
docker system prune -f --volumes || :
docker image prune -af || :
'''
cleanWs()
}
Executable → Regular
View File
+22 -9
View File
@@ -3,9 +3,8 @@
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
@@ -20,9 +19,8 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
@@ -55,7 +53,6 @@ The architectures supported by this image are:
| :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Version Tags
@@ -73,20 +70,31 @@ Access the webui at `<your-ip>:7878`, for more information check out [Radarr](ht
### Media folders
We have set `/movies` and `/downloads` as ***optional paths***, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.
We have set `/movies` and `/downloads` as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.
Use the optional paths if you don't understand, or don't want hardlinks/atomic moves.
<details>
<summary>Well planned paths</summary>
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.
</details>
## 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 flagged 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
@@ -130,7 +138,7 @@ 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). |
@@ -138,6 +146,7 @@ Containers are configured using parameters passed at runtime (such as those abov
| `-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)
@@ -291,16 +300,20 @@ 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
* **04.07.26:** - Rebase to Alpine 3.24.
* **15.01.26:** - Rebase to Alpine 3.23.
* **05.07.25:** - Rebase to Alpine 3.22.
* **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'
+196 -415
View File
@@ -1,415 +1,196 @@
NAME VERSION TYPE
Bouncy Castle for .NET (netstandard2.0) 1.9.0.1 dotnet
Dapper 2.0.151.35995 dotnet
Diacritical 1.0.4.0 dotnet
DryIoc 5.4.3.0 dotnet
DryIoc.Microsoft.DependencyInjection net6.0 6.2.0.0 dotnet
Dynamitey 2.0.9.136 dotnet
Equ 2.3.0 dotnet
FFMpegCore 4.0.0.0 dotnet
FluentMigrator 3.3.2.9 dotnet (+19 duplicates)
FluentValidation 9.5.4.0 dotnet
ICSharpCode.SharpZipLib 1.4.2.13 dotnet
IPAddressRange 6.0.0.0 dotnet
Ical.Net 1.0.0.0 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.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.3524.45918 dotnet
Microsoft.Data.SqlClient 2.1.2+2a61e8301e9d21ada2338a9279cf27653e781757 dotnet
Microsoft.Extensions.Caching.Abstractions 6.0.21.52210 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
Microsoft.Extensions.Configuration.CommandLine 6.0.21.52210 dotnet
Microsoft.Extensions.Configuration.EnvironmentVariables 6.0.222.6406 dotnet
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.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.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.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.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
Microsoft.Extensions.Logging.Console 6.0.21.52210 dotnet
Microsoft.Extensions.Logging.Debug 6.0.21.52210 dotnet
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.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.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.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
Mono.Nat 3.0.1 dotnet
Mono.Posix.NETStandard 1.0.0.0 dotnet
MonoTorrent 2.0.7 dotnet
NLog v5.3.3 5.3.3.2683 dotnet
NLog.Extensions.Logging v5.3.12 5.3.12.562 dotnet
NLog.Layouts.ClefJsonLayout 1.0.0.0 dotnet
NLog.Targets.Syslog 7.0.0.0 dotnet
NodaTime 3.0.0.0 dotnet
Npgsql 7.0.8.0 dotnet
Polly 8.4.2.3950 dotnet
Polly.Contrib.WaitAndRetry 1.1.1.0+7596d2dacf22d88bbd814bc49c28424fb6e921e9 dotnet
Polly.Core 8.4.2.3950 dotnet
Radarr 5.13.1.9378 dotnet (+7 duplicates)
ReusableTasks 2.0.0 dotnet
Sentry 4.0.2.0 dotnet
SixLabors.ImageSharp 3.1.5.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.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.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.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.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.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.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.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 6.0.1823.26907 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.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.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.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.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
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.3-r0 apk
apk-tools 2.14.4-r0 apk
bash 5.2.26-r0 apk
brotli-libs 1.1.0-r2 apk
busybox 1.36.1-r29 apk
busybox-binsh 1.36.1-r29 apk
c-ares 1.33.1-r0 apk
ca-certificates 20240705-r0 apk
ca-certificates-bundle 20240705-r0 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.9.1-r2 apk
findutils 4.9.0-r5 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
libbsd 0.12.2-r0 apk
libcrypto3 3.3.2-r0 apk
libcurl 8.9.1-r2 apk
libgcc 13.2.1_git20240309-r0 apk
libgcrypt 1.10.3-r0 apk
libgpg-error 1.49-r0 apk
libidn2 2.3.7-r0 apk
libintl 0.22.5-r0 apk
libmd 1.1.0-r0 apk
libncursesw 6.4_p20240420-r1 apk
libproc2 4.0.4-r0 apk
libpsl 0.21.5-r1 apk
libssl3 3.3.2-r0 apk
libstdc++ 13.2.1_git20240309-r0 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.3524.45918 dotnet
musl 1.2.5-r0 apk
musl-utils 1.2.5-r0 apk
ncurses-terminfo-base 6.4_p20240420-r1 apk
netcat-openbsd 1.226-r0 apk
netstandard 6.0.3524.45918 dotnet
nghttp2-libs 1.62.1-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-r29 apk
tzdata 2024b-r0 apk
utmps-libs 0.1.2.2-r1 apk
xmlstarlet 1.6.1-r2 apk
xz-libs 5.6.2-r0 apk
zlib 1.3.1-r1 apk
zstd-libs 1.5.6-r0 apk
NAME VERSION TYPE
Azure.Core 1.50.0 dotnet (+5 duplicates)
Azure.Identity 1.17.1 dotnet (+5 duplicates)
BouncyCastle.Cryptography 2.6.2 dotnet (+5 duplicates)
Dapper 2.1.79 dotnet (+5 duplicates)
Diacritical.Net 1.0.4 dotnet (+5 duplicates)
DryIoc.Microsoft.DependencyInjection 6.2.0 dotnet (+1 duplicate)
DryIoc.dll 5.4.3 dotnet (+7 duplicates)
Dynamitey 3.0.3 dotnet (+3 duplicates)
Equ 2.3.0 dotnet (+5 duplicates)
FluentMigrator 6.2.0 dotnet (+5 duplicates)
FluentMigrator.Abstractions 6.2.0 dotnet (+5 duplicates)
FluentMigrator.Extensions.Postgres 6.2.0 dotnet (+5 duplicates)
FluentMigrator.Runner.Core 6.2.0 dotnet (+5 duplicates)
FluentMigrator.Runner.Postgres 6.2.0 dotnet (+5 duplicates)
FluentMigrator.Runner.SQLite 6.2.0 dotnet (+5 duplicates)
FluentValidation 9.5.4 dotnet (+5 duplicates)
IPAddressRange 6.3.0 dotnet (+7 duplicates)
Ical.Net 4.3.1 dotnet (+2 duplicates)
ImpromptuInterface 8.0.6 dotnet (+3 duplicates)
Instances 1.6.1 dotnet (+5 duplicates)
MailKit 4.16.0 dotnet (+5 duplicates)
Microsoft.AspNetCore.Cryptography.Internal 8.0.27 dotnet (+4 duplicates)
Microsoft.AspNetCore.Cryptography.KeyDerivation 8.0.27 dotnet (+4 duplicates)
Microsoft.Bcl.AsyncInterfaces 8.0.0 dotnet (+5 duplicates)
Microsoft.Data.SqlClient 6.1.5 dotnet (+5 duplicates)
Microsoft.Extensions.Caching.Abstractions 8.0.0 dotnet (+4 duplicates)
Microsoft.Extensions.Caching.Memory 8.0.1 dotnet (+4 duplicates)
Microsoft.Extensions.Configuration 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.Abstractions 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.Binder 8.0.2 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.CommandLine 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.EnvironmentVariables 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.FileExtensions 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.Json 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Configuration.UserSecrets 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.DependencyInjection 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.DependencyInjection.Abstractions 8.0.2 dotnet (+6 duplicates)
Microsoft.Extensions.Diagnostics 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Diagnostics.Abstractions 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.FileProviders.Abstractions 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.FileProviders.Physical 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.FileSystemGlobbing 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.Hosting 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Hosting.Abstractions 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Hosting.WindowsServices 8.0.1 dotnet (+7 duplicates)
Microsoft.Extensions.Logging 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Logging.Abstractions 8.0.2 dotnet (+1 duplicate)
Microsoft.Extensions.Logging.Abstractions 8.0.3 dotnet (+4 duplicates)
Microsoft.Extensions.Logging.Configuration 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Logging.Console 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Logging.Debug 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Logging.EventLog 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Logging.EventSource 8.0.1 dotnet (+6 duplicates)
Microsoft.Extensions.Options 8.0.2 dotnet (+6 duplicates)
Microsoft.Extensions.Options.ConfigurationExtensions 8.0.0 dotnet (+6 duplicates)
Microsoft.Extensions.Primitives 8.0.0 dotnet (+6 duplicates)
Microsoft.Identity.Client 4.80.0 dotnet (+5 duplicates)
Microsoft.Identity.Client.Extensions.Msal 4.78.0 dotnet (+5 duplicates)
Microsoft.IdentityModel.Abstractions 8.14.0 dotnet (+5 duplicates)
Microsoft.IdentityModel.JsonWebTokens 7.7.1 dotnet (+5 duplicates)
Microsoft.IdentityModel.Logging 7.7.1 dotnet (+5 duplicates)
Microsoft.IdentityModel.Protocols 7.7.1 dotnet (+5 duplicates)
Microsoft.IdentityModel.Protocols.OpenIdConnect 7.7.1 dotnet (+5 duplicates)
Microsoft.IdentityModel.Tokens 7.7.1 dotnet (+5 duplicates)
Microsoft.OpenApi 1.6.23 dotnet (+2 duplicates)
Microsoft.SqlServer.Server 1.0.0 dotnet (+5 duplicates)
Microsoft.Win32.SystemEvents 8.0.0 dotnet (+5 duplicates)
MimeKit 4.16.0 dotnet (+5 duplicates)
Mono.Nat 3.0.0 dotnet (+5 duplicates)
Mono.Posix.NETStandard 5.20.1.34-servarr20 dotnet
MonoTorrent 3.0.2 dotnet (+5 duplicates)
NLog 5.5.1 dotnet (+7 duplicates)
NLog.Extensions.Logging 5.5.0 dotnet (+7 duplicates)
NLog.Layouts.ClefJsonLayout 1.0.5 dotnet (+7 duplicates)
NLog.Targets.Syslog 7.0.0 dotnet (+7 duplicates)
Newtonsoft.Json 13.0.4 dotnet (+7 duplicates)
NodaTime 3.2.0 dotnet (+2 duplicates)
Npgsql 9.0.5 dotnet (+7 duplicates)
Polly 8.6.6 dotnet (+5 duplicates)
Polly.Contrib.WaitAndRetry 1.1.1 dotnet (+7 duplicates)
Polly.Core 8.6.6 dotnet (+5 duplicates)
Radarr 1.0.0 dotnet
Radarr.Api.V3 1.0.0 dotnet (+2 duplicates)
Radarr.Common 1.0.0 dotnet (+7 duplicates)
Radarr.Core 1.0.0 dotnet (+5 duplicates)
Radarr.Host 1.0.0 dotnet (+1 duplicate)
Radarr.Http 1.0.0 dotnet (+3 duplicates)
Radarr.Mono 1.0.0 dotnet
Radarr.SignalR 1.0.0 dotnet (+4 duplicates)
ReusableTasks 4.0.0 dotnet (+5 duplicates)
Sentry 4.0.2 dotnet (+7 duplicates)
Servarr.FFMpegCore 4.7.0-26 dotnet (+5 duplicates)
Servarr.FFprobe 5.1.10.124 dotnet (+5 duplicates)
SharpZipLib 1.4.2 dotnet (+7 duplicates)
SixLabors.ImageSharp 3.1.12 dotnet (+5 duplicates)
SourceGear.sqlite3 3.50.4.5 dotnet (+7 duplicates)
Swashbuckle.AspNetCore.Annotations 8.1.4 dotnet (+2 duplicates)
Swashbuckle.AspNetCore.Swagger 8.1.4 dotnet (+2 duplicates)
Swashbuckle.AspNetCore.SwaggerGen 8.1.4 dotnet (+2 duplicates)
System.ClientModel 1.8.0 dotnet (+5 duplicates)
System.ComponentModel 4.3.0 dotnet (+2 duplicates)
System.ComponentModel.Annotations 5.0.0 dotnet (+4 duplicates)
System.Configuration.ConfigurationManager 8.0.1 dotnet (+7 duplicates)
System.Data.SQLite 2.0.3 dotnet (+7 duplicates)
System.Diagnostics.DiagnosticSource 8.0.1 dotnet (+4 duplicates)
System.Diagnostics.EventLog 8.0.1 dotnet (+6 duplicates)
System.Drawing.Common 8.0.27 dotnet (+5 duplicates)
System.Formats.Asn1 8.0.1 dotnet (+4 duplicates)
System.IO 4.3.0 dotnet (+5 duplicates)
System.IO.FileSystem.AccessControl 5.0.0 dotnet (+5 duplicates)
System.IdentityModel.Tokens.Jwt 7.7.1 dotnet (+5 duplicates)
System.Memory.Data 8.0.1 dotnet (+5 duplicates)
System.Private.Uri 4.3.0 dotnet (+5 duplicates)
System.Reflection 4.3.0 dotnet (+5 duplicates)
System.Reflection.Primitives 4.3.0 dotnet (+5 duplicates)
System.Runtime 4.3.0 dotnet (+5 duplicates)
System.Runtime.Loader 4.3.0 dotnet (+5 duplicates)
System.Security.AccessControl 5.0.0 dotnet (+5 duplicates)
System.Security.Cryptography.Pkcs 8.0.1 dotnet (+4 duplicates)
System.Security.Cryptography.ProtectedData 8.0.0 dotnet (+7 duplicates)
System.Security.Principal.Windows 5.0.0 dotnet (+5 duplicates)
System.ServiceProcess.ServiceController 8.0.1 dotnet (+7 duplicates)
System.Text.Encoding 4.3.0 dotnet (+5 duplicates)
System.Text.Encoding.CodePages 8.0.0 dotnet (+4 duplicates)
System.Text.Json 8.0.6 dotnet (+5 duplicates)
System.Threading.Tasks 4.3.0 dotnet (+5 duplicates)
acl-libs 2.3.2-r1 apk
alpine-baselayout 3.7.2-r1 apk
alpine-baselayout-data 3.7.2-r1 apk
alpine-keys 2.6-r0 apk
alpine-release 3.24.1-r0 apk
apk-tools 3.0.6-r0 apk
bash 5.3.9-r1 apk
brotli-libs 1.2.0-r1 apk
busybox 1.37.0-r31 apk
busybox-binsh 1.37.0-r31 apk
c-ares 1.34.8-r0 apk
ca-certificates 20260611-r0 apk
ca-certificates-bundle 20260611-r0 apk
catatonit 0.2.1-r0 apk
coreutils 9.11-r0 apk
coreutils-env 9.11-r0 apk
coreutils-fmt 9.11-r0 apk
coreutils-sha512sum 9.11-r0 apk
curl 8.21.0-r0 apk
findutils 4.10.0-r1 apk
icu-data-en 78.1-r0 apk
icu-libs 78.1-r0 apk
jq 1.8.1-r0 apk
libapk 3.0.6-r0 apk
libattr 2.5.2-r2 apk
libbsd 0.12.2-r0 apk
libcrypto3 3.5.7-r0 apk
libcurl 8.21.0-r0 apk
libgcc 15.2.0-r5 apk
libidn2 2.3.8-r0 apk
libintl 1.0-r0 apk
libmd 1.2.0-r0 apk
libncursesw 6.6_p20260516-r0 apk
libproc2 4.0.6-r0 apk
libpsl 0.21.5-r3 apk
libssl3 3.5.7-r0 apk
libstdc++ 15.2.0-r5 apk
libunistring 1.4.2-r0 apk
libxml2 2.13.9-r2 apk
libxslt 1.1.43-r3 apk
linux-pam 1.7.1-r2 apk
musl 1.2.6-r2 apk
musl-utils 1.2.6-r2 apk
ncurses-terminfo-base 6.6_p20260516-r0 apk
netcat-openbsd 1.234.1-r0 apk
nghttp2-libs 1.69.0-r0 apk
oniguruma 6.9.10-r0 apk
procps-ng 4.0.6-r0 apk
readline 8.3.3-r1 apk
runtime.any.System.IO 4.3.0 dotnet (+5 duplicates)
runtime.any.System.Reflection 4.3.0 dotnet (+5 duplicates)
runtime.any.System.Reflection.Primitives 4.3.0 dotnet (+5 duplicates)
runtime.any.System.Runtime 4.3.0 dotnet (+5 duplicates)
runtime.any.System.Text.Encoding 4.3.0 dotnet (+5 duplicates)
runtime.any.System.Threading.Tasks 4.3.0 dotnet (+5 duplicates)
runtime.unix.System.Private.Uri 4.3.0 dotnet (+5 duplicates)
runtimepack.Microsoft.AspNetCore.App.Runtime.linux-musl-x64 8.0.27 dotnet (+4 duplicates)
runtimepack.Microsoft.NETCore.App.Runtime.linux-musl-x64 8.0.27 dotnet (+7 duplicates)
scanelf 1.3.9-r1 apk
shadow 4.18.0-r1 apk
skalibs-libs 2.15.0.0-r0 apk
sqlite-libs 3.53.2-r0 apk
ssl_client 1.37.0-r31 apk
tzdata 2026b-r0 apk
utmps-libs 0.1.3.3-r0 apk
xmlstarlet 1.6.1-r2 apk
xz-libs 5.8.3-r0 apk
zlib 1.3.2-r0 apk
zstd-libs 1.5.7-r2 apk
+82 -50
View File
@@ -7,73 +7,105 @@ 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: |
Access the webui at `<your-ip>:7878`, for more information check out [Radarr](https://github.com/Radarr/Radarr).
### Media folders
We have set `/movies` and `/downloads` as ***optional paths***, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.
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.
readme_media: true
# 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
init-adduser -> init-device-perms
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-device-perms -> 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.24"
}
"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: "04.07.26:", desc: "Rebase to Alpine 3.24."}
- {date: "15.01.26:", desc: "Rebase to Alpine 3.23."}
- {date: "05.07.25:", desc: "Rebase to Alpine 3.22."}
- {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."}
Executable → Regular
View File
@@ -3,7 +3,8 @@
mkdir -p /run/radarr-temp
# permissions
lsiown -R abc:abc \
/config \
/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