Compare commits

..

73 Commits

Author SHA1 Message Date
LinuxServer-CI
d37b904fb3
Bot Updating Package Versions 2026-02-18 20:03:53 +00:00
Adam
4ea84e9203
Merge pull request #284 from linuxserver/purifier
Add purifier directory to framework symlinks
2026-02-17 17:57:29 +00:00
thespad
4024093611
Add purifier directory to framework symlinks 2026-02-17 17:08:23 +00:00
LinuxServer-CI
08e43edecf
Bot Updating Package Versions 2026-02-17 11:58:52 +00:00
LinuxServer-CI
14da2a0df5
Bot Updating Package Versions 2026-02-16 18:56:11 +00:00
LinuxServer-CI
9d396ec6a2
Bot Updating Templated Files 2026-02-16 18:52:39 +00:00
LinuxServer-CI
f903ab685d
Bot Updating Templated Files 2026-02-16 18:51:03 +00:00
LinuxServer-CI
6bf9340d89
Bot Updating Package Versions 2026-02-09 19:22:11 +00:00
LinuxServer-CI
37c2e6072d
Bot Updating Package Versions 2026-01-29 15:58:10 +00:00
LinuxServer-CI
6d24518f15
Bot Updating Package Versions 2026-01-24 14:42:11 +00:00
LinuxServer-CI
c36bdfb04a
Bot Updating Package Versions 2026-01-12 18:40:02 +00:00
Adam
4f99d38bcb
Merge pull request #278 from pfeyz/patch-1 2026-01-04 23:45:47 +00:00
LinuxServer-CI
c25a48d2b8
Bot Updating Package Versions 2026-01-04 21:23:57 +00:00
LinuxServer-CI
44463da08f
Bot Updating Templated Files 2026-01-04 21:18:25 +00:00
Adam
31a47a879e
Merge pull request #281 from linuxserver/3.23 2026-01-04 21:16:28 +00:00
LinuxServer-CI
c5d0fd7694
Bot Updating Package Versions 2025-12-30 17:42:20 +00:00
thespad
ca7fcb276f
opcache is now builtin 2025-12-28 17:09:44 +00:00
thespad
2904fa92fb
Rebase to 3.23 2025-12-28 17:06:20 +00:00
LinuxServer-CI
f68b027a14
Bot Updating Package Versions 2025-12-24 13:07:22 +00:00
LinuxServer-CI
6bc3180f53
Bot Updating Package Versions 2025-12-22 18:48:21 +00:00
LinuxServer-CI
e9a445379a
Bot Updating Package Versions 2025-12-22 18:43:45 +00:00
LinuxServer-CI
5642cc2080
Bot Updating Package Versions 2025-12-22 18:38:45 +00:00
LinuxServer-CI
3dfc0bda5a
Bot Updating Package Versions 2025-12-15 18:39:11 +00:00
LinuxServer-CI
08370f159d
Bot Updating Package Versions 2025-12-09 21:39:07 +00:00
LinuxServer-CI
dd118d1b46
Bot Updating Package Versions 2025-12-08 18:38:29 +00:00
pfeyz
11152fe266
don't embed ansi escape codes in appkey
given that it's the recommended way to generate the code in the docs, redirecting stdout will produce an appkey that will make bookstack crash when it runs. this will affect anyone who is trying to automate the initial steps of deployment.

i think this is likely the cause of this issue: https://github.com/BookStackApp/BookStack/issues/5289#issuecomment-2453680653
2025-12-06 19:40:32 -05:00
LinuxServer-CI
18bdc16361
Bot Updating Package Versions 2025-12-03 15:44:33 +00:00
LinuxServer-CI
0812ae08e5
Bot Updating Package Versions 2025-12-01 18:40:23 +00:00
LinuxServer-CI
bf431f8f0c
Bot Updating Package Versions 2025-11-25 22:40:41 +00:00
LinuxServer-CI
08a396d042
Bot Updating Package Versions 2025-11-21 14:46:20 +00:00
LinuxServer-CI
eb557cf2a1
Bot Updating Package Versions 2025-11-19 15:39:34 +00:00
LinuxServer-CI
07caa96fee
Bot Updating Templated Files 2025-11-19 15:35:57 +00:00
LinuxServer-CI
be89b0b7aa
Bot Updating Package Versions 2025-11-17 18:34:51 +00:00
LinuxServer-CI
91858f20e9
Bot Updating Package Versions 2025-11-09 13:37:46 +00:00
LinuxServer-CI
f560b74187
Bot Updating Package Versions 2025-10-27 18:36:33 +00:00
LinuxServer-CI
6c4839dfbb
Bot Updating Templated Files 2025-10-27 18:33:13 +00:00
LinuxServer-CI
a4e1054769
Bot Updating Package Versions 2025-10-20 18:37:39 +00:00
LinuxServer-CI
af1bd1bc0e
Bot Updating Templated Files 2025-10-20 18:33:46 +00:00
LinuxServer-CI
091265234d
Bot Updating Package Versions 2025-10-13 18:32:28 +00:00
LinuxServer-CI
57d1d906e3
Bot Updating Package Versions 2025-10-05 15:32:58 +00:00
LinuxServer-CI
f165d5927e
Bot Updating Package Versions 2025-09-29 18:34:25 +00:00
LinuxServer-CI
7834e6be98
Bot Updating Package Versions 2025-09-22 18:32:41 +00:00
LinuxServer-CI
6a6031e70e
Bot Updating Package Versions 2025-08-28 17:37:27 +00:00
LinuxServer-CI
9509dbaa1f
Bot Updating Package Versions 2025-08-25 18:34:56 +00:00
LinuxServer-CI
9fdf1f8e9b
Bot Updating Package Versions 2025-08-18 18:36:53 +00:00
LinuxServer-CI
79e220fe9c
Bot Updating Package Versions 2025-08-11 14:46:42 +00:00
LinuxServer-CI
21c371b198
Bot Updating Package Versions 2025-08-04 18:38:45 +00:00
LinuxServer-CI
f0cdf284eb
Bot Updating Package Versions 2025-07-30 09:54:50 +00:00
LinuxServer-CI
963a439956
Bot Updating Package Versions 2025-07-28 18:39:14 +00:00
LinuxServer-CI
16e0d78dbb
Bot Updating Package Versions 2025-07-15 08:41:12 +00:00
LinuxServer-CI
2d4c63e977
Bot Updating Templated Files 2025-07-15 08:37:56 +00:00
Adam
7a44242a13
Merge pull request #274 from linuxserver/3.22 2025-07-15 09:36:25 +01:00
LinuxServer-CI
fe9a7feb9e
Bot Updating Package Versions 2025-07-14 18:37:50 +00:00
thespad
36f1de6449
Fix || breaking build failures 2025-07-10 19:40:39 +01:00
LinuxServer-CI
0dd8ae9069
Bot Updating Package Versions 2025-07-07 14:47:18 +00:00
LinuxServer-CI
225e05f493
Bot Updating Templated Files 2025-07-07 14:43:47 +00:00
LinuxServer-CI
c422f29971
Bot Updating Templated Files 2025-07-07 14:42:09 +00:00
thespad
001da31552
Rebase to 3.22 2025-07-05 15:26:54 +01:00
LinuxServer-CI
3173d606ef
Bot Updating Package Versions 2025-06-17 14:44:54 +00:00
LinuxServer-CI
e3d106d070
Bot Updating Templated Files 2025-06-16 18:33:01 +00:00
LinuxServer-CI
92ab5632ed
Bot Updating Package Versions 2025-05-31 13:44:53 +00:00
LinuxServer-CI
4cb2d86fd3
Bot Updating Package Versions 2025-05-26 18:33:36 +00:00
LinuxServer-CI
336d5ba3f7
Bot Updating Package Versions 2025-05-17 11:31:42 +00:00
LinuxServer-CI
9c2b40c914
Bot Updating Templated Files 2025-05-17 11:28:57 +00:00
LinuxServer-CI
481bdb6a8b
Bot Updating Package Versions 2025-05-08 15:41:50 +00:00
LinuxServer-CI
5eb50e7294
Bot Updating Package Versions 2025-05-05 18:30:18 +00:00
LinuxServer-CI
f92adde813
Bot Updating Package Versions 2025-04-21 18:31:56 +00:00
LinuxServer-CI
aab1799cae
Bot Updating Package Versions 2025-04-14 18:32:19 +00:00
LinuxServer-CI
bee364899e
Bot Updating Package Versions 2025-04-07 18:31:37 +00:00
LinuxServer-CI
4c90655485
Bot Updating Package Versions 2025-04-02 16:48:13 +00:00
LinuxServer-CI
0c1bdf7b07
Bot Updating Package Versions 2025-03-31 18:31:29 +00:00
LinuxServer-CI
6006704576
Bot Updating Package Versions 2025-03-17 18:30:33 +00:00
LinuxServer-CI
cb76bd3838
Bot Updating Package Versions 2025-03-16 12:55:56 +00:00
23 changed files with 384 additions and 311 deletions

