diff --git a/Dockerfile b/Dockerfile index 8c48d7b..c2fa225 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,7 @@ ENV HOME=/config RUN \ apk add --no-cache \ + iputils \ grep \ php84-gd \ php84-intl \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 500a039..1a55bfc 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -12,6 +12,7 @@ ENV HOME=/config RUN \ apk add --no-cache \ + iputils \ grep \ php84-gd \ php84-intl \ diff --git a/Jenkinsfile b/Jenkinsfile index e258879..5f600f8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -78,6 +78,8 @@ pipeline { ''' script{ env.EXIT_STATUS = '' + env.CI_TEST_ATTEMPTED = '' + env.PUSH_ATTEMPTED = '' env.LS_RELEASE = sh( script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:latest 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''', returnStdout: true).trim() @@ -218,6 +220,7 @@ pipeline { env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' + env.CITEST_IMAGETAG = 'latest' } } } @@ -243,6 +246,7 @@ pipeline { env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' + env.CITEST_IMAGETAG = 'develop' } } } @@ -268,6 +272,7 @@ pipeline { env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache' + env.CITEST_IMAGETAG = 'develop' } } } @@ -290,7 +295,7 @@ pipeline { -v ${WORKSPACE}:/mnt \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ - ghcr.io/linuxserver/baseimage-alpine:3.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ + ghcr.io/linuxserver/baseimage-alpine:3.23 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ apk add --no-cache python3 && \ python3 -m venv /lsiopy && \ pip install --no-cache-dir -U pip && \ @@ -625,13 +630,16 @@ pipeline { echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin + if [[ "${PACKAGE_CHECK}" != "true" ]]; then + declare -A pids IFS=',' read -ra CACHE <<< "$BUILDCACHE" for i in "${CACHE[@]}"; do docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} & + pids[$!]="$i" done - for p in $(jobs -p); do - wait "$p" || { echo "job $p failed" >&2; exit 1; } + for p in "${!pids[@]}"; do + wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; } done fi ''' @@ -691,13 +699,16 @@ pipeline { echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin + if [[ "${PACKAGE_CHECK}" != "true" ]]; then + declare -A pids IFS=',' read -ra CACHE <<< "$BUILDCACHE" for i in "${CACHE[@]}"; do docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} & + pids[$!]="$i" done - for p in $(jobs -p); do - wait "$p" || { echo "job $p failed" >&2; exit 1; } + for p in "${!pids[@]}"; do + wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; } done fi ''' @@ -751,12 +762,14 @@ pipeline { echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin if [[ "${PACKAGE_CHECK}" != "true" ]]; then + declare -A pids IFS=',' read -ra CACHE <<< "$BUILDCACHE" for i in "${CACHE[@]}"; do docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} & + pids[$!]="$i" done - for p in $(jobs -p); do - wait "$p" || { echo "job $p failed" >&2; exit 1; } + for p in "${!pids[@]}"; do + wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; } done fi ''' @@ -870,6 +883,7 @@ pipeline { script{ env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html' env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json' + env.CI_TEST_ATTEMPTED = 'true' } sh '''#! /bin/bash set -e @@ -881,7 +895,7 @@ pipeline { CI_DOCKERENV="LSIO_FIRST_PARTY=true" fi fi - docker pull ghcr.io/linuxserver/ci:latest + docker pull ghcr.io/linuxserver/ci:${CITEST_IMAGETAG} if [ "${MULTIARCH}" == "true" ]; then docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG} @@ -905,7 +919,9 @@ pipeline { -e WEB_PATH=\"${CI_WEBPATH}\" \ -e NODE_NAME=\"${NODE_NAME}\" \ -e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \ - -t ghcr.io/linuxserver/ci:latest \ + -e COMMIT_SHA=\"${COMMIT_SHA}\" \ + -e BUILD_NUMBER=\"${BUILD_NUMBER}\" \ + -t ghcr.io/linuxserver/ci:${CITEST_IMAGETAG} \ python3 test_build.py''' } } @@ -920,6 +936,9 @@ pipeline { environment name: 'EXIT_STATUS', value: '' } steps { + script{ + env.PUSH_ATTEMPTED = 'true' + } retry_backoff(5,5) { sh '''#! /bin/bash set -e @@ -931,9 +950,11 @@ pipeline { CACHEIMAGE=${i} fi done - docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} + docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \ + { if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } if [ -n "${SEMVER}" ]; then - docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} + docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \ + { if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } fi done ''' @@ -947,31 +968,45 @@ pipeline { environment name: 'EXIT_STATUS', value: '' } steps { + script{ + env.PUSH_ATTEMPTED = 'true' + } retry_backoff(5,5) { sh '''#! /bin/bash set -e for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do - [[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}" + if [[ "${MANIFESTIMAGE%%/*}" =~ \\. ]]; then + MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" + else + MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}" + fi IFS=',' read -ra CACHE <<< "$BUILDCACHE" for i in "${CACHE[@]}"; do if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then CACHEIMAGE=${i} fi done - docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} - docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} + docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } + docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } if [ -n "${SEMVER}" ]; then - docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} - docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} + docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } + docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } fi done for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do - docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest - docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} - - docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} + docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } + docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } + docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } if [ -n "${SEMVER}" ]; then - docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} + docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} || \ + { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; } fi done ''' @@ -989,23 +1024,41 @@ pipeline { environment name: 'EXIT_STATUS', value: '' } steps { - echo "Pushing New tag for current commit ${META_TAG}" - sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ - -d '{"tag":"'${META_TAG}'",\ - "object": "'${COMMIT_SHA}'",\ - "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to main",\ - "type": "commit",\ - "tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' - echo "Pushing New release for Tag" sh '''#! /bin/bash - curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json - echo '{"tag_name":"'${META_TAG}'",\ - "target_commitish": "main",\ - "name": "'${META_TAG}'",\ - "body": "**CI Report:**\\n\\n'${CI_URL:-N/A}'\\n\\n**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start - printf '","draft": false,"prerelease": false}' >> releasebody.json - paste -d'\\0' start releasebody.json > releasebody.json.done - curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done''' + echo "Auto-generating release notes" + if [ "$(git tag --points-at HEAD)" != "" ]; then + echo "Existing tag points to current commit, suggesting no new LS changes" + AUTO_RELEASE_NOTES="No changes" + else + AUTO_RELEASE_NOTES=$(curl -fsL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github+json" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/generate-notes \ + -d '{"tag_name":"'${META_TAG}'",\ + "target_commitish": "main"}' \ + | jq -r '.body' | sed 's|## What.s Changed||') + fi + echo "Pushing New tag for current commit ${META_TAG}" + curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ + -d '{"tag":"'${META_TAG}'",\ + "object": "'${COMMIT_SHA}'",\ + "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to main",\ + "type": "commit",\ + "tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' + echo "Pushing New release for Tag" + curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq -r '. |.body' > releasebody.json + jq -n \ + --arg tag_name "$META_TAG" \ + --arg target_commitish "main" \ + --arg ci_url "${CI_URL:-N/A}" \ + --arg ls_notes "$AUTO_RELEASE_NOTES" \ + --arg remote_notes "$(cat releasebody.json)" \ + '{ + "tag_name": $tag_name, + "target_commitish": $target_commitish, + "name": $tag_name, + "body": ("**CI Report:**\\n\\n" + $ci_url + "\\n\\n**LinuxServer Changes:**\\n\\n" + $ls_notes + "\\n\\n**Remote Changes:**\\n\\n" + $remote_notes), + "draft": false, + "prerelease": false }' > releasebody.json.done + curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done + ''' } } // Add protection to the release branch @@ -1043,98 +1096,13 @@ EOF ) ''' } } - // If this is a Pull request send the CI link as a comment on it - stage('Pull Request Comment') { - when { - not {environment name: 'CHANGE_ID', value: ''} - environment name: 'EXIT_STATUS', value: '' - } - steps { - sh '''#! /bin/bash - # Function to retrieve JSON data from URL - get_json() { - local url="$1" - local response=$(curl -s "$url") - if [ $? -ne 0 ]; then - echo "Failed to retrieve JSON data from $url" - return 1 - fi - local json=$(echo "$response" | jq .) - if [ $? -ne 0 ]; then - echo "Failed to parse JSON data from $url" - return 1 - fi - echo "$json" - } - - build_table() { - local data="$1" - - # Get the keys in the JSON data - local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]') - - # Check if keys are empty - if [ -z "$keys" ]; then - echo "JSON report data does not contain any keys or the report does not exist." - return 1 - fi - - # Build table header - local header="| Tag | Passed |\\n| --- | --- |\\n" - - # Loop through the JSON data to build the table rows - local rows="" - for build in $keys; do - local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success") - if [ "$status" = "true" ]; then - status="✅" - else - status="❌" - fi - local row="| "$build" | "$status" |\\n" - rows="${rows}${row}" - done - - local table="${header}${rows}" - local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g') - echo "$escaped_table" - } - - if [[ "${CI}" = "true" ]]; then - # Retrieve JSON data from URL - data=$(get_json "$CI_JSON_URL") - # Create table from JSON data - table=$(build_table "$data") - echo -e "$table" - - curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ - -H "Accept: application/vnd.github.v3+json" \ - "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ - -d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}" - else - curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ - -H "Accept: application/vnd.github.v3+json" \ - "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ - -d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}" - fi - ''' - - } - } } /* ###################### - Send status to Discord + Comment on PR and Send status to Discord ###################### */ post { always { - sh '''#!/bin/bash - rm -rf /config/.ssh/id_sign - rm -rf /config/.ssh/id_sign.pub - git config --global --unset gpg.format - git config --global --unset user.signingkey - git config --global --unset commit.gpgsign - ''' - script{ + script { env.JOB_DATE = sh( script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''', returnStdout: true).trim() @@ -1177,6 +1145,94 @@ EOF "username": "Jenkins"}' ${BUILDS_DISCORD} ''' } } + script { + if (env.GITHUBIMAGE =~ /lspipepr/){ + if (env.CI_TEST_ATTEMPTED == "true" || env.PUSH_ATTEMPTED == "true"){ + sh '''#! /bin/bash + # Function to retrieve JSON data from URL + get_json() { + local url="$1" + local response=$(curl -s "$url") + if [ $? -ne 0 ]; then + echo "Failed to retrieve JSON data from $url" + return 1 + fi + local json=$(echo "$response" | jq .) + if [ $? -ne 0 ]; then + echo "Failed to parse JSON data from $url" + return 1 + fi + echo "$json" + } + + build_table() { + local data="$1" + + # Get the keys in the JSON data + local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]') + + # Check if keys are empty + if [ -z "$keys" ]; then + echo "JSON report data does not contain any keys or the report does not exist." + return 1 + fi + + # Build table header + local header="| Tag | Passed |\\n| --- | --- |\\n" + + # Loop through the JSON data to build the table rows + local rows="" + for build in $keys; do + local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success") + if [ "$status" = "true" ]; then + status="✅" + else + status="❌" + fi + local row="| "$build" | "$status" |\\n" + rows="${rows}${row}" + done + + local table="${header}${rows}" + local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g') + echo "$escaped_table" + } + + if [[ "${CI}" = "true" ]]; then + # Retrieve JSON data from URL + data=$(get_json "$CI_JSON_URL") + # Create table from JSON data + table=$(build_table "$data") + echo -e "$table" + + curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ + -d "{\\"body\\": \\"I am a bot, here are the test results for this PR for commit ${COMMIT_SHA:0:7} : \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}" + else + curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ + -d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR for commit ${COMMIT_SHA:0:7} : \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}" + fi + ''' + } else { + sh '''#! /bin/bash + curl -X POST -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \ + -d "{\\"body\\": \\"I am a bot, the build for PR commit ${COMMIT_SHA:0:7} failed and as a result no CI test was attempted and no images were pushed.\\"}" + ''' + } + } + } + sh '''#!/bin/bash + rm -rf /config/.ssh/id_sign + rm -rf /config/.ssh/id_sign.pub + git config --global --unset gpg.format + git config --global --unset user.signingkey + git config --global --unset commit.gpgsign + ''' } cleanup { sh '''#! /bin/bash diff --git a/README.md b/README.md index 5dba9f7..43cfce1 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ For more information check out the [project documentation](https://docs.speedtes To help you get started creating a container from this image you can either use docker-compose or the docker cli. >[!NOTE] ->Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided. +>Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided. ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose)) @@ -310,6 +310,7 @@ 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. diff --git a/package_versions.txt b/package_versions.txt index 52a965c..931ed22 100644 --- a/package_versions.txt +++ b/package_versions.txt @@ -4,92 +4,101 @@ 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.1-r0 apk -anourvalar/eloquent-serialize 1.3.4 php-composer +alpine-release 3.22.4-r0 apk aom-libs 3.12.1-r0 apk -apache2-utils 2.4.65-r0 apk -apk-tools 2.14.9-r2 apk +apache2-utils 2.4.67-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.13.1 php-composer +blade-ui-kit/blade-heroicons 2.7.0 php-composer +blade-ui-kit/blade-icons 1.10.0 php-composer +brick/math 0.14.8 php-composer brotli-libs 1.1.0-r2 apk -busybox 1.37.0-r19 apk -busybox-binsh 1.37.0-r19 apk -c-ares 1.34.5-r0 apk -ca-certificates 20250619-r0 apk -ca-certificates-bundle 20250619-r0 apk +busybox 1.37.0-r20 apk +busybox-binsh 1.37.0-r20 apk +c-ares 1.34.6-r0 apk +ca-certificates 20260413-r0 apk +ca-certificates-bundle 20260413-r0 apk 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.3.0 php-composer chrisullyott/php-filesize v4.2.1 php-composer clue/stream-filter v1.7.0 php-composer -composer 2.8.11 binary +codewithdennis/filament-simple-alert v4.0.5 php-composer +composer 2.9.8 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-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 +danharrin/livewire-rate-limiting v2.2.0 php-composer dflydev/dot-access-data v3.0.3 php-composer -doctrine/dbal 4.3.1 php-composer -doctrine/deprecations 1.1.5 php-composer -doctrine/inflector 2.0.10 php-composer +doctrine/deprecations 1.1.6 php-composer +doctrine/inflector 2.1.0 php-composer doctrine/lexer 3.0.1 php-composer -dragonmantank/cron-expression v3.4.0 php-composer +dragonmantank/cron-expression v3.6.0 php-composer egulias/email-validator 4.0.4 php-composer -filament/actions v3.3.34 php-composer -filament/filament v3.3.34 php-composer -filament/forms v3.3.34 php-composer -filament/infolists v3.3.34 php-composer -filament/notifications v3.3.34 php-composer -filament/spatie-laravel-settings-plugin v3.3.34 php-composer -filament/support v3.3.34 php-composer -filament/tables v3.3.34 php-composer -filament/widgets v3.3.34 php-composer +filament/actions v5.6.3 php-composer +filament/filament v5.6.3 php-composer +filament/forms v5.6.3 php-composer +filament/infolists v5.6.3 php-composer +filament/notifications v5.6.3 php-composer +filament/query-builder v5.6.3 php-composer +filament/schemas v5.6.3 php-composer +filament/spatie-laravel-settings-plugin v5.6.3 php-composer +filament/support v5.6.3 php-composer +filament/tables v5.6.3 php-composer +filament/widgets v5.6.3 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 +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 +graham-campbell/result-type v1.1.4 php-composer grep 3.12-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 +guzzlehttp/guzzle 7.10.0 php-composer +guzzlehttp/promises 2.3.0 php-composer +guzzlehttp/psr7 2.9.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 -jq 1.8.0-r0 apk -kirschbaum-development/eloquent-power-joins 4.2.6 php-composer -laravel-notification-channels/telegram 6.0.0 php-composer -laravel/framework v12.21.0 php-composer -laravel/prompts v0.3.6 php-composer -laravel/sanctum v4.2.0 php-composer -laravel/serializable-closure v2.0.4 php-composer -league/commonmark 2.7.1 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.3.1 php-composer +laravel-notification-channels/telegram 7.0.0 php-composer +laravel/framework v13.8.0 php-composer +laravel/prompts v0.3.17 php-composer +laravel/sanctum v4.3.2 php-composer +laravel/serializable-closure v2.0.13 php-composer +league/commonmark 2.8.2 php-composer league/config v1.2.0 php-composer -league/csv 9.24.1 php-composer -league/flysystem 3.30.0 php-composer -league/flysystem-local 3.30.0 php-composer +league/csv 9.28.0 php-composer +league/flysystem 3.33.0 php-composer +league/flysystem-local 3.31.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 -libapk2 2.14.9-r2 apk +league/uri 7.8.1 php-composer +league/uri-components 7.8.1 php-composer +league/uri-interfaces 7.8.1 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 -libcrypto3 3.5.2-r0 apk -libcurl 8.14.1-r1 apk +libcap2 2.78-r0 apk +libcrypto3 3.5.6-r0 apk +libcurl 8.14.1-r2 apk libdav1d 1.5.1-r0 apk libedit 20250104.3.1-r1 apk -libexpat 2.7.1-r0 apk +libexpat 2.7.5-r0 apk libgcc 14.2.0-r6 apk libice 1.1.2-r0 apk libidn2 2.3.7-r0 apk @@ -97,13 +106,13 @@ 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.47-r0 apk -libpq 17.6-r0 apk +libpng 1.6.57-r0 apk +libpq 17.9-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.2-r0 apk +libssl3 3.5.6-r0 apk libstdc++ 14.2.0-r6 apk libunistring 1.3-r0 apk libuuid 2.41-r9 apk @@ -113,80 +122,83 @@ 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.8-r0 apk -libxpm 3.5.17-r0 apk +libxml2 2.13.9-r0 apk +libxpm 3.5.19-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.6.4 php-composer +livewire/livewire v4.3.0 php-composer logrotate 3.21.0-r1 apk -lorisleiva/laravel-actions v2.9.0 php-composer -lorisleiva/lody v0.6.0 php-composer +lorisleiva/laravel-actions v2.10.1 php-composer +lorisleiva/lody v0.7.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 +monolog/monolog 3.10.0 php-composer +musl 1.2.5-r12 apk +musl-utils 1.2.5-r12 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.10.1 php-composer +nesbot/carbon 3.11.4 php-composer netcat-openbsd 1.229.1-r0 apk -nette/schema v1.3.2 php-composer -nette/utils v4.0.7 php-composer -nghttp2-libs 1.65.0-r0 apk -nginx 1.28.0-r3 apk -nikic/php-parser v5.6.0 php-composer -nunomaduro/termwind v2.3.1 php-composer +nette/php-generator v4.2.2 php-composer +nette/schema v1.3.5 php-composer +nette/utils v4.1.4 php-composer +nghttp2-libs 1.69.0-r0 apk +nginx 1.28.3-r1 apk +nikic/php-parser v5.7.0 php-composer +nunomaduro/termwind v2.4.0 php-composer oniguruma 6.9.10-r0 apk -openspout/openspout v4.30.1 php-composer -openssl 3.5.2-r0 apk -pcre2 10.43-r1 apk -php-http/client-common 2.7.2 php-composer +openspout/openspout v4.32.0 php-composer +openssl 3.5.6-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.11-r0 apk -php84-common 8.4.11-r0 apk -php84-ctype 8.4.11-r0 apk -php84-curl 8.4.11-r0 apk -php84-dom 8.4.11-r0 apk -php84-fileinfo 8.4.11-r0 apk -php84-fpm 8.4.11-r0 apk -php84-gd 8.4.11-r0 apk -php84-iconv 8.4.11-r0 apk -php84-intl 8.4.11-r0 apk -php84-mbstring 8.4.11-r0 apk -php84-mysqlnd 8.4.11-r0 apk -php84-openssl 8.4.11-r0 apk -php84-pdo 8.4.11-r0 apk -php84-pdo_mysql 8.4.11-r0 apk -php84-pdo_pgsql 8.4.11-r0 apk -php84-pdo_sqlite 8.4.11-r0 apk +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.2.0-r0 apk -php84-phar 8.4.11-r0 apk -php84-session 8.4.11-r0 apk -php84-simplexml 8.4.11-r0 apk -php84-sockets 8.4.11-r0 apk -php84-tokenizer 8.4.11-r0 apk -php84-xml 8.4.11-r0 apk -php84-xmlreader 8.4.11-r0 apk -php84-xmlwriter 8.4.11-r0 apk -php84-zip 8.4.11-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.10.0 php-composer -phpoption/phpoption 1.9.3 php-composer -phpstan/phpdoc-parser 2.2.0 php-composer +phpdocumentor/type-resolver 2.0.0 php-composer +phpoption/phpoption 1.9.5 php-composer +phpstan/phpdoc-parser 2.3.2 php-composer popt 1.19-r4 apk postgresql-common 1.2-r1 apk -postgresql16-client 16.10-r0 apk +postgresql16-client 16.13-r0 apk +pragmarx/google2fa v9.0.0 php-composer +pragmarx/google2fa-qrcode v3.0.0 php-composer procps-ng 4.0.4-r3 apk -psr/cache 3.0.0 php-composer +promphp/prometheus_client_php v2.15.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 @@ -197,63 +209,71 @@ 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.0 php-composer +ramsey/uuid 4.9.2 php-composer readline 8.2.13-r1 apk -ryangjchandler/blade-capture-directive v1.1.0 php-composer +ryangjchandler/blade-capture-directive v1.1.1 php-composer +saloonphp/laravel-plugin v4.3.0 php-composer +saloonphp/saloon v4.0.0 php-composer scanelf 1.3.8-r1 apk -secondnetwork/blade-tabler-icons v3.34.1 php-composer +scrivo/highlight.php v9.18.1.10 php-composer +secondnetwork/blade-tabler-icons v3.44.0 php-composer shadow 4.17.3-r0 apk +shiki-php UNKNOWN npm skalibs-libs 2.14.4.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.7 php-composer -spatie/laravel-query-builder 6.3.4 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 +spatie/laravel-json-api-paginate 2.0.1 php-composer +spatie/laravel-package-tools 1.93.0 php-composer +spatie/laravel-query-builder 6.4.4 php-composer +spatie/laravel-settings 3.8.0 php-composer +spatie/laravel-webhook-server 3.10.0 php-composer +spatie/ping 1.2.1 php-composer +spatie/shiki-php 2.4.0 php-composer +spatie/temporary-directory 2.3.1 php-composer sqlite-libs 3.49.2-r1 apk -ssl_client 1.37.0-r19 apk +ssl_client 1.37.0-r20 apk ssmtp 2.64-r22 apk swagger-php-tools 1.0.0 npm -symfony/clock v7.3.0 php-composer -symfony/console v7.3.2 php-composer -symfony/css-selector v7.3.0 php-composer -symfony/deprecation-contracts v3.6.0 php-composer -symfony/error-handler v7.3.2 php-composer -symfony/event-dispatcher v7.3.0 php-composer -symfony/event-dispatcher-contracts v3.6.0 php-composer -symfony/finder v7.3.2 php-composer -symfony/html-sanitizer v7.3.2 php-composer -symfony/http-foundation v7.3.2 php-composer -symfony/http-kernel v7.3.2 php-composer -symfony/mailer v7.3.2 php-composer -symfony/mime v7.3.2 php-composer -symfony/options-resolver v7.3.2 php-composer -symfony/polyfill-ctype v1.32.0 php-composer -symfony/polyfill-intl-grapheme v1.32.0 php-composer -symfony/polyfill-intl-idn v1.32.0 php-composer -symfony/polyfill-intl-normalizer v1.32.0 php-composer -symfony/polyfill-mbstring v1.32.0 php-composer -symfony/polyfill-php80 v1.32.0 php-composer -symfony/polyfill-php83 v1.32.0 php-composer -symfony/polyfill-uuid v1.32.0 php-composer -symfony/process v7.3.0 php-composer -symfony/routing v7.3.2 php-composer -symfony/service-contracts v3.6.0 php-composer -symfony/string v7.3.2 php-composer -symfony/translation v7.3.2 php-composer -symfony/translation-contracts v3.6.0 php-composer -symfony/uid v7.3.1 php-composer -symfony/var-dumper v7.3.2 php-composer -symfony/yaml v7.3.2 php-composer -tijsverkoyen/css-to-inline-styles v2.3.0 php-composer -tzdata 2025b-r0 apk +symfony/clock v8.0.8 php-composer +symfony/console v8.0.9 php-composer +symfony/css-selector v8.0.9 php-composer +symfony/deprecation-contracts v3.7.0 php-composer +symfony/error-handler v8.0.8 php-composer +symfony/event-dispatcher v8.0.9 php-composer +symfony/event-dispatcher-contracts v3.7.0 php-composer +symfony/finder v8.0.8 php-composer +symfony/html-sanitizer v8.0.8 php-composer +symfony/http-foundation v8.0.8 php-composer +symfony/http-kernel v8.0.10 php-composer +symfony/mailer v8.0.8 php-composer +symfony/mime v8.0.9 php-composer +symfony/options-resolver v8.0.8 php-composer +symfony/polyfill-ctype v1.37.0 php-composer +symfony/polyfill-intl-grapheme v1.37.0 php-composer +symfony/polyfill-intl-idn v1.37.0 php-composer +symfony/polyfill-intl-normalizer v1.37.0 php-composer +symfony/polyfill-mbstring v1.37.0 php-composer +symfony/polyfill-php80 v1.37.0 php-composer +symfony/polyfill-php84 v1.37.0 php-composer +symfony/polyfill-php85 v1.37.0 php-composer +symfony/polyfill-php86 v1.37.0 php-composer +symfony/polyfill-uuid v1.37.0 php-composer +symfony/process v8.0.8 php-composer +symfony/routing v8.0.9 php-composer +symfony/service-contracts v3.7.0 php-composer +symfony/string v8.0.8 php-composer +symfony/translation v8.0.10 php-composer +symfony/translation-contracts v3.7.0 php-composer +symfony/uid v8.0.9 php-composer +symfony/var-dumper v8.0.8 php-composer +symfony/yaml v8.0.10 php-composer +tijsverkoyen/css-to-inline-styles v2.4.0 php-composer +tiptap-php UNKNOWN npm +tzdata 2026b-r0 apk +ueberdosis/tiptap-php 2.1.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 -webmozart/assert 1.11.0 php-composer -xz-libs 5.8.1-r0 apk -zircote/swagger-php 5.1.4 php-composer -zlib 1.3.1-r2 apk +vlucas/phpdotenv v5.6.3 php-composer +voku/portable-ascii 2.1.1 php-composer +xz-libs 5.8.3-r0 apk +zircote/swagger-php 5.8.3 php-composer +zlib 1.3.2-r0 apk zstd-libs 1.5.7-r0 apk diff --git a/readme-vars.yml b/readme-vars.yml index 6332fd3..c76f51f 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -97,6 +97,7 @@ init_diagram: | "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."} 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; + } +}