diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f47d603..f1f8bdb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -24,7 +24,7 @@ ## Readme If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit. -Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-jellyfin/edit/nightly/readme-vars.yml). +Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-jellyfin/edit/master/readme-vars.yml). These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play. Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-jellyfin) @@ -115,7 +115,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Update the changelog -If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-jellyfin/tree/nightly/root), add an entry to the changelog +If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-jellyfin/tree/master/root), add an entry to the changelog ```yml changelogs: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index de42e2b..457ae8c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -21,7 +21,7 @@ ------------------------------ - - [ ] I have read the [contributing](https://github.com/linuxserver/docker-jellyfin/blob/nightly/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications + - [ ] I have read the [contributing](https://github.com/linuxserver/docker-jellyfin/blob/master/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications ------------------------------ diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 14b09fb..b28804a 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -7,31 +7,31 @@ permissions: contents: read jobs: - external-trigger-nightly: + external-trigger-master: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.1.1 - name: External Trigger - if: github.ref == 'refs/heads/nightly' + if: github.ref == 'refs/heads/master' env: SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }} run: | printf "# External trigger for docker-jellyfin\n\n" >> $GITHUB_STEP_SUMMARY - if grep -q "^jellyfin_nightly_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then + if grep -q "^jellyfin_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY - echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`jellyfin_nightly_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY - elif grep -q "^jellyfin_nightly" <<< "${SKIP_EXTERNAL_TRIGGER}"; then + echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`jellyfin_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY + elif grep -q "^jellyfin_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`jellyfin_nightly\`; skipping trigger." >> $GITHUB_STEP_SUMMARY + echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`jellyfin_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY exit 0 fi echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY - echo "> External trigger running off of nightly branch. To disable this trigger, add \`jellyfin_nightly\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY + echo "> External trigger running off of master branch. To disable this trigger, add \`jellyfin_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY - EXT_RELEASE=$(curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/unstable/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}') + EXT_RELEASE=$(curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/main/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}') echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY - if grep -q "^jellyfin_nightly_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then + if grep -q "^jellyfin_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY exit 0 @@ -39,7 +39,7 @@ jobs: if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY - FAILURE_REASON="Can't retrieve external version for jellyfin branch nightly" + FAILURE_REASON="Can't retrieve external version for jellyfin branch master" GHA_TRIGGER_URL="https://github.com/linuxserver/docker-jellyfin/actions/runs/${{ github.run_id }}" curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}], @@ -50,7 +50,7 @@ jobs: echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY image="linuxserver/jellyfin" - tag="nightly" + tag="latest" token=$(curl -sX GET \ "https://ghcr.io/token?scope=repository%3Alinuxserver%2Fjellyfin%3Apull" \ | jq -r '.token') @@ -96,7 +96,7 @@ jobs: if [ -z "${IMAGE_VERSION}" ]; then echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY - FAILURE_REASON="Can't retrieve last pushed version for jellyfin tag nightly" + FAILURE_REASON="Can't retrieve last pushed version for jellyfin tag latest" curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} @@ -106,17 +106,14 @@ jobs: 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-jellyfin/job/nightly/lastBuild/api/json | jq -r '.building') == "true" ]; then + elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-jellyfin/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY exit 0 - elif [[ $(( $(date +%s%3N) - $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-jellyfin/job/nightly/lastBuild/api/json | jq -r '.timestamp') )) -lt $(( 6 * 3600000 )) ]]; then - echo "New version \`${EXT_RELEASE}\` found; but the last build was less than 6 hours ago; skipping trigger" >> $GITHUB_STEP_SUMMARY - exit 0 else 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 jellyfin tag nightly is detected, however not all artifacts are uploaded to upstream release yet. Will try again later." + FAILURE_REASON="New version ${EXT_RELEASE} for jellyfin 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 }} @@ -127,7 +124,7 @@ jobs: 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-jellyfin/job/nightly/buildWithParameters?PACKAGE_CHECK=false \ + https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-jellyfin/job/master/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 @@ -142,7 +139,7 @@ jobs: --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ --data-urlencode "Submit=Submit" echo "**** Notifying Discord ****" - TRIGGER_REASON="A version change was detected for jellyfin tag nightly. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}" + TRIGGER_REASON="A version change was detected for jellyfin 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 }} diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml index 83585da..7f3ca8b 100644 --- a/.github/workflows/greetings.yml +++ b/.github/workflows/greetings.yml @@ -15,5 +15,5 @@ jobs: - uses: actions/first-interaction@v1 with: issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.' - pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-jellyfin/blob/nightly/.github/PULL_REQUEST_TEMPLATE.md)!' + pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-jellyfin/blob/master/.github/PULL_REQUEST_TEMPLATE.md)!' repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/Dockerfile b/Dockerfile index c8596e5..968d8b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,11 +18,10 @@ ENV ATTACHED_DEVICES_PERMS="/dev/dri /dev/dvb /dev/vchiq /dev/vc-mem /dev/video1 RUN \ echo "**** install jellyfin *****" && \ - curl -fSsL https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key | gpg --dearmor | tee /usr/share/keyrings/jellyfin.gpg >/dev/null && \ + curl -s https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key | gpg --dearmor | tee /usr/share/keyrings/jellyfin.gpg >/dev/null && \ echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/jellyfin.gpg] https://repo.jellyfin.org/ubuntu noble main' > /etc/apt/sources.list.d/jellyfin.list && \ - echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/jellyfin.gpg] https://repo.jellyfin.org/ubuntu noble unstable' >> /etc/apt/sources.list.d/jellyfin.list && \ if [ -z ${JELLYFIN_RELEASE+x} ]; then \ - JELLYFIN_RELEASE=$(curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/unstable/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}'); \ + JELLYFIN_RELEASE=$(curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/main/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}'); \ fi && \ apt-get update && \ apt-get install -y --no-install-recommends \ @@ -32,7 +31,6 @@ RUN \ xmlstarlet && \ apt-get install -y --no-install-recommends \ jellyfin=${JELLYFIN_RELEASE} && \ - printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ rm -rf \ /tmp/* \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 82975ce..f16fc19 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -20,9 +20,8 @@ RUN \ echo "**** install jellyfin *****" && \ curl -s https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key | gpg --dearmor | tee /usr/share/keyrings/jellyfin.gpg >/dev/null && \ echo 'deb [arch=arm64 signed-by=/usr/share/keyrings/jellyfin.gpg] https://repo.jellyfin.org/ubuntu noble main' > /etc/apt/sources.list.d/jellyfin.list && \ - echo 'deb [arch=arm64 signed-by=/usr/share/keyrings/jellyfin.gpg] https://repo.jellyfin.org/ubuntu noble unstable' >> /etc/apt/sources.list.d/jellyfin.list && \ if [ -z ${JELLYFIN_RELEASE+x} ]; then \ - JELLYFIN_RELEASE=$(curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/unstable/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}'); \ + JELLYFIN_RELEASE=$(curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/main/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}'); \ fi && \ apt-get update && \ apt-get install -y --no-install-recommends \ diff --git a/Jenkinsfile b/Jenkinsfile index 1b0988e..1b852ef 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -76,7 +76,7 @@ pipeline { script{ env.EXIT_STATUS = '' 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' || : ''', + 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() env.LS_RELEASE_NOTES = sh( script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''', @@ -109,7 +109,7 @@ pipeline { script{ env.LS_TAG_NUMBER = sh( script: '''#! /bin/bash - tagsha=$(git rev-list -n 1 nightly-${LS_RELEASE} 2>/dev/null) + tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null) if [ "${tagsha}" == "${COMMIT_SHA}" ]; then echo ${LS_RELEASE_NUMBER} elif [ -z "${GIT_COMMIT}" ]; then @@ -147,7 +147,7 @@ pipeline { steps{ script{ env.EXT_RELEASE = sh( - script: ''' curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/unstable/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}' ''', + script: ''' curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/main/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}' ''', returnStdout: true).trim() env.RELEASE_LINK = 'custom_command' } @@ -187,10 +187,10 @@ pipeline { } } } - // If this is a nightly build use live docker endpoints + // If this is a master build use live docker endpoints stage("Set ENV live build"){ when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' } steps { @@ -200,13 +200,13 @@ pipeline { env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-nightly-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-nightly-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } else { - env.CI_TAGS = 'nightly-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER - env.META_TAG = 'nightly-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER - env.EXT_RELEASE_TAG = 'nightly-version-' + env.EXT_RELEASE_CLEAN + env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' env.CITEST_IMAGETAG = 'latest' } @@ -215,7 +215,7 @@ pipeline { // If this is a dev build use dev docker endpoints stage("Set ENV dev build"){ when { - not {branch "nightly"} + not {branch "master"} environment name: 'CHANGE_ID', value: '' } steps { @@ -225,13 +225,13 @@ pipeline { env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA } else { - env.CI_TAGS = 'nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA } env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA - env.META_TAG = 'nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA - env.EXT_RELEASE_TAG = 'nightly-version-' + env.EXT_RELEASE_CLEAN + env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' env.CITEST_IMAGETAG = 'develop' @@ -250,13 +250,13 @@ pipeline { env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME if (env.MULTIARCH == 'true') { - env.CI_TAGS = 'amd64-nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST } else { - env.CI_TAGS = 'nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST } env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST - env.META_TAG = 'nightly-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST - env.EXT_RELEASE_TAG = 'nightly-version-' + env.EXT_RELEASE_CLEAN + env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + 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' @@ -295,7 +295,7 @@ pipeline { // Use helper containers to render templated files stage('Update-Templates') { when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' expression { env.CONTAINER_NAME != null @@ -307,24 +307,24 @@ pipeline { TEMPDIR=$(mktemp -d) docker pull ghcr.io/linuxserver/jenkins-builder:latest # Cloned repo paths for templating: - # ${TEMPDIR}/docker-${CONTAINER_NAME}: Cloned branch nightly of ${LS_USER}/${LS_REPO} for running the jenkins builder on - # ${TEMPDIR}/repo/${LS_REPO}: Cloned branch nightly of ${LS_USER}/${LS_REPO} for commiting various templated file changes and pushing back to Github + # ${TEMPDIR}/docker-${CONTAINER_NAME}: Cloned branch master of ${LS_USER}/${LS_REPO} for running the jenkins builder on + # ${TEMPDIR}/repo/${LS_REPO}: Cloned branch master of ${LS_USER}/${LS_REPO} for commiting various templated file changes and pushing back to Github # ${TEMPDIR}/docs/docker-documentation: Cloned docs repo for pushing docs updates to Github # ${TEMPDIR}/unraid/docker-templates: Cloned docker-templates repo to check for logos # ${TEMPDIR}/unraid/templates: Cloned templates repo for commiting unraid template changes and pushing back to Github - git clone --branch nightly --depth 1 https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/docker-${CONTAINER_NAME} + git clone --branch master --depth 1 https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/docker-${CONTAINER_NAME} docker run --rm -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/tmp -e LOCAL=true -e PUID=$(id -u) -e PGID=$(id -g) ghcr.io/linuxserver/jenkins-builder:latest echo "Starting Stage 1 - Jenkinsfile update" if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then mkdir -p ${TEMPDIR}/repo git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO} - git checkout -f nightly + git checkout -f master cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/ git add Jenkinsfile git commit -m 'Bot Updating Templated Files' - git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly - git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly + git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master + git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "Updating Jenkinsfile and exiting build, new one will trigger based on commit" rm -Rf ${TEMPDIR} @@ -343,13 +343,13 @@ pipeline { 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 nightly + git checkout -f master for i in ${TEMPLATES_TO_DELETE}; do git rm "${i}" done git commit -m 'Bot Updating Templated Files' - git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly - git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly + git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master + git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "Deleting old/deprecated templates and exiting build, new one will trigger based on commit" rm -Rf ${TEMPDIR} @@ -364,20 +364,20 @@ pipeline { 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}:nightly + 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}-nightly.d2\\")" readme-vars.yml + 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 nightly + git checkout -f master cp ${WORKSPACE}/readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/readme-vars.yml git add readme-vars.yml git commit -m 'Bot Updating Templated Files' - git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly - git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly + git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master + git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "Updating templates and exiting build, new one will trigger based on commit" rm -Rf ${TEMPDIR} @@ -394,7 +394,7 @@ pipeline { 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 nightly + git checkout -f master cd ${TEMPDIR}/docker-${CONTAINER_NAME} mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE @@ -407,8 +407,8 @@ pipeline { fi git add readme-vars.yml ${TEMPLATED_FILES} git commit -m 'Bot Updating Templated Files' - git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly - git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly + git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master + git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "Updating templates and exiting build, new one will trigger based on commit" rm -Rf ${TEMPDIR} @@ -509,7 +509,7 @@ pipeline { // Exit the build if the Templated files were just updated stage('Template-exit') { when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' environment name: 'FILES_UPDATED', value: 'true' expression { @@ -522,10 +522,10 @@ pipeline { } } } - // If this is a nightly build check the S6 service file perms + // If this is a master build check the S6 service file perms stage("Check S6 Service file Permissions"){ when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' environment name: 'EXIT_STATUS', value: '' } @@ -778,7 +778,7 @@ pipeline { // Take the image we just built and dump package versions for comparison stage('Update-packages') { when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' environment name: 'EXIT_STATUS', value: '' } @@ -801,14 +801,14 @@ pipeline { echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} - git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f nightly + git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/ cd ${TEMPDIR}/${LS_REPO}/ wait git add package_versions.txt git commit -m 'Bot Updating Package Versions' - git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly - git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git nightly + git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master + git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER} echo "Package tag updated, stopping build process" else @@ -826,7 +826,7 @@ pipeline { // Exit the build if the package file was just updated stage('PACKAGE-exit') { when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' environment name: 'PACKAGE_UPDATED', value: 'true' environment name: 'EXIT_STATUS', value: '' @@ -840,7 +840,7 @@ pipeline { // Exit the build if this is just a package check and there are no changes to push stage('PACKAGECHECK-exit') { when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' environment name: 'PACKAGE_UPDATED', value: 'false' environment name: 'EXIT_STATUS', value: '' @@ -894,7 +894,7 @@ pipeline { -e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \ -e TAGS=\"${CI_TAGS}\" \ -e META_TAG=\"${META_TAG}\" \ - -e RELEASE_TAG=\"nightly\" \ + -e RELEASE_TAG=\"latest\" \ -e PORT=\"${CI_PORT}\" \ -e SSL=\"${CI_SSL}\" \ -e BASE=\"${DIST_IMAGE}\" \ @@ -934,7 +934,7 @@ pipeline { CACHEIMAGE=${i} fi done - docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:nightly -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} || \ @@ -963,9 +963,9 @@ pipeline { CACHEIMAGE=${i} fi done - docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-nightly -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${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-nightly -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${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 [[ "${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} || \ @@ -975,7 +975,7 @@ pipeline { fi done for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do - docker buildx imagetools create -t ${MANIFESTIMAGE}:nightly ${MANIFESTIMAGE}:amd64-nightly ${MANIFESTIMAGE}:arm64v8-nightly || \ + 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; } @@ -993,7 +993,7 @@ pipeline { // If this is a public release tag it in the LS Github stage('Github-Tag-Push-Release') { when { - branch "nightly" + branch "master" expression { env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER } @@ -1009,21 +1009,21 @@ pipeline { 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": "nightly"}' \ + "target_commitish": "master"}' \ | jq -r '.body' | sed 's|## What.s Changed||') fi echo "Pushing New tag for current commit ${META_TAG}" curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ -d '{"tag":"'${META_TAG}'",\ "object": "'${COMMIT_SHA}'",\ - "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to nightly",\ + "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\ "type": "commit",\ "tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' echo "Pushing New release for Tag" echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json jq -n \ --arg tag_name "$META_TAG" \ - --arg target_commitish "nightly" \ + --arg target_commitish "master" \ --arg ci_url "${CI_URL:-N/A}" \ --arg ls_notes "$AUTO_RELEASE_NOTES" \ --arg remote_notes "$(cat releasebody.json)" \ @@ -1033,7 +1033,7 @@ pipeline { "name": $tag_name, "body": ("**CI Report:**\\n\\n" + $ci_url + "\\n\\n**LinuxServer Changes:**\\n\\n" + $ls_notes + "\\n\\n**Remote Changes:**\\n\\n" + $remote_notes), "draft": false, - "prerelease": true }' > releasebody.json.done + "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 ''' } @@ -1041,14 +1041,14 @@ pipeline { // Add protection to the release branch stage('Github-Release-Branch-Protection') { when { - branch "nightly" + branch "master" environment name: 'CHANGE_ID', value: '' environment name: 'EXIT_STATUS', value: '' } steps { - echo "Setting up protection for release branch nightly" + echo "Setting up protection for release branch master" sh '''#! /bin/bash - curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/nightly/protection \ + curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/master/protection \ -d $(jq -c . << EOF { "required_status_checks": null, diff --git a/README.md b/README.md index 2c332d1..a97db46 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + [![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!") @@ -34,8 +34,8 @@ Find us at: [![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/jellyfin) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jellyfin.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/jellyfin) [![Docker Stars](https://img.shields.io/docker/stars/linuxserver/jellyfin.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/jellyfin) -[![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-jellyfin%2Fjob%2Fnightly%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-jellyfin/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%2Fjellyfin%2Fnightly%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/jellyfin/nightly/index.html) +[![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-jellyfin%2Fjob%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-jellyfin/job/master/) +[![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%2Fjellyfin%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/jellyfin/latest/index.html) [Jellyfin](https://github.com/jellyfin/jellyfin) is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it. @@ -45,7 +45,7 @@ Find us at: We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). -Simply pulling `lscr.io/linuxserver/jellyfin:nightly` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. +Simply pulling `lscr.io/linuxserver/jellyfin:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. The architectures supported by this image are: @@ -79,6 +79,7 @@ To enable the OpenCL based DV, HDR10 and HLG tone-mapping, please refer to the O https://mods.linuxserver.io/?mod=jellyfin +And follow this guide even if you are using iGPU: https://jellyfin.org/docs/general/administration/hardware-acceleration/intel/#configure-and-verify-lp-mode-on-linux #### OpenMAX (Raspberry Pi) @@ -138,13 +139,13 @@ To help you get started creating a container from this image you can either use --- services: jellyfin: - image: lscr.io/linuxserver/jellyfin:nightly + image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - - JELLYFIN_PublishedServerUrl=192.168.0.5 #optional + - JELLYFIN_PublishedServerUrl=http://192.168.0.5 #optional volumes: - /path/to/jellyfin/library:/config - /path/to/tvseries:/data/tvshows @@ -165,7 +166,7 @@ docker run -d \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ - -e JELLYFIN_PublishedServerUrl=192.168.0.5 `#optional` \ + -e JELLYFIN_PublishedServerUrl=http://192.168.0.5 `#optional` \ -p 8096:8096 \ -p 8920:8920 `#optional` \ -p 7359:7359/udp `#optional` \ @@ -174,7 +175,7 @@ docker run -d \ -v /path/to/tvseries:/data/tvshows \ -v /path/to/movies:/data/movies \ --restart unless-stopped \ - lscr.io/linuxserver/jellyfin:nightly + lscr.io/linuxserver/jellyfin:latest ``` ## Parameters @@ -190,7 +191,7 @@ Containers are configured using parameters passed at runtime (such as those abov | `-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). | -| `-e JELLYFIN_PublishedServerUrl=192.168.0.5` | Set the autodiscovery response domain or IP address. | +| `-e JELLYFIN_PublishedServerUrl=http://192.168.0.5` | Set the autodiscovery response domain or IP address, include http(s)://. | | `-v /config` | Jellyfin data storage location. *This can grow very large, 50gb+ is likely for a large collection.* | | `-v /data/tvshows` | Media goes here. Add as many as needed e.g. `/data/movies`, `/data/tv`, etc. | | `-v /data/movies` | Media goes here. Add as many as needed e.g. `/data/movies`, `/data/tv`, etc. | @@ -274,7 +275,7 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to * Image version number: ```bash - docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/jellyfin:nightly + docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/jellyfin:latest ``` ## Updating Info @@ -322,7 +323,7 @@ Below are the instructions for updating containers: * Update the image: ```bash - docker pull lscr.io/linuxserver/jellyfin:nightly + docker pull lscr.io/linuxserver/jellyfin:latest ``` * Stop the running container: @@ -359,7 +360,7 @@ cd docker-jellyfin docker build \ --no-cache \ --pull \ - -t lscr.io/linuxserver/jellyfin:nightly . + -t lscr.io/linuxserver/jellyfin:latest . ``` The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static` @@ -372,24 +373,28 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions -* **20.10.25:** - Add libjemalloc2 as runtime dep. +* **20.10.25:** - Add libjemalloc as runtime dep. * **06.10.24:** - Fix fontconfig cache path. * **13.08.24:** - Rebase to Ubuntu Noble. -* **01.05.24:** - Increase verbosity of device permissions fixing. Use universal hardware acceleration blurb. -* **03.12.23:** - Switch nightly to ffmpeg6. -* **01.07.23:** - Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf) -* **07.12.22:** - Rebase nightly to Jammy, migrate to s6v3. +* **01.05.24:** - Increase verbosity of device permissions fixing. +* **12.02.24:** - Use universal hardware acceleration blurb. +* **12.09.23:** - Take ownership of plugin directories. +* **04.07.23:** - Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf) +* **07.12.22:** - Rebase master to Jammy, migrate to s6v3. +* **11.06.22:** - Switch to upstream repo's ffmpeg5 build. * **05.01.22:** - Specify Intel iHD driver versions to avoid mismatched libva errors. * **25.12.21:** - Fix video device group perms error message. +* **10.12.21:** - Rework readme, disable template sync. * **22.09.21:** - Pull only the server, web and ffmpeg packages instead of the wrapper. -* **23.06.21:** - Add log message if device permissions are incorrect. Deprecate the `bionic` tag. +* **23.06.21:** - Add log message if device permissions are incorrect. Pin jellyfin dependency versions to prevent upstream apt repo issues. Deprecate the `bionic` tag. +* **21.05.21:** - Add nvidia.icd file to fix missing tonemapping using Nvidia HW. +* **20.01.21:** - Add Jellyfin Binary Environmentals * **20.01.21:** - Deprecate `UMASK_SET` in favor of UMASK in baseimage, see above for more information. -* **05.01.21:** - Add nvidia.icd file to fix missing tonemapping using Nvidia HW. * **23.11.20:** - Rebase to Focal, branch off Bionic. -* **22.07.20:** - Install nightly from unstable. -* **27.05.20:** - Set web directory path. +* **22.07.20:** - Ingest releases from Jellyfin repo. +* **28.04.20:** - Replace MMAL/OMX dependency device `/dev/vc-mem` with `/dev/vcsm` as the former was not sufficient for raspbian. * **11.04.20:** - Enable hw decode (mmal) on Raspberry Pi, update readme instructions, add donation info, create missing default transcodes folder. -* **11.03.20:** - Add v4l2 support on Raspberry Pi; remove optional transcode mapping (location is selected in the gui, defaults to path under `/config`). +* **11.03.20:** - Add Pi V4L2 support, remove optional transcode mapping (location is selected in the gui, defaults to path under `/config`). * **30.01.20:** - Add nightly tag. * **09.01.20:** - Add Pi OpenMax support. * **02.10.19:** - Improve permission fixing for render & dvb devices. diff --git a/jenkins-vars.yml b/jenkins-vars.yml index 772a90c..2c4a00c 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -3,11 +3,10 @@ # jenkins variables project_name: docker-jellyfin external_type: na -custom_version_command: "curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/unstable/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}'" -release_type: prerelease -release_tag: nightly -ls_branch: nightly -external_trigger_delay_hours: 6 +custom_version_command: "curl -sX GET https://repo.jellyfin.org/ubuntu/dists/noble/main/binary-amd64/Packages |grep -A 7 -m 1 'Package: jellyfin-server' | awk -F ': ' '/Version/{print $2;exit}'" +release_type: stable +release_tag: latest +ls_branch: master repo_vars: - BUILD_VERSION_ARG = 'JELLYFIN_RELEASE' - LS_USER = 'linuxserver' diff --git a/package_versions.txt b/package_versions.txt index c6b0be5..08f8033 100755 --- a/package_versions.txt +++ b/package_versions.txt @@ -11,7 +11,7 @@ DiscUtils.Iso9660 0.16.13 DiscUtils.Streams 0.16.13 dotnet DiscUtils.Udf 0.16.13 dotnet DotNet.Glob 3.1.3 dotnet -Emby.Naming 10.12.0.0 dotnet +Emby.Naming 10.11.6.0 dotnet Emby.Photos 24.4.0 dotnet Emby.Server.Implementations 24.4.0 dotnet ExCSS 4.3.1 dotnet @@ -22,7 +22,6 @@ ICU4N.Transliterator 60.1.0-alpha. Ignore 0.2.1 dotnet J2N 2.0.0 dotnet Jellyfin.Api 24.4.0 dotnet -Jellyfin.CodeAnalysis 24.4.0 dotnet Jellyfin.Common 24.4.0 dotnet Jellyfin.Controller 24.4.0 dotnet Jellyfin.Data 24.4.0 dotnet @@ -40,11 +39,11 @@ Jellyfin.Networking 24.4.0 Jellyfin.Server.Implementations 24.4.0 dotnet Jellyfin.XmlTv 10.8.0 dotnet LrcParser 2025.623.0 dotnet -MediaBrowser.Common 10.12.0.0 dotnet -MediaBrowser.Controller 10.12.0.0 dotnet +MediaBrowser.Common 10.11.6.0 dotnet +MediaBrowser.Controller 10.11.6.0 dotnet MediaBrowser.LocalMetadata 24.4.0 dotnet MediaBrowser.MediaEncoding 24.4.0 dotnet -MediaBrowser.Model 10.12.0.0 dotnet +MediaBrowser.Model 10.11.6.0 dotnet MediaBrowser.Providers 24.4.0 dotnet MediaBrowser.XbmcMetadata 24.4.0 dotnet MetaBrainz.Common 3.0.0 dotnet @@ -120,7 +119,7 @@ dash 0.5.12-6ubunt debconf 1.5.86ubuntu1 deb debianutils 5.17build1 deb diffutils 1:3.10-1build1 deb -dirmngr 2.4.4-2ubuntu17.3 deb +dirmngr 2.4.4-2ubuntu17.4 deb dpkg 1.22.6ubuntu6.5 deb e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 deb findutils 4.9.0-5build1 deb @@ -128,26 +127,26 @@ fontconfig-config 2.15.0-1.1ubu fonts-dejavu-core 2.37-8 deb fonts-dejavu-mono 2.37-8 deb gcc-14-base 14.2.0-4ubuntu2~24.04 deb -gnupg 2.4.4-2ubuntu17.3 deb -gnupg-l10n 2.4.4-2ubuntu17.3 deb -gnupg-utils 2.4.4-2ubuntu17.3 deb -gpg 2.4.4-2ubuntu17.3 deb -gpg-agent 2.4.4-2ubuntu17.3 deb -gpg-wks-client 2.4.4-2ubuntu17.3 deb -gpgconf 2.4.4-2ubuntu17.3 deb -gpgsm 2.4.4-2ubuntu17.3 deb -gpgv 2.4.4-2ubuntu17.3 deb +gnupg 2.4.4-2ubuntu17.4 deb +gnupg-l10n 2.4.4-2ubuntu17.4 deb +gnupg-utils 2.4.4-2ubuntu17.4 deb +gpg 2.4.4-2ubuntu17.4 deb +gpg-agent 2.4.4-2ubuntu17.4 deb +gpg-wks-client 2.4.4-2ubuntu17.4 deb +gpgconf 2.4.4-2ubuntu17.4 deb +gpgsm 2.4.4-2ubuntu17.4 deb +gpgv 2.4.4-2ubuntu17.4 deb grep 3.11-4build1 deb gzip 1.12-1ubuntu3.1 deb hostname 3.23+nmu2ubuntu2 deb init-system-helpers 1.66ubuntu1 deb -jellyfin 2025122205+ubu2404 deb +jellyfin 10.11.6+ubu2404 deb jellyfin 24.04 dotnet jellyfin-ffmpeg7 7.1.3-1-noble deb -jellyfin-server 2025122205+ubu2404 deb -jellyfin-web 2025122205+ubu2404 deb +jellyfin-server 10.11.6+ubu2404 deb +jellyfin-web 10.11.6+ubu2404 deb jq 1.7.1-3ubuntu0.24.04.1 deb -keyboxd 2.4.4-2ubuntu17.3 deb +keyboxd 2.4.4-2ubuntu17.4 deb krb5-locales 1.20.1-6ubuntu2.6 deb libacl1 2.3.2-1build1.1 deb libapt-pkg6.0t64 2.8.3 deb @@ -223,7 +222,7 @@ libpam0g 1.5.3-5ubuntu libpciaccess0 0.17-3ubuntu0.24.04.2 deb libpcre2-8-0 10.42-4ubuntu2.1 deb libpixman-1-0 0.42.2-1build1 deb -libpng16-16t64 1.6.43-5ubuntu0.1 deb +libpng16-16t64 1.6.43-5ubuntu0.3 deb libproc2-0 2:4.0.4-4ubuntu3.2 deb libpsl5t64 0.21.2-1.1build1 deb libreadline8t64 8.2-4build1 deb @@ -246,11 +245,11 @@ libss2 1.47.0-2.4~ex libssh-4 0.10.6-2ubuntu0.2 deb libssl3t64 3.0.13-0ubuntu3.6 deb libstdc++6 14.2.0-4ubuntu2~24.04 deb -libsystemd0 255.4-1ubuntu8.11 deb -libtasn1-6 4.19.0-3ubuntu0.24.04.1 deb +libsystemd0 255.4-1ubuntu8.12 deb +libtasn1-6 4.19.0-3ubuntu0.24.04.2 deb libtheora0 1.1.1+dfsg.1-16.1build3 deb libtinfo6 6.4+20240113-1ubuntu2 deb -libudev1 255.4-1ubuntu8.11 deb +libudev1 255.4-1ubuntu8.12 deb libudfread0 1.1.2-1build1 deb libunistring5 1.1-2build1.1 deb libuuid1 2.39.3-9ubuntu6.4 deb @@ -279,7 +278,7 @@ libxext6 2:1.3.4-1buil libxml2 2.9.14+dfsg-1.3ubuntu3.6 deb libxrender1 1:0.9.10-1.1build1 deb libxshmfence1 1.3-1build5 deb -libxslt1.1 1.1.39-0exp1ubuntu0.24.04.2 deb +libxslt1.1 1.1.39-0exp1ubuntu0.24.04.3 deb libxxhash0 0.8.2-2build1 deb libzstd1 1.5.5+dfsg2-2build1.1 deb libzvbi-common 0.2.42-2 deb @@ -305,11 +304,11 @@ prometheus-net.AspNetCore 8.2.1 prometheus-net.DotNetRuntime 4.4.1 dotnet publicsuffix 20231001.0357-0.1 deb readline-common 8.2-4build1 deb -runtimepack.Microsoft.AspNetCore.App.Runtime.linux-x64 9.0.11 dotnet -runtimepack.Microsoft.NETCore.App.Runtime.linux-x64 9.0.11 dotnet +runtimepack.Microsoft.AspNetCore.App.Runtime.linux-x64 9.0.12 dotnet +runtimepack.Microsoft.NETCore.App.Runtime.linux-x64 9.0.12 dotnet sed 4.9-2build1 deb sensible-utils 0.0.22 deb -systemd-standalone-sysusers 255.4-1ubuntu8.11 deb +systemd-standalone-sysusers 255.4-1ubuntu8.12 deb sysvinit-utils 3.08-6ubuntu3 deb tar 1.35+dfsg-3build1 deb tzdata 2025b-0ubuntu0.24.04.1 deb diff --git a/readme-vars.yml b/readme-vars.yml index 039cd45..1f8845a 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -5,6 +5,7 @@ project_name: jellyfin project_url: "https://github.com/jellyfin/jellyfin" project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jellyfin-logo.png" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" +project_categories: "Media Servers,Music,Audiobooks" project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it." # supported architectures available_architectures: @@ -30,7 +31,7 @@ param_usage_include_env: true # optional container parameters opt_param_usage_include_env: true opt_param_env_vars: - - {env_var: "JELLYFIN_PublishedServerUrl", env_value: "192.168.0.5", desc: "Set the autodiscovery response domain or IP address."} + - {env_var: "JELLYFIN_PublishedServerUrl", env_value: "http://192.168.0.5", desc: "Set the autodiscovery response domain or IP address, include http(s)://."} opt_param_usage_include_ports: true opt_param_ports: - {external_port: "8920", internal_port: "8920", port_desc: "Optional - Https webUI (you need to set up your own certificate)."} @@ -66,6 +67,7 @@ app_setup_block: | https://mods.linuxserver.io/?mod=jellyfin + And follow this guide even if you are using iGPU: https://jellyfin.org/docs/general/administration/hardware-acceleration/intel/#configure-and-verify-lp-mode-on-linux #### OpenMAX (Raspberry Pi) @@ -90,7 +92,7 @@ readme_hwaccel: true unraid_template_sync: false # init diagram init_diagram: | - "jellyfin:nightly": { + "jellyfin:latest": { docker-mods base { fix-attr +\nlegacy cont-init @@ -128,27 +130,31 @@ init_diagram: | Base Images: { "baseimage-ubuntu:noble" } - "jellyfin:nightly" <- Base Images + "jellyfin:latest" <- Base Images # changelog changelogs: - - {date: "20.10.25:", desc: "Add libjemalloc2 as runtime dep."} + - {date: "20.10.25:", desc: "Add libjemalloc as runtime dep."} - {date: "06.10.24:", desc: "Fix fontconfig cache path."} - {date: "13.08.24:", desc: "Rebase to Ubuntu Noble."} - - {date: "01.05.24:", desc: "Increase verbosity of device permissions fixing. Use universal hardware acceleration blurb."} - - {date: "03.12.23:", desc: "Switch nightly to ffmpeg6."} - - {date: "01.07.23:", desc: "Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)"} - - {date: "07.12.22:", desc: "Rebase nightly to Jammy, migrate to s6v3."} + - {date: "01.05.24:", desc: "Increase verbosity of device permissions fixing."} + - {date: "12.02.24:", desc: "Use universal hardware acceleration blurb."} + - {date: "12.09.23:", desc: "Take ownership of plugin directories."} + - {date: "04.07.23:", desc: "Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)"} + - {date: "07.12.22:", desc: "Rebase master to Jammy, migrate to s6v3."} + - {date: "11.06.22:", desc: "Switch to upstream repo's ffmpeg5 build."} - {date: "05.01.22:", desc: "Specify Intel iHD driver versions to avoid mismatched libva errors."} - {date: "25.12.21:", desc: "Fix video device group perms error message."} + - {date: "10.12.21:", desc: "Rework readme, disable template sync."} - {date: "22.09.21:", desc: "Pull only the server, web and ffmpeg packages instead of the wrapper."} - - {date: "23.06.21:", desc: "Add log message if device permissions are incorrect. Deprecate the `bionic` tag."} + - {date: "23.06.21:", desc: "Add log message if device permissions are incorrect. Pin jellyfin dependency versions to prevent upstream apt repo issues. Deprecate the `bionic` tag."} + - {date: "21.05.21:", desc: "Add nvidia.icd file to fix missing tonemapping using Nvidia HW."} + - {date: "20.01.21:", desc: "Add Jellyfin Binary Environmentals"} - {date: "20.01.21:", desc: "Deprecate `UMASK_SET` in favor of UMASK in baseimage, see above for more information."} - - {date: "05.01.21:", desc: "Add nvidia.icd file to fix missing tonemapping using Nvidia HW."} - {date: "23.11.20:", desc: "Rebase to Focal, branch off Bionic."} - - {date: "22.07.20:", desc: "Install nightly from unstable."} - - {date: "27.05.20:", desc: "Set web directory path."} + - {date: "22.07.20:", desc: "Ingest releases from Jellyfin repo."} + - {date: "28.04.20:", desc: "Replace MMAL/OMX dependency device `/dev/vc-mem` with `/dev/vcsm` as the former was not sufficient for raspbian."} - {date: "11.04.20:", desc: "Enable hw decode (mmal) on Raspberry Pi, update readme instructions, add donation info, create missing default transcodes folder."} - - {date: "11.03.20:", desc: "Add v4l2 support on Raspberry Pi; remove optional transcode mapping (location is selected in the gui, defaults to path under `/config`)."} + - {date: "11.03.20:", desc: "Add Pi V4L2 support, remove optional transcode mapping (location is selected in the gui, defaults to path under `/config`)."} - {date: "30.01.20:", desc: "Add nightly tag."} - {date: "09.01.20:", desc: "Add Pi OpenMax support."} - {date: "02.10.19:", desc: "Improve permission fixing for render & dvb devices."} diff --git a/root/etc/OpenCL/vendors/nvidia.icd b/root/etc/OpenCL/vendors/nvidia.icd index 9712af9..6b30d0c 100644 --- a/root/etc/OpenCL/vendors/nvidia.icd +++ b/root/etc/OpenCL/vendors/nvidia.icd @@ -1 +1 @@ -libnvidia-opencl.so.1 +libnvidia-opencl.so.1 \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-jellyfin-config/run b/root/etc/s6-overlay/s6-rc.d/init-jellyfin-config/run index 8b6a23e..7955695 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-jellyfin-config/run +++ b/root/etc/s6-overlay/s6-rc.d/init-jellyfin-config/run @@ -3,7 +3,7 @@ # create directories mkdir -p \ - /config/{log,data/transcodes,cache} \ + /config/{log,data/plugins/configurations,data/transcodes,cache} \ /data \ /transcode @@ -11,5 +11,7 @@ mkdir -p \ lsiown abc:abc \ /config \ /config/* \ + /config/data/plugins \ + /config/data/plugins/configurations \ /config/data/transcodes \ /transcode