0
.editorconfig Executable file → Normal file
View File

0
.github/CONTRIBUTING.md vendored Executable file → Normal file
View File

0
.github/FUNDING.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/config.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/issue.bug.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/issue.feature.yml vendored Executable file → Normal file
View File

3
.github/workflows/call_issue_pr_tracker.yml vendored Executable file → Normal file
View File

@ -8,6 +8,9 @@ on:
pull_request_review: pull_request_review:
types: [submitted,edited,dismissed] types: [submitted,edited,dismissed]
permissions:
contents: read
jobs: jobs:
manage-project: manage-project:
permissions: permissions:

3
.github/workflows/call_issues_cron.yml vendored Executable file → Normal file
View File

@ -4,6 +4,9 @@ on:
- cron: '3 9 * * *' - cron: '3 9 * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
stale: stale:
permissions: permissions:

15
.github/workflows/external_trigger.yml vendored Executable file → Normal file
View File

@ -3,6 +3,9 @@ name: External Trigger Main
on: on:
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-master: external-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -43,8 +46,8 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/bookstack" image="linuxserver/bookstack"
tag="latest" tag="latest"
@ -100,8 +103,8 @@ jobs:
exit 1 exit 1
fi fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bookstack/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-bookstack/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 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 }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY 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 if [[ "${artifacts_found}" == "true" ]]; then
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi fi
@ -136,7 +139,7 @@ jobs:
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit" --data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****" echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for bookstack tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" TRIGGER_REASON="A version change was detected for bookstack 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, 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"}], "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}

3
.github/workflows/external_trigger_scheduler.yml vendored Executable file → Normal file
View File

@ -5,6 +5,9 @@ on:
- cron: '19 * * * *' - cron: '19 * * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest

6
.github/workflows/greetings.yml vendored Executable file → Normal file
View File

@ -2,8 +2,14 @@ name: Greetings
on: [pull_request_target, issues] on: [pull_request_target, issues]
permissions:
contents: read
jobs: jobs:
greeting: greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1

3
.github/workflows/package_trigger_scheduler.yml vendored Executable file → Normal file
View File

@ -5,6 +5,9 @@ on:
- cron: '4 18 * * 1' - cron: '4 18 * * 1'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest

0
.github/workflows/permissions.yml vendored Executable file → Normal file
View File

View File

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.21 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.23
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -17,21 +17,20 @@ RUN \
fontconfig \ fontconfig \
mariadb-client \ mariadb-client \
memcached \ memcached \
php83-dom \ php85-dom \
php83-exif \ php85-exif \
php83-gd \ php85-gd \
php83-ldap \ php85-ldap \
php83-mysqlnd \ php85-mysqlnd \
php83-opcache \ php85-pdo_mysql \
php83-pdo_mysql \ php85-pecl-memcached \
php83-pecl-memcached \ php85-tokenizer \
php83-tokenizer \
qt5-qtbase \ qt5-qtbase \
ttf-freefont && \ ttf-freefont && \
echo "**** configure php-fpm to pass env vars ****" && \ 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 && \ sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php85/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 && \ if ! grep -qxF 'clear_env = no' /etc/php85/php-fpm.d/www.conf; then echo 'clear_env = no' >> /etc/php85/php-fpm.d/www.conf; fi && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \ echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php85/php-fpm.conf && \
echo "**** fetch bookstack ****" && \ echo "**** fetch bookstack ****" && \
mkdir -p\ mkdir -p\
/app/www && \ /app/www && \
@ -50,8 +49,8 @@ RUN \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** create symlinks ****" && \ echo "**** create symlinks ****" && \
/bin/bash -c \ /bin/bash -c \
'dst=(www/themes www/files www/images www/uploads backups www/framework/cache www/framework/sessions www/framework/views log/bookstack/laravel.log www/.env); \ 'dst=(www/themes www/files www/images www/uploads backups www/framework/cache www/framework/sessions www/framework/views www/framework/purifier log/bookstack/laravel.log www/.env); \
src=(themes storage/uploads/files storage/uploads/images public/uploads storage/backups storage/framework/cache storage/framework/sessions storage/framework/views storage/logs/laravel.log .env); \ src=(themes storage/uploads/files storage/uploads/images public/uploads storage/backups storage/framework/cache storage/framework/sessions storage/framework/views storage/framework/purifier storage/logs/laravel.log .env); \
for i in "${!src[@]}"; do rm -rf /app/www/"${src[i]}" && ln -s /config/"${dst[i]}" /app/www/"${src[i]}"; done' && \ for i in "${!src[@]}"; do rm -rf /app/www/"${src[i]}" && ln -s /config/"${dst[i]}" /app/www/"${src[i]}"; done' && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
rm -rf \ rm -rf \

