Compare commits

...
Author SHA1 Message Date
LinuxServer-CI 4daa3ffa2c Bot Updating Package Versions 2025-09-03 15:53:47 +00:00
LinuxServer-CI 814b85199c Bot Updating Package Versions 2025-09-02 15:53:42 +00:00
LinuxServer-CI cf08cdd238 Bot Updating Package Versions 2025-09-01 15:54:11 +00:00
LinuxServer-CI 263ff2bf60 Bot Updating Package Versions 2025-08-29 15:53:19 +00:00
LinuxServer-CI 6a35ea4b9c Bot Updating Package Versions 2025-08-27 15:53:27 +00:00
LinuxServer-CI bf6288a533 Bot Updating Package Versions 2025-08-25 15:55:02 +00:00
LinuxServer-CI 1b55256f14 Bot Updating Package Versions 2025-08-24 15:53:43 +00:00
LinuxServer-CI 46564c4c24 Bot Updating Package Versions 2025-08-23 15:53:37 +00:00
LinuxServer-CI b73f5990cc Bot Updating Package Versions 2025-08-22 15:53:09 +00:00
LinuxServer-CI 6f3e0e406b Bot Updating Package Versions 2025-08-19 15:55:13 +00:00
LinuxServer-CI 66283cc09c Bot Updating Package Versions 2025-08-18 15:56:31 +00:00
LinuxServer-CI 02f03c1928 Bot Updating Package Versions 2025-08-15 15:54:52 +00:00
LinuxServer-CI 231d0ed7a8 Bot Updating Package Versions 2025-08-13 15:54:02 +00:00
LinuxServer-CI 95cb1f3406 Bot Updating Package Versions 2025-08-12 15:56:14 +00:00
LinuxServer-CI 5fc7831629 Bot Updating Package Versions 2025-08-11 15:57:00 +00:00
LinuxServer-CI b71e593c8e Bot Updating Package Versions 2025-08-09 15:53:35 +00:00
LinuxServer-CI ff3c210f7a Bot Updating Package Versions 2025-08-08 15:59:00 +00:00
LinuxServer-CI b4ee744268 Bot Updating Package Versions 2025-08-07 15:57:08 +00:00
LinuxServer-CI 3446bafc4d Bot Updating Package Versions 2025-08-04 16:00:13 +00:00
LinuxServer-CI f1e3b981cb Bot Updating Package Versions 2025-08-02 15:54:34 +00:00
LinuxServer-CI 308f406da9 Bot Updating Package Versions 2025-08-01 15:57:45 +00:00
LinuxServer-CI b764aed863 Bot Updating Package Versions 2025-07-28 16:01:35 +00:00
LinuxServer-CI 59abf71ebf Bot Updating Package Versions 2025-07-24 15:57:09 +00:00
LinuxServer-CI 529e8bdc4a Bot Updating Package Versions 2025-07-21 15:57:48 +00:00
LinuxServer-CI 0efe522110 Bot Updating Package Versions 2025-07-14 15:56:55 +00:00
LinuxServer-CI dbbfc2aec0 Bot Updating Package Versions 2025-07-10 15:57:22 +00:00
LinuxServer-CI 9b2c487e9f Bot Updating Templated Files 2025-07-03 19:24:53 +00:00
LinuxServer-CI 72770532a8 Bot Updating Templated Files 2025-07-03 19:23:04 +00:00
LinuxServer-CI 81d993f10f Bot Updating Package Versions 2025-07-01 15:55:03 +00:00
LinuxServer-CI 94afdab4fb Bot Updating Package Versions 2025-06-30 15:55:21 +00:00
LinuxServer-CI 52fcc4a80f Bot Updating Package Versions 2025-06-29 15:53:07 +00:00
LinuxServer-CI a63a3f3f4b Bot Updating Package Versions 2025-06-24 15:56:04 +00:00
LinuxServer-CI 3f6a358902 Bot Updating Package Versions 2025-06-23 15:56:32 +00:00
LinuxServer-CI 7c105be64f Bot Updating Package Versions 2025-06-21 15:52:37 +00:00
LinuxServer-CI b6fbe91fb8 Bot Updating Package Versions 2025-06-16 15:56:20 +00:00
LinuxServer-CI ce62c3366b Bot Updating Package Versions 2025-06-10 15:56:15 +00:00
LinuxServer-CI 459800466a Bot Updating Templated Files 2025-06-10 15:52:27 +00:00
LinuxServer-CI eed4a02b32 Bot Updating Package Versions 2025-06-09 15:56:43 +00:00
LinuxServer-CI 62a1970bc1 Bot Updating Package Versions 2025-05-28 15:54:32 +00:00
LinuxServer-CI 60da318292 Bot Updating Package Versions 2025-05-26 15:55:10 +00:00
LinuxServer-CI e098db1281 Bot Updating Package Versions 2025-05-24 15:55:30 +00:00
LinuxServer-CI 509038ed80 Bot Updating Package Versions 2025-05-22 19:26:47 +00:00
LinuxServer-CI 5367c99d28 Bot Updating Package Versions 2025-05-18 15:58:40 +00:00
LinuxServer-CI 0b85d6f03c Bot Updating Templated Files 2025-05-18 15:52:16 +00:00
LinuxServer-CI f1d474f522 Bot Updating Package Versions 2025-05-13 22:53:04 +00:00
LinuxServer-CI b7eaad01be Bot Updating Package Versions 2025-05-12 15:54:46 +00:00
LinuxServer-CI c43924b5b0 Bot Updating Package Versions 2025-05-08 15:55:28 +00:00
LinuxServer-CI 0b49e8157f Bot Updating Package Versions 2025-05-05 15:52:55 +00:00
LinuxServer-CI 35712113f0 Bot Updating Package Versions 2025-05-02 15:54:47 +00:00
LinuxServer-CI 15fd65ca85 Bot Updating Package Versions 2025-04-23 15:54:36 +00:00
LinuxServer-CI 567f4ffb5b Bot Updating Package Versions 2025-04-17 15:52:46 +00:00
LinuxServer-CI 54792dabd6 Bot Updating Package Versions 2025-04-15 15:52:52 +00:00
RoxedusandGitHub a9a6d4eb0c Merge pull request #27 from linuxserver/master-media-blurb 2025-04-15 14:09:05 +02:00
LinuxServer-CI 1df81c8d51 Bot Updating Package Versions 2025-04-14 15:52:34 +00:00
LinuxServer-CI 306f05a1d3 Bot Updating Package Versions 2025-04-10 19:21:48 +00:00
LinuxServer-CI 43c8f134c7 Bot Updating Package Versions 2025-03-31 15:53:38 +00:00
LinuxServer-CI 1a358c3201 Bot Updating Package Versions 2025-03-24 15:53:40 +00:00
LinuxServer-CI 7ef4e81d34 Bot Updating Package Versions 2025-03-20 15:54:39 +00:00
LinuxServer-CI aeeed33345 Bot Updating Package Versions 2025-03-19 15:52:57 +00:00
LinuxServer-CI e315add450 Bot Updating Package Versions 2025-03-17 15:53:32 +00:00
Roxedus 9ce3afacef Dont't use media blurb 2025-03-16 15:41:22 +01:00
LinuxServer-CI b4be92bd5a Bot Updating Package Versions 2025-03-14 15:53:40 +00:00
LinuxServer-CI 92eae020b0 Bot Updating Package Versions 2025-03-12 15:54:18 +00:00
LinuxServer-CI 47d3dd3a5f Bot Updating Package Versions 2025-03-11 19:28:08 +00:00
aptalcaandGitHub 9854689145 Merge pull request #26 from linuxserver/buildfix
update script path
2025-03-11 15:24:36 -04:00
aptalca 359652caf3 update script path 2025-03-11 14:06:16 -04:00
LinuxServer-CI 5d56c7e272 Bot Updating Package Versions 2025-03-08 15:52:32 +00:00
LinuxServer-CI 542020c4bf Bot Updating Package Versions 2025-03-07 15:52:19 +00:00
LinuxServer-CI 38a7cae4f8 Bot Updating Package Versions 2025-03-04 15:53:55 +00:00
LinuxServer-CI b3a23a9daf Bot Updating Package Versions 2025-03-03 15:53:26 +00:00
LinuxServer-CI 41f31f1f3e Bot Updating Package Versions 2025-03-02 15:52:09 +00:00
LinuxServer-CI e4a26597f0 Bot Updating Package Versions 2025-03-01 15:52:47 +00:00
LinuxServer-CI f331164ad5 Bot Updating Package Versions 2025-02-28 15:53:34 +00:00
LinuxServer-CI 020ed4527b Bot Updating Package Versions 2025-02-27 15:54:22 +00:00
LinuxServer-CI ec6ef7b08f Bot Updating Package Versions 2025-02-25 15:52:31 +00:00
LinuxServer-CI 560c9ef79e Bot Updating Package Versions 2025-02-24 15:52:43 +00:00
LinuxServer-CI d5a264eb96 Bot Updating Package Versions 2025-02-23 15:52:12 +00:00
LinuxServer-CI cde2d209fe Bot Updating Package Versions 2025-02-22 15:52:17 +00:00
LinuxServer-CI a770fa43f3 Bot Updating Package Versions 2025-02-21 19:52:30 +00:00
LinuxServer-CI 76bd2b25d1 Bot Updating Package Versions 2025-02-20 15:56:31 +00:00
LinuxServer-CI 2943f8d5be Bot Updating Package Versions 2025-02-17 15:52:31 +00:00
LinuxServer-CI e1fb028b06 Bot Updating Package Versions 2025-02-16 15:52:45 +00:00
LinuxServer-CI 142fe7139b Bot Updating Package Versions 2025-02-15 15:52:39 +00:00
LinuxServer-CI ecfb75cb6e Bot Updating Package Versions 2025-02-14 15:52:16 +00:00
LinuxServer-CI a59230af1b Bot Updating Package Versions 2025-02-13 19:20:38 +00:00
LinuxServer-CI b10dca5863 Bot Updating Package Versions 2025-02-13 15:57:33 +00:00
LinuxServer-CI 43f124e323 Bot Updating Package Versions 2025-02-12 15:57:38 +00:00
LinuxServer-CI d207db9c58 Bot Updating Package Versions 2025-02-11 15:53:59 +00:00
LinuxServer-CI 78c4ff8006 Bot Updating Package Versions 2025-02-10 15:54:01 +00:00
LinuxServer-CI 809d55725c Bot Updating Templated Files 2025-02-10 15:50:17 +00:00
LinuxServer-CI f6f94a0165 Bot Updating Package Versions 2025-02-09 15:53:18 +00:00
LinuxServer-CI fcfc023325 Bot Updating Package Versions 2025-02-08 15:51:59 +00:00
LinuxServer-CI 7a8a849c57 Bot Updating Package Versions 2025-02-07 15:56:34 +00:00
LinuxServer-CI 416839a05f Bot Updating Package Versions 2025-02-06 15:51:49 +00:00
LinuxServer-CI e6d2e12bf1 Bot Updating Package Versions 2025-02-05 15:51:59 +00:00
LinuxServer-CI be8bc847cb Bot Updating Package Versions 2025-02-04 15:52:06 +00:00
LinuxServer-CI 10c9f62d63 Bot Updating Package Versions 2025-02-03 10:25:24 +00:00
AdamandGitHub 30eea04d07 Merge pull request #24 from linuxserver/deps-again
Temp build fix
2025-02-03 10:22:25 +00:00
thespad 95dba1da00 Set TZ in CI vars 2025-02-02 20:43:36 +00:00
thespad a978f2c412 Temp build fix 2025-02-02 20:34:26 +00:00
LinuxServer-CI a30f8174ce Bot Updating Package Versions 2025-02-01 15:52:10 +00:00
LinuxServer-CI 5f0f9b43d4 Bot Updating Package Versions 2025-01-31 15:52:36 +00:00
LinuxServer-CI c1dd4b7ade Bot Updating Templated Files 2025-01-30 19:22:36 +00:00
LinuxServer-CI ebab1894d9 Bot Updating Templated Files 2025-01-30 19:21:26 +00:00
LinuxServer-CI 8370bd1ed7 Bot Updating Package Versions 2025-01-26 15:52:59 +00:00
LinuxServer-CI 0801c345dc Bot Updating Package Versions 2025-01-25 15:53:15 +00:00
LinuxServer-CI ed9a88fcf4 Bot Updating Package Versions 2025-01-24 15:53:10 +00:00
LinuxServer-CI 39a6d79f6b Bot Updating Package Versions 2025-01-23 21:56:43 +00:00
LinuxServer-CI ce827fb0e3 Bot Updating Package Versions 2025-01-22 15:54:23 +00:00
quietsyandGitHub d26ab76118 Merge pull request #23 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-22 16:23:08 +02:00
quietsy 6abd0f4d8f Update categories 2025-01-22 16:10:50 +02:00
quietsy 161e1853bf Add categories to readme-vars.yml 2025-01-22 14:14:13 +02:00
LinuxServer-CI df6357089a Bot Updating Package Versions 2025-01-21 15:53:00 +00:00
LinuxServer-CI 22561580e2 Bot Updating Package Versions 2025-01-20 15:54:11 +00:00
LinuxServer-CI 0e31103657 Bot Updating Package Versions 2025-01-19 15:52:36 +00:00
LinuxServer-CI 6df317ac40 Bot Updating Package Versions 2025-01-17 15:53:28 +00:00
LinuxServer-CI a36ef59629 Bot Updating Package Versions 2025-01-14 15:52:46 +00:00
LinuxServer-CI a249d5cb0f Bot Updating Package Versions 2025-01-13 15:36:22 +00:00
LinuxServer-CI 9dcb6db2f8 Bot Updating Package Versions 2025-01-13 15:18:27 +00:00
AdamandGitHub 0a55cfe085 Merge pull request #22 from linuxserver/telegram 2025-01-13 15:14:51 +00:00
thespad 489502c496 Remove errant && 2025-01-13 14:49:55 +00:00
thespad df59ebb3b3 Add telegram plugin requirements 2025-01-13 14:45:38 +00:00
LinuxServer-CI 1c33490318 Bot Updating Package Versions 2025-01-12 15:55:32 +00:00
LinuxServer-CI 6d9fc56ff8 Bot Updating Package Versions 2025-01-11 15:52:27 +00:00
LinuxServer-CI 8f250328a4 Bot Updating Package Versions 2025-01-10 15:52:44 +00:00
LinuxServer-CI 2ca523aab8 Bot Updating Package Versions 2025-01-09 15:53:07 +00:00
LinuxServer-CI 6b4b50a9cd Bot Updating Package Versions 2025-01-08 16:56:01 +00:00
LinuxServer-CI b17f83edd7 Bot Updating Package Versions 2025-01-08 09:38:46 +00:00
AdamandGitHub 3c88b4d44b Merge pull request #20 from linuxserver/restore-extras 2025-01-08 09:32:42 +00:00
thespad f073d04e63 Restore moved extra deps 2025-01-08 09:11:27 +00:00
LinuxServer-CI 7de3bd4ae9 Bot Updating Package Versions 2025-01-07 16:26:55 +00:00
LinuxServer-CI ec923e9963 Bot Updating Package Versions 2025-01-06 23:04:20 +00:00
AdamandGitHub efcabb3fe8 Merge pull request #18 from linuxserver/uv-buildfix 2025-01-06 23:00:27 +00:00
thespad b92e513d3c Update requirements file 2025-01-06 18:35:09 +00:00
LinuxServer-CI afb3cf426f Bot Updating Package Versions 2025-01-04 15:54:45 +00:00
LinuxServer-CI ab3600388c Bot Updating Package Versions 2024-12-25 15:52:45 +00:00
LinuxServer-CI 6ff7b69d43 Bot Updating Package Versions 2024-12-20 15:53:45 +00:00
LinuxServer-CI 79c62d8c9f Bot Updating Package Versions 2024-12-19 15:56:36 +00:00
LinuxServer-CI 14ac74a555 Bot Updating Templated Files 2024-12-19 15:51:58 +00:00
LinuxServer-CI c7c2961bf7 Bot Updating Templated Files 2024-12-19 15:50:29 +00:00
LinuxServer-CI fbca4133ad Bot Updating Package Versions 2024-12-14 15:53:02 +00:00
LinuxServer-CI cf15dc721f Bot Updating Package Versions 2024-12-13 15:55:15 +00:00
LinuxServer-CI 0331a6c53b Bot Updating Package Versions 2024-12-12 15:56:25 +00:00
LinuxServer-CI 07da56dc0c Bot Updating Package Versions 2024-12-11 15:52:53 +00:00
LinuxServer-CI 1cc0c62a0b Bot Updating Package Versions 2024-12-09 15:53:14 +00:00
LinuxServer-CI 90dd469d8b Bot Updating Package Versions 2024-12-08 15:53:28 +00:00
LinuxServer-CI 4b368726ea Bot Updating Package Versions 2024-12-05 19:26:48 +00:00
LinuxServer-CI 0e4864253e Bot Updating Templated Files 2024-12-05 19:23:05 +00:00
LinuxServer-CI 1bde41304b Bot Updating Package Versions 2024-12-03 15:57:28 +00:00
LinuxServer-CI 1d32efdb69 Bot Updating Templated Files 2024-12-03 15:53:51 +00:00
LinuxServer-CI 4106fbe464 Bot Updating Templated Files 2024-12-03 15:52:11 +00:00
LinuxServer-CI 6d00e66d22 Bot Updating Templated Files 2024-12-03 15:50:39 +00:00
LinuxServer-CI 007d0bdcd1 Bot Updating Package Versions 2024-11-28 19:21:46 +00:00
LinuxServer-CI e8c71452ad Bot Updating Package Versions 2024-11-16 15:52:12 +00:00
LinuxServer-CI c70a19eb29 Bot Updating Package Versions 2024-11-09 15:54:56 +00:00
LinuxServer-CI 124c23fe98 Bot Updating Templated Files 2024-11-09 15:51:59 +00:00
LinuxServer-CI 713dae12ab Bot Updating Templated Files 2024-11-09 15:50:36 +00:00
LinuxServer-CI 90575d0a98 Bot Updating Package Versions 2024-11-08 15:52:17 +00:00
LinuxServer-CI 47b0a869d7 Bot Updating Package Versions 2024-11-07 15:52:05 +00:00
LinuxServer-CI 36c4dac523 Bot Updating Package Versions 2024-11-03 15:53:53 +00:00
LinuxServer-CI 88652fcff9 Bot Updating Package Versions 2024-11-02 15:55:43 +00:00
LinuxServer-CI bd93807e0c Bot Updating Package Versions 2024-11-01 15:52:50 +00:00
LinuxServer-CI 78c63ebea8 Bot Updating Package Versions 2024-10-28 15:52:02 +00:00
LinuxServer-CI afa9f0ea08 Bot Updating Package Versions 2024-10-27 15:52:39 +00:00
LinuxServer-CI b48c13aec6 Bot Updating Package Versions 2024-10-17 15:52:11 +00:00
LinuxServer-CI f480a00b67 Bot Updating Package Versions 2024-10-10 15:53:52 +00:00
LinuxServer-CI f346a90913 Bot Updating Package Versions 2024-10-09 15:52:11 +00:00
LinuxServer-CI 4ae1107d98 Bot Updating Templated Files 2024-10-03 19:21:52 +00:00
LinuxServer-CI 8f8505aa05 Bot Updating Templated Files 2024-10-03 19:20:21 +00:00
LinuxServer-CI 808b40483e Bot Updating Templated Files 2024-10-03 19:18:50 +00:00
LinuxServer-CI b08392b7b9 Bot Updating Templated Files 2024-09-26 19:21:54 +00:00
LinuxServer-CI cddf610994 Bot Updating Templated Files 2024-09-26 19:19:53 +00:00
AdamandGitHub 65b5b3d2e3 Merge pull request #17 from linuxserver/cwd 2024-09-23 13:40:35 +01:00
thespad 0b814db7f6 Change working directory to /config 2024-09-23 13:30:04 +01:00
aptalcaandGitHub 62192d83c9 Merge pull request #15 from linuxserver/emptylogfile
suppress creation of empty log file when WebUI password is set
2024-09-18 13:30:37 -04:00
aptalca 0c6e93aa67 suppress creation of empty log file when WenUI password is set 2024-09-18 12:56:26 -04:00
19 changed files with 767 additions and 458 deletions
+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/flexget: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`.
+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
@@ -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: '1 14 * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
stale:
permissions:
+81 -37
View File
@@ -3,6 +3,9 @@ name: External Trigger Main
on:
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-main:
runs-on: ubuntu-latest
@@ -11,18 +14,28 @@ jobs:
- name: External Trigger
if: github.ref == 'refs/heads/main'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: |
printf "# External trigger for docker-flexget\n\n" >> $GITHUB_STEP_SUMMARY
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_FLEXGET_MAIN }}" ]; then
if grep -q "^flexget_main_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`flexget_main_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^flexget_main" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github secret \`PAUSE_EXTERNAL_TRIGGER_FLEXGET_MAIN\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`flexget_main\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of main branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_FLEXGET_MAIN\`" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of main branch. To disable this trigger, add \`flexget_main\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/flexget/flexget/releases/latest" | jq -r '. | .tag_name')
echo "Type is \`github_stable\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^flexget_main_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
@@ -33,24 +46,43 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/flexget"
tag="latest"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fflexget%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}")
@@ -71,33 +103,45 @@ jobs:
exit 1
fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-flexget/job/main/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0
else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-flexget/job/main/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 flexget tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ "${artifacts_found}" == "false" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for flexget tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New 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-flexget/job/main/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 flexget tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
fi
@@ -5,6 +5,9 @@ on:
- cron: '48 * * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
+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-main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Package Trigger
if: github.ref == 'refs/heads/main'
run: |
printf "# Package trigger for docker-flexget\n\n" >> $GITHUB_STEP_SUMMARY
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_FLEXGET_MAIN }}" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github secret \`PAUSE_PACKAGE_TRIGGER_FLEXGET_MAIN\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-flexget/job/main/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Package trigger running off of main branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_FLEXGET_MAIN\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-flexget/job/main/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'})" >> $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 package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
+70 -17
View File
@@ -5,6 +5,9 @@ on:
- cron: '4 19 * * 4'
workflow_dispatch:
permissions:
contents: read
jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
@@ -14,6 +17,8 @@ jobs:
fetch-depth: '0'
- name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: |
printf "# Package trigger scheduler for docker-flexget\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
@@ -24,27 +29,75 @@ jobs:
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-flexget/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-flexget/${br}/jenkins-vars.yml)
if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-flexget/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-flexget/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
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-flexget/actions/workflows/package_trigger.yml/dispatches
sleep 30
README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-flexget/${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 "^flexget_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`flexget_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-flexget/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 "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 \`flexget_%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-flexget/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 "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 flexget** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-flexget/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-flexget/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 flexget** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
+14 -15
View File
@@ -6,6 +6,8 @@ FROM ghcr.io/by275/libtorrent:2-alpine3.19 AS libtorrent
FROM ghcr.io/linuxserver/baseimage-alpine:3.19
COPY --from=ghcr.io/astral-sh/uv:0.5.26 /uv /uvx /bin/
# set version label
ARG BUILD_DATE
ARG VERSION
@@ -16,7 +18,10 @@ LABEL maintainer="thespad"
# environment settings
ENV HOME="/config" \
PYTHONIOENCODING=utf-8 \
TMPDIR=/run/flexget-temp
TMPDIR=/run/flexget-temp \
UV_PROJECT_ENVIRONMENT=/lsiopy \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy
RUN \
echo "**** install packages ****" && \
@@ -36,24 +41,18 @@ RUN \
FLEXGET_VERSION=$(curl -s https://api.github.com/repos/flexget/flexget/releases/latest \
| awk '/tag_name/{print $4;exit}' FS='[""]'); \
fi && \
mkdir -p /tmp/flexget && \
mkdir -p /data && \
mkdir -p /run/flexget-temp /data && \
mkdir -p /app/flexget && \
curl -o \
/tmp/flexget.tar.gz -L \
"https://github.com/flexget/flexget/releases/download/${FLEXGET_VERSION}/FlexGet-${FLEXGET_VERSION#v}.tar.gz" && \
"https://github.com/Flexget/Flexget/archive/refs/tags/${FLEXGET_VERSION}.tar.gz" && \
tar xf \
/tmp/flexget.tar.gz -C \
/tmp/flexget --strip-components=1 && \
cd /tmp/flexget && \
python3 -m venv /lsiopy && \
pip install -U --no-cache-dir \
pip \
wheel && \
pip install -U --no-cache --find-links https://wheel-index.linuxserver.io/alpine-3.20/ \
click \
flexget==${FLEXGET_VERSION#v} \
requests \
-r requirements-docker.txt && \
/app/flexget --strip-components=1 && \
cd /app/flexget && \
uv venv /lsiopy && \
uv run scripts/bundle_webui.py && \
uv sync --frozen --no-dev --no-cache --group=all && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
apk del --purge \
+14 -15
View File
@@ -6,6 +6,8 @@ FROM ghcr.io/by275/libtorrent:2-alpine3.19 AS libtorrent
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.19
COPY --from=ghcr.io/astral-sh/uv:0.5.26 /uv /uvx /bin/
# set version label
ARG BUILD_DATE
ARG VERSION
@@ -16,7 +18,10 @@ LABEL maintainer="thespad"
# environment settings
ENV HOME="/config" \
PYTHONIOENCODING=utf-8 \
TMPDIR=/run/flexget-temp
TMPDIR=/run/flexget-temp \
UV_PROJECT_ENVIRONMENT=/lsiopy \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy
RUN \
echo "**** install packages ****" && \
@@ -36,24 +41,18 @@ RUN \
FLEXGET_VERSION=$(curl -s https://api.github.com/repos/flexget/flexget/releases/latest \
| awk '/tag_name/{print $4;exit}' FS='[""]'); \
fi && \
mkdir -p /tmp/flexget && \
mkdir -p /data && \
mkdir -p /run/flexget-temp /data && \
mkdir -p /app/flexget && \
curl -o \
/tmp/flexget.tar.gz -L \
"https://github.com/flexget/flexget/releases/download/${FLEXGET_VERSION}/FlexGet-${FLEXGET_VERSION#v}.tar.gz" && \
"https://github.com/Flexget/Flexget/archive/refs/tags/${FLEXGET_VERSION}.tar.gz" && \
tar xf \
/tmp/flexget.tar.gz -C \
/tmp/flexget --strip-components=1 && \
cd /tmp/flexget && \
python3 -m venv /lsiopy && \
pip install -U --no-cache-dir \
pip \
wheel && \
pip install -U --no-cache --find-links https://wheel-index.linuxserver.io/alpine-3.20/ \
click \
flexget==${FLEXGET_VERSION#v} \
requests \
-r requirements-docker.txt && \
/app/flexget --strip-components=1 && \
cd /app/flexget && \
uv venv /lsiopy && \
uv run scripts/bundle_webui.py && \
uv sync --frozen --no-dev --no-cache --group=all && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
apk del --purge \
Vendored
+269 -113
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 {
@@ -36,7 +36,7 @@ pipeline {
CI_PORT='5050'
CI_SSL='false'
CI_DELAY='120'
CI_DOCKERENV=''
CI_DOCKERENV='TZ=Europe/London'
CI_AUTH=''
CI_WEBPATH=''
}
@@ -59,11 +59,23 @@ pipeline {
steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash
containers=$(docker ps -aq)
echo "Pruning builder"
docker builder prune -f --builder container || :
containers=$(docker ps -q)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
BUILDX_CONTAINER_ID=$(docker ps -qf 'name=buildx_buildkit')
for container in ${containers}; do
if [[ "${container}" == "${BUILDX_CONTAINER_ID}" ]]; then
echo "skipping buildx container in docker stop"
else
echo "Stopping container ${container}"
docker stop ${container}
fi
done
fi
docker system prune -af --volumes || : '''
docker system prune -f --volumes || :
docker image prune -af || :
'''
script{
env.EXIT_STATUS = ''
env.LS_RELEASE = sh(
@@ -84,8 +96,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{
@@ -201,6 +217,7 @@ pipeline {
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
}
}
}
@@ -225,6 +242,7 @@ pipeline {
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
}
}
}
@@ -249,6 +267,7 @@ pipeline {
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
}
}
}
@@ -321,7 +340,7 @@ pipeline {
echo "Jenkinsfile is up to date."
fi
echo "Starting Stage 2 - Delete old templates"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml .github/workflows/package_trigger.yml"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
@@ -345,6 +364,35 @@ pipeline {
else
echo "No templates to delete"
fi
echo "Starting Stage 2.5 - Update init diagram"
if ! grep -q 'init_diagram:' readme-vars.yml; then
echo "Adding the key 'init_diagram' to readme-vars.yml"
sed -i '\\|^#.*changelog.*$|d' readme-vars.yml
sed -i 's|^changelogs:|# init diagram\\ninit_diagram:\\n\\n# changelog\\nchangelogs:|' readme-vars.yml
fi
mkdir -p ${TEMPDIR}/d2
docker run --rm -v ${TEMPDIR}/d2:/output -e PUID=$(id -u) -e PGID=$(id -g) -e RAW="true" ghcr.io/linuxserver/d2-builder:latest ${CONTAINER_NAME}:latest
ls -al ${TEMPDIR}/d2
yq -ei ".init_diagram |= load_str(\\"${TEMPDIR}/d2/${CONTAINER_NAME}-latest.d2\\")" readme-vars.yml
if [[ $(md5sum readme-vars.yml | cut -c1-8) != $(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/readme-vars.yml | cut -c1-8) ]]; then
echo "'init_diagram' has been updated. Updating repo and exiting build, new one will trigger based on commit."
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f main
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 main
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git main
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}
@@ -553,8 +601,42 @@ pipeline {
--label \"org.opencontainers.image.title=Flexget\" \
--label \"org.opencontainers.image.description=[Flexget](http://flexget.com/) is a multipurpose automation tool for all of your media.\" \
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false \
--provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
done
for p in $(jobs -p); do
wait "$p" || { echo "job $p failed" >&2; exit 1; }
done
fi
'''
}
}
}
}
// Build MultiArch Docker containers for push to LS Repo
@@ -585,8 +667,42 @@ pipeline {
--label \"org.opencontainers.image.title=Flexget\" \
--label \"org.opencontainers.image.description=[Flexget](http://flexget.com/) is a multipurpose automation tool for all of your media.\" \
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false \
--provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
done
for p in $(jobs -p); do
wait "$p" || { echo "job $p failed" >&2; exit 1; }
done
fi
'''
}
}
}
}
stage('Build ARM64') {
@@ -595,10 +711,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}\" \
@@ -614,18 +726,50 @@ pipeline {
--label \"org.opencontainers.image.title=Flexget\" \
--label \"org.opencontainers.image.description=[Flexget](http://flexget.com/) is a multipurpose automation tool for all of your media.\" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
--provenance=false --sbom=false \
--provenance=true --sbom=true --builder=container --load \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry_backoff(5,5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
sh '''#! /bin/bash
set -e
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
done
'''
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
done
for p in $(jobs -p); do
wait "$p" || { echo "job $p failed" >&2; exit 1; }
done
fi
'''
}
}
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
docker system prune -f --volumes || :
docker image prune -af || :
'''
}
}
}
@@ -650,7 +794,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"
@@ -729,6 +873,14 @@ pipeline {
}
sh '''#! /bin/bash
set -e
if grep -q 'docker-baseimage' <<< "${LS_REPO}"; then
echo "Detected baseimage, setting LSIO_FIRST_PARTY=true"
if [ -n "${CI_DOCKERENV}" ]; then
CI_DOCKERENV="LSIO_FIRST_PARTY=true|${CI_DOCKERENV}"
else
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi
fi
docker pull ghcr.io/linuxserver/ci:latest
if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
@@ -741,6 +893,7 @@ pipeline {
-e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e RELEASE_TAG=\"latest\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
@@ -750,6 +903,8 @@ pipeline {
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \
-e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \
-t ghcr.io/linuxserver/ci:latest \
python3 test_build.py'''
}
@@ -765,37 +920,23 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi
docker push ${PUSHIMAGE}:latest
docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${PUSHIMAGE}:${SEMVER}
fi
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
[[ ${PUSHIMAGE%%/*} =~ \\. ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
fi
done
'''
}
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
fi
done
'''
}
}
}
@@ -806,57 +947,34 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
fi
done
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:amd64-latest
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-latest
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
'''
}
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
'''
}
}
}
@@ -884,7 +1002,7 @@ pipeline {
echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "main",\
"name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**'${EXT_REPO}' Changes:**\\n\\n' > start
"body": "**CI Report:**\\n\\n'${CI_URL:-N/A}'\\n\\n**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": false}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
@@ -1017,29 +1135,67 @@ EOF
git config --global --unset commit.gpgsign
'''
script{
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"'
}
else if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
else {
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
}else{
if (currentBuild.currentResult == "SUCCESS"){
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=1681177
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}else{
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=16711680
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"'color'": '${JOB_WEBHOOK_COLOUR}',\
"footer": {"text" : "'"${JOB_WEBHOOK_FOOTER}"'"},\
"timestamp": "'${JOB_DATE}'",\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** '${JOB_WEBHOOK_STATUS}'\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
}
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()
}
+12 -13
View File
@@ -3,9 +3,8 @@
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
@@ -20,9 +19,8 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
@@ -55,7 +53,6 @@ The architectures supported by this image are:
| :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Application Setup
@@ -65,21 +62,21 @@ See the [FlexGet website](https://flexget.com/) for more information.
### Download folders
We have set `/data` as an ***optional path***, 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 `/data` as an ***optional path***, this is because it is the easiest way to get started.
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.
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
>[!NOTE]
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml
@@ -129,7 +126,7 @@ Containers are configured using parameters passed at runtime (such as those abov
| Parameter | Function |
| :----: | --- |
| `-p 5050` | HTTP port for the WebUI. |
| `-p 5050:5050` | HTTP port for the WebUI. |
| `-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). |
@@ -277,7 +274,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
@@ -292,16 +290,17 @@ docker build \
-t lscr.io/linuxserver/flexget:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions
* **18.09.24:** - Suppress creation of empty log file when WebUI password is set.
* **17.08.24:** - Revert to Alpine 3.20 due to 1st party plugin incompatibility with Python 3.12.
* **19.06.24:** - Rebase to Alpine 3.20.
* **20.03.24:** - Rebase to Alpine 3.19.
+1 -1
View File
@@ -24,7 +24,7 @@ repo_vars:
- CI_PORT='5050'
- CI_SSL='false'
- CI_DELAY='120'
- CI_DOCKERENV=''
- CI_DOCKERENV='TZ=Europe/London'
- CI_AUTH=''
- CI_WEBPATH=''
sponsor_links:
+222 -174
View File
@@ -1,174 +1,222 @@
NAME VERSION TYPE
7zip 23.01-r0 apk
Simple Launcher 1.1.0.14 dotnet (+5 duplicates)
ada-libs 2.7.4-r0 apk
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.4-r0 apk
aniso8601 9.0.1 python
apk-tools 2.14.4-r0 apk
apscheduler 3.10.4 python
attrs 24.2.0 python
autocommand 2.2.2 python (+1 duplicate)
babelfish 0.6.1 python
backports-tarfile 1.2.0 python (+1 duplicate)
bash 5.2.21-r0 apk
beautifulsoup4 4.12.3 python
blinker 1.8.2 python
boost1.82-python3 1.82.0-r3 apk
boost1.82-system 1.82.0-r3 apk
brotli 1.1.0 python
brotli-libs 1.1.0-r1 apk
busybox 1.36.1-r19 apk
busybox-binsh 1.36.1-r19 apk
c-ares 1.27.0-r0 apk
ca-certificates 20240226-r0 apk
ca-certificates-bundle 20240226-r0 apk
catatonit 0.2.0-r0 apk
certifi 2024.8.30 python
cffi 1.17.1 python
charset-normalizer 3.3.2 python
cheroot 10.0.1 python
cherrypy 18.10.0 python
click 8.1.7 python
cloudscraper 1.2.71 python
colorama 0.4.6 python
coreutils 9.4-r2 apk
coreutils-env 9.4-r2 apk
coreutils-fmt 9.4-r2 apk
coreutils-sha512sum 9.4-r2 apk
cryptography 43.0.1 python
curl 8.9.1-r0 apk
decorator 5.1.1 python
deluge-client 1.10.2 python
feedparser 6.0.11 python
findutils 4.9.0-r5 apk
flask 3.0.3 python
flask-compress 1.15 python
flask-cors 5.0.0 python
flask-login 0.6.3 python
flask-restx 1.3.0 python
flexget 3.11.46 python
gdbm 1.23-r1 apk
greenlet 3.0.3 python
guessit 3.8.0 python
html5lib 1.1 python
icu-data-en 74.1-r0 apk
icu-libs 74.1-r0 apk
idna 3.8 python
importlib-metadata 8.0.0 python
importlib-resources 5.13.0 python
importlib-resources 6.4.0 python
inflect 7.3.1 python
itsdangerous 2.2.0 python
jaraco-collections 5.1.0 python
jaraco-context 5.3.0 python
jaraco-context 6.0.1 python
jaraco-functools 4.0.1 python
jaraco-functools 4.0.2 python
jaraco-text 3.12.1 python
jaraco-text 4.0.0 python
jinja2 3.1.4 python
jq 1.7.1-r0 apk
jsonschema 4.23.0 python
jsonschema-specifications 2023.12.1 python
libacl 2.3.1-r4 apk
libattr 2.5.1-r5 apk
libbase64 0.5.0-r0 apk
libbsd 0.11.7-r3 apk
libbz2 1.0.8-r6 apk
libc-utils 0.7.2-r5 apk
libcrypto3 3.1.7-r0 apk
libcurl 8.9.1-r0 apk
libexpat 2.6.3-r0 apk
libffi 3.4.4-r3 apk
libgcc 13.2.1_git20231014-r0 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
libpanelw 6.4_p20231125-r0 apk
libproc2 4.0.4-r0 apk
libssl3 3.1.7-r0 apk
libstdc++ 13.2.1_git20231014-r0 apk
libunistring 1.1-r2 apk
linux-pam 1.5.3-r7 apk
loguru 0.7.2 python
markdown-it-py 3.0.0 python
markupsafe 2.1.5 python
mdurl 0.1.2 python
more-itertools 10.3.0 python
more-itertools 10.5.0 python
mpdecimal 2.5.1-r2 apk
musl 1.2.4_git20230717-r4 apk
musl-utils 1.2.4_git20230717-r4 apk
my-test-package 1.0 python
ncurses-terminfo-base 6.4_p20231125-r0 apk
netcat-openbsd 1.226-r0 apk
nghttp2-libs 1.58.0-r0 apk
nodejs 20.15.1-r0 apk
oniguruma 6.9.9-r0 apk
packaging 24.1 python (+1 duplicate)
pendulum 3.0.0 python
pip 24.2 python
platformdirs 4.2.2 python
plumbum 1.8.3 python
portend 3.2.0 python
procps-ng 4.0.4-r0 apk
psutil 6.0.0 python
pyc 3.11.10-r0 apk
pycparser 2.22 python
pygments 2.18.0 python
pynzb 0.1.0 python
pyparsing 3.1.4 python
pyrss2gen 1.1 python
python-dateutil 2.9.0.post0 python
python-telegram-bot 12.8 python
python3 3.11.10-r0 apk
python3-pyc 3.11.10-r0 apk
python3-pycache-pyc0 3.11.10-r0 apk
pytz 2024.1 python
pyyaml 6.0.2 python
qbittorrent-api 2024.8.65 python
readline 8.2.1-r2 apk
rebulk 3.2.0 python
referencing 0.35.1 python
requests 2.32.3 python
requests-toolbelt 1.0.0 python
rich 13.8.0 python
rpds-py 0.20.0 python
rpyc 6.0.0 python
scanelf 1.3.7-r2 apk
setuptools 74.1.2 python
sgmllib3k 1.0.0 python
shadow 4.14.2-r0 apk
six 1.16.0 python
skalibs 2.14.0.1-r0 apk
soupsieve 2.6 python
sqlalchemy 2.0.34 python
sqlite-libs 3.44.2-r0 apk
ssl_client 1.36.1-r19 apk
tempora 5.7.0 python
time-machine 2.15.0 python
tomli 2.0.1 python
tornado 6.4.1 python
transmission-rpc 7.0.11 python
triangular 2.5.0 npm
typeguard 4.3.0 python
typing-extensions 4.12.2 python (+1 duplicate)
tzdata 2024.1 python
tzdata 2024a-r0 apk
tzlocal 5.2 python
urllib3 1.26.20 python
utmps-libs 0.1.2.2-r0 apk
webencodings 0.5.1 python
werkzeug 3.0.4 python
wheel 0.43.0 python
wheel 0.44.0 python
xz-libs 5.4.5-r0 apk
zc-lockfile 3.0.post1 python
zipp 3.19.2 python
zlib 1.3.1-r0 apk
zstandard 0.23.0 python
zxcvbn 4.4.28 python
NAME VERSION TYPE
7zip 23.01-r0 apk
ada-libs 2.7.4-r0 apk
aiofiles 24.1.0 python
aiohappyeyeballs 2.6.1 python
aiohttp 3.12.15 python
aiohttp-socks 0.10.1 python
aiosignal 1.4.0 python
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.8-r0 apk
aniso8601 10.0.1 python
anyio 4.10.0 python
apk-tools 2.14.4-r0 apk
apscheduler 3.11.0 python
attrs 25.3.0 python
autocommand 2.2.2 python (+1 duplicate)
babelfish 0.6.1 python
backports-tarfile 1.2.0 python (+1 duplicate)
bash 5.2.21-r0 apk
bcrypt 4.3.0 python
beautifulsoup4 4.13.5 python
blinker 1.9.0 python
boost1.82-python3 1.82.0-r3 apk
boost1.82-system 1.82.0-r3 apk
boto3 1.40.16 python
botocore 1.40.16 python
brotli 1.1.0 python
brotli-libs 1.1.0-r1 apk
busybox 1.36.1-r20 apk
busybox-binsh 1.36.1-r20 apk
c-ares 1.27.0-r0 apk
ca-certificates 20250619-r0 apk
ca-certificates-bundle 20250619-r0 apk
catatonit 0.2.0-r0 apk
certifi 2025.8.3 python
cffi 1.17.1 python
chardet 5.2.0 python
charset-normalizer 3.4.3 python
cheroot 10.0.1 python
cherrypy 18.10.0 python
cli UNKNOWN binary
cli-32 UNKNOWN binary
cli-64 UNKNOWN binary
cli-arm64 UNKNOWN binary
click 8.2.1 python
click-option-group 0.5.7 python
coreutils 9.4-r2 apk
coreutils-env 9.4-r2 apk
coreutils-fmt 9.4-r2 apk
coreutils-sha512sum 9.4-r2 apk
cryptography 45.0.6 python
curl 8.12.1-r0 apk
decorator 5.2.1 python
deluge-client 1.10.2 python
dogpile-cache 1.4.0 python
enzyme 0.5.2 python
feedparser 6.0.11 python
findutils 4.9.0-r5 apk
flask 3.1.2 python
flask-compress 1.18 python
flask-cors 6.0.1 python
flask-login 0.6.3 python
flask-restx 1.3.0 python
flexget 3.18.4 python
frozenlist 1.7.0 python
ftputil 5.1.0 python
gdbm 1.23-r1 apk
greenlet 3.2.4 python
guessit 3.8.0 python
gui UNKNOWN binary
gui-32 UNKNOWN binary
gui-64 UNKNOWN binary
gui-arm64 UNKNOWN binary
h11 0.16.0 python
h2 4.3.0 python
hpack 4.1.0 python
html5lib 1.1 python
httpcore 1.0.9 python
httpx 0.28.1 python
hyperframe 6.1.0 python
icu-data-en 74.1-r1 apk
icu-libs 74.1-r1 apk
idna 3.10 python
importlib-metadata 8.0.0 python
importlib-resources 6.5.2 python
inflect 7.3.1 python
itsdangerous 2.2.0 python
jaraco-collections 5.1.0 python
jaraco-collections 5.2.1 python
jaraco-context 5.3.0 python
jaraco-context 6.0.1 python
jaraco-functools 4.0.1 python
jaraco-functools 4.3.0 python
jaraco-text 3.12.1 python
jaraco-text 4.0.0 python
jinja2 3.1.6 python
jmespath 1.0.1 python
jq 1.7.1-r0 apk
jsonschema 4.25.1 python
jsonschema-specifications 2025.4.1 python
libacl 2.3.1-r4 apk
libattr 2.5.1-r5 apk
libbase64 0.5.0-r0 apk
libbsd 0.11.7-r3 apk
libbz2 1.0.8-r6 apk
libc-utils 0.7.2-r5 apk
libcrypto3 3.1.8-r0 apk
libcurl 8.12.1-r0 apk
libexpat 2.7.0-r0 apk
libffi 3.4.4-r3 apk
libgcc 13.2.1_git20231014-r0 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
libpanelw 6.4_p20231125-r0 apk
libproc2 4.0.4-r0 apk
libpsl 0.21.5-r0 apk
libssl3 3.1.8-r0 apk
libstdc++ 13.2.1_git20231014-r0 apk
libunistring 1.1-r2 apk
linux-pam 1.5.3-r7 apk
loguru 0.7.3 python
markdown-it-py 4.0.0 python
markupsafe 3.0.2 python
matrix-nio 0.25.2 python
mdurl 0.1.2 python
more-itertools 10.3.0 python
more-itertools 10.7.0 python
mpdecimal 2.5.1-r2 apk
multidict 6.6.4 python
musl 1.2.4_git20230717-r5 apk
musl-utils 1.2.4_git20230717-r5 apk
my-test-package 1.0 python
ncurses-terminfo-base 6.4_p20231125-r0 apk
netcat-openbsd 1.226-r0 apk
nghttp2-libs 1.58.0-r0 apk
nodejs 20.15.1-r0 apk
oniguruma 6.9.9-r0 apk
packaging 24.2 python
packaging 25.0 python
paramiko 3.5.1 python
pbr 7.0.1 python
pendulum 3.1.0 python
pillow 11.3.0 python
platformdirs 4.2.2 python
platformdirs 4.3.8 python
plexapi 4.17.0 python
plumbum 1.9.0 python
portend 3.2.1 python
procps-ng 4.0.4-r0 apk
propcache 0.3.2 python
psutil 7.0.0 python
pyc 3.11.13-r0 apk
pycparser 2.22 python
pycryptodome 3.23.0 python
pygments 2.19.2 python
pynacl 1.5.0 python
pynzb 0.1.0 python
pyparsing 3.2.3 python
pyrss2gen 1.1 python
pysftp 0.2.9 python
pysubs2 1.8.0 python
python-dateutil 2.9.0.post0 python
python-socks 2.7.2 python
python-telegram-bot 22.3 python
python3 3.11.13-r0 apk
python3-pyc 3.11.13-r0 apk
python3-pycache-pyc0 3.11.13-r0 apk
pytz 2025.2 python
pyyaml 6.0.2 python
pyzstd 0.17.0 python
qbittorrent-api 2025.7.0 python
rarfile 4.2 python
readline 8.2.1-r2 apk
rebulk 3.2.0 python
referencing 0.36.2 python
requests 2.32.5 python
rich 14.1.0 python
rpds-py 0.27.0 python
rpyc 6.0.2 python
s3transfer 0.13.1 python
scanelf 1.3.7-r2 apk
setuptools 80.9.0 python
sgmllib3k 1.0.0 python
shadow 4.14.2-r0 apk
six 1.17.0 python
skalibs 2.14.0.1-r0 apk
sniffio 1.3.1 python
socksio 1.0.0 python
soupsieve 2.7 python
sqlalchemy 2.0.43 python
sqlite-libs 3.44.2-r1 apk
srt 3.5.3 python
ssl_client 1.36.1-r20 apk
stevedore 5.4.1 python
subliminal 2.2.1 python
tempora 5.8.1 python
tomli 2.0.1 python
tomli 2.2.1 python
transmission-rpc 7.0.11 python
triangular 2.5.0 npm
typeguard 4.3.0 python
typing-extensions 4.12.2 python
typing-extensions 4.14.1 python
tzdata 2025.2 python
tzdata 2025b-r0 apk
tzlocal 5.3.1 python
unpaddedbase64 2.1.0 python
urllib3 2.5.0 python
utmps-libs 0.1.2.2-r0 apk
webencodings 0.5.1 python
werkzeug 3.1.3 python
wheel 0.45.1 python
xz-libs 5.4.5-r1 apk
yarl 1.20.1 python
zc-lockfile 3.0.post1 python
zipp 3.19.2 python
zlib 1.3.1-r0 apk
zxcvbn 4.5.0 python
+63 -25
View File
@@ -6,38 +6,33 @@ project_url: "http://flexget.com/"
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/flexget-banner.png"
project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is a multipurpose automation tool for all of your media."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Downloaders"
# 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"}
# container parameters
common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}"
param_usage_include_env: true
param_env_vars:
- { env_var: "FG_LOG_LEVEL", env_value: "info", desc: "Set the FlexGet logging level." }
- { env_var: "FG_LOG_FILE", env_value: "/config/flexget.log", desc: "Set the FlexGet log file location." }
- { env_var: "FG_CONFIG_FILE", env_value: "/config/.flexget/config.yml", desc: "Set the FlexGet config file location." }
- {env_var: "FG_LOG_LEVEL", env_value: "info", desc: "Set the FlexGet logging level."}
- {env_var: "FG_LOG_FILE", env_value: "/config/flexget.log", desc: "Set the FlexGet log file location."}
- {env_var: "FG_CONFIG_FILE", env_value: "/config/.flexget/config.yml", desc: "Set the FlexGet config file location."}
param_usage_include_vols: true
param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/data", desc: "Local path for FlexGet config files." }
- {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/data", desc: "Local path for FlexGet config files."}
param_usage_include_ports: true
param_ports:
- { external_port: "5050", internal_port: "5050", port_desc: "HTTP port for the WebUI." }
- {external_port: "5050", internal_port: "5050", port_desc: "HTTP port for the WebUI."}
# optional container parameters
opt_param_usage_include_env: true
opt_param_env_vars:
- { env_var: "FG_WEBUI_PASSWORD", env_value: "info", desc: "Set the FlexGet webui password. Pay attention to Bash/YAML reserved characters." }
- {env_var: "FG_WEBUI_PASSWORD", env_value: "info", desc: "Set the FlexGet webui password. Pay attention to Bash/YAML reserved characters."}
opt_param_usage_include_vols: true
opt_param_volumes:
- { vol_path: "/data", vol_host_path: "/path/to/downloads", desc: "Default path for downloads." }
- {vol_path: "/data", vol_host_path: "/path/to/downloads", desc: "Default path for downloads."}
readonly_supported: true
# application setup block
app_setup_block_enabled: true
app_setup_block: |
@@ -47,17 +42,60 @@ app_setup_block: |
### Download folders
We have set `/data` as an ***optional path***, 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 `/data` as an ***optional path***, this is because it is the easiest way to get started.
Use the optional paths if you don't understand, or don't want hardlinks/atomic moves.
The folks over at servarr.com wrote a good [write-up](https://wiki.servarr.com/docker-guide#consistent-and-well-planned-paths) on how to get started with this.
# init diagram
init_diagram: |
"flexget:latest": {
docker-mods
base {
fix-attr +\nlegacy cont-init
}
docker-mods -> base
legacy-services
custom services
init-services -> legacy-services
init-services -> custom services
custom services -> legacy-services
legacy-services -> ci-service-check
init-migrations -> init-adduser
init-os-end -> init-config
init-config -> init-config-end
init-flexget-config -> init-config-end
init-os-end -> init-crontab-config
init-mods-end -> init-custom-files
init-adduser -> init-device-perms
base -> init-envfile
init-config -> init-flexget-config
base -> init-migrations
base -> init-mods
init-config-end -> init-mods
init-mods -> init-mods-end
init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install
base -> init-os-end
init-adduser -> init-os-end
init-device-perms -> init-os-end
init-envfile -> init-os-end
init-migrations -> init-os-end
init-custom-files -> init-services
init-mods-end -> init-services
init-services -> svc-cron
svc-cron -> legacy-services
init-services -> svc-flexget
svc-flexget -> legacy-services
}
Base Images: {
"baseimage-alpine:3.19"
}
"flexget:latest" <- Base Images
# changelog
changelogs:
- { date: "17.08.24:", desc: "Revert to Alpine 3.20 due to 1st party plugin incompatibility with Python 3.12."}
- { date: "19.06.24:", desc: "Rebase to Alpine 3.20."}
- { date: "20.03.24:", desc: "Rebase to Alpine 3.19."}
- { date: "07.10.23:", desc: "Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar)."}
- { date: "10.08.23:", desc: "Bump unrar to 6.2.10."}
- { date: "03.07.23:", desc: "Initial Release." }
- {date: "18.09.24:", desc: "Suppress creation of empty log file when WebUI password is set."}
- {date: "17.08.24:", desc: "Revert to Alpine 3.20 due to 1st party plugin incompatibility with Python 3.12."}
- {date: "19.06.24:", desc: "Rebase to Alpine 3.20."}
- {date: "20.03.24:", desc: "Rebase to Alpine 3.19."}
- {date: "07.10.23:", desc: "Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar)."}
- {date: "10.08.23:", desc: "Bump unrar to 6.2.10."}
- {date: "03.07.23:", desc: "Initial Release."}
Executable → Regular
View File
@@ -29,7 +29,7 @@ if [[ ! -f "${FG_CONFIG_FILE}" ]]; then
fi
if [[ -n "${FG_WEBUI_PASSWORD}" ]]; then
if ! flexget -c "${FG_CONFIG_FILE}" --loglevel error web passwd "${FG_WEBUI_PASSWORD}" | tee /dev/stderr | grep -q 'Updated password'; then
if ! flexget -c "${FG_CONFIG_FILE}" --logfile "${FG_LOG_FILE:-/config/.flexget/flexget.log}" --loglevel error web passwd "${FG_WEBUI_PASSWORD}" | tee /dev/stderr | grep -q 'Updated password'; then
echo "Halting init, please address the above issues and recreate the container"
sleep infinity
fi
+1 -1
View File
@@ -3,5 +3,5 @@
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 5050" \
s6-setuidgid abc python3 /lsiopy/bin/flexget \
cd /config s6-setuidgid abc python3 /lsiopy/bin/flexget \
--loglevel "${FG_LOG_LEVEL:-info}" --logfile "${FG_LOG_FILE:-/config/.flexget/flexget.log}" -c "${FG_CONFIG_FILE:-/config/.flexget/config.yml}" daemon start --autoreload-config