mirror of
https://github.com/linuxserver/docker-flexget.git
synced 2026-06-03 09:57:36 +00:00
Compare commits
84
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e38ebcdf7 | ||
|
|
501c30107b | ||
|
|
2f5996fe5a | ||
|
|
a7edcf47f8 | ||
|
|
5d41bc55f1 | ||
|
|
ef22efda45 | ||
|
|
b9aa18d907 | ||
|
|
f6f12b51cf | ||
|
|
176aeaeb89 | ||
|
|
b18e061342 | ||
|
|
af38ae6e6d | ||
|
|
778c54e01f | ||
|
|
b561b658b3 | ||
|
|
48ae0029b9 | ||
|
|
a4d679069d | ||
|
|
6272852e0c | ||
|
|
c366cdd12d | ||
|
|
20fb197845 | ||
|
|
ad26f82cc7 | ||
|
|
c3f16a32b9 | ||
|
|
3327511b8d | ||
|
|
8602e17e27 | ||
|
|
aedb5bd94b | ||
|
|
b0a4f11b47 | ||
|
|
9381467462 | ||
|
|
b0dd1ee5cb | ||
|
|
4f63ccf6a6 | ||
|
|
932f09c065 | ||
|
|
9d4e452aca | ||
|
|
538c6e99e9 | ||
|
|
c1165f3ac3 | ||
|
|
cce280d3ee | ||
|
|
9c1cd8a5b5 | ||
|
|
644e72d1f3 | ||
|
|
a1b355399e | ||
|
|
caf1cb4293 | ||
|
|
40e3676a18 | ||
|
|
677242f24a | ||
|
|
43fd2f5aad | ||
|
|
b5a2608b3c | ||
|
|
e9a3f1b9ad | ||
|
|
6163e88586 | ||
|
|
d2fba4a247 | ||
|
|
52a4d5df27 | ||
|
|
4b001c403a | ||
|
|
c05e987fdc | ||
|
|
959469f776 | ||
|
|
574fd90b47 | ||
|
|
177b0f7e86 | ||
|
|
457d93ba66 | ||
|
|
584bd9d56c | ||
|
|
dad9ec6d21 | ||
|
|
97360ef73e | ||
|
|
ff309f320d | ||
|
|
57a12c039d | ||
|
|
0e4677c903 | ||
|
|
6611d05ada | ||
|
|
10e43e188e | ||
|
|
eb62fca596 | ||
|
|
975086ada6 | ||
|
|
508394ae55 | ||
|
|
2aca825005 | ||
|
|
1f1109d8b0 | ||
|
|
0095bef01c | ||
|
|
fe8d2f3558 | ||
|
|
1692f79634 | ||
|
|
d656d4a913 | ||
|
|
6e57548c1f | ||
|
|
bbb8f05ecb | ||
|
|
d164441da0 | ||
|
|
3fb390f265 | ||
|
|
7df62faf3c | ||
|
|
743257a224 | ||
|
|
481fc23341 | ||
|
|
0b2baa9fc3 | ||
|
|
cc8f7b6614 | ||
|
|
a4aaf57c74 | ||
|
|
9893bb6407 | ||
|
|
6475e3e423 | ||
|
|
213eb70a3b | ||
|
|
3b5210595d | ||
|
|
f69e003444 | ||
|
|
ce563eb6d1 | ||
|
|
eb41328719 |
+7
-6
@@ -2,11 +2,11 @@
|
||||
|
||||
FROM ghcr.io/linuxserver/unrar:latest AS unrar
|
||||
|
||||
FROM ghcr.io/by275/libtorrent:2-alpine3.19 AS libtorrent
|
||||
FROM ghcr.io/by275/libtorrent:2-alpine3.22 AS libtorrent
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:3.19
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:3.22
|
||||
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.5.26 /uv /uvx /bin/
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.9.8 /uv /uvx /bin/
|
||||
|
||||
# set version label
|
||||
ARG BUILD_DATE
|
||||
@@ -31,8 +31,8 @@ RUN \
|
||||
python3-dev && \
|
||||
apk add -U --update --no-cache \
|
||||
7zip \
|
||||
boost1.82-system \
|
||||
boost1.82-python3 \
|
||||
boost1.84-system \
|
||||
boost1.84-python3 \
|
||||
libstdc++ \
|
||||
nodejs \
|
||||
python3 && \
|
||||
@@ -53,6 +53,7 @@ RUN \
|
||||
uv venv /lsiopy && \
|
||||
uv run scripts/bundle_webui.py && \
|
||||
uv sync --frozen --no-dev --no-cache --group=all && \
|
||||
uv pip install pip && \
|
||||
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
|
||||
echo "**** cleanup ****" && \
|
||||
apk del --purge \
|
||||
@@ -63,7 +64,7 @@ RUN \
|
||||
|
||||
COPY --from=libtorrent /libtorrent-build/usr/lib/libtorrent-rasterbar.* /usr/lib/
|
||||
|
||||
COPY --from=libtorrent /libtorrent-build/usr/lib/python3.11 /lsiopy/lib/python3.11
|
||||
COPY --from=libtorrent /libtorrent-build/usr/lib/python3.12 /lsiopy/lib/python3.12
|
||||
|
||||
# add local files
|
||||
COPY root/ /
|
||||
|
||||
+7
-6
@@ -2,11 +2,11 @@
|
||||
|
||||
FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar
|
||||
|
||||
FROM ghcr.io/by275/libtorrent:2-alpine3.19 AS libtorrent
|
||||
FROM ghcr.io/by275/libtorrent:2-alpine3.22 AS libtorrent
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.19
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.22
|
||||
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.5.26 /uv /uvx /bin/
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.9.8 /uv /uvx /bin/
|
||||
|
||||
# set version label
|
||||
ARG BUILD_DATE
|
||||
@@ -31,8 +31,8 @@ RUN \
|
||||
python3-dev && \
|
||||
apk add -U --update --no-cache \
|
||||
7zip \
|
||||
boost1.82-system \
|
||||
boost1.82-python3 \
|
||||
boost1.84-system \
|
||||
boost1.84-python3 \
|
||||
libstdc++ \
|
||||
nodejs \
|
||||
python3 && \
|
||||
@@ -53,6 +53,7 @@ RUN \
|
||||
uv venv /lsiopy && \
|
||||
uv run scripts/bundle_webui.py && \
|
||||
uv sync --frozen --no-dev --no-cache --group=all && \
|
||||
uv pip install pip && \
|
||||
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
|
||||
echo "**** cleanup ****" && \
|
||||
apk del --purge \
|
||||
@@ -63,7 +64,7 @@ RUN \
|
||||
|
||||
COPY --from=libtorrent /libtorrent-build/usr/lib/libtorrent-rasterbar.* /usr/lib/
|
||||
|
||||
COPY --from=libtorrent /libtorrent-build/usr/lib/python3.11 /lsiopy/lib/python3.11
|
||||
COPY --from=libtorrent /libtorrent-build/usr/lib/python3.12 /lsiopy/lib/python3.12
|
||||
|
||||
# add local files
|
||||
COPY root/ /
|
||||
|
||||
Vendored
+180
-124
@@ -78,6 +78,8 @@ pipeline {
|
||||
'''
|
||||
script{
|
||||
env.EXIT_STATUS = ''
|
||||
env.CI_TEST_ATTEMPTED = ''
|
||||
env.PUSH_ATTEMPTED = ''
|
||||
env.LS_RELEASE = sh(
|
||||
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:latest 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
|
||||
returnStdout: true).trim()
|
||||
@@ -218,6 +220,7 @@ pipeline {
|
||||
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
|
||||
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
|
||||
env.CITEST_IMAGETAG = 'latest'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -243,6 +246,7 @@ pipeline {
|
||||
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
|
||||
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
|
||||
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
|
||||
env.CITEST_IMAGETAG = 'develop'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -268,6 +272,7 @@ pipeline {
|
||||
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
|
||||
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
|
||||
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
|
||||
env.CITEST_IMAGETAG = 'develop'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -290,7 +295,7 @@ pipeline {
|
||||
-v ${WORKSPACE}:/mnt \
|
||||
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
|
||||
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
|
||||
ghcr.io/linuxserver/baseimage-alpine:3.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
|
||||
ghcr.io/linuxserver/baseimage-alpine:3.23 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
|
||||
apk add --no-cache python3 && \
|
||||
python3 -m venv /lsiopy && \
|
||||
pip install --no-cache-dir -U pip && \
|
||||
@@ -625,13 +630,16 @@ pipeline {
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
|
||||
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
|
||||
declare -A pids
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
|
||||
pids[$!]="$i"
|
||||
done
|
||||
for p in $(jobs -p); do
|
||||
wait "$p" || { echo "job $p failed" >&2; exit 1; }
|
||||
for p in "${!pids[@]}"; do
|
||||
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
|
||||
done
|
||||
fi
|
||||
'''
|
||||
@@ -691,13 +699,16 @@ pipeline {
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
|
||||
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
|
||||
declare -A pids
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
|
||||
pids[$!]="$i"
|
||||
done
|
||||
for p in $(jobs -p); do
|
||||
wait "$p" || { echo "job $p failed" >&2; exit 1; }
|
||||
for p in "${!pids[@]}"; do
|
||||
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
|
||||
done
|
||||
fi
|
||||
'''
|
||||
@@ -751,12 +762,14 @@ pipeline {
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
|
||||
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
|
||||
declare -A pids
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
|
||||
pids[$!]="$i"
|
||||
done
|
||||
for p in $(jobs -p); do
|
||||
wait "$p" || { echo "job $p failed" >&2; exit 1; }
|
||||
for p in "${!pids[@]}"; do
|
||||
wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
|
||||
done
|
||||
fi
|
||||
'''
|
||||
@@ -870,6 +883,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
|
||||
@@ -881,7 +895,7 @@ pipeline {
|
||||
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
|
||||
fi
|
||||
fi
|
||||
docker pull ghcr.io/linuxserver/ci:latest
|
||||
docker pull ghcr.io/linuxserver/ci:${CITEST_IMAGETAG}
|
||||
if [ "${MULTIARCH}" == "true" ]; then
|
||||
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
|
||||
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
|
||||
@@ -905,7 +919,9 @@ pipeline {
|
||||
-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 \
|
||||
-e COMMIT_SHA=\"${COMMIT_SHA}\" \
|
||||
-e BUILD_NUMBER=\"${BUILD_NUMBER}\" \
|
||||
-t ghcr.io/linuxserver/ci:${CITEST_IMAGETAG} \
|
||||
python3 test_build.py'''
|
||||
}
|
||||
}
|
||||
@@ -920,6 +936,9 @@ pipeline {
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
script{
|
||||
env.PUSH_ATTEMPTED = 'true'
|
||||
}
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
@@ -931,9 +950,11 @@ pipeline {
|
||||
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}
|
||||
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
|
||||
{ if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
|
||||
{ if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
fi
|
||||
done
|
||||
'''
|
||||
@@ -947,31 +968,45 @@ pipeline {
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
script{
|
||||
env.PUSH_ATTEMPTED = 'true'
|
||||
}
|
||||
retry_backoff(5,5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
|
||||
if [[ "${MANIFESTIMAGE%%/*}" =~ \\. ]]; then
|
||||
MANIFESTIMAGEPLUS="${MANIFESTIMAGE}"
|
||||
else
|
||||
MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
|
||||
fi
|
||||
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
|
||||
for i in "${CACHE[@]}"; do
|
||||
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
|
||||
CACHEIMAGE=${i}
|
||||
fi
|
||||
done
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-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}
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
fi
|
||||
done
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
|
||||
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}
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
if [ -n "${SEMVER}" ]; then
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
|
||||
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} || \
|
||||
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
|
||||
fi
|
||||
done
|
||||
'''
|
||||
@@ -989,23 +1024,41 @@ pipeline {
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps {
|
||||
echo "Pushing New tag for current commit ${META_TAG}"
|
||||
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
|
||||
-d '{"tag":"'${META_TAG}'",\
|
||||
"object": "'${COMMIT_SHA}'",\
|
||||
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to main",\
|
||||
"type": "commit",\
|
||||
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
|
||||
echo "Pushing New release for Tag"
|
||||
sh '''#! /bin/bash
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json
|
||||
echo '{"tag_name":"'${META_TAG}'",\
|
||||
"target_commitish": "main",\
|
||||
"name": "'${META_TAG}'",\
|
||||
"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'''
|
||||
echo "Auto-generating release notes"
|
||||
if [ "$(git tag --points-at HEAD)" != "" ]; then
|
||||
echo "Existing tag points to current commit, suggesting no new LS changes"
|
||||
AUTO_RELEASE_NOTES="No changes"
|
||||
else
|
||||
AUTO_RELEASE_NOTES=$(curl -fsL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github+json" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/generate-notes \
|
||||
-d '{"tag_name":"'${META_TAG}'",\
|
||||
"target_commitish": "main"}' \
|
||||
| jq -r '.body' | sed 's|## What.s Changed||')
|
||||
fi
|
||||
echo "Pushing New tag for current commit ${META_TAG}"
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
|
||||
-d '{"tag":"'${META_TAG}'",\
|
||||
"object": "'${COMMIT_SHA}'",\
|
||||
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to main",\
|
||||
"type": "commit",\
|
||||
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}'
|
||||
echo "Pushing New release for Tag"
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq -r '. |.body' > releasebody.json
|
||||
jq -n \
|
||||
--arg tag_name "$META_TAG" \
|
||||
--arg target_commitish "main" \
|
||||
--arg ci_url "${CI_URL:-N/A}" \
|
||||
--arg ls_notes "$AUTO_RELEASE_NOTES" \
|
||||
--arg remote_notes "$(cat releasebody.json)" \
|
||||
'{
|
||||
"tag_name": $tag_name,
|
||||
"target_commitish": $target_commitish,
|
||||
"name": $tag_name,
|
||||
"body": ("**CI Report:**\\n\\n" + $ci_url + "\\n\\n**LinuxServer Changes:**\\n\\n" + $ls_notes + "\\n\\n**Remote Changes:**\\n\\n" + $remote_notes),
|
||||
"draft": false,
|
||||
"prerelease": false }' > releasebody.json.done
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done
|
||||
'''
|
||||
}
|
||||
}
|
||||
// Add protection to the release branch
|
||||
@@ -1043,98 +1096,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()
|
||||
@@ -1177,6 +1145,94 @@ EOF
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
}
|
||||
script {
|
||||
if (env.GITHUBIMAGE =~ /lspipepr/){
|
||||
if (env.CI_TEST_ATTEMPTED == "true" || env.PUSH_ATTEMPTED == "true"){
|
||||
sh '''#! /bin/bash
|
||||
# Function to retrieve JSON data from URL
|
||||
get_json() {
|
||||
local url="$1"
|
||||
local response=$(curl -s "$url")
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to retrieve JSON data from $url"
|
||||
return 1
|
||||
fi
|
||||
local json=$(echo "$response" | jq .)
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to parse JSON data from $url"
|
||||
return 1
|
||||
fi
|
||||
echo "$json"
|
||||
}
|
||||
|
||||
build_table() {
|
||||
local data="$1"
|
||||
|
||||
# Get the keys in the JSON data
|
||||
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
|
||||
|
||||
# Check if keys are empty
|
||||
if [ -z "$keys" ]; then
|
||||
echo "JSON report data does not contain any keys or the report does not exist."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Build table header
|
||||
local header="| Tag | Passed |\\n| --- | --- |\\n"
|
||||
|
||||
# Loop through the JSON data to build the table rows
|
||||
local rows=""
|
||||
for build in $keys; do
|
||||
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
|
||||
if [ "$status" = "true" ]; then
|
||||
status="✅"
|
||||
else
|
||||
status="❌"
|
||||
fi
|
||||
local row="| "$build" | "$status" |\\n"
|
||||
rows="${rows}${row}"
|
||||
done
|
||||
|
||||
local table="${header}${rows}"
|
||||
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
|
||||
echo "$escaped_table"
|
||||
}
|
||||
|
||||
if [[ "${CI}" = "true" ]]; then
|
||||
# Retrieve JSON data from URL
|
||||
data=$(get_json "$CI_JSON_URL")
|
||||
# Create table from JSON data
|
||||
table=$(build_table "$data")
|
||||
echo -e "$table"
|
||||
|
||||
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
|
||||
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR for commit ${COMMIT_SHA:0:7} : \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
|
||||
else
|
||||
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
|
||||
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR for commit ${COMMIT_SHA:0:7} : \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
|
||||
fi
|
||||
'''
|
||||
} else {
|
||||
sh '''#! /bin/bash
|
||||
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
|
||||
-d "{\\"body\\": \\"I am a bot, the build for PR commit ${COMMIT_SHA:0:7} failed and as a result no CI test was attempted and no images were pushed.\\"}"
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
sh '''#!/bin/bash
|
||||
rm -rf /config/.ssh/id_sign
|
||||
rm -rf /config/.ssh/id_sign.pub
|
||||
git config --global --unset gpg.format
|
||||
git config --global --unset user.signingkey
|
||||
git config --global --unset commit.gpgsign
|
||||
'''
|
||||
}
|
||||
cleanup {
|
||||
sh '''#! /bin/bash
|
||||
|
||||
@@ -75,7 +75,7 @@ This image can be run with a read-only container filesystem. For details please
|
||||
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.
|
||||
>Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided.
|
||||
|
||||
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
|
||||
|
||||
@@ -300,6 +300,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
|
||||
|
||||
## Versions
|
||||
|
||||
* **10.11.25:** - Rebase to Alpine 3.22.
|
||||
* **17.10.25:** - Add pip to enable [universal-package-install mod](https://github.com/linuxserver/docker-mods/tree/universal-package-install).
|
||||
* **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.
|
||||
|
||||
+225
-220
@@ -1,220 +1,225 @@
|
||||
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.11.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 5.0.0 python
|
||||
beautifulsoup4 4.14.0 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.40 python
|
||||
botocore 1.40.40 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 2.0.0 python
|
||||
chardet 5.2.0 python
|
||||
charset-normalizer 3.4.3 python
|
||||
cheroot 11.0.0 python
|
||||
cherrypy 18.10.0 python
|
||||
cli UNKNOWN binary
|
||||
cli-32 UNKNOWN binary
|
||||
cli-64 UNKNOWN binary
|
||||
cli-arm64 UNKNOWN binary
|
||||
click 8.3.0 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 46.0.1 python
|
||||
curl 8.12.1-r0 apk
|
||||
decorator 5.2.1 python
|
||||
deluge-client 1.10.2 python
|
||||
dogpile-cache 1.4.1 python
|
||||
enzyme 0.5.2 python
|
||||
feedparser 6.0.12 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.2 python
|
||||
flexget 3.18.12 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.9.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.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
|
||||
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.3 python
|
||||
matrix-nio 0.25.2 python
|
||||
mdurl 0.1.2 python
|
||||
more-itertools 10.3.0 python
|
||||
more-itertools 10.8.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
|
||||
pendulum 3.1.0 python
|
||||
pillow 11.3.0 python
|
||||
platformdirs 4.2.2 python
|
||||
platformdirs 4.4.0 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.1.0 python
|
||||
pyc 3.11.13-r0 apk
|
||||
pycparser 2.23 python
|
||||
pycryptodome 3.23.0 python
|
||||
pygments 2.19.2 python
|
||||
pynacl 1.6.0 python
|
||||
pynzb 0.1.0 python
|
||||
pyparsing 3.2.5 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.5 python
|
||||
python3 3.11.13-r0 apk
|
||||
python3-pyc 3.11.13-r0 apk
|
||||
python3-pycache-pyc0 3.11.13-r0 apk
|
||||
pyyaml 6.0.3 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.1 python
|
||||
rpyc 6.0.2 python
|
||||
s3transfer 0.14.0 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.8 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.5.0 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.15.0 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 4.0 python
|
||||
zipp 3.19.2 python
|
||||
zlib 1.3.1-r0 apk
|
||||
zxcvbn 4.5.0 python
|
||||
NAME VERSION TYPE
|
||||
7zip 24.09-r0 apk
|
||||
Simple Launcher 1.1.0.14 binary (+5 duplicates)
|
||||
acl-libs 2.3.2-r1 apk
|
||||
ada-libs 2.9.2-r4 apk
|
||||
aiofiles 24.1.0 python
|
||||
aiohappyeyeballs 2.6.1 python
|
||||
aiohttp 3.13.5 python
|
||||
aiohttp-socks 0.11.0 python
|
||||
aiosignal 1.4.0 python
|
||||
alpine-baselayout 3.7.0-r0 apk
|
||||
alpine-baselayout-data 3.7.0-r0 apk
|
||||
alpine-keys 2.5-r0 apk
|
||||
alpine-release 3.22.4-r0 apk
|
||||
aniso8601 10.0.1 python
|
||||
annotated-doc 0.0.4 python
|
||||
anyio 4.13.0 python
|
||||
apk-tools 2.14.9-r3 apk
|
||||
apscheduler 3.11.2 python
|
||||
attrs 26.1.0 python
|
||||
autocommand 2.2.2 python
|
||||
babelfish 0.6.1 python
|
||||
backports-tarfile 1.2.0 python
|
||||
backports-zstd 1.5.0 python
|
||||
bash 5.2.37-r0 apk
|
||||
bcrypt 5.0.0 python
|
||||
beautifulsoup4 4.14.3 python
|
||||
blinker 1.9.0 python
|
||||
boost1.84-python3 1.84.0-r3 apk
|
||||
boost1.84-system 1.84.0-r3 apk
|
||||
boto3 1.43.9 python
|
||||
botocore 1.43.9 python
|
||||
brotli 1.2.0 python
|
||||
brotli-libs 1.1.0-r2 apk
|
||||
busybox 1.37.0-r20 apk
|
||||
busybox-binsh 1.37.0-r20 apk
|
||||
c-ares 1.34.6-r0 apk
|
||||
ca-certificates 20260413-r0 apk
|
||||
ca-certificates-bundle 20260413-r0 apk
|
||||
catatonit 0.2.1-r0 apk
|
||||
certifi 2026.4.22 python
|
||||
cffi 2.0.0 python
|
||||
chardet 7.4.3 python
|
||||
charset-normalizer 3.4.7 python
|
||||
cheroot 11.1.2 python
|
||||
cherrypy 18.10.0 python
|
||||
cli UNKNOWN binary
|
||||
cli-32 UNKNOWN binary
|
||||
cli-64 UNKNOWN binary
|
||||
cli-arm64 UNKNOWN binary
|
||||
click 8.4.0 python
|
||||
click-option-group 0.5.9 python
|
||||
coreutils 9.7-r1 apk
|
||||
coreutils-env 9.7-r1 apk
|
||||
coreutils-fmt 9.7-r1 apk
|
||||
coreutils-sha512sum 9.7-r1 apk
|
||||
cryptography 48.0.0 python
|
||||
curl 8.14.1-r2 apk
|
||||
decorator 5.3.1 python
|
||||
defusedxml 0.7.1 python
|
||||
deluge-client 1.10.2 python
|
||||
dogpile-cache 1.5.0 python
|
||||
enzyme 0.5.2 python
|
||||
feedparser 6.0.12 python
|
||||
findutils 4.10.0-r0 apk
|
||||
flask 3.1.3 python
|
||||
flask-compress 1.24 python
|
||||
flask-cors 6.0.2 python
|
||||
flask-login 0.6.3 python
|
||||
flask-restx 1.3.2 python
|
||||
flexget 3.19.21 python
|
||||
frozenlist 1.8.0 python
|
||||
ftputil 5.2.0 python
|
||||
gdbm 1.24-r0 apk
|
||||
greenlet 3.5.0 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 76.1-r1 apk
|
||||
icu-libs 76.1-r1 apk
|
||||
idna 3.15 python
|
||||
importlib-metadata 8.7.1 python
|
||||
importlib-resources 7.1.0 python
|
||||
itsdangerous 2.2.0 python
|
||||
jaraco-collections 5.2.1 python
|
||||
jaraco-context 6.1.0 python
|
||||
jaraco-context 6.1.2 python
|
||||
jaraco-functools 4.4.0 python
|
||||
jaraco-functools 4.5.0 python
|
||||
jaraco-text 4.0.0 python
|
||||
jaraco-text 4.2.0 python
|
||||
jinja2 3.1.6 python
|
||||
jmespath 1.1.0 python
|
||||
jq 1.8.1-r0 apk
|
||||
jsonschema 4.26.0 python
|
||||
jsonschema-specifications 2025.9.1 python
|
||||
knowit 0.5.11 python
|
||||
libapk2 2.14.9-r3 apk
|
||||
libattr 2.5.2-r2 apk
|
||||
libbsd 0.12.2-r0 apk
|
||||
libbz2 1.0.8-r6 apk
|
||||
libcrypto3 3.5.6-r0 apk
|
||||
libcurl 8.14.1-r2 apk
|
||||
libexpat 2.7.5-r0 apk
|
||||
libffi 3.4.8-r0 apk
|
||||
libgcc 14.2.0-r6 apk
|
||||
libidn2 2.3.7-r0 apk
|
||||
libintl 0.24.1-r0 apk
|
||||
libmd 1.1.0-r0 apk
|
||||
libncursesw 6.5_p20250503-r0 apk
|
||||
libpanelw 6.5_p20250503-r0 apk
|
||||
libproc2 4.0.4-r3 apk
|
||||
libpsl 0.21.5-r3 apk
|
||||
libssl3 3.5.6-r0 apk
|
||||
libstdc++ 14.2.0-r6 apk
|
||||
libunistring 1.3-r0 apk
|
||||
linux-pam 1.7.0-r4 apk
|
||||
loguru 0.7.3 python
|
||||
markdown-it-py 4.2.0 python
|
||||
markupsafe 3.0.3 python
|
||||
matrix-nio 0.25.2 python
|
||||
mdurl 0.1.2 python
|
||||
more-itertools 10.8.0 python
|
||||
more-itertools 11.0.2 python
|
||||
mpdecimal 4.0.1-r0 apk
|
||||
multidict 6.7.1 python
|
||||
musl 1.2.5-r12 apk
|
||||
musl-utils 1.2.5-r12 apk
|
||||
ncurses-terminfo-base 6.5_p20250503-r0 apk
|
||||
netcat-openbsd 1.229.1-r0 apk
|
||||
nghttp2-libs 1.69.0-r0 apk
|
||||
nodejs 22.22.2-r0 apk
|
||||
oniguruma 6.9.10-r0 apk
|
||||
packaging 26.0 python
|
||||
packaging 26.2 python
|
||||
paramiko 3.5.1 python
|
||||
pendulum 3.2.0 python
|
||||
pip 26.1.1 python
|
||||
platformdirs 4.4.0 python
|
||||
platformdirs 4.9.6 python
|
||||
plexapi 4.18.1 python
|
||||
plumbum 1.10.0 python
|
||||
portend 3.2.1 python
|
||||
procps-ng 4.0.4-r3 apk
|
||||
propcache 0.5.2 python
|
||||
psutil 7.2.2 python
|
||||
pyc 3.12.13-r0 apk
|
||||
pycparser 3.0 python
|
||||
pycryptodome 3.23.0 python
|
||||
pygments 2.20.0 python
|
||||
pymediainfo 7.0.1 python
|
||||
pynacl 1.6.2 python
|
||||
pynzb 0.1.0 python
|
||||
pyparsing 3.3.2 python
|
||||
pyrss2gen 1.1 python
|
||||
pysftp 0.2.9 python
|
||||
pysubs2 1.8.1 python
|
||||
python-dateutil 2.9.0.post0 python
|
||||
python-socks 2.8.1 python
|
||||
python-telegram-bot 22.7 python
|
||||
python3 3.12.13-r0 apk
|
||||
python3-pyc 3.12.13-r0 apk
|
||||
python3-pycache-pyc0 3.12.13-r0 apk
|
||||
pyyaml 6.0.3 python
|
||||
qbittorrent-api 2025.11.1 python
|
||||
rarfile 4.2 python
|
||||
readline 8.2.13-r1 apk
|
||||
rebulk 3.2.0 python
|
||||
referencing 0.37.0 python
|
||||
requests 2.34.2 python
|
||||
rich 15.0.0 python
|
||||
rpds-py 0.30.0 python
|
||||
rpyc 6.0.2 python
|
||||
s3transfer 0.17.0 python
|
||||
scanelf 1.3.8-r1 apk
|
||||
setuptools 82.0.1 python
|
||||
sgmllib3k 1.0.0 python
|
||||
shadow 4.17.3-r0 apk
|
||||
shellingham 1.5.4 python
|
||||
simdjson 3.12.0-r0 apk
|
||||
simdutf 7.2.1-r0 apk
|
||||
six 1.17.0 python
|
||||
skalibs-libs 2.14.4.0-r0 apk
|
||||
socksio 1.0.0 python
|
||||
soupsieve 2.8.3 python
|
||||
sqlalchemy 2.0.49 python
|
||||
sqlite-libs 3.49.2-r1 apk
|
||||
srt 3.5.3 python
|
||||
ssl_client 1.37.0-r20 apk
|
||||
stevedore 5.8.0 python
|
||||
subliminal 2.6.0 python
|
||||
tempora 5.9.0 python
|
||||
tomli 2.4.0 python
|
||||
tomlkit 0.15.0 python
|
||||
trakit 0.2.5 python
|
||||
transmission-rpc 7.0.11 python
|
||||
triangular 2.5.0 npm
|
||||
typer 0.25.1 python
|
||||
typer-slim 0.24.0 python
|
||||
typing-extensions 4.15.0 python
|
||||
tzdata 2026.2 python
|
||||
tzdata 2026b-r0 apk
|
||||
tzlocal 5.3.1 python
|
||||
unpaddedbase64 2.1.0 python
|
||||
urllib3 2.7.0 python
|
||||
utmps-libs 0.1.3.1-r0 apk
|
||||
webencodings 0.5.1 python
|
||||
werkzeug 3.1.8 python
|
||||
wheel 0.46.3 python
|
||||
xz-libs 5.8.3-r0 apk
|
||||
yarl 1.23.0 python
|
||||
zc-lockfile 4.0 python
|
||||
zipp 3.23.0 python
|
||||
zlib 1.3.2-r0 apk
|
||||
zstd-libs 1.5.7-r0 apk
|
||||
zxcvbn 4.5.0 python
|
||||
|
||||
+5
-7
@@ -62,36 +62,34 @@ init_diagram: |
|
||||
init-migrations -> init-adduser
|
||||
init-os-end -> init-config
|
||||
init-config -> init-config-end
|
||||
init-crontab-config -> init-config-end
|
||||
init-flexget-config -> init-config-end
|
||||
init-os-end -> init-crontab-config
|
||||
init-config -> 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"
|
||||
"baseimage-alpine:3.22"
|
||||
}
|
||||
"flexget:latest" <- Base Images
|
||||
# changelog
|
||||
changelogs:
|
||||
- {date: "10.11.25:", desc: "Rebase to Alpine 3.22."}
|
||||
- {date: "17.10.25:", desc: "Add pip to enable [universal-package-install mod](https://github.com/linuxserver/docker-mods/tree/universal-package-install)."}
|
||||
- {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."}
|
||||
|
||||
@@ -4,4 +4,4 @@
|
||||
exec \
|
||||
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 5050" \
|
||||
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
|
||||
--loglevel "${FG_LOG_LEVEL:-info}" --logfile "${FG_LOG_FILE:-/config/.flexget/flexget.log}" -c "${FG_CONFIG_FILE:-/config/.flexget/config.yml}" daemon start
|
||||
|
||||
Reference in New Issue
Block a user