View File

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.21 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.23
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -17,21 +17,20 @@ RUN \
fontconfig \ fontconfig \
mariadb-client \ mariadb-client \
memcached \ memcached \
php83-dom \ php85-dom \
php83-exif \ php85-exif \
php83-gd \ php85-gd \
php83-ldap \ php85-ldap \
php83-mysqlnd \ php85-mysqlnd \
php83-opcache \ php85-pdo_mysql \
php83-pdo_mysql \ php85-pecl-memcached \
php83-pecl-memcached \ php85-tokenizer \
php83-tokenizer \
qt5-qtbase \ qt5-qtbase \
ttf-freefont && \ ttf-freefont && \
echo "**** configure php-fpm to pass env vars ****" && \ 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 && \ sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php85/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 && \ if ! grep -qxF 'clear_env = no' /etc/php85/php-fpm.d/www.conf; then echo 'clear_env = no' >> /etc/php85/php-fpm.d/www.conf; fi && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \ echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php85/php-fpm.conf && \
echo "**** fetch bookstack ****" && \ echo "**** fetch bookstack ****" && \
mkdir -p\ mkdir -p\
/app/www && \ /app/www && \
@ -50,8 +49,8 @@ RUN \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** create symlinks ****" && \ echo "**** create symlinks ****" && \
/bin/bash -c \ /bin/bash -c \
'dst=(www/themes www/files www/images www/uploads backups www/framework/cache www/framework/sessions www/framework/views log/bookstack/laravel.log www/.env); \ 'dst=(www/themes www/files www/images www/uploads backups www/framework/cache www/framework/sessions www/framework/views www/framework/purifier log/bookstack/laravel.log www/.env); \
src=(themes storage/uploads/files storage/uploads/images public/uploads storage/backups storage/framework/cache storage/framework/sessions storage/framework/views storage/logs/laravel.log .env); \ src=(themes storage/uploads/files storage/uploads/images public/uploads storage/backups storage/framework/cache storage/framework/sessions storage/framework/views storage/framework/purifier storage/logs/laravel.log .env); \
for i in "${!src[@]}"; do rm -rf /app/www/"${src[i]}" && ln -s /config/"${dst[i]}" /app/www/"${src[i]}"; done' && \ for i in "${!src[@]}"; do rm -rf /app/www/"${src[i]}" && ln -s /config/"${dst[i]}" /app/www/"${src[i]}"; done' && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
rm -rf \ rm -rf \

119
Jenkinsfile vendored
View File

