Compare commits

..
Author SHA1 Message Date
LinuxServer-CI 52ff95c84a Bot Updating Package Versions 2026-07-12 12:48:32 +00:00
LinuxServer-CI b4151b4125 Bot Updating Package Versions 2026-07-09 08:40:44 +00:00
LinuxServer-CI 5b2a9f0e71 Bot Updating Templated Files 2026-07-09 08:32:55 +00:00
LinuxServer-CI a0bfdcec4c Bot Updating Templated Files 2026-07-09 08:29:57 +00:00
AdamandGitHub aad11ecbfd Merge pull request #267 from linuxserver/develop-3.24
Rebase to Alpine 3.24 (develop)
2026-07-09 09:27:19 +01:00
thespad 49bd924dc3 Rebase to Alpine 3.24 2026-07-04 14:49:08 +00:00
LinuxServer-CI 9f6210b92f Bot Updating Package Versions 2026-06-28 17:54:47 +00:00
LinuxServer-CI 49cf3dcc24 Bot Updating Package Versions 2026-06-21 18:13:02 +00:00
LinuxServer-CI d708f84b7a Bot Updating Package Versions 2026-06-14 18:05:27 +00:00
LinuxServer-CI 001abd0715 Bot Updating Package Versions 2026-06-01 07:50:05 +00:00
LinuxServer-CI 6a0fadfb59 Bot Updating Package Versions 2026-05-31 17:49:37 +00:00
LinuxServer-CI 9ddc754126 Bot Updating Package Versions 2026-05-17 17:45:49 +00:00
LinuxServer-CI 1cbd64f06a Bot Updating Templated Files 2026-05-10 17:40:14 +00:00
LinuxServer-CI 6e1c19ac07 Bot Updating Package Versions 2026-05-03 17:37:09 +00:00
LinuxServer-CI 931a40a5b2 Bot Updating Package Versions 2026-04-19 17:59:03 +00:00
LinuxServer-CI 3b858a0958 Bot Updating Package Versions 2026-04-19 17:25:46 +00:00
LinuxServer-CI 9ec31115ac Bot Updating Package Versions 2026-04-12 17:23:35 +00:00
LinuxServer-CI fc849dde50 Bot Updating Templated Files 2026-04-05 17:18:28 +00:00
LinuxServer-CI e778d307f1 Bot Updating Package Versions 2026-03-29 17:19:37 +00:00
LinuxServer-CI 73ac55cba8 Bot Updating Package Versions 2026-03-26 11:48:57 +00:00
LinuxServer-CI 57b5a3705a Bot Updating Package Versions 2026-03-08 17:04:40 +00:00
LinuxServer-CI 7996faa0b1 Bot Updating Package Versions 2026-03-01 17:03:54 +00:00
LinuxServer-CI 35ad0602e0 Bot Updating Templated Files 2026-02-15 17:07:41 +00:00
LinuxServer-CI 37406b5861 Bot Updating Templated Files 2026-02-15 17:05:18 +00:00
LinuxServer-CI 1c86e48e5d Bot Updating Package Versions 2026-02-08 17:06:32 +00:00
LinuxServer-CI 782e0424df Bot Updating Package Versions 2026-02-01 17:05:13 +00:00
LinuxServer-CI aebfa935b1 Bot Updating Package Versions 2026-01-16 17:07:40 +00:00
LinuxServer-CI 06fe90e8ce Bot Updating Templated Files 2026-01-16 17:03:45 +00:00
SimenandGitHub 6b19291f57 Merge pull request #263 from linuxserver/develop-3.23 2026-01-16 18:01:25 +01:00
thespad cc974e4147 Rebase to 3.23 2026-01-15 09:22:19 +00:00
LinuxServer-CI ae1cd6b215 Bot Updating Package Versions 2025-12-14 16:57:42 +00:00
LinuxServer-CI 3a775974be Bot Updating Package Versions 2025-11-23 16:58:58 +00:00
LinuxServer-CI 2e1bf2701c Bot Updating Templated Files 2025-11-23 16:55:34 +00:00
LinuxServer-CI 6669be8bb4 Bot Updating Package Versions 2025-10-26 17:58:54 +00:00
LinuxServer-CI ca5c52a3a3 Bot Updating Templated Files 2025-10-26 16:56:00 +00:00
LinuxServer-CI 7baba4ae6b Bot Updating Package Versions 2025-10-12 16:56:59 +00:00
LinuxServer-CI 1a5d2500a7 Bot Updating Package Versions 2025-10-06 21:05:47 +00:00
LinuxServer-CI 3d064ca69f Bot Updating Package Versions 2025-10-05 16:57:26 +00:00
LinuxServer-CI 6a517234a0 Bot Updating Package Versions 2025-09-28 17:13:03 +00:00
LinuxServer-CI ee88bc834b Bot Updating Package Versions 2025-09-21 19:58:45 +00:00
LinuxServer-CI 0549eacf1e Bot Updating Package Versions 2025-09-14 16:57:46 +00:00
LinuxServer-CI a2e4cfd6ac Bot Updating Package Versions 2025-08-24 13:41:35 +00:00
LinuxServer-CI 8a347210f1 Bot Updating Package Versions 2025-08-10 16:59:58 +00:00
LinuxServer-CI 896b696bb5 Bot Updating Package Versions 2025-08-03 09:26:41 +00:00
LinuxServer-CI 8fc16917b4 Bot Updating Package Versions 2025-07-20 17:00:36 +00:00
LinuxServer-CI 0b21e23fb2 Bot Updating Package Versions 2025-07-13 04:05:15 +00:00
LinuxServer-CI 93500def34 Bot Updating Package Versions 2025-07-05 15:45:38 +00:00
LinuxServer-CI a0f7785e43 Bot Updating Templated Files 2025-07-05 15:41:35 +00:00
AdamandGitHub 7e9f7ec6c4 Merge pull request #257 from linuxserver/develop-3.22 2025-07-05 16:39:10 +01:00
thespad 559bdd2d15 Rebase to 3.22 2025-07-05 15:01:18 +01:00
LinuxServer-CI 6431a7f51a Bot Updating Package Versions 2025-06-15 06:23:57 +00:00
LinuxServer-CI 1d44de92fe Bot Updating Package Versions 2025-06-15 05:44:34 +00:00
LinuxServer-CI 042a0491fd Bot Updating Templated Files 2025-06-15 05:41:10 +00:00
LinuxServer-CI c7e8388fbf Bot Updating Package Versions 2025-05-17 12:48:38 +00:00
LinuxServer-CI 2d9d089cbf Bot Updating Templated Files 2025-05-17 12:45:18 +00:00
LinuxServer-CI f56a633084 Bot Updating Package Versions 2025-05-11 16:56:12 +00:00
LinuxServer-CI b43aff878d Bot Updating Package Versions 2025-04-27 08:51:58 +00:00
LinuxServer-CI 92ef97c0fc Bot Updating Package Versions 2025-04-20 06:03:26 +00:00
LinuxServer-CI b90186478c Bot Updating Package Versions 2025-04-13 07:18:56 +00:00
LinuxServer-CI 524e373d9b Bot Updating Package Versions 2025-04-06 12:46:35 +00:00
LinuxServer-CI 85eafb7f8a Bot Updating Package Versions 2025-03-30 07:15:53 +00:00
LinuxServer-CI 154fca1e91 Bot Updating Package Versions 2025-03-24 16:33:30 +00:00
LinuxServer-CI 1db72aa55c Bot Updating Package Versions 2025-03-23 07:59:16 +00:00
LinuxServer-CI 38418585ed Bot Updating Package Versions 2025-03-18 13:33:37 +00:00
LinuxServer-CI 2df08e445a Bot Updating Package Versions 2025-03-16 08:50:14 +00:00
LinuxServer-CI d4d04f0267 Bot Updating Package Versions 2025-03-09 09:56:50 +00:00
LinuxServer-CI ed716a6046 Bot Updating Package Versions 2025-02-25 17:33:24 +00:00
LinuxServer-CI 5ec9ed8d9f Bot Updating Package Versions 2025-02-23 18:37:17 +00:00
LinuxServer-CI 8ea9853f06 Bot Updating Package Versions 2025-02-16 10:24:44 +00:00
LinuxServer-CI 3ebbddcbc4 Bot Updating Templated Files 2025-02-16 10:20:51 +00:00
LinuxServer-CI 87bc6cecc5 Bot Updating Package Versions 2025-02-09 15:53:39 +00:00
LinuxServer-CI ff338dceb2 Bot Updating Package Versions 2025-02-03 12:23:38 +00:00
LinuxServer-CI 5d9d8b9f48 Bot Updating Package Versions 2025-02-02 10:53:28 +00:00
LinuxServer-CI 92bd2effe0 Bot Updating Package Versions 2025-02-02 05:09:44 +00:00
LinuxServer-CI 38f8477713 Bot Updating Templated Files 2025-02-02 05:06:46 +00:00
LinuxServer-CI c04d5e6e0a Bot Updating Templated Files 2025-02-02 05:04:37 +00:00
LinuxServer-CI ec6be329f3 Bot Updating Package Versions 2025-01-19 14:59:48 +00:00
LinuxServer-CI 2d75eb3f4d Bot Updating Package Versions 2025-01-12 13:21:17 +00:00
LinuxServer-CI 51e96e124b Bot Updating Package Versions 2025-01-05 12:29:37 +00:00
LinuxServer-CI d690d4afbb Bot Updating Package Versions 2025-01-05 05:06:28 +00:00
LinuxServer-CI 6784965a3f Bot Updating Package Versions 2024-12-29 16:57:03 +00:00
LinuxServer-CI 1c794d2f54 Bot Updating Package Versions 2024-12-25 23:08:36 +00:00
LinuxServer-CI e68716fd35 Bot Updating Templated Files 2024-12-25 23:04:55 +00:00
RoxedusandGitHub 4bd3a9e7da Merge pull request #243 from linuxserver/develop-3.21 2024-12-26 00:02:35 +01:00
LinuxServer-CI 7461f46bf2 Bot Updating Package Versions 2024-12-22 13:07:06 +00:00
thespad 5e0f758f3c Rebase to 3.21 2024-12-20 16:47:09 +00:00
LinuxServer-CI d1d6328889 Bot Updating Package Versions 2024-12-16 18:12:04 +00:00
LinuxServer-CI 930f8a2cc7 Bot Updating Templated Files 2024-12-16 18:08:36 +00:00
LinuxServer-CI 18f79b5606 Bot Updating Templated Files 2024-12-15 17:00:36 +00:00
LinuxServer-CI f20f55a0f5 Bot Updating Templated Files 2024-12-15 16:57:18 +00:00
LinuxServer-CI e846a87f07 Bot Updating Package Versions 2024-12-15 08:08:01 +00:00
LinuxServer-CI 35cf936922 Bot Updating Package Versions 2024-12-08 17:00:46 +00:00
LinuxServer-CI 0e13103918 Bot Updating Templated Files 2024-12-08 16:57:17 +00:00
LinuxServer-CI ff95aeb2a7 Bot Updating Templated Files 2024-12-08 16:55:30 +00:00
LinuxServer-CI a14d0382f7 Bot Updating Templated Files 2024-12-01 17:00:05 +00:00
LinuxServer-CI 3f2e2fb7b3 Bot Updating Templated Files 2024-12-01 16:57:53 +00:00
LinuxServer-CI 9a6b1478d2 Bot Updating Templated Files 2024-12-01 16:56:02 +00:00
LinuxServer-CI 6943346271 Bot Updating Package Versions 2024-12-01 12:02:53 +00:00
LinuxServer-CI 73863d37f7 Bot Updating Package Versions 2024-11-19 07:52:13 +00:00
LinuxServer-CI 31f44269b4 Bot Updating Templated Files 2024-11-10 16:57:58 +00:00
LinuxServer-CI 3d31f25c9f Bot Updating Templated Files 2024-11-10 16:55:51 +00:00
LinuxServer-CI 2c9fe8ce59 Bot Updating Package Versions 2024-11-03 10:36:23 +00:00
LinuxServer-CI bf839e57ea Bot Updating Package Versions 2024-10-26 14:43:41 +00:00
LinuxServer-CI 670dfab20f Bot Updating Package Versions 2024-10-26 06:12:20 +00:00
LinuxServer-CI b85d3b9fa1 Bot Updating Package Versions 2024-10-20 11:46:05 +00:00
LinuxServer-CI a9687348b8 Bot Updating Package Versions 2024-10-12 16:01:54 +00:00
LinuxServer-CI 18355d3866 Bot Updating Package Versions 2024-10-09 14:25:23 +00:00
LinuxServer-CI 0c3f755a85 Bot Updating Package Versions 2024-09-29 05:23:43 +00:00
LinuxServer-CI ea0060961c Bot Updating Templated Files 2024-09-29 05:20:19 +00:00
LinuxServer-CI 876c4f64db Bot Updating Templated Files 2024-09-29 05:18:24 +00:00
LinuxServer-CI 97ba8306a9 Bot Updating Templated Files 2024-09-29 05:15:46 +00:00
LinuxServer-CI 738c9c2d07 Bot Updating Package Versions 2024-09-25 08:43:23 +00:00
LinuxServer-CI 9202f4f994 Bot Updating Package Versions 2024-09-22 16:57:03 +00:00
LinuxServer-CI 66899f24ac Bot Updating Package Versions 2024-09-21 00:44:14 +00:00
LinuxServer-CI d47a9be054 Bot Updating Package Versions 2024-09-15 13:33:17 +00:00
LinuxServer-CI 34988415d2 Bot Updating Package Versions 2024-09-08 07:54:57 +00:00
LinuxServer-CI 9f606742ef Bot Updating Package Versions 2024-09-02 14:52:27 +00:00
LinuxServer-CI cf7e1f5863 Bot Updating Package Versions 2024-09-01 16:57:23 +00:00
LinuxServer-CI 965c7c7305 Bot Updating Package Versions 2024-08-25 07:15:50 +00:00
LinuxServer-CI 8bdb13b131 Bot Updating Package Versions 2024-08-20 18:09:12 +00:00
LinuxServer-CI f9ff6adb4f Bot Updating Package Versions 2024-08-18 12:09:44 +00:00
LinuxServer-CI 59c136b766 Bot Updating Templated Files 2024-08-18 12:07:17 +00:00
LinuxServer-CI 2f37d055d6 Bot Updating Templated Files 2024-08-18 12:04:47 +00:00
LinuxServer-CI b5a10e6586 Bot Updating Package Versions 2024-08-11 16:56:38 +00:00
LinuxServer-CI da8cc6fba2 Bot Updating Package Versions 2024-07-28 16:56:10 +00:00
LinuxServer-CI 886583b592 Bot Updating Package Versions 2024-07-21 15:08:38 +00:00
LinuxServer-CI b77f7c7f7b Bot Updating Templated Files 2024-07-14 12:24:02 +00:00
thespad 5b267f9cd8 Fix comment indent 2024-07-14 13:21:49 +01:00
LinuxServer-CI 780723f47c Bot Updating Package Versions 2024-07-14 12:03:33 +00:00
LinuxServer-CI 77d6ab77ce Bot Updating Templated Files 2024-07-14 12:00:08 +00:00
LinuxServer-CI 52f20a8c75 Bot Updating Templated Files 2024-07-14 11:58:33 +00:00
RoxedusandGitHub f3a658859b Merge pull request #236 from linuxserver/develop-ro-tweaks
Move tmpdir, set COMPlus_EnableDiagnostics (develop)
2024-07-08 01:16:06 +02:00
LinuxServer-CI c81d6ad8e0 Bot Updating Package Versions 2024-07-07 11:51:45 +00:00
thespad 1875283bb5 Move tmpdir, set COMPlus_EnableDiagnostics 2024-07-03 19:21:38 +01:00
LinuxServer-CI fe33f0a027 Bot Updating Package Versions 2024-07-02 11:48:08 +00:00
LinuxServer-CI 9e207f122b Bot Updating Package Versions 2024-06-30 16:57:26 +00:00
LinuxServer-CI 1e908df511 Bot Updating Package Versions 2024-06-23 16:56:52 +00:00
LinuxServer-CI 61b96f20a1 Bot Updating Package Versions 2024-06-20 14:04:48 +00:00
LinuxServer-CI 46f2192ce6 Bot Updating Package Versions 2024-06-16 16:57:39 +00:00
LinuxServer-CI 51035c7f22 Bot Updating Package Versions 2024-06-09 16:56:43 +00:00
LinuxServer-CI 48888faeb2 Bot Updating Package Versions 2024-05-26 17:41:55 +00:00
AdamandGitHub 7197acafed Merge pull request #231 from linuxserver/develop-3.20
Rebase to 3.20 (Develop)
2024-05-26 18:37:55 +01:00
LinuxServer-CI 6f4b66a490 Bot Updating Package Versions 2024-05-26 17:02:34 +00:00
LinuxServer-CI 1908c053ef Bot Updating Templated Files 2024-05-26 16:58:25 +00:00
LinuxServer-CI d3f16111e7 Bot Updating Templated Files 2024-05-26 16:56:50 +00:00
thespad 144601fdd5 Rebase to 3.20 2024-05-26 17:40:49 +01:00
LinuxServer-CI cbe44d001b Bot Updating Package Versions 2024-05-19 16:57:50 +00:00
LinuxServer-CI 3ac4b2e799 Bot Updating Package Versions 2024-05-14 17:24:02 +00:00
LinuxServer-CI 63beff364b Bot Updating Package Versions 2024-05-13 02:07:14 +00:00
LinuxServer-CI 53ace81002 Bot Updating Package Versions 2024-05-12 17:00:53 +00:00
LinuxServer-CI 350516c001 Bot Updating Templated Files 2024-05-12 16:56:48 +00:00
LinuxServer-CI 5acc715831 Bot Updating Package Versions 2024-05-05 09:32:13 +00:00
LinuxServer-CI 31f79a7bc5 Bot Updating Templated Files 2024-05-05 09:28:15 +00:00
LinuxServer-CI 738b9d2faf Bot Updating Package Versions 2024-04-28 10:34:38 +00:00
LinuxServer-CI e244c42433 Bot Updating Package Versions 2024-04-21 06:16:52 +00:00
LinuxServer-CI 527ee1a91e Bot Updating Package Versions 2024-04-14 22:44:05 +00:00
26 changed files with 1023 additions and 858 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:
+93 -50
View File
@@ -3,6 +3,9 @@ name: External Trigger Main
on:
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-develop:
runs-on: ubuntu-latest
@@ -11,18 +14,31 @@ jobs:
- name: External Trigger
if: github.ref == 'refs/heads/develop'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_RADARR_DEVELOP }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_RADARR_DEVELOP is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_RADARR_DEVELOP\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
printf "# External trigger for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^radarr_develop_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`radarr_develop_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^radarr_develop" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`radarr_develop\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** External trigger running off of develop branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_RADARR_DEVELOP\". ****"
echo "External trigger running off of develop branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_RADARR_DEVELOP\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****"
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of develop branch. To disable this trigger, add \`radarr_develop\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -sL https://radarr.servarr.com/v1/update/develop/changes?runtime=netcore%26os=linuxmusl | jq -r '.[0].version')
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^radarr_develop_${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 "**** Can't retrieve external version, exiting ****"
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for radarr branch develop"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-radarr/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
@@ -30,25 +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} ****"
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
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="develop"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fradarr%3Apull" \
| jq -r '.token')
multidigest=$(curl -s \
multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}")
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# If there's a layer element it's a single-arch manifest so just get that digest
digest=$(jq -r '.config.digest' <<< "${multidigest}")
else
# Otherwise it's multi-arch or has manifest annotations
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# Check for manifest annotations and delete if found
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
fi
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
# If there's still more than one digest, it's multi-arch
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
else
# Otherwise it's single arch
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
fi
if digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}" \
| jq -r 'first(.manifests[].digest)')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
digest=$(jq -r '.config.digest' <<< "${digest}");
fi
fi
image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}")
@@ -60,45 +94,54 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then
echo "**** Can't retrieve last pushed version, exiting ****"
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for radarr tag develop"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****"
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $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/develop/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
echo "New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/develop/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for radarr tag develop. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ "${artifacts_found}" == "false" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for radarr tag develop is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New 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 \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/develop/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for radarr tag develop. 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 }}
fi
fi
@@ -5,6 +5,9 @@ on:
- cron: '25 * * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
@@ -15,31 +18,31 @@ jobs:
- name: External Trigger Scheduler
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
printf "# External trigger scheduler for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****"
echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-radarr/actions/workflows/external_trigger.yml/dispatches
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi
done
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
-42
View File
@@ -1,42 +0,0 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-develop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Package Trigger
if: github.ref == 'refs/heads/develop'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_RADARR_DEVELOP }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_RADARR_DEVELOP is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_RADARR_DEVELOP\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/develop/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** Package trigger running off of develop branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_RADARR_DEVELOP\". ****"
echo "Package trigger running off of develop branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_RADARR_DEVELOP\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/develop/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
+79 -26
View File
@@ -5,6 +5,9 @@ on:
- cron: '49 16 * * 0'
workflow_dispatch:
permissions:
contents: read
jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
@@ -14,37 +17,87 @@ jobs:
fetch-depth: '0'
- name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
printf "# Package trigger scheduler for docker-radarr\n\n" >> $GITHUB_STEP_SUMMARY
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-radarr/actions/workflows/package_trigger.yml/dispatches
sleep 30
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/jenkins-vars.yml)
if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-radarr/${br}/readme-vars.yml)
if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif grep -q "^radarr_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`radarr_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`radarr_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
if [[ -z "${response}" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Jenkins build could not be triggered. Skipping branch."
continue
fi
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
if ! curl -ifX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20
fi
else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi
done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) Triggered for radarr** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-radarr/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
if [[ -n "${triggered_branches}" ]]; then
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-radarr/activity/ \n"
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) for radarr** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
+2
View File
@@ -5,6 +5,8 @@ on:
- '**/run'
- '**/finish'
- '**/check'
- 'root/migrations/*'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1
+5 -2
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:3.19
FROM ghcr.io/linuxserver/baseimage-alpine:3.24
# set version label
ARG BUILD_DATE
@@ -11,7 +11,9 @@ LABEL maintainer="Roxedus,thespad"
# environment settings
ARG RADARR_BRANCH="develop"
ENV XDG_CONFIG_HOME="/config/xdg"
ENV XDG_CONFIG_HOME="/config/xdg" \
COMPlus_EnableDiagnostics=0 \
TMPDIR=/run/radarr-temp
RUN \
echo "**** install packages ****" && \
@@ -32,6 +34,7 @@ RUN \
/tmp/radarr.tar.gz -C \
/app/radarr/bin --strip-components=1 && \
echo -e "UpdateMethod=docker\nBranch=${RADARR_BRANCH}\nPackageVersion=${VERSION}\nPackageAuthor=[linuxserver.io](https://www.linuxserver.io/)" > /app/radarr/package_info && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
rm -rf \
/app/radarr/bin/Radarr.Update \
+5 -2
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.19
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.24
# set version label
ARG BUILD_DATE
@@ -11,7 +11,9 @@ LABEL maintainer="Roxedus,thespad"
# environment settings
ARG RADARR_BRANCH="develop"
ENV XDG_CONFIG_HOME="/config/xdg"
ENV XDG_CONFIG_HOME="/config/xdg" \
COMPlus_EnableDiagnostics=0 \
TMPDIR=/run/radarr-temp
RUN \
echo "**** install packages ****" && \
@@ -32,6 +34,7 @@ RUN \
/tmp/radarr.tar.gz -C \
/app/radarr/bin --strip-components=1 && \
echo -e "UpdateMethod=docker\nBranch=${RADARR_BRANCH}\nPackageVersion=${VERSION}\nPackageAuthor=[linuxserver.io](https://www.linuxserver.io/)" > /app/radarr/package_info && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
rm -rf \
/app/radarr/bin/Radarr.Update \
Vendored
+477 -240
View File
@@ -8,7 +8,7 @@ pipeline {
}
// Input to determine if this is a package check
parameters {
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
}
// Configuration for the variables used for this specific repo
environment {
@@ -17,6 +17,8 @@ pipeline {
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat')
QUAYIO_API_TOKEN=credentials('quayio-repo-api-token')
GIT_SIGNING_KEY=credentials('484fbca6-9a4f-455e-b9e3-97ac98785f5f')
BUILD_VERSION_ARG = 'RADARR_RELEASE'
LS_USER = 'linuxserver'
LS_REPO = 'docker-radarr'
@@ -30,23 +32,51 @@ pipeline {
CI_WEB='true'
CI_PORT='7878'
CI_SSL='false'
CI_DELAY='120'
CI_DOCKERENV='TZ=US/Pacific'
CI_DELAY='240'
CI_DOCKERENV=''
CI_AUTH=''
CI_WEBPATH='/system/status'
}
stages {
stage("Set git config"){
steps{
sh '''#!/bin/bash
cat ${GIT_SIGNING_KEY} > /config/.ssh/id_sign
chmod 600 /config/.ssh/id_sign
ssh-keygen -y -f /config/.ssh/id_sign > /config/.ssh/id_sign.pub
echo "Using $(ssh-keygen -lf /config/.ssh/id_sign) to sign commits"
git config --global gpg.format ssh
git config --global user.signingkey /config/.ssh/id_sign
git config --global commit.gpgsign true
'''
}
}
// Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){
steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash
containers=$(docker ps -aq)
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}:develop 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
returnStdout: true).trim()
@@ -65,8 +95,12 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml ./root/donate.txt'
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./root/donate.txt'
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{
@@ -175,6 +209,8 @@ pipeline {
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = 'develop-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'develop-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'
}
}
}
@@ -199,6 +235,8 @@ pipeline {
env.META_TAG = 'develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'develop-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'
}
}
}
@@ -223,6 +261,8 @@ pipeline {
env.EXT_RELEASE_TAG = 'develop-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'
}
}
}
@@ -245,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.19 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 && \
@@ -275,7 +315,7 @@ pipeline {
# ${TEMPDIR}/unraid/docker-templates: Cloned docker-templates repo to check for logos
# ${TEMPDIR}/unraid/templates: Cloned templates repo for commiting unraid template changes and pushing back to Github
git clone --branch develop --depth 1 https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/docker-${CONTAINER_NAME}
docker run --rm -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/tmp -e LOCAL=true ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/tmp -e LOCAL=true -e PUID=$(id -u) -e PGID=$(id -g) ghcr.io/linuxserver/jenkins-builder:latest
echo "Starting Stage 1 - Jenkinsfile update"
if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
mkdir -p ${TEMPDIR}/repo
@@ -295,7 +335,7 @@ pipeline {
echo "Jenkinsfile is up to date."
fi
echo "Starting Stage 2 - Delete old templates"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml Dockerfile.armhf"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml .github/workflows/package_trigger.yml"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
@@ -319,6 +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}:develop
ls -al ${TEMPDIR}/d2
yq -ei ".init_diagram |= load_str(\\"${TEMPDIR}/d2/${CONTAINER_NAME}-develop.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 develop
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 develop
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating templates and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
exit 0
else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Init diagram is unchanged"
fi
echo "Starting Stage 3 - Update templates"
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
@@ -352,7 +421,7 @@ pipeline {
fi
echo "Starting Stage 4 - External repo updates: Docs, Unraid Template and Readme Sync to Docker Hub"
mkdir -p ${TEMPDIR}/docs
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
git clone --depth=1 https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/
cd ${TEMPDIR}/docs/docker-documentation
@@ -370,8 +439,8 @@ pipeline {
echo "Docs update not needed, skipping"
fi
mkdir -p ${TEMPDIR}/unraid
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
git clone --depth=1 https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone --depth=1 https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
@@ -381,7 +450,9 @@ pipeline {
echo "Updating Unraid template"
cd ${TEMPDIR}/unraid/templates/
GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
if grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list && [[ -f ${TEMPDIR}/unraid/templates/unraid/deprecated/${CONTAINER_NAME}.xml ]]; then
echo "Image is on the ignore list, and already in the deprecation folder."
elif grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add -u unraid/${CONTAINER_NAME}.xml
@@ -474,10 +545,10 @@ pipeline {
}
}
/* #######################
GitLab Mirroring
GitLab Mirroring and Quay.io Repo Visibility
####################### */
// Ping into Gitlab to mirror this repo and have a registry endpoint
stage("GitLab Mirror"){
// Ping into Gitlab to mirror this repo and have a registry endpoint & mark this repo on Quay.io as public
stage("GitLab Mirror and Quay.io Visibility"){
when {
environment name: 'EXIT_STATUS', value: ''
}
@@ -493,6 +564,8 @@ pipeline {
"visibility":"public"}' '''
sh '''curl -H "Private-Token: ${GITLAB_TOKEN}" -X PUT "https://gitlab.com/api/v4/projects/Linuxserver.io%2F${LS_REPO}" \
-d "mirror=true&import_url=https://github.com/linuxserver/${LS_REPO}.git" '''
sh '''curl -H "Content-Type: application/json" -H "Authorization: Bearer ${QUAYIO_API_TOKEN}" -X POST "https://quay.io/api/v1/repository${QUAYIMAGE/quay.io/}/changevisibility" \
-d '{"visibility":"public"}' ||: '''
}
}
/* ###############
@@ -523,7 +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=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
@@ -554,7 +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=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') {
@@ -563,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}\" \
@@ -582,17 +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=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
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 || :
'''
}
}
}
@@ -608,7 +788,7 @@ pipeline {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" != "true" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else
LOCAL_CONTAINER=${IMAGE}:${META_TAG}
@@ -617,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"
@@ -693,21 +873,31 @@ 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
docker pull ghcr.io/linuxserver/ci:latest
if grep -q 'docker-baseimage' <<< "${LS_REPO}"; then
echo "Detected baseimage, setting LSIO_FIRST_PARTY=true"
if [ -n "${CI_DOCKERENV}" ]; then
CI_DOCKERENV="LSIO_FIRST_PARTY=true|${CI_DOCKERENV}"
else
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi
fi
docker pull ghcr.io/linuxserver/ci:${CITEST_IMAGETAG}
if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi
docker run --rm \
--shm-size=1gb \
-v /var/run/docker.sock:/var/run/docker.sock \
-e IMAGE=\"${IMAGE}\" \
-e DELAY_START=\"${CI_DELAY}\" \
-e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e RELEASE_TAG=\"develop\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
@@ -717,7 +907,11 @@ pipeline {
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-t ghcr.io/linuxserver/ci:latest \
-e NODE_NAME=\"${NODE_NAME}\" \
-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'''
}
}
@@ -732,37 +926,28 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:develop
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi
docker push ${PUSHIMAGE}:develop
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}:develop -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
'''
}
}
}
@@ -773,79 +958,48 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
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-develop
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-develop
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-develop
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-develop
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
docker manifest push --purge ${MANIFESTIMAGE}:develop || :
docker manifest create ${MANIFESTIMAGE}:develop ${MANIFESTIMAGE}:amd64-develop ${MANIFESTIMAGE}:arm64v8-develop
docker manifest annotate ${MANIFESTIMAGE}:develop ${MANIFESTIMAGE}:arm64v8-develop --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
fi
token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-develop")
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-develop || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-develop ${MANIFESTIMAGE}:amd64-develop
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-develop
fi
docker manifest push --purge ${MANIFESTIMAGE}:develop
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
fi
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
fi
done
'''
}
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-develop -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-develop -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}:develop ${MANIFESTIMAGE}:amd64-develop ${MANIFESTIMAGE}:arm64v8-develop || \
{ 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
'''
}
}
}
@@ -860,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 develop",\
"type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@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": "develop"}' \
| 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 develop",\
"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": "develop",\
"name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": true}' >> 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 "develop" \
--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": true }' > 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
@@ -914,116 +1086,181 @@ 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 {
script{
script {
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"'
}
else if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
else {
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
}else{
if (currentBuild.currentResult == "SUCCESS"){
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=1681177
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}else{
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=16711680
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"'color'": '${JOB_WEBHOOK_COLOUR}',\
"footer": {"text" : "'"${JOB_WEBHOOK_FOOTER}"'"},\
"timestamp": "'${JOB_DATE}'",\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** '${JOB_WEBHOOK_STATUS}'\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
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()
}
}
}
def retry_backoff(int max_attempts, int power_base, Closure c) {
int n = 0
while (n < max_attempts) {
try {
c()
return
} catch (err) {
if ((n + 1) >= max_attempts) {
throw err
}
sleep(power_base ** n)
n++
}
}
return
}
Executable → Regular
View File
+32 -14
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,15 +19,14 @@ 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
# [linuxserver/radarr](https://github.com/linuxserver/docker-radarr)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fradarr?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fradarr)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fradarr?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-radarr.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-radarr)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-radarr.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-radarr/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-radarr/packages)
@@ -37,7 +35,7 @@ Find us at:
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/radarr.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/radarr)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/radarr.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/radarr)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-radarr%2Fjob%2Fdevelop%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-radarr/job/develop/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fradarr%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/radarr/latest/index.html)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fradarr%2Fdevelop%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/radarr/develop/index.html)
[Radarr](https://github.com/Radarr/Radarr) - A fork of Sonarr to work with movies à la Couchpotato.
@@ -55,7 +53,6 @@ The architectures supported by this image are:
| :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Version Tags
@@ -73,18 +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.
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>
<summary>Well planned paths</summary>
# changelog
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
@@ -128,13 +138,15 @@ Containers are configured using parameters passed at runtime (such as those abov
| Parameter | Function |
| :----: | --- |
| `-p 7878` | The port for the Radarr web UI |
| `-p 7878:7878` | The port for the Radarr web UI |
| `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-v /config` | Database and Radarr configs |
| `-v /movies` | Location of Movie library on disk (See note in Application setup) |
| `-v /downloads` | Location of download managers output directory (See note in Application setup) |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
## Environment variables from files (Docker secrets)
@@ -272,7 +284,8 @@ Below are the instructions for updating containers:
### Image Update Notifications - Diun (Docker Image Update Notifier)
**tip**: We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
>[!TIP]
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally
@@ -287,16 +300,21 @@ docker build \
-t lscr.io/linuxserver/radarr:develop .
```
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.
* **20.12.24:** - Rebase to Alpine 3.21.
* **25.05.24:** - Rebase to Alpine 3.20.
* **20.03.24:** - Rebase to Alpine 3.19.
* **06.06.23:** - Rebase develop to Alpine 3.18.
* **19.12.22:** - Rebase develop branch to Alpine 3.17, migrate to s6v3.
+2 -3
View File
@@ -6,7 +6,6 @@ custom_version_command: curl -sL https://radarr.servarr.com/v1/update/develop/ch
release_type: prerelease
release_tag: develop
ls_branch: develop
build_armhf: false
repo_vars:
- BUILD_VERSION_ARG = 'RADARR_RELEASE'
- LS_USER = 'linuxserver'
@@ -21,8 +20,8 @@ repo_vars:
- CI_WEB='true'
- CI_PORT='7878'
- CI_SSL='false'
- CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific'
- CI_DELAY='240'
- CI_DOCKERENV=''
- CI_AUTH=''
- CI_WEBPATH='/system/status'
sponsor_links:
+196 -409
View File
@@ -1,409 +1,196 @@
NAME VERSION TYPE
Bouncy Castle for .NET (netstandard2.0) 1.9.0.1 dotnet
Dapper 2.0.143.55328 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.3.3.11 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.2523.52315 dotnet
Microsoft.AspNetCore.Antiforgery 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authentication 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authentication.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authentication.Cookies 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authentication.Core 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authentication.OAuth 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authorization 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Authorization.Policy 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Components 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Components.Authorization 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Components.Forms 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Components.Server 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Components.Web 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Connections.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.CookiePolicy 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Cors 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Cryptography.Internal 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Cryptography.KeyDerivation 6.0.2523.52315 dotnet
Microsoft.AspNetCore.DataProtection 6.0.2523.52315 dotnet
Microsoft.AspNetCore.DataProtection.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.DataProtection.Extensions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Diagnostics 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Diagnostics.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Diagnostics.HealthChecks 6.0.2523.52315 dotnet
Microsoft.AspNetCore.HostFiltering 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Hosting 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Hosting.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Hosting.Server.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Html.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http.Connections 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http.Connections.Common 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http.Extensions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http.Features 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Http.Results 6.0.2523.52315 dotnet
Microsoft.AspNetCore.HttpLogging 6.0.2523.52315 dotnet
Microsoft.AspNetCore.HttpOverrides 6.0.2523.52315 dotnet
Microsoft.AspNetCore.HttpsPolicy 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Identity 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Localization 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Localization.Routing 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Metadata 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.ApiExplorer 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Core 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Cors 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.DataAnnotations 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Formatters.Json 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Formatters.Xml 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Localization 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.Razor 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.RazorPages 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.TagHelpers 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Mvc.ViewFeatures 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Razor 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Razor.Runtime 6.0.2523.52315 dotnet
Microsoft.AspNetCore.ResponseCaching 6.0.2523.52315 dotnet
Microsoft.AspNetCore.ResponseCaching.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.ResponseCompression 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Rewrite 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Routing 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Routing.Abstractions 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.HttpSys 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.IIS 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.IISIntegration 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.Kestrel 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.Kestrel.Core 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.Kestrel.Transport.Quic 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets 6.0.2523.52315 dotnet
Microsoft.AspNetCore.Session 6.0.2523.52315 dotnet
Microsoft.AspNetCore.SignalR 6.0.2523.52315 dotnet
Microsoft.AspNetCore.SignalR.Common 6.0.2523.52315 dotnet
Microsoft.AspNetCore.SignalR.Core 6.0.2523.52315 dotnet
Microsoft.AspNetCore.SignalR.Protocols.Json 6.0.2523.52315 dotnet
Microsoft.AspNetCore.StaticFiles 6.0.2523.52315 dotnet
Microsoft.AspNetCore.WebSockets 6.0.2523.52315 dotnet
Microsoft.AspNetCore.WebUtilities 6.0.2523.52315 dotnet
Microsoft.Bcl.AsyncInterfaces 6.0.21.52210 dotnet
Microsoft.Bcl.TimeProvider 8.0.23.53103 dotnet
Microsoft.CSharp 6.0.2523.51912 dotnet
Microsoft.Data.SqlClient 2.1.2+2a61e8301e9d21ada2338a9279cf27653e781757 dotnet
Microsoft.Extensions.Caching.Abstractions 6.0.21.52210 dotnet
Microsoft.Extensions.Caching.Memory 6.0.222.6406 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.2523.52315 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.2523.52315 dotnet
Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions 6.0.2523.52315 dotnet
Microsoft.Extensions.Features 6.0.2523.52315 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.2523.52315 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.2523.52315 dotnet
Microsoft.Extensions.Identity.Stores 6.0.2523.52315 dotnet
Microsoft.Extensions.Localization 6.0.2523.52315 dotnet
Microsoft.Extensions.Localization.Abstractions 6.0.2523.52315 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.2523.52315 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.2523.52315 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.2523.52315 dotnet
Microsoft.Net.Http.Headers 6.0.2523.52315 dotnet
Microsoft.OpenApi 1.2.3.0 dotnet
Microsoft.VisualBasic 6.0.2523.51912 dotnet
Microsoft.VisualBasic.Core 11.100.2523.51912 dotnet
Microsoft.Win32.Primitives 6.0.2523.51912 dotnet
Microsoft.Win32.Registry 6.0.2523.51912 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.2.3 5.2.3.1999 dotnet
NLog.Extensions.Logging v5.3.3 5.3.3.381 dotnet
NLog.Targets.Syslog 7.0.0.0 dotnet
NodaTime 3.0.0.0 dotnet
Npgsql 7.0.6.0 dotnet
Polly 8.3.1.3207 dotnet
Polly.Contrib.WaitAndRetry 1.1.1.0+7596d2dacf22d88bbd814bc49c28424fb6e921e9 dotnet
Polly.Core 8.3.1.3207 dotnet
Radarr 5.4.6.8723 dotnet (+7 duplicates)
ReusableTasks 2.0.0 dotnet
Sentry 3.23.1.0 dotnet
SixLabors.ImageSharp 3.1.3.0 dotnet
Swashbuckle.AspNetCore.Swagger 6.5.0.0 dotnet
Swashbuckle.AspNetCore.SwaggerGen 6.5.0.0 dotnet
System 6.0.2523.51912 dotnet
System.AppContext 6.0.2523.51912 dotnet
System.Buffers 6.0.2523.51912 dotnet
System.Collections 6.0.2523.51912 dotnet
System.Collections.Concurrent 6.0.2523.51912 dotnet
System.Collections.Immutable 6.0.2523.51912 dotnet
System.Collections.NonGeneric 6.0.2523.51912 dotnet
System.Collections.Specialized 6.0.2523.51912 dotnet
System.ComponentModel 6.0.2523.51912 dotnet
System.ComponentModel.Annotations 6.0.2523.51912 dotnet
System.ComponentModel.DataAnnotations 6.0.2523.51912 dotnet
System.ComponentModel.EventBasedAsync 6.0.2523.51912 dotnet
System.ComponentModel.Primitives 6.0.2523.51912 dotnet
System.ComponentModel.TypeConverter 6.0.2523.51912 dotnet
System.Configuration 6.0.2523.51912 dotnet
System.Configuration.ConfigurationManager 6.0.922.41905 dotnet
System.Console 6.0.2523.51912 dotnet
System.Core 6.0.2523.51912 dotnet
System.Data 6.0.2523.51912 dotnet
System.Data.Common 6.0.2523.51912 dotnet
System.Data.DataSetExtensions 6.0.2523.51912 dotnet
System.Data.SQLite 1.0.115.5 dotnet
System.Data.SqlServerCe 4.0.8876.1 dotnet
System.Diagnostics.Contracts 6.0.2523.51912 dotnet
System.Diagnostics.Debug 6.0.2523.51912 dotnet
System.Diagnostics.DiagnosticSource 6.0.2523.51912 dotnet
System.Diagnostics.EventLog 6.0.21.52210 dotnet
System.Diagnostics.FileVersionInfo 6.0.2523.51912 dotnet
System.Diagnostics.Process 6.0.2523.51912 dotnet
System.Diagnostics.StackTrace 6.0.2523.51912 dotnet
System.Diagnostics.TextWriterTraceListener 6.0.2523.51912 dotnet
System.Diagnostics.Tools 6.0.2523.51912 dotnet
System.Diagnostics.TraceSource 6.0.2523.51912 dotnet
System.Diagnostics.Tracing 6.0.2523.51912 dotnet
System.Drawing 6.0.2523.51912 dotnet
System.Drawing.Common 6.0.21.52210 dotnet
System.Drawing.Primitives 6.0.2523.51912 dotnet
System.Dynamic.Runtime 6.0.2523.51912 dotnet
System.Formats.Asn1 6.0.2523.51912 dotnet
System.Globalization 6.0.2523.51912 dotnet
System.Globalization.Calendars 6.0.2523.51912 dotnet
System.Globalization.Extensions 6.0.2523.51912 dotnet
System.IO 6.0.2523.51912 dotnet
System.IO.Compression 6.0.2523.51912 dotnet
System.IO.Compression.Brotli 6.0.2523.51912 dotnet
System.IO.Compression.FileSystem 6.0.2523.51912 dotnet
System.IO.Compression.ZipFile 6.0.2523.51912 dotnet
System.IO.FileSystem 6.0.2523.51912 dotnet
System.IO.FileSystem.AccessControl 6.0.2523.51912 dotnet
System.IO.FileSystem.DriveInfo 6.0.2523.51912 dotnet
System.IO.FileSystem.Primitives 6.0.2523.51912 dotnet
System.IO.FileSystem.Watcher 6.0.2523.51912 dotnet
System.IO.IsolatedStorage 6.0.2523.51912 dotnet
System.IO.MemoryMappedFiles 6.0.2523.51912 dotnet
System.IO.Pipelines 6.0.522.21309 dotnet
System.IO.Pipes 6.0.2523.51912 dotnet
System.IO.Pipes.AccessControl 6.0.2523.51912 dotnet
System.IO.UnmanagedMemoryStream 6.0.2523.51912 dotnet
System.IdentityModel.Tokens.Jwt 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet
System.Linq 6.0.2523.51912 dotnet
System.Linq.Expressions 6.0.2523.51912 dotnet
System.Linq.Parallel 6.0.2523.51912 dotnet
System.Linq.Queryable 6.0.2523.51912 dotnet
System.Memory 6.0.2523.51912 dotnet
System.Net 6.0.2523.51912 dotnet
System.Net.Http 6.0.2523.51912 dotnet
System.Net.Http.Json 6.0.2523.51912 dotnet
System.Net.HttpListener 6.0.2523.51912 dotnet
System.Net.Mail 6.0.2523.51912 dotnet
System.Net.NameResolution 6.0.2523.51912 dotnet
System.Net.NetworkInformation 6.0.2523.51912 dotnet
System.Net.Ping 6.0.2523.51912 dotnet
System.Net.Primitives 6.0.2523.51912 dotnet
System.Net.Quic 6.0.2523.51912 dotnet
System.Net.Requests 6.0.2523.51912 dotnet
System.Net.Security 6.0.2523.51912 dotnet
System.Net.ServicePoint 6.0.2523.51912 dotnet
System.Net.Sockets 6.0.2523.51912 dotnet
System.Net.WebClient 6.0.2523.51912 dotnet
System.Net.WebHeaderCollection 6.0.2523.51912 dotnet
System.Net.WebProxy 6.0.2523.51912 dotnet
System.Net.WebSockets 6.0.2523.51912 dotnet
System.Net.WebSockets.Client 6.0.2523.51912 dotnet
System.Numerics 6.0.2523.51912 dotnet
System.Numerics.Vectors 6.0.2523.51912 dotnet
System.ObjectModel 6.0.2523.51912 dotnet
System.Private.CoreLib 6.0.2523.51912 dotnet
System.Private.DataContractSerialization 6.0.2523.51912 dotnet
System.Private.Uri 6.0.2523.51912 dotnet
System.Private.Xml 6.0.2523.51912 dotnet
System.Private.Xml.Linq 6.0.2523.51912 dotnet
System.Reflection 6.0.2523.51912 dotnet
System.Reflection.DispatchProxy 6.0.2523.51912 dotnet
System.Reflection.Emit 6.0.2523.51912 dotnet
System.Reflection.Emit.ILGeneration 6.0.2523.51912 dotnet
System.Reflection.Emit.Lightweight 6.0.2523.51912 dotnet
System.Reflection.Extensions 6.0.2523.51912 dotnet
System.Reflection.Metadata 6.0.2523.51912 dotnet
System.Reflection.Primitives 6.0.2523.51912 dotnet
System.Reflection.TypeExtensions 6.0.2523.51912 dotnet
System.Resources.Reader 6.0.2523.51912 dotnet
System.Resources.ResourceManager 6.0.2523.51912 dotnet
System.Resources.Writer 6.0.2523.51912 dotnet
System.Runtime 6.0.2523.51912 dotnet
System.Runtime.Caching 4.700.19.56404 dotnet
System.Runtime.CompilerServices.VisualC 6.0.2523.51912 dotnet
System.Runtime.Extensions 6.0.2523.51912 dotnet
System.Runtime.Handles 6.0.2523.51912 dotnet
System.Runtime.InteropServices 6.0.2523.51912 dotnet
System.Runtime.InteropServices.RuntimeInformation 6.0.2523.51912 dotnet
System.Runtime.Intrinsics 6.0.2523.51912 dotnet
System.Runtime.Loader 6.0.2523.51912 dotnet
System.Runtime.Numerics 6.0.2523.51912 dotnet
System.Runtime.Serialization 6.0.2523.51912 dotnet
System.Runtime.Serialization.Formatters 6.0.2523.51912 dotnet
System.Runtime.Serialization.Json 6.0.2523.51912 dotnet
System.Runtime.Serialization.Primitives 6.0.2523.51912 dotnet
System.Runtime.Serialization.Xml 6.0.2523.51912 dotnet
System.Security 6.0.2523.51912 dotnet
System.Security.AccessControl 6.0.2523.51912 dotnet
System.Security.Claims 6.0.2523.51912 dotnet
System.Security.Cryptography.Algorithms 6.0.2523.51912 dotnet
System.Security.Cryptography.Cng 6.0.2523.51912 dotnet
System.Security.Cryptography.Csp 6.0.2523.51912 dotnet
System.Security.Cryptography.Encoding 6.0.2523.51912 dotnet
System.Security.Cryptography.OpenSsl 6.0.2523.51912 dotnet
System.Security.Cryptography.Pkcs 6.0.1823.26907 dotnet
System.Security.Cryptography.Primitives 6.0.2523.51912 dotnet
System.Security.Cryptography.ProtectedData 6.0.21.52210 dotnet
System.Security.Cryptography.X509Certificates 6.0.2523.51912 dotnet
System.Security.Cryptography.Xml 6.0.822.36306 dotnet
System.Security.Permissions 6.0.21.52210 dotnet
System.Security.Principal 6.0.2523.51912 dotnet
System.Security.Principal.Windows 6.0.2523.51912 dotnet
System.Security.SecureString 6.0.2523.51912 dotnet
System.ServiceModel.Web 6.0.2523.51912 dotnet
System.ServiceProcess 6.0.2523.51912 dotnet
System.ServiceProcess.ServiceController 6.0.1823.26907 dotnet
System.Text.Encoding 6.0.2523.51912 dotnet
System.Text.Encoding.CodePages 6.0.2523.51912 dotnet
System.Text.Encoding.Extensions 6.0.2523.51912 dotnet
System.Text.Encodings.Web 6.0.2523.51912 dotnet
System.Text.Json 6.0.2523.51912 dotnet
System.Text.RegularExpressions 6.0.2523.51912 dotnet
System.Threading 6.0.2523.51912 dotnet
System.Threading.Channels 6.0.2523.51912 dotnet
System.Threading.Overlapped 6.0.2523.51912 dotnet
System.Threading.Tasks 6.0.2523.51912 dotnet
System.Threading.Tasks.Dataflow 6.0.2523.51912 dotnet
System.Threading.Tasks.Extensions 6.0.2523.51912 dotnet
System.Threading.Tasks.Parallel 6.0.2523.51912 dotnet
System.Threading.Thread 6.0.2523.51912 dotnet
System.Threading.ThreadPool 6.0.2523.51912 dotnet
System.Threading.Timer 6.0.2523.51912 dotnet
System.Transactions 6.0.2523.51912 dotnet
System.Transactions.Local 6.0.2523.51912 dotnet
System.ValueTuple 6.0.2523.51912 dotnet
System.Web 6.0.2523.51912 dotnet
System.Web.HttpUtility 6.0.2523.51912 dotnet
System.Windows 6.0.2523.51912 dotnet
System.Windows.Extensions 6.0.21.52210 dotnet
System.Xml 6.0.2523.51912 dotnet
System.Xml.Linq 6.0.2523.51912 dotnet
System.Xml.ReaderWriter 6.0.2523.51912 dotnet
System.Xml.Serialization 6.0.2523.51912 dotnet
System.Xml.XDocument 6.0.2523.51912 dotnet
System.Xml.XPath 6.0.2523.51912 dotnet
System.Xml.XPath.XDocument 6.0.2523.51912 dotnet
System.Xml.XmlDocument 6.0.2523.51912 dotnet
System.Xml.XmlSerializer 6.0.2523.51912 dotnet
WindowsBase 6.0.2523.51912 dotnet
alpine-baselayout 3.4.3-r2 apk
alpine-baselayout-data 3.4.3-r2 apk
alpine-keys 2.4-r1 apk
alpine-release 3.19.1-r0 apk
apk-tools 2.14.3-r1 apk
bash 5.2.21-r0 apk
brotli-libs 1.1.0-r1 apk
busybox 1.36.1-r15 apk
busybox-binsh 1.36.1-r15 apk
c-ares 1.27.0-r0 apk
ca-certificates 20240226-r0 apk
ca-certificates-bundle 20240226-r0 apk
coreutils 9.4-r2 apk
coreutils-env 9.4-r2 apk
coreutils-fmt 9.4-r2 apk
coreutils-sha512sum 9.4-r2 apk
curl 8.5.0-r0 apk
icu-data-en 74.1-r0 apk
icu-libs 74.1-r0 apk
jq 1.7.1-r0 apk
libacl 2.3.1-r4 apk
libattr 2.5.1-r5 apk
libbsd 0.11.7-r3 apk
libc-utils 0.7.2-r5 apk
libcrypto3 3.1.4-r6 apk
libcurl 8.5.0-r0 apk
libgcc 13.2.1_git20231014-r0 apk
libgcrypt 1.10.3-r0 apk
libgpg-error 1.47-r2 apk
libidn2 2.3.4-r4 apk
libintl 0.22.3-r0 apk
libmd 1.1.0-r0 apk
libncursesw 6.4_p20231125-r0 apk
libproc2 4.0.4-r0 apk
libssl3 3.1.4-r5 apk
libstdc++ 13.2.1_git20231014-r0 apk
libunistring 1.1-r2 apk
libxml2 2.11.7-r0 apk
libxslt 1.1.39-r0 apk
linux-pam 1.5.3-r7 apk
mscorlib 6.0.2523.51912 dotnet
musl 1.2.4_git20230717-r4 apk
musl-utils 1.2.4_git20230717-r4 apk
ncurses-terminfo-base 6.4_p20231125-r0 apk
netcat-openbsd 1.226-r0 apk
netstandard 6.0.2523.51912 dotnet
nghttp2-libs 1.58.0-r0 apk
oniguruma 6.9.9-r0 apk
procps-ng 4.0.4-r0 apk
readline 8.2.1-r2 apk
scanelf 1.3.7-r2 apk
shadow 4.14.2-r0 apk
skalibs 2.14.0.1-r0 apk
sqlite-libs 3.44.2-r0 apk
ssl_client 1.36.1-r15 apk
tzdata 2024a-r0 apk
utmps-libs 0.1.2.2-r0 apk
xmlstarlet 1.6.1-r2 apk
xz-libs 5.4.5-r0 apk
zlib 1.3.1-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
+80 -46
View File
@@ -7,67 +7,101 @@ 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 }}"
# 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.
# changelog
readme_media: true
# init diagram
init_diagram: |
"radarr:develop": {
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:develop" <- Base Images
# changelog
changelogs:
- { date: "20.03.24:", desc: "Rebase to Alpine 3.19." }
- { date: "06.06.23:", desc: "Rebase develop to Alpine 3.18." }
- { date: "19.12.22:", desc: "Rebase develop branch to Alpine 3.17, migrate to s6v3." }
- { date: "20.02.22:", desc: "Rebase develop branch to Alpine." }
- { date: "17.10.21:", desc: "Remove `UMASK_SET`." }
- { date: "11.07.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: "20.12.24:", desc: "Rebase to Alpine 3.21."}
- {date: "25.05.24:", desc: "Rebase to Alpine 3.20."}
- {date: "20.03.24:", desc: "Rebase to Alpine 3.19."}
- {date: "06.06.23:", desc: "Rebase develop to Alpine 3.18."}
- {date: "19.12.22:", desc: "Rebase develop branch to Alpine 3.17, migrate to s6v3."}
- {date: "20.02.22:", desc: "Rebase develop branch to Alpine."}
- {date: "17.10.21:", desc: "Remove `UMASK_SET`."}
- {date: "11.07.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
@@ -1,6 +1,10 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# permissions
lsiown -R abc:abc \
/config
mkdir -p /run/radarr-temp
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
lsiown -R abc:abc \
/config \
/run/radarr-temp
fi
@@ -1,6 +1,8 @@
#!/bin/bash
PORT=$(xmlstarlet sel -T -t -v /Config/Port /config/config.xml)
if [[ -f /config/config.xml ]]; then
PORT=$(xmlstarlet sel -T -t -v /Config/Port /config/config.xml)
fi
if [[ $(curl -sL "http://localhost:${PORT:-7878}/ping" | jq -r '.status' 2>/dev/null) = "OK" ]]; then
exit 0
+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