diff --git a/.editorconfig b/.editorconfig old mode 100755 new mode 100644 diff --git a/.github/workflows/call_issue_pr_tracker.yml b/.github/workflows/call_issue_pr_tracker.yml index 2c30784..d07cf12 100644 --- a/.github/workflows/call_issue_pr_tracker.yml +++ b/.github/workflows/call_issue_pr_tracker.yml @@ -8,6 +8,9 @@ on: pull_request_review: types: [submitted,edited,dismissed] +permissions: + contents: read + jobs: manage-project: permissions: diff --git a/.github/workflows/call_issues_cron.yml b/.github/workflows/call_issues_cron.yml index 32a8e08..0ab72f8 100644 --- a/.github/workflows/call_issues_cron.yml +++ b/.github/workflows/call_issues_cron.yml @@ -4,6 +4,9 @@ on: - cron: '20 6 * * *' workflow_dispatch: +permissions: + contents: read + jobs: stale: permissions: diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 450e597..bf6f2f5 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -3,6 +3,9 @@ name: External Trigger Main on: workflow_dispatch: +permissions: + contents: read + jobs: external-trigger-main: runs-on: ubuntu-latest @@ -43,8 +46,8 @@ jobs: "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} exit 1 fi - EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') - echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY + EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') + echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY image="linuxserver/speedtest-tracker" tag="latest" @@ -100,8 +103,8 @@ jobs: exit 1 fi echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY - if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then - echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY + if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then + echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY exit 0 elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-speedtest-tracker/job/main/lastBuild/api/json | jq -r '.building') == "true" ]; then echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY @@ -116,7 +119,7 @@ jobs: "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} else printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY - echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY + echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY if [[ "${artifacts_found}" == "true" ]]; then echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY fi @@ -136,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 speedtest-tracker tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" + TRIGGER_REASON="A version change was detected for speedtest-tracker 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/external_trigger_scheduler.yml b/.github/workflows/external_trigger_scheduler.yml index c68ed9a..5121f83 100644 --- a/.github/workflows/external_trigger_scheduler.yml +++ b/.github/workflows/external_trigger_scheduler.yml @@ -5,6 +5,9 @@ on: - cron: '56 * * * *' workflow_dispatch: +permissions: + contents: read + jobs: external-trigger-scheduler: runs-on: ubuntu-latest diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml index 4882729..ad5e19a 100644 --- a/.github/workflows/greetings.yml +++ b/.github/workflows/greetings.yml @@ -2,8 +2,14 @@ name: Greetings on: [pull_request_target, issues] +permissions: + contents: read + jobs: greeting: + permissions: + issues: write + pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/first-interaction@v1 diff --git a/.github/workflows/package_trigger_scheduler.yml b/.github/workflows/package_trigger_scheduler.yml index 0489f56..f102b31 100644 --- a/.github/workflows/package_trigger_scheduler.yml +++ b/.github/workflows/package_trigger_scheduler.yml @@ -5,6 +5,9 @@ on: - cron: '0 21 * * 6' workflow_dispatch: +permissions: + contents: read + jobs: package-trigger-scheduler: runs-on: ubuntu-latest diff --git a/Dockerfile b/Dockerfile index 2cbdeb0..c2fa225 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.21 +FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.22 ARG BUILD_DATE ARG VERSION @@ -12,16 +12,17 @@ ENV HOME=/config RUN \ apk add --no-cache \ + iputils \ grep \ - php83-gd \ - php83-intl \ - php83-pdo_mysql \ - php83-pdo_pgsql \ - php83-pdo_sqlite \ - php83-pecl-redis \ - php83-tokenizer \ - php83-xmlreader \ - postgresql15-client \ + php84-gd \ + php84-intl \ + php84-pdo_mysql \ + php84-pdo_pgsql \ + php84-pdo_sqlite \ + php84-pecl-redis \ + php84-tokenizer \ + php84-xmlreader \ + postgresql16-client \ ssmtp && \ apk add --no-cache --virtual=build-dependencies \ npm && \ @@ -38,9 +39,9 @@ RUN \ /tmp/speedtest-cli.tgz -C \ /usr/bin && \ echo "**** configure php-fpm to pass env vars ****" && \ - sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \ - grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf && \ - echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \ + sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php84/php-fpm.d/www.conf && \ + if ! grep -qxF 'clear_env = no' /etc/php84/php-fpm.d/www.conf; then echo 'clear_env = no' >> /etc/php84/php-fpm.d/www.conf; fi && \ + echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php84/php-fpm.conf && \ echo "*** install speedtest-tracker ***" && \ if [ -z ${SPEEDTEST_TRACKER_VERSION+x} ]; then \ SPEEDTEST_TRACKER_VERSION=$(curl -sX GET "https://api.github.com/repos/alexjustesen/speedtest-tracker/releases/latest" \ @@ -64,12 +65,12 @@ RUN \ echo "**** setup php opcache ****" && \ { \ echo 'opcache.enable_cli=1'; \ - } > /etc/php83/conf.d/opcache-recommended.ini; \ + } > /etc/php84/conf.d/opcache-recommended.ini; \ { \ echo 'post_max_size = 100M'; \ echo 'upload_max_filesize = 100M'; \ echo 'variables_order = EGPCS'; \ - } > /etc/php83/conf.d/php-misc.ini && \ + } > /etc/php84/conf.d/php-misc.ini && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ apk del --purge build-dependencies && \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 62cd71d..1a55bfc 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.21 +FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.22 ARG BUILD_DATE ARG VERSION @@ -12,16 +12,17 @@ ENV HOME=/config RUN \ apk add --no-cache \ + iputils \ grep \ - php83-gd \ - php83-intl \ - php83-pdo_mysql \ - php83-pdo_pgsql \ - php83-pdo_sqlite \ - php83-pecl-redis \ - php83-tokenizer \ - php83-xmlreader \ - postgresql15-client \ + php84-gd \ + php84-intl \ + php84-pdo_mysql \ + php84-pdo_pgsql \ + php84-pdo_sqlite \ + php84-pecl-redis \ + php84-tokenizer \ + php84-xmlreader \ + postgresql16-client \ ssmtp && \ apk add --no-cache --virtual=build-dependencies \ npm && \ @@ -38,9 +39,9 @@ RUN \ /tmp/speedtest-cli.tgz -C \ /usr/bin && \ echo "**** configure php-fpm to pass env vars ****" && \ - sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \ - grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf && \ - echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \ + sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php84/php-fpm.d/www.conf && \ + if ! grep -qxF 'clear_env = no' /etc/php84/php-fpm.d/www.conf; then echo 'clear_env = no' >> /etc/php84/php-fpm.d/www.conf; fi && \ + echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php84/php-fpm.conf && \ echo "*** install speedtest-tracker ***" && \ if [ -z ${SPEEDTEST_TRACKER_VERSION+x} ]; then \ SPEEDTEST_TRACKER_VERSION=$(curl -sX GET "https://api.github.com/repos/alexjustesen/speedtest-tracker/releases/latest" \ @@ -64,12 +65,12 @@ RUN \ echo "**** setup php opcache ****" && \ { \ echo 'opcache.enable_cli=1'; \ - } > /etc/php83/conf.d/opcache-recommended.ini; \ + } > /etc/php84/conf.d/opcache-recommended.ini; \ { \ echo 'post_max_size = 100M'; \ echo 'upload_max_filesize = 100M'; \ echo 'variables_order = EGPCS'; \ - } > /etc/php83/conf.d/php-misc.ini && \ + } > /etc/php84/conf.d/php-misc.ini && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ apk del --purge build-dependencies && \ diff --git a/Jenkinsfile b/Jenkinsfile index 297d751..1d4eda4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -97,7 +97,11 @@ pipeline { env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.PULL_REQUEST = env.CHANGE_ID env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./root/donate.txt' + if ( env.SYFT_IMAGE_TAG == null ) { + env.SYFT_IMAGE_TAG = 'latest' + } } + echo "Using syft image tag ${SYFT_IMAGE_TAG}" sh '''#! /bin/bash echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" ''' script{ @@ -214,6 +218,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' } } } @@ -239,6 +244,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' } } } @@ -264,6 +270,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' } } } @@ -286,7 +293,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 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 && \ @@ -621,13 +628,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 ''' @@ -687,13 +697,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 ''' @@ -747,12 +760,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 ''' @@ -790,7 +805,7 @@ pipeline { docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v ${TEMPDIR}:/tmp \ - ghcr.io/anchore/syft:latest \ + ghcr.io/anchore/syft:${SYFT_IMAGE_TAG} \ ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" @@ -877,7 +892,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} @@ -900,7 +915,10 @@ pipeline { -e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \ -e NODE_NAME=\"${NODE_NAME}\" \ - -t ghcr.io/linuxserver/ci:latest \ + -e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \ + -e COMMIT_SHA=\"${COMMIT_SHA}\" \ + -e BUILD_NUMBER=\"${BUILD_NUMBER}\" \ + -t ghcr.io/linuxserver/ci:${CITEST_IMAGETAG} \ python3 test_build.py''' } } @@ -926,9 +944,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 ''' @@ -953,20 +973,27 @@ pipeline { 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 ''' @@ -984,23 +1011,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 diff --git a/README.md b/README.md index 10050bf..7995b05 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.") [![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.") -[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.") [![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.") [![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget") @@ -22,7 +21,6 @@ Find us at: * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! * [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team. * [Discourse](https://discourse.linuxserver.io) - post on our community forum. -* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images. * [GitHub](https://github.com/linuxserver) - view the source for all of our repositories. * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget @@ -55,7 +53,6 @@ The architectures supported by this image are: | :----: | :----: | ---- | | x86-64 | ✅ | amd64-\ | | arm64 | ✅ | arm64v8-\ | -| armhf | ❌ | | ## Application Setup @@ -137,7 +134,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 APP_KEY=` | App key used for encrypting stored data. You can generate a key at [https://speedtest-tracker.dev](https://speedtest-tracker.dev) | +| `-e APP_KEY=` | App key used for encrypting stored data. You can generate a key as per [https://speedtest-tracker.dev](https://docs.speedtest-tracker.dev/getting-started/installation/using-docker-compose#install-with-docker-compose) | | `-e APP_URL=` | The IP:port or URL your application will be accessed on (ie. `http://192.168.1.1:6875` or `https://bookstack.mydomain.com` | | `-e DB_CONNECTION=sqlite` | Set the database type to use. `sqlite`, `pgsql`, or `mysql` | | `-e SPEEDTEST_SCHEDULE=` | Set the test schedule in cron format. e.g. `0 */6 * * *` | @@ -313,6 +310,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **11.10.25:** - Update nginx configs for v1.7.2. Existing users should update their nginx confs to avoid errors. +* **05.07.25:** - Rebase to Alpine 3.22. * **20.12.24:** - Rebase to Alpine 3.21. * **07.06.24:** - Cache Filament components and added APP_KEY as a required param. * **27.05.24:** - Existing users should update their nginx confs to avoid http2 deprecation warnings. diff --git a/package_versions.txt b/package_versions.txt index 0f0e363..5b96136 100644 --- a/package_versions.txt +++ b/package_versions.txt @@ -1,259 +1,280 @@ -NAME VERSION TYPE -acl-libs 2.3.2-r1 apk -alpine-baselayout 3.6.8-r1 apk -alpine-baselayout-data 3.6.8-r1 apk -alpine-keys 2.5-r0 apk -alpine-release 3.21.3-r0 apk -anourvalar/eloquent-serialize 1.3.1 php-composer -aom-libs 3.11.0-r0 apk -apache2-utils 2.4.62-r0 apk -apk-tools 2.14.6-r3 apk -apr 1.7.5-r0 apk -apr-util 1.6.3-r1 apk -argon2-libs 20190702-r5 apk -awcodes/filament-versions v2.0.1 php-composer -bash 5.2.37-r0 apk -blade-ui-kit/blade-heroicons 2.6.0 php-composer -blade-ui-kit/blade-icons 1.8.0 php-composer -brick/math 0.12.3 php-composer -brotli-libs 1.1.0-r2 apk -busybox 1.37.0-r12 apk -busybox-binsh 1.37.0-r12 apk -c-ares 1.34.5-r0 apk -ca-certificates 20241121-r1 apk -ca-certificates-bundle 20241121-r1 apk -carbonphp/carbon-doctrine-types 3.2.0 php-composer -catatonit 0.2.0-r0 apk -chrisullyott/php-filesize v4.2.1 php-composer -clue/stream-filter v1.7.0 php-composer -composer 2.8.8 binary -coreutils 9.5-r2 apk -coreutils-env 9.5-r2 apk -coreutils-fmt 9.5-r2 apk -coreutils-sha512sum 9.5-r2 apk -curl 8.12.1-r1 apk -danharrin/date-format-converter v0.3.1 php-composer -danharrin/livewire-rate-limiting v2.1.0 php-composer -dflydev/dot-access-data v3.0.3 php-composer -doctrine/dbal 4.2.3 php-composer -doctrine/deprecations 1.1.5 php-composer -doctrine/inflector 2.0.10 php-composer -doctrine/lexer 3.0.1 php-composer -dragonmantank/cron-expression v3.4.0 php-composer -egulias/email-validator 4.0.4 php-composer -filament/actions v3.3.10 php-composer -filament/filament v3.3.10 php-composer -filament/forms v3.3.10 php-composer -filament/infolists v3.3.10 php-composer -filament/notifications v3.3.10 php-composer -filament/spatie-laravel-settings-plugin v3.3.10 php-composer -filament/support v3.3.10 php-composer -filament/tables v3.3.10 php-composer -filament/widgets v3.3.10 php-composer -findutils 4.10.0-r0 apk -freetype 2.13.3-r0 apk -fruitcake/php-cors v1.3.0 php-composer -geerlingguy/ping 1.2.1 php-composer -git 2.47.2-r0 apk -git-init-template 2.47.2-r0 apk -graham-campbell/result-type v1.1.3 php-composer -grep 3.11-r0 apk -guzzlehttp/guzzle 7.9.3 php-composer -guzzlehttp/promises 2.2.0 php-composer -guzzlehttp/psr7 2.7.1 php-composer -guzzlehttp/uri-template v1.0.4 php-composer -icu-data-en 74.2-r0 apk -icu-libs 74.2-r0 apk -influxdata/influxdb-client-php 3.7.0 php-composer -jq 1.7.1-r0 apk -kirschbaum-development/eloquent-power-joins 4.2.3 php-composer -laravel-notification-channels/telegram 6.0.0 php-composer -laravel/framework v12.9.2 php-composer -laravel/prompts v0.3.5 php-composer -laravel/sanctum v4.0.8 php-composer -laravel/serializable-closure v2.0.4 php-composer -league/commonmark 2.6.1 php-composer -league/config v1.2.0 php-composer -league/csv 9.23.0 php-composer -league/flysystem 3.29.1 php-composer -league/flysystem-local 3.29.0 php-composer -league/mime-type-detection 1.16.0 php-composer -league/uri 7.5.1 php-composer -league/uri-interfaces 7.5.0 php-composer -libattr 2.5.2-r2 apk -libavif 1.0.4-r0 apk -libbsd 0.12.2-r0 apk -libbz2 1.0.8-r6 apk -libcrypto3 3.3.3-r0 apk -libcurl 8.12.1-r1 apk -libdav1d 1.5.0-r0 apk -libedit 20240808.3.1-r0 apk -libexpat 2.7.0-r0 apk -libgcc 14.2.0-r4 apk -libice 1.1.1-r6 apk -libidn2 2.3.7-r0 apk -libintl 0.22.5-r0 apk -libjpeg-turbo 3.0.4-r0 apk -libmd 1.1.0-r0 apk -libncursesw 6.5_p20241006-r3 apk -libpng 1.6.47-r0 apk -libpq 17.4-r0 apk -libproc2 4.0.4-r2 apk -libpsl 0.21.5-r3 apk -libsharpyuv 1.4.0-r0 apk -libsm 1.2.4-r4 apk -libssl3 3.3.3-r0 apk -libstdc++ 14.2.0-r4 apk -libunistring 1.2-r0 apk -libuuid 2.40.4-r1 apk -libwebp 1.4.0-r0 apk -libx11 1.8.10-r0 apk -libxau 1.0.11-r4 apk -libxcb 1.16.1-r0 apk -libxdmcp 1.1.5-r1 apk -libxext 1.3.6-r2 apk -libxml2 2.13.4-r5 apk -libxpm 3.5.17-r0 apk -libxt 1.3.1-r0 apk -libzip 1.11.2-r0 apk -linux-pam 1.6.1-r1 apk -livewire/livewire v3.6.3 php-composer -logrotate 3.21.0-r1 apk -lorisleiva/laravel-actions v2.9.0 php-composer -lorisleiva/lody v0.6.0 php-composer -lz4-libs 1.10.0-r0 apk -maennchen/zipstream-php 2.4.0 php-composer -masterminds/html5 2.9.0 php-composer -monolog/monolog 3.9.0 php-composer -musl 1.2.5-r9 apk -musl-utils 1.2.5-r9 apk -myclabs/php-enum 1.8.5 php-composer -nano 8.2-r0 apk -ncurses-terminfo-base 6.5_p20241006-r3 apk -nesbot/carbon 3.9.0 php-composer -netcat-openbsd 1.226.1.1-r0 apk -nette/schema v1.3.2 php-composer -nette/utils v4.0.6 php-composer -nghttp2-libs 1.64.0-r0 apk -nginx 1.26.3-r0 apk -nikic/php-parser v5.4.0 php-composer -nunomaduro/termwind v2.3.0 php-composer -oniguruma 6.9.9-r0 apk -openspout/openspout v4.29.1 php-composer -openssl 3.3.3-r0 apk -pcre 8.45-r3 apk -pcre2 10.43-r0 apk -php-http/client-common 2.7.2 php-composer -php-http/discovery 1.20.0 php-composer -php-http/httplug 2.4.1 php-composer -php-http/message 1.16.2 php-composer -php-http/promise 1.3.1 php-composer -php83 8.3.19-r0 apk -php83-common 8.3.19-r0 apk -php83-ctype 8.3.19-r0 apk -php83-curl 8.3.19-r0 apk -php83-dom 8.3.19-r0 apk -php83-fileinfo 8.3.19-r0 apk -php83-fpm 8.3.19-r0 apk -php83-gd 8.3.19-r0 apk -php83-iconv 8.3.19-r0 apk -php83-intl 8.3.19-r0 apk -php83-mbstring 8.3.19-r0 apk -php83-mysqlnd 8.3.19-r0 apk -php83-openssl 8.3.19-r0 apk -php83-pdo 8.3.19-r0 apk -php83-pdo_mysql 8.3.19-r0 apk -php83-pdo_pgsql 8.3.19-r0 apk -php83-pdo_sqlite 8.3.19-r0 apk -php83-pecl-igbinary 3.2.16-r0 apk -php83-pecl-msgpack 3.0.0-r0 apk -php83-pecl-redis 6.2.0-r0 apk -php83-phar 8.3.19-r0 apk -php83-session 8.3.19-r0 apk -php83-simplexml 8.3.19-r0 apk -php83-sockets 8.3.19-r0 apk -php83-tokenizer 8.3.19-r0 apk -php83-xml 8.3.19-r0 apk -php83-xmlreader 8.3.19-r0 apk -php83-xmlwriter 8.3.19-r0 apk -php83-zip 8.3.19-r0 apk -phpdocumentor/reflection-common 2.2.0 php-composer -phpdocumentor/type-resolver 1.10.0 php-composer -phpoption/phpoption 1.9.3 php-composer -phpstan/phpdoc-parser 2.1.0 php-composer -popt 1.19-r4 apk -postgresql-common 1.2-r1 apk -postgresql15-client 15.12-r0 apk -procps-ng 4.0.4-r2 apk -psr/cache 3.0.0 php-composer -psr/clock 1.0.0 php-composer -psr/container 2.0.2 php-composer -psr/event-dispatcher 1.0.0 php-composer -psr/http-client 1.0.3 php-composer -psr/http-factory 1.1.0 php-composer -psr/http-message 1.1 php-composer -psr/log 3.0.2 php-composer -psr/simple-cache 3.0.0 php-composer -ralouphie/getallheaders 3.0.3 php-composer -ramsey/collection 2.1.1 php-composer -ramsey/uuid 4.7.6 php-composer -readline 8.2.13-r0 apk -ryangjchandler/blade-capture-directive v1.1.0 php-composer -scanelf 1.3.8-r1 apk -secondnetwork/blade-tabler-icons v3.31.0 php-composer -shadow 4.16.0-r1 apk -skalibs-libs 2.14.3.0-r0 apk -spatie/color 1.8.0 php-composer -spatie/invade 2.1.0 php-composer -spatie/laravel-json-api-paginate 1.16.3 php-composer -spatie/laravel-package-tools 1.92.4 php-composer -spatie/laravel-query-builder 6.3.2 php-composer -spatie/laravel-settings 3.4.4 php-composer -spatie/laravel-webhook-server 3.8.3 php-composer -spatie/temporary-directory 2.3.0 php-composer -sqlite-libs 3.48.0-r2 apk -ssl_client 1.37.0-r12 apk -ssmtp 2.64-r22 apk -swagger-php-tools 1.0.0 npm -symfony/clock v7.2.0 php-composer -symfony/console v7.2.5 php-composer -symfony/css-selector v7.2.0 php-composer -symfony/deprecation-contracts v3.5.1 php-composer -symfony/error-handler v7.2.5 php-composer -symfony/event-dispatcher v7.2.0 php-composer -symfony/event-dispatcher-contracts v3.5.1 php-composer -symfony/finder v7.2.2 php-composer -symfony/html-sanitizer v7.2.3 php-composer -symfony/http-foundation v7.2.5 php-composer -symfony/http-kernel v7.2.5 php-composer -symfony/mailer v7.2.3 php-composer -symfony/mime v7.2.4 php-composer -symfony/options-resolver v7.2.0 php-composer -symfony/polyfill-ctype v1.31.0 php-composer -symfony/polyfill-intl-grapheme v1.31.0 php-composer -symfony/polyfill-intl-idn v1.31.0 php-composer -symfony/polyfill-intl-normalizer v1.31.0 php-composer -symfony/polyfill-mbstring v1.31.0 php-composer -symfony/polyfill-php80 v1.31.0 php-composer -symfony/polyfill-php83 v1.31.0 php-composer -symfony/polyfill-uuid v1.31.0 php-composer -symfony/process v7.2.5 php-composer -symfony/routing v7.2.3 php-composer -symfony/service-contracts v3.5.1 php-composer -symfony/string v7.2.0 php-composer -symfony/translation v7.2.4 php-composer -symfony/translation-contracts v3.5.1 php-composer -symfony/uid v7.2.0 php-composer -symfony/var-dumper v7.2.3 php-composer -symfony/yaml v7.2.5 php-composer -tijsverkoyen/css-to-inline-styles v2.3.0 php-composer -timokoerber/laravel-one-time-operations 1.4.5 php-composer -tzdata 2025b-r0 apk -utmps-libs 0.1.2.3-r2 apk -vlucas/phpdotenv v5.6.1 php-composer -voku/portable-ascii 2.0.3 php-composer -webmozart/assert 1.11.0 php-composer -xz-libs 5.6.3-r1 apk -zircote/swagger-php 5.0.7 php-composer -zlib 1.3.1-r2 apk -zstd-libs 1.5.6-r2 apk +NAME VERSION TYPE +Hidden Input 1, 0, 0, 0 binary +acl-libs 2.3.2-r1 apk +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.2-r0 apk +anourvalar/eloquent-serialize 1.3.4 php-composer +aom-libs 3.12.1-r0 apk +apache2-utils 2.4.66-r0 apk +apk-tools 2.14.9-r3 apk +apr 1.7.5-r0 apk +apr-util 1.6.3-r1 apk +argon2-libs 20190702-r5 apk +bash 5.2.37-r0 apk +blade-ui-kit/blade-heroicons 2.6.0 php-composer +blade-ui-kit/blade-icons 1.8.0 php-composer +brick/math 0.14.1 php-composer +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 20250911-r0 apk +ca-certificates-bundle 20250911-r0 apk +carbonphp/carbon-doctrine-types 3.2.0 php-composer +catatonit 0.2.1-r0 apk +chillerlan/php-qrcode 5.0.5 php-composer +chillerlan/php-settings-container 3.2.1 php-composer +chrisullyott/php-filesize v4.2.1 php-composer +clue/stream-filter v1.7.0 php-composer +codewithdennis/filament-simple-alert v4.0.2 php-composer +composer 2.9.5 binary +coreutils 9.7-r1 apk +coreutils-env 9.7-r1 apk +coreutils-fmt 9.7-r1 apk +coreutils-sha512sum 9.7-r1 apk +curl 8.14.1-r2 apk +danharrin/date-format-converter v0.3.1 php-composer +danharrin/livewire-rate-limiting v2.1.0 php-composer +dflydev/dot-access-data v3.0.3 php-composer +doctrine/deprecations 1.1.5 php-composer +doctrine/inflector 2.1.0 php-composer +doctrine/lexer 3.0.1 php-composer +dragonmantank/cron-expression v3.6.0 php-composer +egulias/email-validator 4.0.4 php-composer +filament/actions v4.1.0 php-composer +filament/filament v4.1.0 php-composer +filament/forms v4.1.0 php-composer +filament/infolists v4.1.0 php-composer +filament/notifications v4.1.0 php-composer +filament/schemas v4.1.0 php-composer +filament/spatie-laravel-settings-plugin v4.1.0 php-composer +filament/support v4.1.0 php-composer +filament/tables v4.1.0 php-composer +filament/widgets v4.1.0 php-composer +findutils 4.10.0-r0 apk +freetype 2.13.3-r0 apk +fruitcake/php-cors v1.4.0 php-composer +git 2.49.1-r0 apk +git-init-template 2.49.1-r0 apk +graham-campbell/result-type v1.1.3 php-composer +grep 3.12-r0 apk +guzzlehttp/guzzle 7.10.0 php-composer +guzzlehttp/promises 2.3.0 php-composer +guzzlehttp/psr7 2.8.0 php-composer +guzzlehttp/uri-template v1.0.5 php-composer +icu-data-en 76.1-r1 apk +icu-libs 76.1-r1 apk +influxdata/influxdb-client-php 3.8.0 php-composer +iputils 20240905-r0 apk +iputils-arping 20240905-r0 apk +iputils-clockdiff 20240905-r0 apk +iputils-ping 20240905-r0 apk +iputils-tracepath 20240905-r0 apk +jq 1.8.1-r0 apk +kirschbaum-development/eloquent-power-joins 4.2.10 php-composer +laravel-notification-channels/telegram 6.0.0 php-composer +laravel/framework v12.41.1 php-composer +laravel/prompts v0.3.8 php-composer +laravel/sanctum v4.2.1 php-composer +laravel/serializable-closure v2.0.7 php-composer +league/commonmark 2.8.0 php-composer +league/config v1.2.0 php-composer +league/csv 9.27.1 php-composer +league/flysystem 3.30.2 php-composer +league/flysystem-local 3.30.2 php-composer +league/mime-type-detection 1.16.0 php-composer +league/uri 7.6.0 php-composer +league/uri-components 7.6.0 php-composer +league/uri-interfaces 7.6.0 php-composer +libapk2 2.14.9-r3 apk +libattr 2.5.2-r2 apk +libavif 1.3.0-r0 apk +libbsd 0.12.2-r0 apk +libbz2 1.0.8-r6 apk +libcap2 2.76-r0 apk +libcrypto3 3.5.5-r0 apk +libcurl 8.14.1-r2 apk +libdav1d 1.5.1-r0 apk +libedit 20250104.3.1-r1 apk +libexpat 2.7.3-r0 apk +libgcc 14.2.0-r6 apk +libice 1.1.2-r0 apk +libidn2 2.3.7-r0 apk +libintl 0.24.1-r0 apk +libjpeg-turbo 3.1.0-r0 apk +libmd 1.1.0-r0 apk +libncursesw 6.5_p20250503-r0 apk +libpng 1.6.54-r0 apk +libpq 17.7-r0 apk +libproc2 4.0.4-r3 apk +libpsl 0.21.5-r3 apk +libsharpyuv 1.5.0-r0 apk +libsm 1.2.5-r0 apk +libssl3 3.5.5-r0 apk +libstdc++ 14.2.0-r6 apk +libunistring 1.3-r0 apk +libuuid 2.41-r9 apk +libwebp 1.5.0-r0 apk +libx11 1.8.11-r0 apk +libxau 1.0.12-r0 apk +libxcb 1.17.0-r0 apk +libxdmcp 1.1.5-r1 apk +libxext 1.3.6-r2 apk +libxml2 2.13.9-r0 apk +libxpm 3.5.17-r0 apk +libxt 1.3.1-r0 apk +libyuv 0.0.1887.20251502-r1 apk +libzip 1.11.4-r0 apk +linux-pam 1.7.0-r4 apk +livewire/livewire v3.7.1 php-composer +logrotate 3.21.0-r1 apk +lorisleiva/laravel-actions v2.9.1 php-composer +lorisleiva/lody v0.6.0 php-composer +lz4-libs 1.10.0-r0 apk +maennchen/zipstream-php 2.4.0 php-composer +masterminds/html5 2.10.0 php-composer +monolog/monolog 3.9.0 php-composer +musl 1.2.5-r10 apk +musl-utils 1.2.5-r10 apk +myclabs/php-enum 1.8.5 php-composer +nano 8.4-r0 apk +ncurses-terminfo-base 6.5_p20250503-r0 apk +nesbot/carbon 3.11.0 php-composer +netcat-openbsd 1.229.1-r0 apk +nette/php-generator v4.2.0 php-composer +nette/schema v1.3.3 php-composer +nette/utils v4.1.0 php-composer +nghttp2-libs 1.65.0-r0 apk +nginx 1.28.0-r3 apk +nikic/php-parser v5.6.2 php-composer +nunomaduro/termwind v2.3.3 php-composer +oniguruma 6.9.10-r0 apk +openspout/openspout v4.32.0 php-composer +openssl 3.5.5-r0 apk +paragonie/constant_time_encoding v3.1.3 php-composer +pcre2 10.46-r0 apk +php-http/client-common 2.7.3 php-composer +php-http/discovery 1.20.0 php-composer +php-http/httplug 2.4.1 php-composer +php-http/message 1.16.2 php-composer +php-http/promise 1.3.1 php-composer +php84 8.4.16-r0 apk +php84-common 8.4.16-r0 apk +php84-ctype 8.4.16-r0 apk +php84-curl 8.4.16-r0 apk +php84-dom 8.4.16-r0 apk +php84-fileinfo 8.4.16-r0 apk +php84-fpm 8.4.16-r0 apk +php84-gd 8.4.16-r0 apk +php84-iconv 8.4.16-r0 apk +php84-intl 8.4.16-r0 apk +php84-mbstring 8.4.16-r0 apk +php84-mysqlnd 8.4.16-r0 apk +php84-openssl 8.4.16-r0 apk +php84-pdo 8.4.16-r0 apk +php84-pdo_mysql 8.4.16-r0 apk +php84-pdo_pgsql 8.4.16-r0 apk +php84-pdo_sqlite 8.4.16-r0 apk +php84-pecl-igbinary 3.2.16-r1 apk +php84-pecl-msgpack 3.0.0-r0 apk +php84-pecl-redis 6.3.0-r0 apk +php84-phar 8.4.16-r0 apk +php84-session 8.4.16-r0 apk +php84-simplexml 8.4.16-r0 apk +php84-sockets 8.4.16-r0 apk +php84-tokenizer 8.4.16-r0 apk +php84-xml 8.4.16-r0 apk +php84-xmlreader 8.4.16-r0 apk +php84-xmlwriter 8.4.16-r0 apk +php84-zip 8.4.16-r0 apk +phpdocumentor/reflection-common 2.2.0 php-composer +phpdocumentor/type-resolver 1.12.0 php-composer +phpoption/phpoption 1.9.4 php-composer +phpstan/phpdoc-parser 2.3.0 php-composer +popt 1.19-r4 apk +postgresql-common 1.2-r1 apk +postgresql16-client 16.11-r0 apk +pragmarx/google2fa v8.0.3 php-composer +pragmarx/google2fa-qrcode v3.0.1 php-composer +procps-ng 4.0.4-r3 apk +promphp/prometheus_client_php v2.14.1 php-composer +psr/clock 1.0.0 php-composer +psr/container 2.0.2 php-composer +psr/event-dispatcher 1.0.0 php-composer +psr/http-client 1.0.3 php-composer +psr/http-factory 1.1.0 php-composer +psr/http-message 1.1 php-composer +psr/log 3.0.2 php-composer +psr/simple-cache 3.0.0 php-composer +ralouphie/getallheaders 3.0.3 php-composer +ramsey/collection 2.1.1 php-composer +ramsey/uuid 4.9.1 php-composer +readline 8.2.13-r1 apk +ryangjchandler/blade-capture-directive v1.1.0 php-composer +saloonphp/laravel-plugin v3.7.0 php-composer +saloonphp/saloon v3.14.2 php-composer +scanelf 1.3.8-r1 apk +scrivo/highlight.php v9.18.1.10 php-composer +secondnetwork/blade-tabler-icons v3.35.0 php-composer +shadow 4.17.3-r0 apk +shiki-php UNKNOWN npm +skalibs-libs 2.14.4.0-r0 apk +spatie/invade 2.1.0 php-composer +spatie/laravel-json-api-paginate 1.16.3 php-composer +spatie/laravel-package-tools 1.92.7 php-composer +spatie/laravel-query-builder 6.3.6 php-composer +spatie/laravel-settings 3.6.0 php-composer +spatie/laravel-webhook-server 3.8.3 php-composer +spatie/ping 1.1.1 php-composer +spatie/shiki-php 2.3.2 php-composer +spatie/temporary-directory 2.3.0 php-composer +sqlite-libs 3.49.2-r1 apk +ssl_client 1.37.0-r20 apk +ssmtp 2.64-r22 apk +swagger-php-tools 1.0.0 npm +symfony/clock v8.0.0 php-composer +symfony/console v7.4.0 php-composer +symfony/css-selector v7.4.0 php-composer +symfony/deprecation-contracts v3.6.0 php-composer +symfony/error-handler v7.4.0 php-composer +symfony/event-dispatcher v8.0.0 php-composer +symfony/event-dispatcher-contracts v3.6.0 php-composer +symfony/finder v7.4.0 php-composer +symfony/html-sanitizer v7.4.0 php-composer +symfony/http-foundation v7.4.0 php-composer +symfony/http-kernel v7.4.0 php-composer +symfony/mailer v7.4.0 php-composer +symfony/mime v7.4.0 php-composer +symfony/options-resolver v8.0.0 php-composer +symfony/polyfill-ctype v1.33.0 php-composer +symfony/polyfill-intl-grapheme v1.33.0 php-composer +symfony/polyfill-intl-idn v1.33.0 php-composer +symfony/polyfill-intl-normalizer v1.33.0 php-composer +symfony/polyfill-mbstring v1.33.0 php-composer +symfony/polyfill-php80 v1.33.0 php-composer +symfony/polyfill-php83 v1.33.0 php-composer +symfony/polyfill-php84 v1.33.0 php-composer +symfony/polyfill-php85 v1.33.0 php-composer +symfony/polyfill-uuid v1.33.0 php-composer +symfony/process v7.4.0 php-composer +symfony/routing v7.4.0 php-composer +symfony/service-contracts v3.6.1 php-composer +symfony/string v8.0.0 php-composer +symfony/translation v8.0.0 php-composer +symfony/translation-contracts v3.6.1 php-composer +symfony/uid v7.4.0 php-composer +symfony/var-dumper v7.4.0 php-composer +symfony/yaml v7.4.0 php-composer +tijsverkoyen/css-to-inline-styles v2.3.0 php-composer +tiptap-php UNKNOWN npm +tzdata 2025c-r0 apk +ueberdosis/tiptap-php 2.0.0 php-composer +utmps-libs 0.1.3.1-r0 apk +vlucas/phpdotenv v5.6.2 php-composer +voku/portable-ascii 2.0.3 php-composer +xz-libs 5.8.1-r0 apk +zircote/swagger-php 5.7.6 php-composer +zlib 1.3.1-r2 apk +zstd-libs 1.5.7-r0 apk diff --git a/readme-vars.yml b/readme-vars.yml index 476ea8d..c76f51f 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -15,7 +15,7 @@ common_param_env_vars_enabled: true param_container_name: "{{ project_name }}" param_usage_include_env: true param_env_vars: - - {env_var: "APP_KEY", env_value: "", desc: "App key used for encrypting stored data. You can generate a key at [https://speedtest-tracker.dev](https://speedtest-tracker.dev)"} + - {env_var: "APP_KEY", env_value: "", desc: "App key used for encrypting stored data. You can generate a key as per [https://speedtest-tracker.dev](https://docs.speedtest-tracker.dev/getting-started/installation/using-docker-compose#install-with-docker-compose)"} - {env_var: "APP_URL", env_value: "", desc: "The IP:port or URL your application will be accessed on (ie. `http://192.168.1.1:6875` or `https://bookstack.mydomain.com`"} - {env_var: "DB_CONNECTION", env_value: "sqlite", desc: "Set the database type to use. `sqlite`, `pgsql`, or `mysql`"} - {env_var: "SPEEDTEST_SCHEDULE", env_value: "", desc: "Set the test schedule in cron format. e.g. `0 */6 * * *`"} @@ -63,6 +63,7 @@ init_diagram: | init-speedtest-tracker-config -> init-config-end init-config -> init-crontab-config init-mods-end -> init-custom-files + init-adduser -> init-device-perms base -> init-envfile init-os-end -> init-folders init-php -> init-keygen @@ -73,6 +74,7 @@ init_diagram: | init-samples -> init-nginx init-version-checks -> init-nginx-end init-adduser -> init-os-end + init-device-perms -> init-os-end init-envfile -> init-os-end init-keygen -> init-permissions init-nginx -> init-php @@ -90,11 +92,13 @@ init_diagram: | svc-speedtest-tracker -> legacy-services } Base Images: { - "baseimage-alpine-nginx:3.21" <- "baseimage-alpine:3.21" + "baseimage-alpine-nginx:3.22" <- "baseimage-alpine:3.22" } "speedtest-tracker:latest" <- Base Images # changelog changelogs: + - {date: "11.10.25:", desc: "Update nginx configs for v1.7.2. Existing users should update their nginx confs to avoid errors."} + - {date: "05.07.25:", desc: "Rebase to Alpine 3.22."} - {date: "20.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "07.06.24:", desc: "Cache Filament components and added APP_KEY as a required param."} - {date: "27.05.24:", desc: "Existing users should update their nginx confs to avoid http2 deprecation warnings."} diff --git a/root/defaults/nginx/site-confs/default.conf.sample b/root/defaults/nginx/site-confs/default.conf.sample new file mode 100644 index 0000000..d060ea6 --- /dev/null +++ b/root/defaults/nginx/site-confs/default.conf.sample @@ -0,0 +1,48 @@ +## Version 2025/11/10 - Changelog: https://github.com/linuxserver/docker-speedtest-tracker/commits/main/root/defaults/nginx/site-confs/default.conf.sample + +server { + listen 80 default_server; + listen [::]:80 default_server; + listen 443 ssl default_server; + listen [::]:443 ssl default_server; + listen 443 quic reuseport default_server; + listen [::]:443 quic reuseport default_server; + + server_name _; + + include /config/nginx/ssl.conf; + + set $root /app/www/public; + if (!-d /app/www/public) { + set $root /config/www; + } + root $root; + index index.html index.htm index.php; + + location / { + # enable for basic auth + #auth_basic "Restricted"; + #auth_basic_user_file /config/nginx/.htpasswd; + + try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args; + } + + location ~ ^(.+\.php)(.*)$ { + # enable the next two lines for http auth + #auth_basic "Restricted"; + #auth_basic_user_file /config/nginx/.htpasswd; + + fastcgi_split_path_info ^(.+\.php)(.*)$; + if (!-f $document_root$fastcgi_script_name) { return 404; } + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_buffers 16 4k; + fastcgi_buffer_size 16k; + include /etc/nginx/fastcgi_params; + } + + # deny access to .htaccess/.htpasswd files + location ~ /\.ht { + deny all; + } +} diff --git a/root/etc/s6-overlay/s6-rc.d/init-speedtest-tracker-config/run b/root/etc/s6-overlay/s6-rc.d/init-speedtest-tracker-config/run index ddf2ae6..c9d50c6 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-speedtest-tracker-config/run +++ b/root/etc/s6-overlay/s6-rc.d/init-speedtest-tracker-config/run @@ -40,7 +40,7 @@ elif [[ "${DB_CONNECTION}" = "pgsql" ]]; then echo "Waiting for DB to be available" END=$((SECONDS + 30)) while [[ ${SECONDS} -lt ${END} ]] && [[ -n "${DB_HOST+x}" ]]; do - if pg_isready -h "${DB_HOST}" -p "${DB_PORT}" -q; then + if pg_isready -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USERNAME}" -q; then if [[ ! -f /dbwait.lock ]]; then sleep 5 fi