@ -97,7 +97,11 @@ pipeline {
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID 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' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml'
if ( env.SYFT_IMAGE_TAG == null ) {
env.SYFT_IMAGE_TAG = 'latest'
}
} }
echo "Using syft image tag ${SYFT_IMAGE_TAG}"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" ''' echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{ script{
@ -214,6 +218,7 @@ pipeline {
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN 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.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.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' 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.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.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.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.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 \ -v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ -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 && \ apk add --no-cache python3 && \
python3 -m venv /lsiopy && \ python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \ 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 $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 $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then if [[ "${PACKAGE_CHECK}" != "true" ]]; then
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE" IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} & docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done done
for p in $(jobs -p); do for p in "${!pids[@]}"; do
wait "$p" || { echo "job $p failed" >&2; exit 1; } wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done done
fi fi
''' '''
@ -687,13 +697,16 @@ pipeline {
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin 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 $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then if [[ "${PACKAGE_CHECK}" != "true" ]]; then
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE" IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do for i in "${CACHE[@]}"; do
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} & docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done done
for p in $(jobs -p); do for p in "${!pids[@]}"; do
wait "$p" || { echo "job $p failed" >&2; exit 1; } wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done done
fi fi
''' '''
@ -747,12 +760,14 @@ pipeline {
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --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 echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [[ "${PACKAGE_CHECK}" != "true" ]]; then if [[ "${PACKAGE_CHECK}" != "true" ]]; then
declare -A pids
IFS=',' read -ra CACHE <<< "$BUILDCACHE" IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do for i in "${CACHE[@]}"; do
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} & docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
pids[$!]="$i"
done done
for p in $(jobs -p); do for p in "${!pids[@]}"; do
wait "$p" || { echo "job $p failed" >&2; exit 1; } wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
done done
fi fi
''' '''
@ -790,7 +805,7 @@ pipeline {
docker run --rm \ docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \
-v ${TEMPDIR}:/tmp \ -v ${TEMPDIR}:/tmp \
ghcr.io/anchore/syft:latest \ ghcr.io/anchore/syft:${SYFT_IMAGE_TAG} \
${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) 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" 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" CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi fi
fi fi
docker pull ghcr.io/linuxserver/ci:latest docker pull ghcr.io/linuxserver/ci:${CITEST_IMAGETAG}
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64 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} 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_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \ -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''' python3 test_build.py'''
} }
} }
@ -926,9 +944,11 @@ pipeline {
CACHEIMAGE=${i} CACHEIMAGE=${i}
fi fi
done 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 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 fi
done done
''' '''
@ -953,20 +973,27 @@ pipeline {
CACHEIMAGE=${i} CACHEIMAGE=${i}
fi fi
done 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}: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} { 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 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}: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} { 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 fi
done done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do 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}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \
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}:${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} { 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 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 fi
done done
''' '''
@ -984,23 +1011,41 @@ pipeline {
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { 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 master",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag"
sh '''#! /bin/bash 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 "Auto-generating release notes"
echo '{"tag_name":"'${META_TAG}'",\ if [ "$(git tag --points-at HEAD)" != "" ]; then
"target_commitish": "master",\ echo "Existing tag points to current commit, suggesting no new LS changes"
"name": "'${META_TAG}'",\ AUTO_RELEASE_NOTES="No changes"
"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 else
printf '","draft": false,"prerelease": false}' >> releasebody.json 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 \
paste -d'\\0' start releasebody.json > releasebody.json.done -d '{"tag_name":"'${META_TAG}'",\
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done''' "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 master",\
"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 "master" \
--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 // Add protection to the release branch

0
LICENSE Executable file → Normal file
View File

View File

@ -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!") [![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.") [![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.") [![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.") [![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") [![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! * [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. * [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [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. * [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 * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
@ -58,7 +56,6 @@ The architectures supported by this image are:
| :----: | :----: | ---- | | :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Application Setup ## Application Setup
@ -112,7 +109,7 @@ This image can be run with a read-only container filesystem. For details please
To help you get started creating a container from this image you can either use docker-compose or the docker cli. To help you get started creating a container from this image you can either use docker-compose or the docker cli.
>[!NOTE] >[!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)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
@ -346,6 +343,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **28.12.25:** - Rebase to Alpine 3.23.
* **05.07.25:** - Rebase to Alpine 3.22.
* **04.01.25:** - Add php-opcache. * **04.01.25:** - Add php-opcache.
* **17.12.24:** - Rebase to Alpine 3.21. * **17.12.24:** - Rebase to Alpine 3.21.
* **11.10.24:** - Default to environment config over .env file config. * **11.10.24:** - Default to environment config over .env file config.

View File

@ -1,209 +1,211 @@
NAME VERSION TYPE NAME VERSION TYPE
Hidden Input 1, 0, 0, 0 dotnet Hidden Input 1, 0, 0, 0 binary
acl-libs 2.3.2-r1 apk acl-libs 2.3.2-r1 apk
alpine-baselayout 3.6.8-r1 apk alpine-baselayout 3.7.1-r8 apk
alpine-baselayout-data 3.6.8-r1 apk alpine-baselayout-data 3.7.1-r8 apk
alpine-keys 2.5-r0 apk alpine-keys 2.6-r0 apk
alpine-release 3.21.3-r0 apk alpine-release 3.23.3-r0 apk
aom-libs 3.11.0-r0 apk aom-libs 3.13.1-r1 apk
apache2-utils 2.4.62-r0 apk apache2-utils 2.4.66-r0 apk
apk-tools 2.14.6-r3 apk apk-tools 3.0.4-r0 apk
apr 1.7.5-r0 apk apr 1.7.6-r0 apk
apr-util 1.6.3-r1 apk apr-util 1.6.3-r2 apk
argon2-libs 20190702-r5 apk argon2-libs 20190702-r5 apk
aws/aws-crt-php v1.2.7 php-composer aws/aws-crt-php v1.2.7 php-composer
aws/aws-sdk-php 3.339.19 php-composer aws/aws-sdk-php 3.369.36 php-composer
bacon/bacon-qr-code v3.0.1 php-composer bacon/bacon-qr-code v3.0.3 php-composer
bash 5.2.37-r0 apk bash 5.3.3-r1 apk
brick/math 0.12.1 php-composer brick/math 0.14.8 php-composer
brotli-libs 1.1.0-r2 apk brotli-libs 1.2.0-r0 apk
busybox 1.37.0-r12 apk busybox 1.37.0-r30 apk
busybox-binsh 1.37.0-r12 apk busybox-binsh 1.37.0-r30 apk
c-ares 1.34.3-r0 apk c-ares 1.34.6-r0 apk
ca-certificates 20241121-r1 apk ca-certificates 20251003-r0 apk
ca-certificates-bundle 20241121-r1 apk ca-certificates-bundle 20251003-r0 apk
carbonphp/carbon-doctrine-types 3.2.0 php-composer carbonphp/carbon-doctrine-types 3.2.0 php-composer
catatonit 0.2.0-r0 apk catatonit 0.2.1-r0 apk
composer 2.8.6 binary composer 2.9.5 binary
coreutils 9.5-r2 apk coreutils 9.8-r1 apk
coreutils-env 9.5-r2 apk coreutils-env 9.8-r1 apk
coreutils-fmt 9.5-r2 apk coreutils-fmt 9.8-r1 apk
coreutils-sha512sum 9.5-r2 apk coreutils-sha512sum 9.8-r1 apk
curl 8.12.1-r0 apk curl 8.17.0-r1 apk
dasprid/enum 1.0.6 php-composer dasprid/enum 1.0.7 php-composer
dbus-libs 1.14.10-r4 apk dbus-libs 1.16.2-r1 apk
dflydev/dot-access-data v3.0.3 php-composer dflydev/dot-access-data v3.0.3 php-composer
doctrine/inflector 2.0.10 php-composer doctrine/inflector 2.1.0 php-composer
doctrine/lexer 3.0.1 php-composer doctrine/lexer 3.0.1 php-composer
dompdf/dompdf v3.1.0 php-composer dompdf/dompdf v3.1.4 php-composer
dompdf/php-font-lib 1.0.1 php-composer dompdf/php-font-lib 1.0.2 php-composer
dompdf/php-svg-lib 1.0.0 php-composer dompdf/php-svg-lib 1.0.2 php-composer
dragonmantank/cron-expression v3.4.0 php-composer dragonmantank/cron-expression v3.6.0 php-composer
egulias/email-validator 4.0.3 php-composer egulias/email-validator 4.0.4 php-composer
encodings 1.0.7-r1 apk encodings 1.1.0-r0 apk
ezyang/htmlpurifier v4.19.0 php-composer
fakerphp/faker v1.24.1 php-composer fakerphp/faker v1.24.1 php-composer
filp/whoops 2.17.0 php-composer filp/whoops 2.18.4 php-composer
findutils 4.10.0-r0 apk findutils 4.10.0-r0 apk
firebase/php-jwt v6.11.0 php-composer firebase/php-jwt v7.0.2 php-composer
font-freefont 20120503-r4 apk font-freefont 20120503-r4 apk
fontconfig 2.15.0-r1 apk fontconfig 2.17.1-r0 apk
freetype 2.13.3-r0 apk freetype 2.14.1-r0 apk
fruitcake/php-cors v1.3.0 php-composer fruitcake/php-cors v1.4.0 php-composer
gdbm 1.24-r0 apk gdbm 1.26-r0 apk
git 2.47.2-r0 apk git 2.52.0-r0 apk
git-init-template 2.47.2-r0 apk git-init-template 2.52.0-r0 apk
glib 2.82.5-r0 apk glib 2.86.3-r0 apk
graham-campbell/result-type v1.1.3 php-composer graham-campbell/result-type v1.1.4 php-composer
guzzlehttp/guzzle 7.9.2 php-composer guzzlehttp/guzzle 7.10.0 php-composer
guzzlehttp/promises 2.0.4 php-composer guzzlehttp/promises 2.3.0 php-composer
guzzlehttp/psr7 2.7.0 php-composer guzzlehttp/psr7 2.8.0 php-composer
guzzlehttp/uri-template v1.0.4 php-composer guzzlehttp/uri-template v1.0.5 php-composer
hamcrest/hamcrest-php v2.0.1 php-composer hamcrest/hamcrest-php v2.1.1 php-composer
icu-data-full 74.2-r0 apk iamcal/sql-parser v0.7 php-composer
icu-libs 74.2-r0 apk icu-data-full 76.1-r1 apk
intervention/gif 4.2.1 php-composer icu-libs 76.1-r1 apk
intervention/image 3.11.1 php-composer intervention/gif 4.2.4 php-composer
itsgoingd/clockwork v5.3.4 php-composer intervention/image 3.11.6 php-composer
jq 1.7.1-r0 apk itsgoingd/clockwork v5.3.5 php-composer
knplabs/knp-snappy v1.5.1 php-composer jq 1.8.1-r0 apk
larastan/larastan v3.1.0 php-composer knplabs/knp-snappy v1.6.0 php-composer
laravel/framework v11.43.2 php-composer larastan/larastan v3.9.2 php-composer
laravel/prompts v0.3.5 php-composer laravel/framework v12.52.0 php-composer
laravel/serializable-closure v2.0.3 php-composer laravel/prompts v0.3.13 php-composer
laravel/socialite v5.18.0 php-composer laravel/serializable-closure v2.0.9 php-composer
laravel/tinker v2.10.1 php-composer laravel/socialite v5.24.2 php-composer
league/commonmark 2.6.1 php-composer laravel/tinker v2.11.1 php-composer
league/commonmark 2.8.0 php-composer
league/config v1.2.0 php-composer league/config v1.2.0 php-composer
league/flysystem 3.29.1 php-composer league/flysystem 3.31.0 php-composer
league/flysystem-aws-s3-v3 3.29.0 php-composer league/flysystem-aws-s3-v3 3.31.0 php-composer
league/flysystem-local 3.29.0 php-composer league/flysystem-local 3.31.0 php-composer
league/html-to-markdown 5.1.1 php-composer league/html-to-markdown 5.1.1 php-composer
league/mime-type-detection 1.16.0 php-composer league/mime-type-detection 1.16.0 php-composer
league/oauth1-client v1.11.0 php-composer league/oauth1-client v1.11.0 php-composer
league/oauth2-client 2.8.0 php-composer league/oauth2-client 2.9.0 php-composer
league/uri 7.5.1 php-composer league/uri 7.8.0 php-composer
league/uri-interfaces 7.5.0 php-composer league/uri-interfaces 7.8.0 php-composer
libapk 3.0.4-r0 apk
libattr 2.5.2-r2 apk libattr 2.5.2-r2 apk
libavif 1.0.4-r0 apk libavif 1.3.0-r0 apk
libblkid 2.40.4-r0 apk libblkid 2.41.2-r0 apk
libbsd 0.12.2-r0 apk libbsd 0.12.2-r0 apk
libbz2 1.0.8-r6 apk libbz2 1.0.8-r6 apk
libcrypto3 3.3.3-r0 apk libcrypto3 3.5.5-r0 apk
libcurl 8.12.1-r0 apk libcurl 8.17.0-r1 apk
libdav1d 1.5.0-r0 apk libdav1d 1.5.2-r0 apk
libeconf 0.6.3-r0 apk libeconf 0.8.3-r0 apk
libedit 20240808.3.1-r0 apk libedit 20251016.3.1-r0 apk
libevent 2.1.12-r7 apk libevent 2.1.12-r8 apk
libexpat 2.6.4-r0 apk libexpat 2.7.4-r0 apk
libffi 3.4.7-r0 apk libffi 3.5.2-r0 apk
libfontenc 1.1.8-r0 apk libfontenc 1.1.8-r0 apk
libgcc 14.2.0-r4 apk libgcc 15.2.0-r2 apk
libice 1.1.1-r6 apk libice 1.1.2-r0 apk
libidn2 2.3.7-r0 apk libidn2 2.3.8-r0 apk
libintl 0.22.5-r0 apk libintl 0.24.1-r1 apk
libjpeg-turbo 3.0.4-r0 apk libjpeg-turbo 3.1.2-r0 apk
libldap 2.6.8-r0 apk libldap 2.6.10-r0 apk
libmd 1.1.0-r0 apk libmd 1.1.0-r0 apk
libmemcached-libs 1.1.4-r1 apk libmemcached-libs 1.1.4-r1 apk
libmount 2.40.4-r0 apk libmount 2.41.2-r0 apk
libncursesw 6.5_p20241006-r3 apk libncursesw 6.5_p20251123-r0 apk
libpcre2-16 10.43-r0 apk libpcre2-16 10.47-r0 apk
libpng 1.6.44-r0 apk libpng 1.6.54-r0 apk
libproc2 4.0.4-r2 apk libproc2 4.0.5-r0 apk
libpsl 0.21.5-r3 apk libpsl 0.21.5-r3 apk
libsasl 2.1.28-r8 apk libsasl 2.1.28-r9 apk
libseccomp 2.5.5-r1 apk libseccomp 2.6.0-r1 apk
libsharpyuv 1.4.0-r0 apk libsharpyuv 1.6.0-r0 apk
libsm 1.2.4-r4 apk libsm 1.2.6-r0 apk
libssl3 3.3.3-r0 apk libssl3 3.5.5-r0 apk
libstdc++ 14.2.0-r4 apk libstdc++ 15.2.0-r2 apk
libunistring 1.2-r0 apk libunistring 1.4.1-r0 apk
libuuid 2.40.4-r0 apk libuuid 2.41.2-r0 apk
libwebp 1.4.0-r0 apk libwebp 1.6.0-r0 apk
libx11 1.8.10-r0 apk libx11 1.8.12-r1 apk
libxau 1.0.11-r4 apk libxau 1.0.12-r0 apk
libxcb 1.16.1-r0 apk libxcb 1.17.0-r1 apk
libxdmcp 1.1.5-r1 apk libxdmcp 1.1.5-r1 apk
libxext 1.3.6-r2 apk libxext 1.3.6-r2 apk
libxml2 2.13.4-r3 apk libxml2 2.13.9-r0 apk
libxpm 3.5.17-r0 apk libxpm 3.5.17-r0 apk
libxt 1.3.1-r0 apk libxt 1.3.1-r0 apk
libzip 1.11.2-r0 apk libyuv 0.0.1887.20251502-r1 apk
linux-pam 1.6.1-r1 apk libzip 1.11.4-r1 apk
logrotate 3.21.0-r1 apk linux-pam 1.7.1-r2 apk
mariadb-client 11.4.5-r0 apk logrotate 3.22.0-r0 apk
mariadb-common 11.4.5-r0 apk mariadb-client 11.4.9-r0 apk
masterminds/html5 2.9.0 php-composer mariadb-common 11.4.9-r0 apk
memcached 1.6.32-r0 apk masterminds/html5 2.10.0 php-composer
memcached 1.6.39-r0 apk
mkfontscale 1.2.3-r1 apk mkfontscale 1.2.3-r1 apk
mockery/mockery 1.6.12 php-composer mockery/mockery 1.6.12 php-composer
monolog/monolog 3.8.1 php-composer monolog/monolog 3.10.0 php-composer
mtdowling/jmespath.php 2.8.0 php-composer mtdowling/jmespath.php 2.8.0 php-composer
musl 1.2.5-r9 apk musl 1.2.5-r21 apk
musl-utils 1.2.5-r9 apk musl-utils 1.2.5-r21 apk
myclabs/deep-copy 1.13.0 php-composer myclabs/deep-copy 1.13.4 php-composer
nano 8.2-r0 apk nano 8.7-r0 apk
ncurses-terminfo-base 6.5_p20241006-r3 apk ncurses-terminfo-base 6.5_p20251123-r0 apk
nesbot/carbon 3.8.6 php-composer nesbot/carbon 3.11.1 php-composer
netcat-openbsd 1.226.1.1-r0 apk netcat-openbsd 1.234.1-r0 apk
nette/schema v1.3.2 php-composer nette/schema v1.3.4 php-composer
nette/utils v4.0.5 php-composer nette/utils v4.1.3 php-composer
nghttp2-libs 1.64.0-r0 apk nghttp2-libs 1.68.0-r0 apk
nginx 1.26.2-r4 apk nghttp3 1.13.1-r0 apk
nikic/php-parser v5.4.0 php-composer nginx 1.28.2-r0 apk
nunomaduro/collision v8.6.1 php-composer nikic/php-parser v5.7.0 php-composer
nunomaduro/termwind v2.3.0 php-composer nunomaduro/collision v8.9.1 php-composer
onelogin/php-saml 4.2.0 php-composer nunomaduro/termwind v2.4.0 php-composer
oniguruma 6.9.9-r0 apk onelogin/php-saml 4.3.1 php-composer
openssl 3.3.3-r0 apk oniguruma 6.9.10-r0 apk
paragonie/constant_time_encoding v3.0.0 php-composer openssl 3.5.5-r0 apk
paragonie/constant_time_encoding v3.1.3 php-composer
paragonie/random_compat v9.99.100 php-composer paragonie/random_compat v9.99.100 php-composer
pcre 8.45-r3 apk pcre2 10.47-r0 apk
pcre2 10.43-r0 apk
phar-io/manifest 2.0.4 php-composer phar-io/manifest 2.0.4 php-composer
phar-io/version 3.2.1 php-composer phar-io/version 3.2.1 php-composer
php83 8.3.17-r0 apk php85 8.5.2-r0 apk
php83-common 8.3.17-r0 apk php85-common 8.5.2-r0 apk
php83-ctype 8.3.17-r0 apk php85-ctype 8.5.2-r0 apk
php83-curl 8.3.17-r0 apk php85-curl 8.5.2-r0 apk
php83-dom 8.3.17-r0 apk php85-dom 8.5.2-r0 apk
php83-exif 8.3.17-r0 apk php85-exif 8.5.2-r0 apk
php83-fileinfo 8.3.17-r0 apk php85-fileinfo 8.5.2-r0 apk
php83-fpm 8.3.17-r0 apk php85-fpm 8.5.2-r0 apk
php83-gd 8.3.17-r0 apk php85-gd 8.5.2-r0 apk
php83-iconv 8.3.17-r0 apk php85-iconv 8.5.2-r0 apk
php83-ldap 8.3.17-r0 apk php85-ldap 8.5.2-r0 apk
php83-mbstring 8.3.17-r0 apk php85-mbstring 8.5.2-r0 apk
php83-mysqlnd 8.3.17-r0 apk php85-mysqlnd 8.5.2-r0 apk
php83-opcache 8.3.17-r0 apk php85-openssl 8.5.2-r0 apk
php83-openssl 8.3.17-r0 apk php85-pdo 8.5.2-r0 apk
php83-pdo 8.3.17-r0 apk php85-pdo_mysql 8.5.2-r0 apk
php83-pdo_mysql 8.3.17-r0 apk php85-pecl-igbinary 3.2.17_rc1-r0 apk
php83-pecl-igbinary 3.2.16-r0 apk php85-pecl-memcached 3.4.0-r0 apk
php83-pecl-memcached 3.3.0-r0 apk php85-pecl-msgpack 3.0.0-r0 apk
php83-pecl-msgpack 3.0.0-r0 apk php85-phar 8.5.2-r0 apk
php83-phar 8.3.17-r0 apk php85-session 8.5.2-r0 apk
php83-session 8.3.17-r0 apk php85-simplexml 8.5.2-r0 apk
php83-simplexml 8.3.17-r0 apk php85-sockets 8.5.2-r0 apk
php83-sockets 8.3.17-r0 apk php85-tokenizer 8.5.2-r0 apk
php83-tokenizer 8.3.17-r0 apk php85-xml 8.5.2-r0 apk
php83-xml 8.3.17-r0 apk php85-xmlwriter 8.5.2-r0 apk
php83-xmlwriter 8.3.17-r0 apk php85-zip 8.5.2-r0 apk
php83-zip 8.3.17-r0 apk phpoption/phpoption 1.9.5 php-composer
phpmyadmin/sql-parser 5.11.0 php-composer phpseclib/phpseclib 3.0.49 php-composer
phpoption/phpoption 1.9.3 php-composer phpstan/phpstan 2.1.39 php-composer
phpseclib/phpseclib 3.0.43 php-composer phpunit/php-code-coverage 11.0.12 php-composer
phpstan/phpstan 2.1.6 php-composer phpunit/php-file-iterator 5.1.1 php-composer
phpunit/php-code-coverage 11.0.8 php-composer
phpunit/php-file-iterator 5.1.0 php-composer
phpunit/php-invoker 5.0.1 php-composer phpunit/php-invoker 5.0.1 php-composer
phpunit/php-text-template 4.0.1 php-composer phpunit/php-text-template 4.0.1 php-composer
phpunit/php-timer 7.0.1 php-composer phpunit/php-timer 7.0.1 php-composer
phpunit/phpunit 11.5.9 php-composer phpunit/phpunit 11.5.55 php-composer
popt 1.19-r4 apk popt 1.19-r4 apk
pragmarx/google2fa v8.0.3 php-composer pragmarx/google2fa v9.0.0 php-composer
predis/predis v2.3.0 php-composer predis/predis v3.4.0 php-composer
procps-ng 4.0.4-r2 apk procps-ng 4.0.5-r0 apk
psr/clock 1.0.0 php-composer psr/clock 1.0.0 php-composer
psr/container 2.0.2 php-composer psr/container 2.0.2 php-composer
psr/event-dispatcher 1.0.0 php-composer psr/event-dispatcher 1.0.0 php-composer
@ -212,79 +214,83 @@ psr/http-factory 1.1.0 php-composer
psr/http-message 2.0 php-composer psr/http-message 2.0 php-composer
psr/log 3.0.2 php-composer psr/log 3.0.2 php-composer
psr/simple-cache 3.0.0 php-composer psr/simple-cache 3.0.0 php-composer
psy/psysh v0.12.7 php-composer psy/psysh v0.12.20 php-composer
qt5-qtbase 5.15.10_git20230714-r3 apk qt5-qtbase 5.15.10_git20230714-r4 apk
ralouphie/getallheaders 3.0.3 php-composer ralouphie/getallheaders 3.0.3 php-composer
ramsey/collection 2.0.0 php-composer ramsey/collection 2.1.1 php-composer
ramsey/uuid 4.7.6 php-composer ramsey/uuid 4.9.2 php-composer
readline 8.2.13-r0 apk readline 8.3.1-r0 apk
robrichards/xmlseclibs 3.1.3 php-composer robrichards/xmlseclibs 3.1.4 php-composer
sabberworm/php-css-parser v8.7.0 php-composer sabberworm/php-css-parser v9.1.0 php-composer
scanelf 1.3.8-r1 apk scanelf 1.3.8-r2 apk
sebastian/cli-parser 3.0.2 php-composer sebastian/cli-parser 3.0.2 php-composer
sebastian/code-unit 3.0.2 php-composer sebastian/code-unit 3.0.3 php-composer
sebastian/code-unit-reverse-lookup 4.0.1 php-composer sebastian/code-unit-reverse-lookup 4.0.1 php-composer
sebastian/comparator 6.3.0 php-composer sebastian/comparator 6.3.3 php-composer
sebastian/complexity 4.0.1 php-composer sebastian/complexity 4.0.1 php-composer
sebastian/diff 6.0.2 php-composer sebastian/diff 6.0.2 php-composer
sebastian/environment 7.2.0 php-composer sebastian/environment 7.2.1 php-composer
sebastian/exporter 6.3.0 php-composer sebastian/exporter 6.3.2 php-composer
sebastian/global-state 7.0.2 php-composer sebastian/global-state 7.0.2 php-composer
sebastian/lines-of-code 3.0.1 php-composer sebastian/lines-of-code 3.0.1 php-composer
sebastian/object-enumerator 6.0.1 php-composer sebastian/object-enumerator 6.0.1 php-composer
sebastian/object-reflector 4.0.1 php-composer sebastian/object-reflector 4.0.1 php-composer
sebastian/recursion-context 6.0.2 php-composer sebastian/recursion-context 6.0.3 php-composer
sebastian/type 5.1.0 php-composer sebastian/type 5.1.3 php-composer
sebastian/version 5.0.2 php-composer sebastian/version 5.0.2 php-composer
shadow 4.16.0-r1 apk shadow 4.18.0-r0 apk
skalibs-libs 2.14.3.0-r0 apk skalibs-libs 2.14.4.0-r0 apk
socialiteproviders/discord 4.2.0 php-composer socialiteproviders/discord 4.2.0 php-composer
socialiteproviders/gitlab 4.1.0 php-composer socialiteproviders/gitlab 4.1.0 php-composer
socialiteproviders/manager v4.8.0 php-composer socialiteproviders/manager v4.8.1 php-composer
socialiteproviders/microsoft-azure 5.2.0 php-composer socialiteproviders/microsoft-azure 5.2.0 php-composer
socialiteproviders/okta 4.4.0 php-composer socialiteproviders/okta 4.5.0 php-composer
socialiteproviders/twitch 5.4.0 php-composer socialiteproviders/twitch 5.4.0 php-composer
squizlabs/php_codesniffer 3.11.3 php-composer squizlabs/php_codesniffer 4.0.1 php-composer
ssddanbrown/asserthtml v3.1.0 php-composer ssddanbrown/asserthtml v3.1.0 php-composer
ssddanbrown/htmldiff v1.0.4 php-composer ssddanbrown/htmldiff v2.0.0 php-composer
ssddanbrown/symfony-mailer 7.2.x-dev php-composer ssl_client 1.37.0-r30 apk
ssl_client 1.37.0-r12 apk
staabm/side-effects-detector 1.0.5 php-composer staabm/side-effects-detector 1.0.5 php-composer
symfony/clock v7.2.0 php-composer symfony/clock v7.4.0 php-composer
symfony/console v7.2.1 php-composer symfony/console v7.4.4 php-composer
symfony/css-selector v7.2.0 php-composer symfony/css-selector v7.4.0 php-composer
symfony/deprecation-contracts v3.5.1 php-composer symfony/deprecation-contracts v3.6.0 php-composer
symfony/dom-crawler v7.2.3 php-composer symfony/dom-crawler v7.4.4 php-composer
symfony/error-handler v7.2.3 php-composer symfony/error-handler v7.4.4 php-composer
symfony/event-dispatcher v7.2.0 php-composer symfony/event-dispatcher v7.4.4 php-composer
symfony/event-dispatcher-contracts v3.5.1 php-composer symfony/event-dispatcher-contracts v3.6.0 php-composer
symfony/finder v7.2.2 php-composer symfony/filesystem v7.4.0 php-composer
symfony/http-foundation v7.2.3 php-composer symfony/finder v7.4.5 php-composer
symfony/http-kernel v7.2.3 php-composer symfony/http-foundation v7.4.5 php-composer
symfony/mime v7.2.3 php-composer symfony/http-kernel v7.4.5 php-composer
symfony/polyfill-ctype v1.31.0 php-composer symfony/mailer v7.4.4 php-composer
symfony/polyfill-intl-grapheme v1.31.0 php-composer symfony/mime v7.4.5 php-composer
symfony/polyfill-intl-idn v1.31.0 php-composer symfony/polyfill-ctype v1.33.0 php-composer
symfony/polyfill-intl-normalizer v1.31.0 php-composer symfony/polyfill-intl-grapheme v1.33.0 php-composer
symfony/polyfill-mbstring v1.31.0 php-composer symfony/polyfill-intl-idn v1.33.0 php-composer
symfony/polyfill-php80 v1.31.0 php-composer symfony/polyfill-intl-normalizer v1.33.0 php-composer
symfony/polyfill-php83 v1.31.0 php-composer symfony/polyfill-mbstring v1.33.0 php-composer
symfony/polyfill-uuid v1.31.0 php-composer symfony/polyfill-php80 v1.33.0 php-composer
symfony/process v7.2.0 php-composer symfony/polyfill-php83 v1.33.0 php-composer
symfony/routing v7.2.3 php-composer symfony/polyfill-php84 v1.33.0 php-composer
symfony/service-contracts v3.5.1 php-composer symfony/polyfill-php85 v1.33.0 php-composer
symfony/string v7.2.0 php-composer symfony/polyfill-uuid v1.33.0 php-composer
symfony/translation v7.2.2 php-composer symfony/process v7.4.5 php-composer
symfony/translation-contracts v3.5.1 php-composer symfony/routing v7.4.4 php-composer
symfony/uid v7.2.0 php-composer symfony/service-contracts v3.6.1 php-composer
symfony/var-dumper v7.2.3 php-composer symfony/string v7.4.4 php-composer
theseer/tokenizer 1.2.3 php-composer symfony/translation v7.4.4 php-composer
tijsverkoyen/css-to-inline-styles v2.3.0 php-composer symfony/translation-contracts v3.6.1 php-composer
tzdata 2025a-r0 apk symfony/uid v7.4.4 php-composer
utmps-libs 0.1.2.3-r2 apk symfony/var-dumper v7.4.4 php-composer
vlucas/phpdotenv v5.6.1 php-composer thecodingmachine/safe v3.4.0 php-composer
theseer/tokenizer 1.3.1 php-composer
tijsverkoyen/css-to-inline-styles v2.4.0 php-composer
tzdata 2025c-r0 apk
utmps-libs 0.1.3.1-r0 apk
vlucas/phpdotenv v5.6.3 php-composer
voku/portable-ascii 2.0.3 php-composer voku/portable-ascii 2.0.3 php-composer
webmozart/assert 1.11.0 php-composer xemlock/htmlpurifier-html5 v0.1.12 php-composer
xz-libs 5.6.3-r0 apk xz-libs 5.8.2-r0 apk
zlib 1.3.1-r2 apk zlib 1.3.1-r2 apk
zstd-libs 1.5.6-r2 apk zstd-libs 1.5.7-r2 apk

View File

@ -101,6 +101,7 @@ init_diagram: |
init-crontab-config -> init-config-end init-crontab-config -> init-config-end
init-config -> init-crontab-config init-config -> init-crontab-config
init-mods-end -> init-custom-files init-mods-end -> init-custom-files
init-adduser -> init-device-perms
base -> init-envfile base -> init-envfile
init-os-end -> init-folders init-os-end -> init-folders
init-php -> init-keygen init-php -> init-keygen
@ -111,6 +112,7 @@ init_diagram: |
init-samples -> init-nginx init-samples -> init-nginx
init-version-checks -> init-nginx-end init-version-checks -> init-nginx-end
init-adduser -> init-os-end init-adduser -> init-os-end
init-device-perms -> init-os-end
init-envfile -> init-os-end init-envfile -> init-os-end
init-keygen -> init-permissions init-keygen -> init-permissions
init-nginx -> init-php init-nginx -> init-php
@ -129,11 +131,13 @@ init_diagram: |
svc-queue-worker -> legacy-services svc-queue-worker -> legacy-services
} }
Base Images: { Base Images: {
"baseimage-alpine-nginx:3.21" <- "baseimage-alpine:3.21" "baseimage-alpine-nginx:3.23" <- "baseimage-alpine:3.23"
} }
"bookstack:latest" <- Base Images "bookstack:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- {date: "28.12.25:", desc: "Rebase to Alpine 3.23."}
- {date: "05.07.25:", desc: "Rebase to Alpine 3.22."}
- {date: "04.01.25:", desc: "Add php-opcache."} - {date: "04.01.25:", desc: "Add php-opcache."}
- {date: "17.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "17.12.24:", desc: "Rebase to Alpine 3.21."}
- {date: "11.10.24:", desc: "Default to environment config over .env file config."} - {date: "11.10.24:", desc: "Default to environment config over .env file config."}

View File

@ -6,4 +6,4 @@ mkdir -p \
touch /config/log/bookstack/laravel.log touch /config/log/bookstack/laravel.log
php /app/www/artisan key:generate --show php /app/www/artisan key:generate --show --no-ansi

View File

@ -4,12 +4,12 @@
# create directory structure # create directory structure
mkdir -p \ mkdir -p \
/config/www/{uploads,files,images,themes} \ /config/www/{uploads,files,images,themes} \
/config/www/framework/{cache,sessions,views} \ /config/www/framework/{cache,sessions,views,purifier} \
/config/backups \ /config/backups \
/config/log/bookstack /config/log/bookstack
if [[ ! -f /tmp/dbwait.lock ]];then if [[ ! -f /tmp/dbwait.lock ]];then
rm -rf /config/www/framework/{cache,sessions,views}/* rm -rf /config/www/framework/{cache,sessions,views,purifier}/*
fi fi
# check for .env and copy default if needed # check for .env and copy default if needed

View File

@ -2,7 +2,7 @@
# shellcheck shell=bash # shellcheck shell=bash
if [[ -n "${QUEUE_CONNECTION}" ]]; then if [[ -n "${QUEUE_CONNECTION}" ]]; then
touch /etc/s6-overlay/s6-rc.d/user/contents.d/svc-queue-worker touch /etc/s6-overlay/s6-rc.d/user/contents.d/svc-queue-worker
fi fi
exec \ exec \