From 78f41e411e9b281046835c9ba123a079ad835c5d Mon Sep 17 00:00:00 2001 From: thespad Date: Mon, 6 Apr 2026 21:25:09 +0000 Subject: [PATCH 1/4] Update upstream to new fork, rebase to alpine 3.23 --- .github/FUNDING.yml | 1 - .github/workflows/external_trigger.yml | 2 +- Dockerfile | 47 +++---- Dockerfile.aarch64 | 49 +++---- Jenkinsfile | 188 ++++++++++++------------- README.md | 12 +- jenkins-vars.yml | 10 +- readme-vars.yml | 8 +- 8 files changed, 145 insertions(+), 172 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 14e799a..7eaac77 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,2 @@ github: linuxserver open_collective: linuxserver -custom: ["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EWQADB5AMVRFU",] diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 87e43ef..ee112d7 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -29,7 +29,7 @@ jobs: echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY echo "> External trigger running off of nightly branch. To disable this trigger, add \`mylar3_nightly\` 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/mylar3/mylar3/commits/1000papercuts" | jq -r '. | .sha' | cut -c1-8) + EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/MylarComics/mylar3/commits/nightly" | jq -r '. | .sha' | cut -c1-8) echo "Type is \`github_commit\`" >> $GITHUB_STEP_SUMMARY if grep -q "^mylar3_nightly_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY diff --git a/Dockerfile b/Dockerfile index 469a389..1d37858 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM ghcr.io/linuxserver/unrar:latest AS unrar -FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy +FROM ghcr.io/linuxserver/baseimage-alpine:3.23 # set version label ARG BUILD_DATE @@ -11,57 +11,46 @@ ARG MYLAR3_RELEASE LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="aptalca" -ARG DEBIAN_FRONTEND="noninteractive" - RUN \ echo "**** install build dependencies ****" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ + apk add --no-cache --virtual=build-dependencies \ + build-base \ + jpeg-dev \ libffi-dev \ - libjpeg9-dev \ libwebp-dev \ python3-dev \ - zlib1g-dev && \ + zlib-dev && \ echo "**** install runtime packages ****" && \ - apt-get install -y --no-install-recommends \ - libjpeg9 \ + apk add --no-cache \ + jpeg \ + libwebp-tools \ nodejs \ - python3-venv \ - webp \ - zlib1g-dev && \ + python3 \ + zlib && \ echo "**** install mylar3 ****" && \ if [ -z ${MYLAR3_RELEASE+x} ]; then \ - MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/mylar3/mylar3/commits/1000papercuts \ + MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/MylarComics/mylar3/commits/nightly \ | jq -r '.sha' | cut -c1-8); \ fi && \ mkdir /app/mylar3 && \ curl -o \ /tmp/mylar3.tar.gz -L \ - "https://github.com/mylar3/mylar3/archive/${MYLAR3_RELEASE}.tar.gz" && \ + "https://github.com/MylarComics/mylar3/archive/${MYLAR3_RELEASE}.tar.gz" && \ tar xf /tmp/mylar3.tar.gz -C \ /app/mylar3/ --strip-components=1 && \ cd /app/mylar3 && \ python3 -m venv /lsiopy && \ pip install -U --no-cache-dir \ pip \ - wheel && \ - pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r requirements.txt && \ + setuptools && \ + pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r requirements.txt && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ - apt-get -y purge \ - build-essential \ - libffi-dev \ - libjpeg9-dev \ - libwebp-dev \ - python3-dev \ - zlib1g-dev && \ - apt-get -y autoremove && \ + apk del --purge \ + build-dependencies && \ rm -rf \ - /tmp/* \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - $HOME/.cache + $HOME/.cache \ + /tmp/* # add local files COPY root/ / diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 6e0199d..e362a64 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,8 +1,8 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar +FROM ghcr.io/linuxserver/unrar:latest AS unrar -FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy +FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.23 # set version label ARG BUILD_DATE @@ -11,57 +11,46 @@ ARG MYLAR3_RELEASE LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="aptalca" -ARG DEBIAN_FRONTEND="noninteractive" - RUN \ echo "**** install build dependencies ****" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ + apk add --no-cache --virtual=build-dependencies \ + build-base \ + jpeg-dev \ libffi-dev \ - libjpeg9-dev \ libwebp-dev \ python3-dev \ - zlib1g-dev && \ + zlib-dev && \ echo "**** install runtime packages ****" && \ - apt-get install -y --no-install-recommends \ - libjpeg9 \ + apk add --no-cache \ + jpeg \ + libwebp-tools \ nodejs \ - python3-venv \ - webp \ - zlib1g-dev && \ + python3 \ + zlib && \ echo "**** install mylar3 ****" && \ if [ -z ${MYLAR3_RELEASE+x} ]; then \ - MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/mylar3/mylar3/commits/1000papercuts \ + MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/MylarComics/mylar3/commits/nightly \ | jq -r '.sha' | cut -c1-8); \ fi && \ mkdir /app/mylar3 && \ curl -o \ /tmp/mylar3.tar.gz -L \ - "https://github.com/mylar3/mylar3/archive/${MYLAR3_RELEASE}.tar.gz" && \ + "https://github.com/MylarComics/mylar3/archive/${MYLAR3_RELEASE}.tar.gz" && \ tar xf /tmp/mylar3.tar.gz -C \ /app/mylar3/ --strip-components=1 && \ cd /app/mylar3 && \ python3 -m venv /lsiopy && \ pip install -U --no-cache-dir \ pip \ - wheel && \ - pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r requirements.txt && \ + setuptools && \ + pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r requirements.txt && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ - apt-get -y purge \ - build-essential \ - libffi-dev \ - libjpeg9-dev \ - libwebp-dev \ - python3-dev \ - zlib1g-dev && \ - apt-get -y autoremove && \ + apk del --purge \ + build-dependencies && \ rm -rf \ - /tmp/* \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - $HOME/.cache + $HOME/.cache \ + /tmp/* # add local files COPY root/ / diff --git a/Jenkinsfile b/Jenkinsfile index d54f22f..258e37c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,8 +19,8 @@ pipeline { DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat') QUAYIO_API_TOKEN=credentials('quayio-repo-api-token') GIT_SIGNING_KEY=credentials('484fbca6-9a4f-455e-b9e3-97ac98785f5f') - EXT_GIT_BRANCH = '1000papercuts' - EXT_USER = 'mylar3' + EXT_GIT_BRANCH = 'nightly' + EXT_USER = 'MylarComics' EXT_REPO = 'mylar3' BUILD_VERSION_ARG = 'MYLAR3_RELEASE' LS_USER = 'linuxserver' @@ -29,14 +29,14 @@ pipeline { DOCKERHUB_IMAGE = 'linuxserver/mylar3' DEV_DOCKERHUB_IMAGE = 'lsiodev/mylar3' PR_DOCKERHUB_IMAGE = 'lspipepr/mylar3' - DIST_IMAGE = 'ubuntu' + DIST_IMAGE = 'alpine' MULTIARCH='true' CI='true' CI_WEB='true' CI_PORT='8090' CI_SSL='false' CI_DELAY='120' - CI_DOCKERENV='TZ=US/Pacific' + CI_DOCKERENV='TZ=Etc/UTC' CI_AUTH='user:password' CI_WEBPATH='' } @@ -78,6 +78,7 @@ pipeline { ''' script{ env.EXIT_STATUS = '' + env.CI_TEST_ATTEMPTED = '' env.LS_RELEASE = sh( script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:nightly 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''', returnStdout: true).trim() @@ -96,7 +97,7 @@ pipeline { env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.PULL_REQUEST = env.CHANGE_ID - env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./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' if ( env.SYFT_IMAGE_TAG == null ) { env.SYFT_IMAGE_TAG = 'latest' } @@ -602,7 +603,7 @@ pipeline { --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.title=Mylar3\" \ - --label \"org.opencontainers.image.description=[Mylar3](https://github.com/mylar3/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.\" \ + --label \"org.opencontainers.image.description=[Mylar3](https://github.com/MylarComics/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.\" \ --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} ." @@ -671,7 +672,7 @@ pipeline { --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.title=Mylar3\" \ - --label \"org.opencontainers.image.description=[Mylar3](https://github.com/mylar3/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.\" \ + --label \"org.opencontainers.image.description=[Mylar3](https://github.com/MylarComics/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.\" \ --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} ." @@ -733,7 +734,7 @@ pipeline { --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \ --label \"org.opencontainers.image.title=Mylar3\" \ - --label \"org.opencontainers.image.description=[Mylar3](https://github.com/mylar3/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.\" \ + --label \"org.opencontainers.image.description=[Mylar3](https://github.com/MylarComics/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.\" \ --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} ." @@ -881,6 +882,7 @@ pipeline { script{ env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html' env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json' + env.CI_TEST_ATTEMPTED = 'true' } sh '''#! /bin/bash set -e @@ -1083,98 +1085,13 @@ EOF ) ''' } } - // If this is a Pull request send the CI link as a comment on it - stage('Pull Request Comment') { - when { - not {environment name: 'CHANGE_ID', value: ''} - environment name: 'EXIT_STATUS', value: '' - } - steps { - sh '''#! /bin/bash - # Function to retrieve JSON data from URL - get_json() { - local url="$1" - local response=$(curl -s "$url") - if [ $? -ne 0 ]; then - echo "Failed to retrieve JSON data from $url" - return 1 - fi - local json=$(echo "$response" | jq .) - if [ $? -ne 0 ]; then - echo "Failed to parse JSON data from $url" - return 1 - fi - echo "$json" - } - - build_table() { - local data="$1" - - # Get the keys in the JSON data - local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]') - - # Check if keys are empty - if [ -z "$keys" ]; then - echo "JSON report data does not contain any keys or the report does not exist." - return 1 - fi - - # Build table header - local header="| Tag | Passed |\\n| --- | --- |\\n" - - # Loop through the JSON data to build the table rows - local rows="" - for build in $keys; do - local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success") - if [ "$status" = "true" ]; then - status="✅" - else - status="❌" - fi - local row="| "$build" | "$status" |\\n" - rows="${rows}${row}" - done - - local table="${header}${rows}" - local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g') - echo "$escaped_table" - } - - if [[ "${CI}" = "true" ]]; then - # Retrieve JSON data from URL - data=$(get_json "$CI_JSON_URL") - # Create table from JSON data - table=$(build_table "$data") - echo -e "$table" - - curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ - -H "Accept: application/vnd.github.v3+json" \ - "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ - -d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}" - else - curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ - -H "Accept: application/vnd.github.v3+json" \ - "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ - -d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}" - fi - ''' - - } - } } /* ###################### - Send status to Discord + Comment on PR and Send status to Discord ###################### */ post { always { - sh '''#!/bin/bash - rm -rf /config/.ssh/id_sign - rm -rf /config/.ssh/id_sign.pub - git config --global --unset gpg.format - git config --global --unset user.signingkey - git config --global --unset commit.gpgsign - ''' - script{ + script { env.JOB_DATE = sh( script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''', returnStdout: true).trim() @@ -1217,6 +1134,87 @@ EOF "username": "Jenkins"}' ${BUILDS_DISCORD} ''' } } + script { + if (env.GITHUBIMAGE =~ /lspipepr/){ + if (env.CI_TEST_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: \\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 + ''' + } + } + } + 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 diff --git a/README.md b/README.md index 89a5f08..6f71661 100644 --- a/README.md +++ b/README.md @@ -37,9 +37,9 @@ Find us at: [![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-mylar3%2Fjob%2Fnightly%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-mylar3/job/nightly/) [![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%2Fmylar3%2Fnightly%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/mylar3/nightly/index.html) -[Mylar3](https://github.com/mylar3/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL. +[Mylar3](https://github.com/MylarComics/mylar3) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL. -[![mylar3](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/mylar-icon.png)](https://github.com/mylar3/mylar3) +[![mylar3](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/mylar-icon.png)](https://github.com/MylarComics/mylar3) ## Supported Architectures @@ -60,14 +60,13 @@ This image provides various versions that are available via tags. Please read th | Tag | Available | Description | | :----: | :----: |--- | -| latest | ✅ | Commits to Mylar3 `python3-dev` branch | -| nightly | ✅ | Commits to Mylar3 `1000papercuts` branch (ubuntu) | -| unstable | ✅ | Commits to Mylar3 `1000papercuts` branch (alpine) | +| latest | ✅ | Stable releases | +| nightly | ✅ | Commits to nightly branch | ## Application Setup The web ui for settings etc, is on `http://SERVERIP:8090` -For more detailed setup options, refer to [Mylar3](https://github.com/mylar3/mylar3). +For more detailed setup options, refer to [Mylar3](https://github.com/MylarComics/mylar3). ## Usage @@ -289,6 +288,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **06.04.26:** - Switch upstream to maintained fork at https://github.com/MylarComics/mylar3. Drop `unstable` tag. Rebase to Alpine 3.23. * **19.02.26:** - Rebase `nightly` tag to build commits from upstream `1000papercuts` branch. * **05.02.26:** - Release `unstable` tag based on commits to upstream `1000papercuts` branch. * **10.11.25:** - Rebase to Ubuntu Jammy. diff --git a/jenkins-vars.yml b/jenkins-vars.yml index 1418d35..167308d 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -7,8 +7,8 @@ release_type: prerelease release_tag: nightly ls_branch: nightly repo_vars: - - EXT_GIT_BRANCH = '1000papercuts' - - EXT_USER = 'mylar3' + - EXT_GIT_BRANCH = 'nightly' + - EXT_USER = 'MylarComics' - EXT_REPO = 'mylar3' - BUILD_VERSION_ARG = 'MYLAR3_RELEASE' - LS_USER = 'linuxserver' @@ -17,15 +17,13 @@ repo_vars: - DOCKERHUB_IMAGE = 'linuxserver/mylar3' - DEV_DOCKERHUB_IMAGE = 'lsiodev/mylar3' - PR_DOCKERHUB_IMAGE = 'lspipepr/mylar3' - - DIST_IMAGE = 'ubuntu' + - DIST_IMAGE = 'alpine' - MULTIARCH='true' - CI='true' - CI_WEB='true' - CI_PORT='8090' - CI_SSL='false' - CI_DELAY='120' - - CI_DOCKERENV='TZ=US/Pacific' + - CI_DOCKERENV='TZ=Etc/UTC' - CI_AUTH='user:password' - CI_WEBPATH='' -sponsor_links: - - { name: "Mylar3", url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EWQADB5AMVRFU" } diff --git a/readme-vars.yml b/readme-vars.yml index 9055ea2..fc4f395 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -2,7 +2,7 @@ # project information project_name: mylar3 -project_url: "https://github.com/mylar3/mylar3" +project_url: "https://github.com/MylarComics/mylar3" project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/mylar-icon.png" project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL." project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" @@ -13,9 +13,8 @@ available_architectures: # development version development_versions: true development_versions_items: - - {tag: "latest", desc: "Commits to Mylar3 `python3-dev` branch"} - - {tag: "nightly", desc: "Commits to Mylar3 `1000papercuts` branch (ubuntu)"} - - {tag: "unstable", desc: "Commits to Mylar3 `1000papercuts` branch (alpine)"} + - {tag: "latest", desc: "Stable releases"} + - {tag: "nightly", desc: "Commits to nightly branch"} # container parameters param_container_name: "{{ project_name }}" param_usage_include_vols: true @@ -79,6 +78,7 @@ init_diagram: | "mylar3:nightly" <- Base Images # changelog changelogs: + - {date: "06.04.26:", desc: "Switch upstream to maintained fork at https://github.com/MylarComics/mylar3. Drop `unstable` tag. Rebase to Alpine 3.23."} - {date: "19.02.26:", desc: "Rebase `nightly` tag to build commits from upstream `1000papercuts` branch."} - {date: "05.02.26:", desc: "Release `unstable` tag based on commits to upstream `1000papercuts` branch."} - {date: "10.11.25:", desc: "Rebase to Ubuntu Jammy."} From 7b8d5233efe2f29f65c538844df7023953c6bf16 Mon Sep 17 00:00:00 2001 From: thespad Date: Mon, 6 Apr 2026 21:43:24 +0000 Subject: [PATCH 2/4] Stay with Jammy --- Dockerfile | 39 ++++++++++++++++++++++++--------------- Dockerfile.aarch64 | 39 ++++++++++++++++++++++++--------------- jenkins-vars.yml | 2 +- readme-vars.yml | 2 +- 4 files changed, 50 insertions(+), 32 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1d37858..198858a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM ghcr.io/linuxserver/unrar:latest AS unrar -FROM ghcr.io/linuxserver/baseimage-alpine:3.23 +FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy # set version label ARG BUILD_DATE @@ -13,20 +13,21 @@ LABEL maintainer="aptalca" RUN \ echo "**** install build dependencies ****" && \ - apk add --no-cache --virtual=build-dependencies \ - build-base \ - jpeg-dev \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ libffi-dev \ + libjpeg9-dev \ libwebp-dev \ python3-dev \ - zlib-dev && \ + zlib1g-dev && \ echo "**** install runtime packages ****" && \ - apk add --no-cache \ - jpeg \ - libwebp-tools \ + apt-get install -y --no-install-recommends \ + libjpeg9 \ nodejs \ - python3 \ - zlib && \ + python3-venv \ + webp \ + zlib1g-dev && \ echo "**** install mylar3 ****" && \ if [ -z ${MYLAR3_RELEASE+x} ]; then \ MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/MylarComics/mylar3/commits/nightly \ @@ -43,14 +44,22 @@ RUN \ pip install -U --no-cache-dir \ pip \ setuptools && \ - pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r requirements.txt && \ + pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r requirements.txt && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ - apk del --purge \ - build-dependencies && \ + apt-get -y purge \ + build-essential \ + libffi-dev \ + libjpeg9-dev \ + libwebp-dev \ + python3-dev \ + zlib1g-dev && \ + apt-get -y autoremove && \ rm -rf \ - $HOME/.cache \ - /tmp/* + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + $HOME/.cache # add local files COPY root/ / diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index e362a64..4d0c0ae 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -2,7 +2,7 @@ FROM ghcr.io/linuxserver/unrar:latest AS unrar -FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.23 +FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy # set version label ARG BUILD_DATE @@ -13,20 +13,21 @@ LABEL maintainer="aptalca" RUN \ echo "**** install build dependencies ****" && \ - apk add --no-cache --virtual=build-dependencies \ - build-base \ - jpeg-dev \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ libffi-dev \ + libjpeg9-dev \ libwebp-dev \ python3-dev \ - zlib-dev && \ + zlib1g-dev && \ echo "**** install runtime packages ****" && \ - apk add --no-cache \ - jpeg \ - libwebp-tools \ + apt-get install -y --no-install-recommends \ + libjpeg9 \ nodejs \ - python3 \ - zlib && \ + python3-venv \ + webp \ + zlib1g-dev && \ echo "**** install mylar3 ****" && \ if [ -z ${MYLAR3_RELEASE+x} ]; then \ MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/MylarComics/mylar3/commits/nightly \ @@ -43,14 +44,22 @@ RUN \ pip install -U --no-cache-dir \ pip \ setuptools && \ - pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r requirements.txt && \ + pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r requirements.txt && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ - apk del --purge \ - build-dependencies && \ + apt-get -y purge \ + build-essential \ + libffi-dev \ + libjpeg9-dev \ + libwebp-dev \ + python3-dev \ + zlib1g-dev && \ + apt-get -y autoremove && \ rm -rf \ - $HOME/.cache \ - /tmp/* + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + $HOME/.cache # add local files COPY root/ / diff --git a/jenkins-vars.yml b/jenkins-vars.yml index 167308d..e63a48e 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -17,7 +17,7 @@ repo_vars: - DOCKERHUB_IMAGE = 'linuxserver/mylar3' - DEV_DOCKERHUB_IMAGE = 'lsiodev/mylar3' - PR_DOCKERHUB_IMAGE = 'lspipepr/mylar3' - - DIST_IMAGE = 'alpine' + - DIST_IMAGE = 'ubuntu' - MULTIARCH='true' - CI='true' - CI_WEB='true' diff --git a/readme-vars.yml b/readme-vars.yml index fc4f395..9e3d1f7 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -78,7 +78,7 @@ init_diagram: | "mylar3:nightly" <- Base Images # changelog changelogs: - - {date: "06.04.26:", desc: "Switch upstream to maintained fork at https://github.com/MylarComics/mylar3. Drop `unstable` tag. Rebase to Alpine 3.23."} + - {date: "06.04.26:", desc: "Switch upstream to maintained fork at https://github.com/MylarComics/mylar3. Drop `unstable` tag."} - {date: "19.02.26:", desc: "Rebase `nightly` tag to build commits from upstream `1000papercuts` branch."} - {date: "05.02.26:", desc: "Release `unstable` tag based on commits to upstream `1000papercuts` branch."} - {date: "10.11.25:", desc: "Rebase to Ubuntu Jammy."} From e8577fbb83c832ed1114ec5d3392fa8e0212f30c Mon Sep 17 00:00:00 2001 From: thespad Date: Mon, 6 Apr 2026 23:03:40 +0000 Subject: [PATCH 3/4] Fix unrar arch --- Dockerfile.aarch64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 4d0c0ae..503c30d 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/unrar:latest AS unrar +FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy From 987cc170a1404a8385e020f8c6bb7fcd2a212028 Mon Sep 17 00:00:00 2001 From: thespad Date: Fri, 10 Apr 2026 19:37:34 +0000 Subject: [PATCH 4/4] Revert "Stay with Jammy" This reverts commit 7b8d5233efe2f29f65c538844df7023953c6bf16. --- Dockerfile | 39 +++++++++++++++------------------------ Dockerfile.aarch64 | 39 +++++++++++++++------------------------ jenkins-vars.yml | 2 +- readme-vars.yml | 2 +- 4 files changed, 32 insertions(+), 50 deletions(-) diff --git a/Dockerfile b/Dockerfile index 198858a..1d37858 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM ghcr.io/linuxserver/unrar:latest AS unrar -FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy +FROM ghcr.io/linuxserver/baseimage-alpine:3.23 # set version label ARG BUILD_DATE @@ -13,21 +13,20 @@ LABEL maintainer="aptalca" RUN \ echo "**** install build dependencies ****" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ + apk add --no-cache --virtual=build-dependencies \ + build-base \ + jpeg-dev \ libffi-dev \ - libjpeg9-dev \ libwebp-dev \ python3-dev \ - zlib1g-dev && \ + zlib-dev && \ echo "**** install runtime packages ****" && \ - apt-get install -y --no-install-recommends \ - libjpeg9 \ + apk add --no-cache \ + jpeg \ + libwebp-tools \ nodejs \ - python3-venv \ - webp \ - zlib1g-dev && \ + python3 \ + zlib && \ echo "**** install mylar3 ****" && \ if [ -z ${MYLAR3_RELEASE+x} ]; then \ MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/MylarComics/mylar3/commits/nightly \ @@ -44,22 +43,14 @@ RUN \ pip install -U --no-cache-dir \ pip \ setuptools && \ - pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r requirements.txt && \ + pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r requirements.txt && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ - apt-get -y purge \ - build-essential \ - libffi-dev \ - libjpeg9-dev \ - libwebp-dev \ - python3-dev \ - zlib1g-dev && \ - apt-get -y autoremove && \ + apk del --purge \ + build-dependencies && \ rm -rf \ - /tmp/* \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - $HOME/.cache + $HOME/.cache \ + /tmp/* # add local files COPY root/ / diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 503c30d..9a3f81e 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -2,7 +2,7 @@ FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar -FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy +FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.23 # set version label ARG BUILD_DATE @@ -13,21 +13,20 @@ LABEL maintainer="aptalca" RUN \ echo "**** install build dependencies ****" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ + apk add --no-cache --virtual=build-dependencies \ + build-base \ + jpeg-dev \ libffi-dev \ - libjpeg9-dev \ libwebp-dev \ python3-dev \ - zlib1g-dev && \ + zlib-dev && \ echo "**** install runtime packages ****" && \ - apt-get install -y --no-install-recommends \ - libjpeg9 \ + apk add --no-cache \ + jpeg \ + libwebp-tools \ nodejs \ - python3-venv \ - webp \ - zlib1g-dev && \ + python3 \ + zlib && \ echo "**** install mylar3 ****" && \ if [ -z ${MYLAR3_RELEASE+x} ]; then \ MYLAR3_RELEASE=$(curl -sX GET https://api.github.com/repos/MylarComics/mylar3/commits/nightly \ @@ -44,22 +43,14 @@ RUN \ pip install -U --no-cache-dir \ pip \ setuptools && \ - pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r requirements.txt && \ + pip install --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r requirements.txt && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ - apt-get -y purge \ - build-essential \ - libffi-dev \ - libjpeg9-dev \ - libwebp-dev \ - python3-dev \ - zlib1g-dev && \ - apt-get -y autoremove && \ + apk del --purge \ + build-dependencies && \ rm -rf \ - /tmp/* \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - $HOME/.cache + $HOME/.cache \ + /tmp/* # add local files COPY root/ / diff --git a/jenkins-vars.yml b/jenkins-vars.yml index e63a48e..167308d 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -17,7 +17,7 @@ repo_vars: - DOCKERHUB_IMAGE = 'linuxserver/mylar3' - DEV_DOCKERHUB_IMAGE = 'lsiodev/mylar3' - PR_DOCKERHUB_IMAGE = 'lspipepr/mylar3' - - DIST_IMAGE = 'ubuntu' + - DIST_IMAGE = 'alpine' - MULTIARCH='true' - CI='true' - CI_WEB='true' diff --git a/readme-vars.yml b/readme-vars.yml index 9e3d1f7..fc4f395 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -78,7 +78,7 @@ init_diagram: | "mylar3:nightly" <- Base Images # changelog changelogs: - - {date: "06.04.26:", desc: "Switch upstream to maintained fork at https://github.com/MylarComics/mylar3. Drop `unstable` tag."} + - {date: "06.04.26:", desc: "Switch upstream to maintained fork at https://github.com/MylarComics/mylar3. Drop `unstable` tag. Rebase to Alpine 3.23."} - {date: "19.02.26:", desc: "Rebase `nightly` tag to build commits from upstream `1000papercuts` branch."} - {date: "05.02.26:", desc: "Release `unstable` tag based on commits to upstream `1000papercuts` branch."} - {date: "10.11.25:", desc: "Rebase to Ubuntu Jammy."}