Compare commits

...

74 Commits

Author SHA1 Message Date
LinuxServer-CI acf5cd8105 Bot Updating Templated Files 2024-11-12 11:50:24 +00:00
LinuxServer-CI 091f478f34 Bot Updating Templated Files 2024-11-12 11:48:30 +00:00
LinuxServer-CI ad7ade282f Bot Updating Package Versions 2024-11-05 11:49:49 +00:00
LinuxServer-CI 47e8542612 Bot Updating Package Versions 2024-10-31 16:45:01 +00:00
LinuxServer-CI 2e9430603a Bot Updating Package Versions 2024-10-29 11:50:16 +00:00
LinuxServer-CI ce4f4e0df1 Bot Updating Package Versions 2024-10-22 11:51:25 +00:00
LinuxServer-CI f09bc760ae Bot Updating Package Versions 2024-10-08 11:49:45 +00:00
LinuxServer-CI 7b8466802d Bot Updating Package Versions 2024-10-04 13:40:12 +00:00
LinuxServer-CI f1566c4926 Bot Updating Package Versions 2024-10-01 11:56:36 +00:00
LinuxServer-CI 5cd8bd9fdb Bot Updating Templated Files 2024-10-01 11:51:28 +00:00
LinuxServer-CI 2e23cd4063 Bot Updating Templated Files 2024-10-01 11:49:55 +00:00
LinuxServer-CI e6fe3252d1 Bot Updating Templated Files 2024-10-01 11:48:29 +00:00
LinuxServer-CI d19b41e55c Bot Updating Package Versions 2024-09-24 11:49:50 +00:00
LinuxServer-CI 0f73a9da0e Bot Updating Package Versions 2024-09-17 11:51:05 +00:00
Eric Nemchik 0545e001d4 Merge pull request #456 from linuxserver/ipv6-listen-develop
separate ipv6 listen in default site-conf [develop]
2024-09-14 09:04:24 -07:00
LinuxServer-CI 3e3b671d26 Bot Updating Package Versions 2024-09-12 19:33:12 +00:00
LinuxServer-CI f521d58c68 Bot Updating Package Versions 2024-09-10 11:50:57 +00:00
LinuxServer-CI ecf6ad56b4 Bot Updating Package Versions 2024-09-05 20:36:57 +00:00
LinuxServer-CI 875d8b435b Bot Updating Package Versions 2024-09-03 11:50:16 +00:00
LinuxServer-CI c0df3febbf Bot Updating Package Versions 2024-08-27 11:50:53 +00:00
LinuxServer-CI 7bd3ac412f Bot Updating Package Versions 2024-08-20 11:57:03 +00:00
LinuxServer-CI a74e879b57 Bot Updating Templated Files 2024-08-20 11:51:35 +00:00
LinuxServer-CI 931bb3580f Bot Updating Templated Files 2024-08-20 11:49:18 +00:00
LinuxServer-CI 95f63060e0 Bot Updating Package Versions 2024-08-14 18:40:37 +00:00
LinuxServer-CI a005ca269f Bot Updating Package Versions 2024-08-08 22:36:18 +00:00
LinuxServer-CI 2164d84c52 Bot Updating Package Versions 2024-08-06 16:41:13 +00:00
LinuxServer-CI 82ae5a23aa Bot Updating Package Versions 2024-08-06 11:49:49 +00:00
LinuxServer-CI a4fddd90ab Bot Updating Package Versions 2024-08-01 19:34:13 +00:00
LinuxServer-CI 6f99c81c7d Bot Updating Package Versions 2024-07-25 22:37:13 +00:00
LinuxServer-CI e59909addc Bot Updating Package Versions 2024-07-23 11:54:34 +00:00
Eric Nemchik 32c9f3ba1e separate ipv6 listen in default site-conf [develop] 2024-07-16 20:40:32 -05:00
LinuxServer-CI c690639528 Bot Updating Templated Files 2024-07-16 11:50:55 +00:00
LinuxServer-CI 5aebb77566 Bot Updating Templated Files 2024-07-16 11:48:24 +00:00
LinuxServer-CI 85e673015c Bot Updating Package Versions 2024-07-12 08:38:03 +00:00
LinuxServer-CI e372bf8c1f Bot Updating Package Versions 2024-07-09 11:53:27 +00:00
LinuxServer-CI 9888ec10bb Bot Updating Package Versions 2024-07-02 11:52:22 +00:00
LinuxServer-CI 746fc2314f Bot Updating Package Versions 2024-06-25 14:57:41 +00:00
Adam 2ebf64ed79 Merge pull request #445 from linuxserver/develop-3.20
Rebase to 3.20 (develop)
2024-06-25 15:50:18 +01:00
thespad 62d13eaf3b Rebase to 3.20 2024-06-24 20:36:45 +01:00
LinuxServer-CI 4adc904193 Bot Updating Package Versions 2024-06-21 14:36:12 +00:00
LinuxServer-CI dbe99cc569 Bot Updating Package Versions 2024-06-17 21:34:18 +00:00
LinuxServer-CI abba10c24c Bot Updating Package Versions 2024-06-11 11:50:49 +00:00
LinuxServer-CI 4513213b97 Bot Updating Package Versions 2024-06-04 11:50:59 +00:00
LinuxServer-CI e25462f5d6 Bot Updating Package Versions 2024-05-28 11:52:42 +00:00
LinuxServer-CI 93c0ad7d37 Bot Updating Templated Files 2024-05-21 11:51:56 +00:00
LinuxServer-CI c2921714b2 Bot Updating Templated Files 2024-05-21 11:49:39 +00:00
LinuxServer-CI e4147b179b Bot Updating Package Versions 2024-05-18 08:36:32 +00:00
LinuxServer-CI 6838676b53 Bot Updating Package Versions 2024-05-14 11:53:21 +00:00
LinuxServer-CI 2687e98212 Bot Updating Templated Files 2024-05-14 11:48:35 +00:00
LinuxServer-CI 419c882f73 Bot Updating Package Versions 2024-05-07 11:53:07 +00:00
LinuxServer-CI e5f9510fed Bot Updating Templated Files 2024-05-07 11:48:40 +00:00
LinuxServer-CI 222b58c99c Bot Updating Package Versions 2024-04-30 11:56:53 +00:00
LinuxServer-CI e355bcbe6a Bot Updating Templated Files 2024-04-30 11:48:41 +00:00
LinuxServer-CI 4f00b831d3 Bot Updating Package Versions 2024-04-23 11:50:13 +00:00
LinuxServer-CI 7a8248f3cd Bot Updating Package Versions 2024-04-16 11:50:06 +00:00
LinuxServer-CI 915ab07cd9 Bot Updating Package Versions 2024-04-08 13:35:02 +00:00
LinuxServer-CI afb828d4da Bot Updating Package Versions 2024-04-02 11:50:18 +00:00
LinuxServer-CI f7056138b6 Bot Updating Package Versions 2024-03-26 11:53:11 +00:00
LinuxServer-CI 70f6155bbf Bot Updating Package Versions 2024-03-21 21:33:06 +00:00
LinuxServer-CI b9cf966878 Bot Updating Package Versions 2024-03-19 11:52:47 +00:00
LinuxServer-CI dead6f366e Bot Updating Package Versions 2024-03-14 21:33:06 +00:00
LinuxServer-CI c2c4010ffb Bot Updating Templated Files 2024-03-12 20:31:37 +00:00
LinuxServer-CI 150c587dff Bot Updating Package Versions 2024-03-07 22:34:05 +00:00
LinuxServer-CI 671cf6fe6c Bot Updating Package Versions 2024-03-06 18:32:28 +00:00
LinuxServer-CI a7da03b8d8 Bot Updating Templated Files 2024-03-06 18:25:39 +00:00
Eric Nemchik 7c8251110c Rebase to Alpine 3.19 (#399)
* Rebase to Alpine 3.19

Signed-off-by: Eric Nemchik <eric@nemchik.com>

* update date and edge repo

---------

Signed-off-by: Eric Nemchik <eric@nemchik.com>
Co-authored-by: aptalca <541623+aptalca@users.noreply.github.com>
2024-03-06 13:24:01 -05:00
LinuxServer-CI 11824dbfe3 Bot Updating Package Versions 2024-03-05 11:50:19 +00:00
LinuxServer-CI 0004b51af8 Bot Updating Package Versions 2024-02-27 11:57:52 +00:00
LinuxServer-CI 9706c0481a Bot Updating Templated Files 2024-02-27 11:50:16 +00:00
LinuxServer-CI bcf04398d0 Bot Updating Templated Files 2024-02-27 11:48:43 +00:00
LinuxServer-CI 48667a56dd Bot Updating Package Versions 2024-02-16 14:34:20 +00:00
LinuxServer-CI b906641f24 Bot Updating Package Versions 2024-02-13 11:52:12 +00:00
LinuxServer-CI 9e83ba52fc Bot Updating Package Versions 2024-02-06 11:49:42 +00:00
LinuxServer-CI 0dfd84df5c Bot Updating Package Versions 2024-01-29 15:37:30 +00:00
15 changed files with 919 additions and 825 deletions
+2 -2
View File
@@ -105,10 +105,10 @@ docker build \
-t linuxserver/nextcloud:latest . -t linuxserver/nextcloud:latest .
``` ```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static` The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash ```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
``` ```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
+2 -2
View File
@@ -67,10 +67,10 @@ body:
- type: textarea - type: textarea
attributes: attributes:
description: | description: |
Provide a full docker log, output of "docker logs linuxserver.io" Provide a full docker log, output of "docker logs nextcloud"
label: Container logs label: Container logs
placeholder: | placeholder: |
Output of `docker logs linuxserver.io` Output of `docker logs nextcloud`
render: bash render: bash
validations: validations:
required: true required: true
+54 -41
View File
@@ -7,22 +7,27 @@ jobs:
external-trigger-develop: external-trigger-develop:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/develop' if: github.ref == 'refs/heads/develop'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: | run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_DEVELOP }}" ]; then printf "# External trigger for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_DEVELOP is set; skipping trigger. ****" if grep -q "^nextcloud_develop" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_DEVELOP\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`nextcloud_develop\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** External trigger running off of develop branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_DEVELOP\". ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "External trigger running off of develop branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_DEVELOP\`" >> $GITHUB_STEP_SUMMARY echo "> External trigger running off of develop branch. To disable this trigger, add \`nextcloud_develop\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****" printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sX GET https://api.github.com/repos/nextcloud/server/releases | jq -r '.[] | select(.prerelease == true) | .tag_name' | sed 's|^v||g' | sort -rV | head -1) EXT_RELEASE=$(curl -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sX GET https://api.github.com/repos/nextcloud/server/releases | jq -r '.[] | select(.prerelease == true) | .tag_name' | sed 's|^v||g' | sort -rV | head -1)
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for nextcloud branch develop" FAILURE_REASON="Can't retrieve external version for nextcloud branch develop"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-nextcloud/actions/runs/${{ github.run_id }}" GHA_TRIGGER_URL="https://github.com/linuxserver/docker-nextcloud/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
@@ -31,9 +36,8 @@ jobs:
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****" echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
image="linuxserver/nextcloud" image="linuxserver/nextcloud"
tag="develop" tag="develop"
token=$(curl -sX GET \ token=$(curl -sX GET \
@@ -60,45 +64,54 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then if [ -z "${IMAGE_VERSION}" ]; then
echo "**** Can't retrieve last pushed version, exiting ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for nextcloud tag develop" FAILURE_REASON="Can't retrieve last pushed version for nextcloud tag develop"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****" 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}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****" echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/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 ****" 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
exit 0 exit 0
else else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****" if [[ "${artifacts_found}" == "false" ]]; then
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/buildWithParameters?PACKAGE_CHECK=false \ FAILURE_REASON="New version ${EXT_RELEASE} for nextcloud tag develop is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
echo "**** Jenkins job queue url: ${response%$'\r'} ****" "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
echo "**** Sleeping 10 seconds until job starts ****" "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
sleep 10 else
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
buildurl="${buildurl%$'\r'}" echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
echo "**** Jenkins job build url: ${buildurl} ****" if "${artifacts_found}" == "true" ]]; then
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****" fi
curl -iX POST \ response=$(curl -iX POST \
"${buildurl}submitDescription" \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
--data-urlencode "Submit=Submit" echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
echo "**** Notifying Discord ****" sleep 10
TRIGGER_REASON="A version change was detected for nextcloud tag develop. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, buildurl="${buildurl%$'\r'}"
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for nextcloud tag develop. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
fi fi
@@ -9,37 +9,37 @@ jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: External Trigger Scheduler - name: External Trigger Scheduler
run: | run: |
echo "**** Branches found: ****" printf "# External trigger scheduler for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/jenkins-vars.yml) ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch') ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type') ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****" echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****." echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
curl -iX POST \ curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \ -H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \ -d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-nextcloud/actions/workflows/external_trigger.yml/dispatches https://api.github.com/repos/linuxserver/docker-nextcloud/actions/workflows/external_trigger.yml/dispatches
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi fi
else else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****" echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi fi
done done
-42
View File
@@ -1,42 +0,0 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-develop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: Package Trigger
if: github.ref == 'refs/heads/develop'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_DEVELOP }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_DEVELOP is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_DEVELOP\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** Package trigger running off of develop branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_DEVELOP\". ****"
echo "Package trigger running off of develop branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_DEVELOP\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
+60 -27
View File
@@ -9,42 +9,75 @@ jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: Package Trigger Scheduler - name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: | run: |
echo "**** Branches found: ****" printf "# Package trigger scheduler for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/jenkins-vars.yml | yq -r '.ls_branch') continue
if [ "${br}" == "${ls_branch}" ]; then fi
echo "**** Branch ${br} appears to be live; checking workflow. ****" printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/jenkins-vars.yml)
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****" if [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} " if [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
curl -iX POST \ echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
-H "Authorization: token ${{ secrets.CR_PAT }}" \ echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
-H "Accept: application/vnd.github.v3+json" \ skipped_branches="${skipped_branches}${br} "
-d "{\"ref\":\"refs/heads/${br}\"}" \ elif grep -q "^nextcloud_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
https://api.github.com/repos/linuxserver/docker-nextcloud/actions/workflows/package_trigger.yml/dispatches echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
sleep 30 echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`nextcloud_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/${br}/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`nextcloud_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
sleep 20
fi fi
else else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi fi
done done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
echo "**** Notifying Discord ****" if [[ -n "${triggered_branches}" ]]; then
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
"description": "**Package Check Build(s) Triggered for nextcloud** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-nextcloud/activity/"' \n"}], NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-nextcloud/activity/ \n"
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) for nextcloud** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
+2
View File
@@ -5,6 +5,8 @@ on:
- '**/run' - '**/run'
- '**/finish' - '**/finish'
- '**/check' - '**/check'
- 'root/migrations/*'
jobs: jobs:
permission_check: permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1 uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1
+35 -35
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.18 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.20
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -19,45 +19,44 @@ RUN \
gnu-libiconv \ gnu-libiconv \
imagemagick \ imagemagick \
libxml2 \ libxml2 \
php82-apcu \ php83-apcu \
php82-bcmath \ php83-bcmath \
php82-bz2 \ php83-bz2 \
php82-dom \ php83-dom \
php82-exif \ php83-exif \
php82-ftp \ php83-ftp \
php82-gd \ php83-gd \
php82-gmp \ php83-gmp \
php82-imap \ php83-imap \
php82-intl \ php83-intl \
php82-ldap \ php83-ldap \
php82-opcache \ php83-opcache \
php82-pcntl \ php83-pcntl \
php82-pdo_mysql \ php83-pdo_mysql \
php82-pdo_pgsql \ php83-pdo_pgsql \
php82-pdo_sqlite \ php83-pdo_sqlite \
php82-pecl-imagick \ php83-pecl-imagick \
php82-pecl-memcached \ php83-pecl-mcrypt \
php82-pecl-smbclient \ php83-pecl-memcached \
php82-pgsql \ php83-pecl-smbclient \
php82-posix \ php83-pgsql \
php82-redis \ php83-posix \
php82-sodium \ php83-redis \
php82-sqlite3 \ php83-sodium \
php82-sysvsem \ php83-sqlite3 \
php82-xmlreader \ php83-sysvsem \
php83-xmlreader \
rsync \ rsync \
samba-client \ samba-client \
sudo && \ sudo && \
apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing \
php82-pecl-mcrypt && \
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/php82/php-fpm.d/www.conf && \ sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php82/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php82/php-fpm.d/www.conf && \ grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php82/php-fpm.conf && \ echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \
echo "**** configure php for nextcloud ****" && \ echo "**** configure php for nextcloud ****" && \
{ \ { \
echo 'apc.enable_cli=1'; \ echo 'apc.enable_cli=1'; \
} >> /etc/php82/conf.d/apcu.ini && \ } >> /etc/php83/conf.d/apcu.ini && \
{ \ { \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.interned_strings_buffer=32'; \ echo 'opcache.interned_strings_buffer=32'; \
@@ -67,7 +66,7 @@ RUN \
echo 'opcache.revalidate_freq=60'; \ echo 'opcache.revalidate_freq=60'; \
echo 'opcache.jit=1255'; \ echo 'opcache.jit=1255'; \
echo 'opcache.jit_buffer_size=128M'; \ echo 'opcache.jit_buffer_size=128M'; \
} >> "/etc/php82/conf.d/00_opcache.ini" && \ } >> "/etc/php83/conf.d/00_opcache.ini" && \
{ \ { \
echo 'memory_limit=512M'; \ echo 'memory_limit=512M'; \
echo 'upload_max_filesize=512M'; \ echo 'upload_max_filesize=512M'; \
@@ -76,7 +75,7 @@ RUN \
echo 'max_execution_time=300'; \ echo 'max_execution_time=300'; \
echo 'output_buffering=0'; \ echo 'output_buffering=0'; \
echo 'always_populate_raw_post_data=-1'; \ echo 'always_populate_raw_post_data=-1'; \
} >> "/etc/php82/conf.d/nextcloud.ini" && \ } >> "/etc/php83/conf.d/nextcloud.ini" && \
echo "**** install nextcloud ****" && \ echo "**** install nextcloud ****" && \
mkdir -p \ mkdir -p \
/app/www/src/ && \ /app/www/src/ && \
@@ -93,6 +92,7 @@ RUN \
rm -rf /app/www/src/updater && \ rm -rf /app/www/src/updater && \
mkdir -p /app/www/src/data && \ mkdir -p /app/www/src/data && \
chmod +x /app/www/src/occ && \ chmod +x /app/www/src/occ && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
rm -rf \ rm -rf \
/tmp/* /tmp/*
+35 -35
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.18 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.20
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -19,45 +19,44 @@ RUN \
gnu-libiconv \ gnu-libiconv \
imagemagick \ imagemagick \
libxml2 \ libxml2 \
php82-apcu \ php83-apcu \
php82-bcmath \ php83-bcmath \
php82-bz2 \ php83-bz2 \
php82-dom \ php83-dom \
php82-exif \ php83-exif \
php82-ftp \ php83-ftp \
php82-gd \ php83-gd \
php82-gmp \ php83-gmp \
php82-imap \ php83-imap \
php82-intl \ php83-intl \
php82-ldap \ php83-ldap \
php82-opcache \ php83-opcache \
php82-pcntl \ php83-pcntl \
php82-pdo_mysql \ php83-pdo_mysql \
php82-pdo_pgsql \ php83-pdo_pgsql \
php82-pdo_sqlite \ php83-pdo_sqlite \
php82-pecl-imagick \ php83-pecl-imagick \
php82-pecl-memcached \ php83-pecl-mcrypt \
php82-pecl-smbclient \ php83-pecl-memcached \
php82-pgsql \ php83-pecl-smbclient \
php82-posix \ php83-pgsql \
php82-redis \ php83-posix \
php82-sodium \ php83-redis \
php82-sqlite3 \ php83-sodium \
php82-sysvsem \ php83-sqlite3 \
php82-xmlreader \ php83-sysvsem \
php83-xmlreader \
rsync \ rsync \
samba-client \ samba-client \
sudo && \ sudo && \
apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing \
php82-pecl-mcrypt && \
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/php82/php-fpm.d/www.conf && \ sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php82/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php82/php-fpm.d/www.conf && \ grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php82/php-fpm.conf && \ echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \
echo "**** configure php for nextcloud ****" && \ echo "**** configure php for nextcloud ****" && \
{ \ { \
echo 'apc.enable_cli=1'; \ echo 'apc.enable_cli=1'; \
} >> /etc/php82/conf.d/apcu.ini && \ } >> /etc/php83/conf.d/apcu.ini && \
{ \ { \
echo 'opcache.enable=1'; \ echo 'opcache.enable=1'; \
echo 'opcache.interned_strings_buffer=32'; \ echo 'opcache.interned_strings_buffer=32'; \
@@ -67,7 +66,7 @@ RUN \
echo 'opcache.revalidate_freq=60'; \ echo 'opcache.revalidate_freq=60'; \
echo 'opcache.jit=1255'; \ echo 'opcache.jit=1255'; \
echo 'opcache.jit_buffer_size=128M'; \ echo 'opcache.jit_buffer_size=128M'; \
} >> "/etc/php82/conf.d/00_opcache.ini" && \ } >> "/etc/php83/conf.d/00_opcache.ini" && \
{ \ { \
echo 'memory_limit=512M'; \ echo 'memory_limit=512M'; \
echo 'upload_max_filesize=512M'; \ echo 'upload_max_filesize=512M'; \
@@ -76,7 +75,7 @@ RUN \
echo 'max_execution_time=300'; \ echo 'max_execution_time=300'; \
echo 'output_buffering=0'; \ echo 'output_buffering=0'; \
echo 'always_populate_raw_post_data=-1'; \ echo 'always_populate_raw_post_data=-1'; \
} >> "/etc/php82/conf.d/nextcloud.ini" && \ } >> "/etc/php83/conf.d/nextcloud.ini" && \
echo "**** install nextcloud ****" && \ echo "**** install nextcloud ****" && \
mkdir -p \ mkdir -p \
/app/www/src/ && \ /app/www/src/ && \
@@ -93,6 +92,7 @@ RUN \
rm -rf /app/www/src/updater && \ rm -rf /app/www/src/updater && \
mkdir -p /app/www/src/data && \ mkdir -p /app/www/src/data && \
chmod +x /app/www/src/occ && \ chmod +x /app/www/src/occ && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
rm -rf \ rm -rf \
/tmp/* /tmp/*
Vendored
+293 -212
View File
@@ -17,6 +17,8 @@ pipeline {
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0') GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id') GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat') DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat')
QUAYIO_API_TOKEN=credentials('quayio-repo-api-token')
GIT_SIGNING_KEY=credentials('484fbca6-9a4f-455e-b9e3-97ac98785f5f')
BUILD_VERSION_ARG = 'NEXTCLOUD_RELEASE' BUILD_VERSION_ARG = 'NEXTCLOUD_RELEASE'
LS_USER = 'linuxserver' LS_USER = 'linuxserver'
LS_REPO = 'docker-nextcloud' LS_REPO = 'docker-nextcloud'
@@ -31,14 +33,28 @@ pipeline {
CI_PORT='443' CI_PORT='443'
CI_SSL='true' CI_SSL='true'
CI_DELAY='120' CI_DELAY='120'
CI_DOCKERENV='TZ=US/Pacific' CI_DOCKERENV=''
CI_AUTH='user:password' CI_AUTH=''
CI_WEBPATH='' CI_WEBPATH=''
} }
stages { stages {
stage("Set git config"){
steps{
sh '''#!/bin/bash
cat ${GIT_SIGNING_KEY} > /config/.ssh/id_sign
chmod 600 /config/.ssh/id_sign
ssh-keygen -y -f /config/.ssh/id_sign > /config/.ssh/id_sign.pub
echo "Using $(ssh-keygen -lf /config/.ssh/id_sign) to sign commits"
git config --global gpg.format ssh
git config --global user.signingkey /config/.ssh/id_sign
git config --global commit.gpgsign true
'''
}
}
// Setup all the basic environment variables needed for the build // Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){ stage("Set ENV Variables base"){
steps{ steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash sh '''#! /bin/bash
containers=$(docker ps -aq) containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then if [[ -n "${containers}" ]]; then
@@ -65,7 +81,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
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 ./.github/workflows/package_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'
} }
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}" '''
@@ -245,9 +261,11 @@ 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.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ ghcr.io/linuxserver/baseimage-alpine:3.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache py3-pip && \ apk add --no-cache python3 && \
pip install s3cmd && \ python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \
pip install --no-cache-dir s3cmd && \
s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :''' s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :'''
} }
} }
@@ -262,150 +280,178 @@ pipeline {
} }
} }
steps { steps {
withCredentials([ sh '''#! /bin/bash
[ set -e
$class: 'UsernamePasswordMultiBinding', TEMPDIR=$(mktemp -d)
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', docker pull ghcr.io/linuxserver/jenkins-builder:latest
usernameVariable: 'DOCKERUSER', # Cloned repo paths for templating:
passwordVariable: 'DOCKERPASS' # ${TEMPDIR}/docker-${CONTAINER_NAME}: Cloned branch develop of ${LS_USER}/${LS_REPO} for running the jenkins builder on
] # ${TEMPDIR}/repo/${LS_REPO}: Cloned branch develop of ${LS_USER}/${LS_REPO} for commiting various templated file changes and pushing back to Github
]) { # ${TEMPDIR}/docs/docker-documentation: Cloned docs repo for pushing docs updates to Github
sh '''#! /bin/bash # ${TEMPDIR}/unraid/docker-templates: Cloned docker-templates repo to check for logos
set -e # ${TEMPDIR}/unraid/templates: Cloned templates repo for commiting unraid template changes and pushing back to Github
TEMPDIR=$(mktemp -d) git clone --branch develop --depth 1 https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/docker-${CONTAINER_NAME}
docker pull ghcr.io/linuxserver/jenkins-builder:latest docker run --rm -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/tmp -e LOCAL=true -e PUID=$(id -u) -e PGID=$(id -g) ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=develop -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest echo "Starting Stage 1 - Jenkinsfile update"
# Stage 1 - Jenkinsfile update if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then mkdir -p ${TEMPDIR}/repo
mkdir -p ${TEMPDIR}/repo git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} git checkout -f develop
git checkout -f develop cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/ git add Jenkinsfile
git add Jenkinsfile git commit -m 'Bot Updating Templated Files'
git commit -m 'Bot Updating Templated Files' git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "Updating Jenkinsfile and exiting build, new one will trigger based on commit"
echo "Updating Jenkinsfile" rm -Rf ${TEMPDIR}
rm -Rf ${TEMPDIR} exit 0
exit 0 else
else echo "Jenkinsfile is up to date."
echo "Jenkinsfile is up to date." fi
echo "Starting Stage 2 - Delete old templates"
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml .github/workflows/package_trigger.yml"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
fi fi
# Stage 2 - Delete old templates done
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml Dockerfile.armhf" if [[ -n "${TEMPLATES_TO_DELETE}" ]]; then
for i in ${OLD_TEMPLATES}; do mkdir -p ${TEMPDIR}/repo
if [[ -f "${i}" ]]; then git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}" cd ${TEMPDIR}/repo/${LS_REPO}
fi git checkout -f develop
for i in ${TEMPLATES_TO_DELETE}; do
git rm "${i}"
done done
if [[ -n "${TEMPLATES_TO_DELETE}" ]]; then git commit -m 'Bot Updating Templated Files'
mkdir -p ${TEMPDIR}/repo git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
cd ${TEMPDIR}/repo/${LS_REPO} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
git checkout -f develop echo "Deleting old/deprecated templates and exiting build, new one will trigger based on commit"
for i in ${TEMPLATES_TO_DELETE}; do rm -Rf ${TEMPDIR}
git rm "${i}" exit 0
done else
git commit -m 'Bot Updating Templated Files' echo "No templates to delete"
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop fi
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop echo "Starting Stage 3 - Update templates"
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
echo "Deleting old and deprecated templates" cd ${TEMPDIR}/docker-${CONTAINER_NAME}
rm -Rf ${TEMPDIR} NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
exit 0 if [[ "${CURRENTHASH}" != "${NEWHASH}" ]] || ! grep -q '.jenkins-external' "${WORKSPACE}/.gitignore" 2>/dev/null; then
else mkdir -p ${TEMPDIR}/repo
echo "No templates to delete" git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
fi cd ${TEMPDIR}/repo/${LS_REPO}
# Stage 3 - Update templates git checkout -f develop
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
cd ${TEMPDIR}/docker-${CONTAINER_NAME} cd ${TEMPDIR}/docker-${CONTAINER_NAME}
NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8) mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
if [[ "${CURRENTHASH}" != "${NEWHASH}" ]] || ! grep -q '.jenkins-external' "${WORKSPACE}/.gitignore" 2>/dev/null; then mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
mkdir -p ${TEMPDIR}/repo cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ || :
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} cp --parents readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/ || :
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}/
git checkout -f develop if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then
cd ${TEMPDIR}/docker-${CONTAINER_NAME} echo ".jenkins-external" >> .gitignore
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows git add .gitignore
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE fi
cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ || : git add readme-vars.yml ${TEMPLATED_FILES}
cp --parents readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/ || : git commit -m 'Bot Updating Templated Files'
cd ${TEMPDIR}/repo/${LS_REPO}/ git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop
echo ".jenkins-external" >> .gitignore echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
git add .gitignore echo "Updating templates and exiting build, new one will trigger based on commit"
fi rm -Rf ${TEMPDIR}
git add readme-vars.yml ${TEMPLATED_FILES} exit 0
git commit -m 'Bot Updating Templated Files' else
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git develop echo "No templates to update"
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} fi
echo "Starting Stage 4 - External repo updates: Docs, Unraid Template and Readme Sync to Docker Hub"
mkdir -p ${TEMPDIR}/docs
git clone --depth=1 https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/
cd ${TEMPDIR}/docs/docker-documentation
GH_DOCS_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
git add docs/images/docker-${CONTAINER_NAME}.md
echo "Updating docs repo"
git commit -m 'Bot Updating Documentation'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} --rebase
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} || \
(MAXWAIT="10" && echo "Push to docs failed, trying again in ${MAXWAIT} seconds" && \
sleep $((RANDOM % MAXWAIT)) && \
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} --rebase && \
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH})
else
echo "Docs update not needed, skipping"
fi
mkdir -p ${TEMPDIR}/unraid
git clone --depth=1 https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone --depth=1 https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
fi
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
echo "Updating Unraid template"
cd ${TEMPDIR}/unraid/templates/
GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
if grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list && [[ -f ${TEMPDIR}/unraid/templates/unraid/deprecated/${CONTAINER_NAME}.xml ]]; then
echo "Image is on the ignore list, and already in the deprecation folder."
elif grep -wq "^${CONTAINER_NAME}$" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add -u unraid/${CONTAINER_NAME}.xml
git mv unraid/${CONTAINER_NAME}.xml unraid/deprecated/${CONTAINER_NAME}.xml || :
git commit -m 'Bot Moving Deprecated Unraid Template' || :
else else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add unraid/${CONTAINER_NAME}.xml
git commit -m 'Bot Updating Unraid Template'
fi fi
mkdir -p ${TEMPDIR}/docs git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} || \
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then (MAXWAIT="10" && echo "Push to unraid templates failed, trying again in ${MAXWAIT} seconds" && \
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/ sleep $((RANDOM % MAXWAIT)) && \
cd ${TEMPDIR}/docs/docker-documentation git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase && \
GH_DOCS_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||') git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH})
git add docs/images/docker-${CONTAINER_NAME}.md else
git commit -m 'Bot Updating Documentation' echo "No updates to Unraid template needed, skipping"
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} fi
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]]; then
if [[ $(cat ${TEMPDIR}/docker-${CONTAINER_NAME}/README.md | wc -m) -gt 25000 ]]; then
echo "Readme is longer than 25,000 characters. Syncing the lite version to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/README.lite"
else
echo "Syncing readme to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/README.md"
fi fi
mkdir -p ${TEMPDIR}/unraid if curl -s https://hub.docker.com/v2/namespaces/${DOCKERHUB_IMAGE%%/*}/repositories/${DOCKERHUB_IMAGE##*/}/tags | jq -r '.message' | grep -q 404; then
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates echo "Docker Hub endpoint doesn't exist. Creating endpoint first."
git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates DH_TOKEN=$(curl -d '{"username":"linuxserverci", "password":"'${DOCKERHUB_TOKEN}'"}' -H "Content-Type: application/json" -X POST https://hub.docker.com/v2/users/login | jq -r '.token')
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
fi
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
cd ${TEMPDIR}/unraid/templates/
GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add -u unraid/${CONTAINER_NAME}.xml
git mv unraid/${CONTAINER_NAME}.xml unraid/deprecated/${CONTAINER_NAME}.xml || :
git commit -m 'Bot Moving Deprecated Unraid Template' || :
else
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add unraid/${CONTAINER_NAME}.xml
git commit -m 'Bot Updating Unraid Template'
fi
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH}
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH}
fi
# Stage 4 - Sync Readme to Docker Hub
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]]; then
if [[ $(cat ${TEMPDIR}/docker-${CONTAINER_NAME}/README.md | wc -m) > 25000 ]]; then
echo "Readme is longer than 25,000 characters. Syncing the lite version to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/README.lite"
else
echo "Syncing readme to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/README.md"
fi
DH_TOKEN=$(curl -d '{"username":"'${DOCKERUSER}'", "password":"'${DOCKERHUB_TOKEN}'"}' -H "Content-Type: application/json" -X POST https://hub.docker.com/v2/users/login | jq -r '.token')
curl -s \ curl -s \
-H "Authorization: JWT ${DH_TOKEN}" \ -H "Authorization: JWT ${DH_TOKEN}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-X PATCH \ -X POST \
-d "{\\"full_description\\":$(jq -Rsa . ${DH_README_SYNC_PATH})}" \ -d '{"name":"'${DOCKERHUB_IMAGE##*/}'", "namespace":"'${DOCKERHUB_IMAGE%%/*}'"}' \
https://hub.docker.com/v2/repositories/${DOCKERHUB_IMAGE} || : https://hub.docker.com/v2/repositories/ || :
else
echo "Not the default Github branch. Skipping readme sync to Docker Hub."
fi fi
rm -Rf ${TEMPDIR}''' DH_TOKEN=$(curl -d '{"username":"linuxserverci", "password":"'${DOCKERHUB_TOKEN}'"}' -H "Content-Type: application/json" -X POST https://hub.docker.com/v2/users/login | jq -r '.token')
script{ curl -s \
env.FILES_UPDATED = sh( -H "Authorization: JWT ${DH_TOKEN}" \
script: '''cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''', -H "Content-Type: application/json" \
returnStdout: true).trim() -X PATCH \
} -d "{\\"full_description\\":$(jq -Rsa . ${DH_README_SYNC_PATH})}" \
https://hub.docker.com/v2/repositories/${DOCKERHUB_IMAGE} || :
else
echo "Not the default Github branch. Skipping readme sync to Docker Hub."
fi
rm -Rf ${TEMPDIR}'''
script{
env.FILES_UPDATED = sh(
script: '''cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''',
returnStdout: true).trim()
} }
} }
} }
@@ -446,23 +492,27 @@ pipeline {
} }
} }
/* ####################### /* #######################
GitLab Mirroring GitLab Mirroring and Quay.io Repo Visibility
####################### */ ####################### */
// Ping into Gitlab to mirror this repo and have a registry endpoint // Ping into Gitlab to mirror this repo and have a registry endpoint & mark this repo on Quay.io as public
stage("GitLab Mirror"){ stage("GitLab Mirror and Quay.io Visibility"){
when { when {
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps{ steps{
sh '''curl -H "Content-Type: application/json" -H "Private-Token: ${GITLAB_TOKEN}" -X POST https://gitlab.com/api/v4/projects \ sh '''curl -H "Content-Type: application/json" -H "Private-Token: ${GITLAB_TOKEN}" -X POST https://gitlab.com/api/v4/projects \
-d '{"namespace_id":'${GITLAB_NAMESPACE}',\ -d '{"namespace_id":'${GITLAB_NAMESPACE}',\
"name":"'${LS_REPO}'", "name":"'${LS_REPO}'",
"mirror":true,\ "mirror":true,\
"import_url":"https://github.com/linuxserver/'${LS_REPO}'.git",\ "import_url":"https://github.com/linuxserver/'${LS_REPO}'.git",\
"issues_access_level":"disabled",\ "issues_access_level":"disabled",\
"merge_requests_access_level":"disabled",\ "merge_requests_access_level":"disabled",\
"repository_access_level":"enabled",\ "repository_access_level":"enabled",\
"visibility":"public"}' ''' "visibility":"public"}' '''
sh '''curl -H "Private-Token: ${GITLAB_TOKEN}" -X PUT "https://gitlab.com/api/v4/projects/Linuxserver.io%2F${LS_REPO}" \
-d "mirror=true&import_url=https://github.com/linuxserver/${LS_REPO}.git" '''
sh '''curl -H "Content-Type: application/json" -H "Authorization: Bearer ${QUAYIO_API_TOKEN}" -X POST "https://quay.io/api/v1/repository${QUAYIMAGE/quay.io/}/changevisibility" \
-d '{"visibility":"public"}' ||: '''
} }
} }
/* ############### /* ###############
@@ -493,6 +543,7 @@ pipeline {
--label \"org.opencontainers.image.title=Nextcloud\" \ --label \"org.opencontainers.image.title=Nextcloud\" \
--label \"org.opencontainers.image.description=[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. \" \ --label \"org.opencontainers.image.description=[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. \" \
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \ --no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
} }
} }
@@ -524,6 +575,7 @@ pipeline {
--label \"org.opencontainers.image.title=Nextcloud\" \ --label \"org.opencontainers.image.title=Nextcloud\" \
--label \"org.opencontainers.image.description=[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. \" \ --label \"org.opencontainers.image.description=[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. \" \
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \ --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
--provenance=false --sbom=false \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
} }
} }
@@ -552,9 +604,10 @@ pipeline {
--label \"org.opencontainers.image.title=Nextcloud\" \ --label \"org.opencontainers.image.title=Nextcloud\" \
--label \"org.opencontainers.image.description=[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. \" \ --label \"org.opencontainers.image.description=[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. \" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \ --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
--provenance=false --sbom=false \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) { retry_backoff(5,5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
} }
sh '''#! /bin/bash sh '''#! /bin/bash
@@ -578,7 +631,7 @@ pipeline {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" != "true" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG} LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else else
LOCAL_CONTAINER=${IMAGE}:${META_TAG} LOCAL_CONTAINER=${IMAGE}:${META_TAG}
@@ -666,18 +719,27 @@ pipeline {
} }
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
if grep -q 'docker-baseimage' <<< "${LS_REPO}"; then
echo "Detected baseimage, setting LSIO_FIRST_PARTY=true"
if [ -n "${CI_DOCKERENV}" ]; then
CI_DOCKERENV="LSIO_FIRST_PARTY=true|${CI_DOCKERENV}"
else
CI_DOCKERENV="LSIO_FIRST_PARTY=true"
fi
fi
docker pull ghcr.io/linuxserver/ci:latest docker pull ghcr.io/linuxserver/ci:latest
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} 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}
fi fi
docker run --rm \ docker run --rm \
--shm-size=1gb \ --shm-size=1gb \
-v /var/run/docker.sock:/var/run/docker.sock \ -v /var/run/docker.sock:/var/run/docker.sock \
-e IMAGE=\"${IMAGE}\" \ -e IMAGE=\"${IMAGE}\" \
-e DELAY_START=\"${CI_DELAY}\" \ -e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \ -e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \ -e META_TAG=\"${META_TAG}\" \
-e RELEASE_TAG=\"develop\" \
-e PORT=\"${CI_PORT}\" \ -e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \ -e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \ -e BASE=\"${DIST_IMAGE}\" \
@@ -687,6 +749,7 @@ pipeline {
-e WEB_SCREENSHOT=\"${CI_WEB}\" \ -e WEB_SCREENSHOT=\"${CI_WEB}\" \
-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}\" \
-t ghcr.io/linuxserver/ci:latest \ -t ghcr.io/linuxserver/ci:latest \
python3 test_build.py''' python3 test_build.py'''
} }
@@ -703,12 +766,6 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[ [
$class: 'UsernamePasswordMultiBinding', $class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot', credentialsId: 'Quay.io-Robot',
@@ -716,10 +773,10 @@ pipeline {
passwordVariable: 'QUAYPASS' passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry_backoff(5,5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
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
@@ -734,7 +791,7 @@ pipeline {
docker push ${PUSHIMAGE}:${META_TAG} docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG} docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker push ${PUSHIMAGE}:${SEMVER} docker push ${PUSHIMAGE}:${SEMVER}
fi fi
done done
''' '''
@@ -750,12 +807,6 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[ [
$class: 'UsernamePasswordMultiBinding', $class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot', credentialsId: 'Quay.io-Robot',
@@ -763,15 +814,15 @@ pipeline {
passwordVariable: 'QUAYPASS' passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry_backoff(5,5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
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 [ "${CI}" == "false" ]; then if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} 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}
fi fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
@@ -795,35 +846,13 @@ pipeline {
docker push ${MANIFESTIMAGE}:amd64-${SEMVER} docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER} docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi fi
docker manifest push --purge ${MANIFESTIMAGE}:develop || : done
docker manifest create ${MANIFESTIMAGE}:develop ${MANIFESTIMAGE}:amd64-develop ${MANIFESTIMAGE}:arm64v8-develop for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker manifest annotate ${MANIFESTIMAGE}:develop ${MANIFESTIMAGE}:arm64v8-develop --os linux --arch arm64 --variant v8 docker buildx imagetools create -t ${MANIFESTIMAGE}:develop ${MANIFESTIMAGE}:amd64-develop ${MANIFESTIMAGE}:arm64v8-develop
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || : docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker manifest create ${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 manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
if [ -n "${SEMVER}" ]; then if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || : docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
fi
token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-develop")
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-develop || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-develop ${MANIFESTIMAGE}:amd64-develop
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-develop
fi
docker manifest push --purge ${MANIFESTIMAGE}:develop
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
fi fi
done done
''' '''
@@ -848,14 +877,14 @@ pipeline {
"object": "'${COMMIT_SHA}'",\ "object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to develop",\ "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to develop",\
"type": "commit",\ "type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' "tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag" echo "Pushing New release for Tag"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
echo '{"tag_name":"'${META_TAG}'",\ echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "develop",\ "target_commitish": "develop",\
"name": "'${META_TAG}'",\ "name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start "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": true}' >> releasebody.json printf '","draft": false,"prerelease": true}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done 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''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
@@ -980,18 +1009,53 @@ EOF
###################### */ ###################### */
post { post {
always { 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()
if (env.EXIT_STATUS == "ABORTED"){ if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"' sh 'echo "build aborted"'
} }else{
else if (currentBuild.currentResult == "SUCCESS"){ if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\ if (env.GITHUBIMAGE =~ /lspipepr/){
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\ env.JOB_WEBHOOK_STATUS='Success'
"username": "Jenkins"}' ${BUILDS_DISCORD} ''' env.JOB_WEBHOOK_COLOUR=3957028
} env.JOB_WEBHOOK_FOOTER='PR Build'
else { }else if (env.GITHUBIMAGE =~ /lsiodev/){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\ env.JOB_WEBHOOK_STATUS='Success'
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\ env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=1681177
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}else{
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=12669523
env.JOB_WEBHOOK_FOOTER='Dev Build'
}else{
env.JOB_WEBHOOK_STATUS='Failure'
env.JOB_WEBHOOK_COLOUR=16711680
env.JOB_WEBHOOK_FOOTER='Live Build'
}
}
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"'color'": '${JOB_WEBHOOK_COLOUR}',\
"footer": {"text" : "'"${JOB_WEBHOOK_FOOTER}"'"},\
"timestamp": "'${JOB_DATE}'",\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** '${JOB_WEBHOOK_STATUS}'\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} ''' "username": "Jenkins"}' ${BUILDS_DISCORD} '''
} }
} }
@@ -1009,3 +1073,20 @@ EOF
} }
} }
} }
def retry_backoff(int max_attempts, int power_base, Closure c) {
int n = 0
while (n < max_attempts) {
try {
c()
return
} catch (err) {
if ((n + 1) >= max_attempts) {
throw err
}
sleep(power_base ** n)
n++
}
}
return
}
+12 -8
View File
@@ -28,7 +28,7 @@ Find us at:
# [linuxserver/nextcloud](https://github.com/linuxserver/docker-nextcloud) # [linuxserver/nextcloud](https://github.com/linuxserver/docker-nextcloud)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fnextcloud?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fnextcloud) [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fnextcloud?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-nextcloud) [![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-nextcloud)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-nextcloud/releases) [![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-nextcloud/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-nextcloud/packages) [![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-nextcloud/packages)
@@ -37,7 +37,7 @@ Find us at:
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/nextcloud) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/nextcloud)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/nextcloud) [![Docker Stars](https://img.shields.io/docker/stars/linuxserver/nextcloud.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/nextcloud)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-nextcloud%2Fjob%2Fdevelop%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/) [![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-nextcloud%2Fjob%2Fdevelop%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/develop/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fnextcloud%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/nextcloud/latest/index.html) [![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fnextcloud%2Fdevelop%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/nextcloud/develop/index.html)
[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are. [Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are.
@@ -97,6 +97,7 @@ If you are [using custom app directories](https://docs.nextcloud.com/server/late
Afterwards, you can set `"path" => OC::$SERVERROOT . "/your_custom_apps_folder",` in your `config.php` file, per the [official documentation](https://docs.nextcloud.com/server/latest/admin_manual/apps_management.html#using-custom-app-directories). Afterwards, you can set `"path" => OC::$SERVERROOT . "/your_custom_apps_folder",` in your `config.php` file, per the [official documentation](https://docs.nextcloud.com/server/latest/admin_manual/apps_management.html#using-custom-app-directories).
### Strict reverse proxies ### Strict reverse proxies
This image uses a self-signed certificate by default. This naturally means the scheme is `https`. This image uses a self-signed certificate by default. This naturally means the scheme is `https`.
@@ -119,7 +120,7 @@ services:
- PGID=1000 - PGID=1000
- TZ=Etc/UTC - TZ=Etc/UTC
volumes: volumes:
- /path/to/appdata:/config - /path/to/nextcloud/config:/config
- /path/to/data:/data - /path/to/data:/data
ports: ports:
- 443:443 - 443:443
@@ -135,7 +136,7 @@ docker run -d \
-e PGID=1000 \ -e PGID=1000 \
-e TZ=Etc/UTC \ -e TZ=Etc/UTC \
-p 443:443 \ -p 443:443 \
-v /path/to/appdata:/config \ -v /path/to/nextcloud/config:/config \
-v /path/to/data:/data \ -v /path/to/data:/data \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/nextcloud:develop lscr.io/linuxserver/nextcloud:develop
@@ -151,7 +152,7 @@ Containers are configured using parameters passed at runtime (such as those abov
| `-e PUID=1000` | for UserID - see below for explanation | | `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation | | `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). | | `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-v /config` | Nextcloud configs. | | `-v /config` | Persistent config files |
| `-v /data` | Your personal data. | | `-v /data` | Your personal data. |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@@ -290,7 +291,8 @@ Below are the instructions for updating containers:
### Image Update Notifications - Diun (Docker Image Update Notifier) ### Image Update Notifications - Diun (Docker Image Update Notifier)
**tip**: We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported. >[!TIP]
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally ## Building locally
@@ -305,16 +307,18 @@ docker build \
-t lscr.io/linuxserver/nextcloud:develop . -t lscr.io/linuxserver/nextcloud:develop .
``` ```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static` The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash ```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
``` ```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions ## Versions
* **24.06.24:** - Rebase to Alpine 3.20. Existing users should update their nginx confs to avoid http2 deprecation warnings.
* **06.03.24:** - Rebase to Alpine 3.19 with php 8.3.
* **02.01.24:** - Existing users should update: site-confs/default.conf - Cleanup default site conf. * **02.01.24:** - Existing users should update: site-confs/default.conf - Cleanup default site conf.
* **22.12.23:** - Site default conf updating to include mime.types for js and mjs and update location to include more file types. * **22.12.23:** - Site default conf updating to include mime.types for js and mjs and update location to include more file types.
* **28.10.23:** - Disable web upgrades using occ during init. * **28.10.23:** - Disable web upgrades using occ during init.
+2 -3
View File
@@ -7,7 +7,6 @@ custom_version_command: "curl -sX GET https://api.github.com/repos/nextcloud/ser
release_type: prerelease release_type: prerelease
release_tag: develop release_tag: develop
ls_branch: develop ls_branch: develop
build_armhf: false
repo_vars: repo_vars:
- BUILD_VERSION_ARG = 'NEXTCLOUD_RELEASE' - BUILD_VERSION_ARG = 'NEXTCLOUD_RELEASE'
- LS_USER = 'linuxserver' - LS_USER = 'linuxserver'
@@ -23,6 +22,6 @@ repo_vars:
- CI_PORT='443' - CI_PORT='443'
- CI_SSL='true' - CI_SSL='true'
- CI_DELAY='120' - CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific' - CI_DOCKERENV=''
- CI_AUTH='user:password' - CI_AUTH=''
- CI_WEBPATH='' - CI_WEBPATH=''
+403 -385
View File
@@ -1,385 +1,403 @@
NAME VERSION TYPE NAME VERSION TYPE
@nextcloud/text 28.0.0-dev.1 npm Process Wrapper 1.0.0.0 dotnet (+1 duplicate)
Process Wrapper 0.0.0.0 dotnet activity 3.0.0 npm
activity 2.20.0 npm alpine-baselayout 3.6.5-r0 apk
alpine-baselayout 3.4.3-r1 apk alpine-baselayout-data 3.6.5-r0 apk
alpine-baselayout-data 3.4.3-r1 apk alpine-keys 2.4-r1 apk
alpine-keys 2.4-r1 apk alpine-release 3.20.3-r0 apk
alpine-release 3.18.5-r0 apk alsa-lib 1.2.11-r0 apk
alsa-lib 1.2.9-r1 apk amphp/amp v2.6.4 php-composer
amphp/amp v2.6.2 php-composer amphp/byte-stream v1.8.1 php-composer
amphp/byte-stream v1.8.1 php-composer amphp/parallel v1.4.3 php-composer
amphp/parallel v1.4.3 php-composer amphp/parser v1.1.0 php-composer
amphp/parser v1.1.0 php-composer amphp/process v1.1.4 php-composer
amphp/process v1.1.4 php-composer amphp/serialization v1.0.0 php-composer
amphp/serialization v1.0.0 php-composer amphp/sync v1.4.2 php-composer
amphp/sync v1.4.2 php-composer aom-libs 3.9.1-r0 apk
aom-libs 3.6.1-r0 apk apache2-utils 2.4.62-r0 apk
apache2-utils 2.4.58-r0 apk apk-tools 2.14.4-r0 apk
apk-tools 2.14.0-r2 apk app_api 1.0.0 npm
apr 1.7.4-r0 apk apr 1.7.5-r0 apk
apr-util 1.6.3-r1 apk apr-util 1.6.3-r1 apk
argon2-libs 20190702-r4 apk argon2-libs 20190702-r5 apk
avahi-libs 0.8-r13 apk aws/aws-crt-php v1.2.5 php-composer
aws/aws-crt-php v1.0.2 php-composer aws/aws-sdk-php 3.311.2 php-composer
aws/aws-sdk-php 3.240.8 php-composer bamarni/composer-bin-plugin 1.8.2 php-composer
bantu/ini-get-wrapper v1.0.1 php-composer bantu/ini-get-wrapper v1.0.1 php-composer
bash 5.2.15-r5 apk bash 5.2.26-r0 apk
beberlei/assert v3.3.1 php-composer brick/math 0.12.1 php-composer
brick/math 0.9.2 php-composer brotli-libs 1.1.0-r2 apk
brotli-libs 1.0.9-r14 apk bruteforcesettings 3.0.0 npm
bruteforcesettings 2.8.0 npm busybox 1.36.1-r29 apk
busybox 1.36.1-r5 apk busybox-binsh 1.36.1-r29 apk
busybox-binsh 1.36.1-r5 apk c-ares 1.33.1-r0 apk
c-client 2007f-r15 apk c-client 2007f-r15 apk
ca-certificates 20230506-r0 apk ca-certificates 20240705-r0 apk
ca-certificates-bundle 20230506-r0 apk ca-certificates-bundle 20240705-r0 apk
cairo 1.17.8-r1 apk catatonit 0.2.0-r0 apk
cairo-gobject 1.17.8-r1 apk christian-riesen/base32 1.6.0 php-composer
christian-riesen/base32 1.6.0 php-composer cjson 1.7.18-r0 apk
cjson 1.7.17-r0 apk composer 2.8.1 binary
composer 2.6.6 binary coreutils 9.5-r1 apk
coreutils 9.3-r1 apk coreutils-env 9.5-r1 apk
cups-libs 2.4.7-r0 apk coreutils-fmt 9.5-r1 apk
curl 8.5.0-r0 apk coreutils-sha512sum 9.5-r1 apk
cweagans/composer-patches 1.7.3 php-composer curl 8.9.1-r2 apk
darsyn/ip 4.1.0 php-composer cweagans/composer-patches 1.7.3 php-composer
dbus-libs 1.14.8-r0 apk dbus-libs 1.14.10-r1 apk
deepdiver/zipstreamer 2.0.0 php-composer deepdiver/zipstreamer v2.0.3 php-composer
deepdiver1975/tarstreamer v2.1.0 php-composer deepdiver1975/tarstreamer v2.1.0 php-composer
doctrine/cache 2.2.0 php-composer doctrine/cache 2.2.0 php-composer
doctrine/dbal 3.7.0 php-composer doctrine/dbal 3.9.1 php-composer
doctrine/deprecations 1.1.2 php-composer doctrine/deprecations 1.1.3 php-composer
doctrine/event-manager 1.2.0 php-composer doctrine/event-manager 2.0.1 php-composer
doctrine/lexer 1.2.3 php-composer doctrine/lexer 3.0.1 php-composer
egulias/email-validator 3.2.5 php-composer egulias/email-validator 4.0.2 php-composer
ffmpeg 6.0.1-r0 apk ffmpeg 6.1.1-r8 apk
ffmpeg-libavcodec 6.0.1-r0 apk ffmpeg-libavcodec 6.1.1-r8 apk
ffmpeg-libavdevice 6.0.1-r0 apk ffmpeg-libavdevice 6.1.1-r8 apk
ffmpeg-libavfilter 6.0.1-r0 apk ffmpeg-libavfilter 6.1.1-r8 apk
ffmpeg-libavformat 6.0.1-r0 apk ffmpeg-libavformat 6.1.1-r8 apk
ffmpeg-libavutil 6.0.1-r0 apk ffmpeg-libavutil 6.1.1-r8 apk
ffmpeg-libpostproc 6.0.1-r0 apk ffmpeg-libpostproc 6.1.1-r8 apk
ffmpeg-libswresample 6.0.1-r0 apk ffmpeg-libswresample 6.1.1-r8 apk
ffmpeg-libswscale 6.0.1-r0 apk ffmpeg-libswscale 6.1.1-r8 apk
fgrosse/phpasn1 v2.3.0 php-composer fftw-double-libs 3.3.10-r5 apk
files_pdfviewer 2.9.0 npm files_downloadlimit 3.0.0 npm
firstrunwizard 2.17.0 npm files_pdfviewer 3.0.0 npm
flac-libs 1.4.3-r0 apk findutils 4.9.0-r5 apk
fontconfig 2.14.2-r3 apk firstrunwizard 3.0.0 npm
freetype 2.13.0-r5 apk fontconfig 2.15.0-r1 apk
fribidi 1.0.13-r0 apk freetype 2.13.2-r0 apk
fusonic/linq v1.1.0 php-composer fribidi 1.0.15-r0 apk
fusonic/opengraph v2.2.0 php-composer fusonic/opengraph v2.3.0 php-composer
gdbm 1.23-r1 apk gdbm 1.23-r1 apk
gdk-pixbuf 2.42.10-r5 apk giflib 5.2.2-r0 apk
ghostscript 10.02.0-r0 apk giggsey/libphonenumber-for-php-lite 8.13.45 php-composer
giggsey/libphonenumber-for-php-lite 8.13.12 php-composer git 2.45.2-r0 apk
git 2.40.1-r0 apk git-init-template 2.45.2-r0 apk
glib 2.76.4-r0 apk glib 2.80.5-r0 apk
glslang-libs 1.3.243.0-r1 apk glslang-libs 1.3.261.1-r0 apk
gmp 6.2.1-r3 apk gmp 6.3.0-r1 apk
gnu-libiconv 1.17-r1 apk gnu-libiconv 1.17-r2 apk
gnu-libiconv-libs 1.17-r1 apk gnu-libiconv-libs 1.17-r2 apk
gnutls 3.8.3-r0 apk gnutls 3.8.5-r0 apk
graphite2 1.3.14-r5 apk graphite2 1.3.14-r6 apk
guzzlehttp/guzzle 7.5.0 php-composer guzzlehttp/guzzle 7.8.2 php-composer
guzzlehttp/promises 1.5.2 php-composer guzzlehttp/promises 2.0.4 php-composer
guzzlehttp/psr7 2.4.5 php-composer guzzlehttp/psr7 2.7.0 php-composer
guzzlehttp/uri-template v0.2.0 php-composer guzzlehttp/uri-template v1.0.3 php-composer
harfbuzz 7.3.0-r0 apk harfbuzz 8.5.0-r0 apk
hexogen/kdtree v0.2.5 php-composer hexogen/kdtree v0.2.5 php-composer
hwdata-pci 0.370-r0 apk hwdata-pci 0.382-r0 apk
icewind/searchdav v3.1.0 php-composer icewind/searchdav v3.1.0 php-composer
icewind/smb v3.5.4 php-composer icewind/smb v3.5.4 php-composer
icewind/streams v0.7.7 php-composer icewind/streams v0.7.7 php-composer (+1 duplicate)
icu-data-en 73.2-r2 apk icu-data-en 74.2-r0 apk
icu-libs 73.2-r2 apk icu-libs 74.2-r0 apk
imagemagick 7.1.1.13-r1 apk imagemagick 7.1.1.32-r2 apk
imagemagick-libs 7.1.1.13-r1 apk imagemagick-jpeg 7.1.1.32-r2 apk
jansson 2.14-r3 apk imagemagick-jxl 7.1.1.32-r2 apk
jbig2dec 0.19-r3 apk imagemagick-libs 7.1.1.32-r2 apk
jq 1.6-r4 apk imagemagick-webp 7.1.1.32-r2 apk
justinrainbow/json-schema 5.2.10 php-composer imath 3.1.12-r0 apk
lame-libs 3.100-r5 apk jansson 2.14-r4 apk
laravel/serializable-closure v1.2.2 php-composer jq 1.7.1-r0 apk
lcms2 2.15-r2 apk justinrainbow/json-schema v5.2.13 php-composer
ldb 2.7.2-r1 apk kornrunner/blurhash v1.2.2 php-composer
league/flysystem 2.5.0 php-composer lame-libs 3.100-r5 apk
league/mime-type-detection 1.11.0 php-composer laravel/serializable-closure v1.3.5 php-composer
league/uri 6.4.0 php-composer lcms2 2.16-r0 apk
league/uri-interfaces 2.2.0 php-composer lcobucci/clock 3.0.0 php-composer
libacl 2.3.1-r3 apk ldb 2.8.2-r0 apk
libarchive 3.7.2-r0 apk league/flysystem 2.5.0 php-composer
libass 0.17.1-r0 apk league/mime-type-detection 1.11.0 php-composer
libasyncns 0.8-r1 apk libSvtAv1Enc 2.0.0-r1 apk
libattr 2.5.1-r4 apk libacl 2.3.2-r0 apk
libavif 0.11.1-r2 apk libarchive 3.7.7-r0 apk
libblkid 2.38.1-r8 apk libass 0.17.2-r0 apk
libbluray 1.3.4-r0 apk libasyncns 0.8-r3 apk
libbsd 0.11.7-r1 apk libattr 2.5.2-r0 apk
libbz2 1.0.8-r5 apk libauth-samba 4.19.9-r0 apk
libc-utils 0.7.2-r5 apk libavif 1.0.4-r0 apk
libcap2 2.69-r0 apk libblkid 2.40.1-r1 apk
libcrypto3 3.1.4-r4 apk libbluray 1.3.4-r1 apk
libcurl 8.5.0-r0 apk libbsd 0.12.2-r0 apk
libdav1d 1.2.1-r0 apk libbz2 1.0.8-r6 apk
libde265 1.0.15-r0 apk libcap2 2.70-r0 apk
libdrm 2.4.115-r4 apk libcrypto3 3.3.2-r1 apk
libedit 20221030.3.1-r1 apk libcurl 8.9.1-r2 apk
libevent 2.1.12-r6 apk libdav1d 1.4.2-r0 apk
libexpat 2.5.0-r1 apk libdovi 3.3.0-r0 apk
libffi 3.4.4-r2 apk libdrm 2.4.120-r0 apk
libformw 6.4_p20230506-r0 apk libeconf 0.6.3-r0 apk
libgcc 12.2.1_git20220924-r10 apk libedit 20240517.3.1-r0 apk
libgomp 12.2.1_git20220924-r10 apk libevent 2.1.12-r7 apk
libheif 1.16.2-r0 apk libexpat 2.6.3-r0 apk
libhwy 1.0.4-r1 apk libffi 3.4.6-r0 apk
libice 1.1.1-r2 apk libflac 1.4.3-r1 apk
libidn2 2.3.4-r1 apk libformw 6.4_p20240420-r1 apk
libintl 0.21.1-r7 apk libgcc 13.2.1_git20240309-r0 apk
libjpeg-turbo 2.1.5.1-r3 apk libgomp 13.2.1_git20240309-r0 apk
libjxl 0.8.2-r0 apk libhwy 1.0.7-r0 apk
libldap 2.6.5-r0 apk libice 1.1.1-r6 apk
libltdl 2.4.7-r2 apk libidn2 2.3.7-r0 apk
libmd 1.0.4-r2 apk libintl 0.22.5-r0 apk
libmemcached-libs 1.1.4-r1 apk libjpeg-turbo 3.0.3-r0 apk
libmount 2.38.1-r8 apk libjxl 0.10.2-r0 apk
libncursesw 6.4_p20230506-r0 apk libldap 2.6.8-r0 apk
libogg 1.3.5-r4 apk libltdl 2.4.7-r3 apk
libopenmpt 0.7.2-r0 apk libmcrypt 2.5.8-r10 apk
libpanelw 6.4_p20230506-r0 apk libmd 1.1.0-r0 apk
libpciaccess 0.17-r2 apk libmemcached-libs 1.1.4-r1 apk
libplacebo 5.264.1-r1 apk libmount 2.40.1-r1 apk
libpng 1.6.39-r3 apk libncursesw 6.4_p20240420-r1 apk
libpq 15.5-r0 apk libogg 1.3.5-r5 apk
libproc2 4.0.4-r0 apk libopenmpt 0.7.7-r0 apk
libpulse 16.1-r10 apk libpanelw 6.4_p20240420-r1 apk
libraw 0.21.1-r1 apk libpciaccess 0.18.1-r0 apk
librist 0.2.7-r0 apk libplacebo 6.338.2-r1 apk
librsvg 2.56.3-r0 apk libpng 1.6.44-r0 apk
libsasl 2.1.28-r4 apk libpq 16.4-r0 apk
libsm 1.2.4-r1 apk libproc2 4.0.4-r0 apk
libsmbclient 4.18.9-r0 apk libpsl 0.21.5-r1 apk
libsndfile 1.2.0-r2 apk libpulse 17.0-r0 apk
libsodium 1.0.18-r3 apk librist 0.2.10-r1 apk
libsrt 1.5.2-r0 apk libsasl 2.1.28-r6 apk
libssh 0.10.5-r0 apk libsharpyuv 1.3.2-r0 apk
libssl3 3.1.4-r4 apk libsm 1.2.4-r4 apk
libstdc++ 12.2.1_git20220924-r10 apk libsmbclient 4.19.9-r0 apk
libtasn1 4.19.0-r1 apk libsndfile 1.2.2-r0 apk
libtheora 1.1.1-r17 apk libsodium 1.0.19-r0 apk
libunibreak 5.1-r0 apk libsrt 1.5.3-r0 apk
libunistring 1.1-r1 apk libssh 0.10.6-r0 apk
libuuid 2.38.1-r8 apk libssl3 3.3.2-r1 apk
libva 2.18.0-r1 apk libstdc++ 13.2.1_git20240309-r0 apk
libvdpau 1.5-r1 apk libtasn1 4.19.0-r2 apk
libvorbis 1.3.7-r1 apk libtheora 1.1.1-r18 apk
libvpx 1.13.0-r2 apk libunibreak 6.1-r0 apk
libwbclient 4.18.9-r0 apk libunistring 1.2-r0 apk
libwebp 1.3.2-r0 apk libuuid 2.40.1-r1 apk
libx11 1.8.7-r0 apk libva 2.21.0-r0 apk
libxau 1.0.11-r2 apk libvdpau 1.5-r3 apk
libxcb 1.15-r1 apk libvorbis 1.3.7-r2 apk
libxdmcp 1.1.4-r2 apk libvpx 1.14.1-r0 apk
libxext 1.3.5-r2 apk libwbclient 4.19.9-r0 apk
libxfixes 6.0.1-r2 apk libwebp 1.3.2-r0 apk
libxft 2.3.8-r1 apk libwebpdemux 1.3.2-r0 apk
libxml2 2.11.6-r0 apk libwebpmux 1.3.2-r0 apk
libxpm 3.5.16-r1 apk libx11 1.8.9-r1 apk
libxrender 0.9.11-r3 apk libxau 1.0.11-r4 apk
libxt 1.3.0-r2 apk libxcb 1.16.1-r0 apk
libxxhash 0.8.2-r0 apk libxdmcp 1.1.5-r1 apk
libzip 1.9.2-r2 apk libxext 1.3.6-r2 apk
libzmq 4.3.4-r4 apk libxfixes 6.0.1-r4 apk
linux-pam 1.5.2-r10 apk libxml2 2.12.7-r0 apk
lmdb 0.9.31-r0 apk libxpm 3.5.17-r0 apk
logrotate 3.21.0-r1 apk libxt 1.3.0-r5 apk
lz4-libs 1.9.4-r4 apk libxxhash 0.8.2-r2 apk
mbedtls 2.28.5-r0 apk libzip 1.10.1-r0 apk
mexitek/phpcolors v1.0.4 php-composer libzmq 4.3.5-r2 apk
microsoft/azure-storage-blob 1.5.4 php-composer lilv-libs 0.24.24-r1 apk
microsoft/azure-storage-common 1.5.2 php-composer linux-pam 1.6.0-r0 apk
mlocati/ip-lib 1.18.0 php-composer lmdb 0.9.32-r0 apk
mpg123-libs 1.31.3-r1 apk logreader 3.0.0 npm
mtdowling/jmespath.php 2.6.1 php-composer logrotate 3.21.0-r1 apk
musl 1.2.4-r2 apk lz4-libs 1.9.4-r5 apk
musl-utils 1.2.4-r2 apk masterminds/html5 2.9.0 php-composer
nano 7.2-r1 apk mbedtls 3.6.2-r0 apk
ncurses-terminfo-base 6.4_p20230506-r0 apk mexitek/phpcolors v1.0.4 php-composer
netcat-openbsd 1.219-r1 apk microsoft/azure-storage-blob 1.5.4 php-composer
nettle 3.8.1-r2 apk microsoft/azure-storage-common 1.5.2 php-composer
nextcloud 1.0.0 npm mlocati/ip-lib 1.18.0 php-composer
nextcloud/lognormalizer v1.0.0 php-composer mpg123-libs 1.32.8-r0 apk
nghttp2-libs 1.57.0-r0 apk mtdowling/jmespath.php 2.7.0 php-composer
nginx 1.24.0-r7 apk musl 1.2.5-r0 apk
notifications 2.16.0 npm musl-utils 1.2.5-r0 apk
numactl 2.0.16-r4 apk nano 8.0-r0 apk
onevpl-libs 2023.2.1-r0 apk ncurses-terminfo-base 6.4_p20240420-r1 apk
oniguruma 6.9.8-r1 apk netcat-openbsd 1.226-r0 apk
openssl 3.1.4-r4 apk nettle 3.9.1-r0 apk
opus 1.4-r0 apk nextcloud 1.0.0 npm
orc 0.4.34-r0 apk nextcloud/coding-standard v1.2.1 php-composer
p11-kit 0.24.1-r2 apk nextcloud/lognormalizer v1.0.0 php-composer
pango 1.50.14-r1 apk nghttp2-libs 1.62.1-r0 apk
password_policy 1.18.0 npm nginx 1.26.2-r0 apk
pcre 8.45-r3 apk notifications 3.0.0 npm
pcre2 10.42-r1 apk numactl 2.0.18-r0 apk
pear/archive_tar 1.4.14 php-composer onevpl-libs 2023.3.1-r2 apk
pear/console_getopt v1.4.3 php-composer oniguruma 6.9.9-r0 apk
pear/pear-core-minimal v1.10.10 php-composer openexr-libiex 3.1.13-r1 apk
pear/pear_exception v1.0.2 php-composer openexr-libilmthread 3.1.13-r1 apk
photos 2.4.0 npm openexr-libopenexr 3.1.13-r1 apk
php-http/guzzle7-adapter 1.0.0 php-composer openssl 3.3.2-r1 apk
php-http/httplug 2.2.0 php-composer opus 1.5.2-r0 apk
php-http/promise 1.1.0 php-composer orc 0.4.40-r0 apk
php-opencloud/openstack v3.2.1 php-composer p11-kit 0.25.3-r0 apk
php82 8.2.13-r0 apk paragonie/constant_time_encoding v2.7.0 php-composer
php82-bcmath 8.2.13-r0 apk password_policy 2.0.0 npm
php82-bz2 8.2.13-r0 apk pcre 8.45-r3 apk
php82-common 8.2.13-r0 apk pcre2 10.43-r0 apk
php82-ctype 8.2.13-r0 apk pear/archive_tar 1.5.0 php-composer
php82-curl 8.2.13-r0 apk pear/console_getopt v1.4.3 php-composer
php82-dom 8.2.13-r0 apk pear/pear-core-minimal v1.10.15 php-composer
php82-exif 8.2.13-r0 apk pear/pear_exception v1.0.2 php-composer
php82-fileinfo 8.2.13-r0 apk photos 3.0.0 npm
php82-fpm 8.2.13-r0 apk php-cs-fixer/shim v3.61.1 php-composer
php82-ftp 8.2.13-r0 apk php-http/guzzle7-adapter 1.0.0 php-composer
php82-gd 8.2.13-r0 apk php-http/httplug 2.2.0 php-composer
php82-gmp 8.2.13-r0 apk php-http/promise 1.1.0 php-composer
php82-iconv 8.2.13-r0 apk php-opencloud/openstack v3.10.0 php-composer
php82-imap 8.2.13-r0 apk php83 8.3.13-r0 apk
php82-intl 8.2.13-r0 apk php83-bcmath 8.3.13-r0 apk
php82-ldap 8.2.13-r0 apk php83-bz2 8.3.13-r0 apk
php82-mbstring 8.2.13-r0 apk php83-common 8.3.13-r0 apk
php82-mysqlnd 8.2.13-r0 apk php83-ctype 8.3.13-r0 apk
php82-opcache 8.2.13-r0 apk php83-curl 8.3.13-r0 apk
php82-openssl 8.2.13-r0 apk php83-dom 8.3.13-r0 apk
php82-pcntl 8.2.13-r0 apk php83-exif 8.3.13-r0 apk
php82-pdo 8.2.13-r0 apk php83-fileinfo 8.3.13-r0 apk
php82-pdo_mysql 8.2.13-r0 apk php83-fpm 8.3.13-r0 apk
php82-pdo_pgsql 8.2.13-r0 apk php83-ftp 8.3.13-r0 apk
php82-pdo_sqlite 8.2.13-r0 apk php83-gd 8.3.13-r0 apk
php82-pecl-apcu 5.1.22-r0 apk php83-gmp 8.3.13-r0 apk
php82-pecl-igbinary 3.2.14-r0 apk php83-iconv 8.3.13-r0 apk
php82-pecl-imagick 3.7.0-r5 apk php83-imap 8.3.13-r0 apk
php82-pecl-memcached 3.2.0-r1 apk php83-intl 8.3.13-r0 apk
php82-pecl-msgpack 2.2.0-r0 apk php83-ldap 8.3.13-r0 apk
php82-pecl-redis 6.0.2-r0 apk php83-mbstring 8.3.13-r0 apk
php82-pecl-smbclient 1.1.1-r0 apk php83-mysqlnd 8.3.13-r0 apk
php82-pgsql 8.2.13-r0 apk php83-opcache 8.3.13-r0 apk
php82-phar 8.2.13-r0 apk php83-openssl 8.3.13-r0 apk
php82-posix 8.2.13-r0 apk php83-pcntl 8.3.13-r0 apk
php82-session 8.2.13-r0 apk php83-pdo 8.3.13-r0 apk
php82-simplexml 8.2.13-r0 apk php83-pdo_mysql 8.3.13-r0 apk
php82-sockets 8.2.13-r0 apk php83-pdo_pgsql 8.3.13-r0 apk
php82-sodium 8.2.13-r0 apk php83-pdo_sqlite 8.3.13-r0 apk
php82-sqlite3 8.2.13-r0 apk php83-pecl-apcu 5.1.23-r0 apk
php82-sysvsem 8.2.13-r0 apk php83-pecl-igbinary 3.2.15-r0 apk
php82-xml 8.2.13-r0 apk php83-pecl-imagick 3.7.0-r0 apk
php82-xmlreader 8.2.13-r0 apk php83-pecl-mcrypt 1.0.7-r0 apk
php82-xmlwriter 8.2.13-r0 apk php83-pecl-memcached 3.3.0-r0 apk
php82-zip 8.2.13-r0 apk php83-pecl-msgpack 2.2.0-r2 apk
phpseclib/phpseclib 2.0.45 php-composer php83-pecl-redis 6.1.0-r0 apk
pimple/pimple v3.5.0 php-composer php83-pecl-smbclient 1.1.1-r0 apk
pixman 0.42.2-r1 apk php83-pgsql 8.3.13-r0 apk
pkgconf 1.9.5-r0 apk php83-phar 8.3.13-r0 apk
popt 1.19-r2 apk php83-posix 8.3.13-r0 apk
privacy 1.12.0 npm php83-session 8.3.13-r0 apk
procps-ng 4.0.4-r0 apk php83-simplexml 8.3.13-r0 apk
psr/cache 3.0.0 php-composer php83-sockets 8.3.13-r0 apk
psr/clock 1.0.0 php-composer php83-sodium 8.3.13-r0 apk
psr/container 2.0.2 php-composer php83-sqlite3 8.3.13-r0 apk
psr/event-dispatcher 1.0.0 php-composer php83-sysvsem 8.3.13-r0 apk
psr/http-client 1.0.1 php-composer php83-xml 8.3.13-r0 apk
psr/http-factory 1.0.1 php-composer php83-xmlreader 8.3.13-r0 apk
psr/http-message 1.0.1 php-composer php83-xmlwriter 8.3.13-r0 apk
psr/log 1.1.4 php-composer php83-zip 8.3.13-r0 apk
punic/punic 3.8.1 php-composer phpseclib/phpseclib 2.0.47 php-composer
ralouphie/getallheaders 3.0.3 php-composer pimple/pimple v3.5.0 php-composer
ramsey/collection 1.1.3 php-composer popt 1.19-r3 apk
ramsey/uuid 4.1.1 php-composer privacy 2.0.0 npm
readline 8.2.1-r1 apk procps-ng 4.0.4-r0 apk
recommendations 2.0.0 npm psr/cache 3.0.0 php-composer
related_resources 1.3.0 npm psr/clock 1.0.0 php-composer
rsync 3.2.7-r4 apk psr/container 2.0.2 php-composer
rubix/ml dev-chore/bump-flysystem-v2.1.1 php-composer psr/event-dispatcher 1.0.0 php-composer
rubix/tensor 2.2.3 php-composer psr/http-client 1.0.3 php-composer
rullzer/easytotp v0.1.4 php-composer psr/http-factory 1.1.0 php-composer
sabre/dav 4.5.0 php-composer psr/http-message 1.1 php-composer
sabre/event 5.1.4 php-composer psr/log 1.1.4 php-composer
sabre/http 5.1.10 php-composer psr/log 2.0.0 php-composer
sabre/uri 2.3.3 php-composer punic/punic 3.8.1 php-composer
sabre/vobject 4.5.4 php-composer ralouphie/getallheaders 3.0.3 php-composer
sabre/xml 2.2.6 php-composer rav1e-libs 0.7.1-r0 apk
samba-client 4.18.9-r0 apk readline 8.2.10-r0 apk
samba-client-libs 4.18.9-r0 apk recommendations 3.0.0 npm
samba-common 4.18.9-r0 apk related_resources 1.5.0 npm
samba-libs 4.18.9-r0 apk rsync 3.3.0-r0 apk
samba-util-libs 4.18.9-r0 apk rubix/ml dev-chore/bump-flysystem-v2.1.1 php-composer
scanelf 1.3.7-r1 apk rubix/tensor 2.2.3 php-composer
scssphp/scssphp v1.11.0 php-composer rullzer/easytotp v0.1.4 php-composer
sdl2 2.26.5-r0 apk sabre/dav 4.6.0 php-composer
shaderc 2023.3-r1 apk sabre/event 5.1.4 php-composer
shadow 4.13-r4 apk sabre/http 5.1.10 php-composer
shared-mime-info 2.2-r5 apk sabre/uri 2.3.3 php-composer
skalibs 2.13.1.1-r1 apk sabre/vobject 4.5.4 php-composer
soxr 0.1.3-r5 apk sabre/xml 2.2.7 php-composer
speexdsp 1.2.1-r1 apk samba-client 4.19.9-r0 apk
spirv-tools 1.3.243.0-r1 apk samba-client-libs 4.19.9-r0 apk
spomky-labs/base64url v2.0.4 php-composer samba-common 4.19.9-r0 apk
spomky-labs/cbor-php v2.0.1 php-composer samba-libs 4.19.9-r0 apk
sqlite-libs 3.41.2-r3 apk samba-util-libs 4.19.9-r0 apk
ssl_client 1.36.1-r5 apk scanelf 1.3.7-r2 apk
stecman/symfony-console-completion 0.11.0 php-composer scssphp/scssphp v1.12.1 php-composer
sudo 1.9.13_p3-r2 apk sdl2 2.28.5-r1 apk
suspicious_login 6.0.0 npm serd-libs 0.32.2-r0 apk
svt-av1-libs 1.6.0-r0 apk shaderc 2024.0-r0 apk
symfony/console v5.4.24 php-composer shadow 4.15.1-r0 apk
symfony/css-selector v5.4.11 php-composer skalibs 2.14.1.1-r0 apk
symfony/deprecation-contracts v3.0.2 php-composer sord-libs 0.16.16-r0 apk
symfony/dom-crawler v5.4.11 php-composer soxr 0.1.3-r7 apk
symfony/event-dispatcher v5.4.26 php-composer speexdsp 1.2.1-r2 apk
symfony/event-dispatcher-contracts v3.0.2 php-composer spirv-tools 1.3.261.1-r0 apk
symfony/http-foundation v5.4.25 php-composer spomky-labs/cbor-php 3.1.0 php-composer
symfony/mailer v5.4.22 php-composer spomky-labs/pki-framework 1.2.1 php-composer
symfony/mime v5.4.19 php-composer sqlite-libs 3.45.3-r1 apk
symfony/polyfill-ctype v1.23.0 php-composer sratom 0.6.16-r0 apk
symfony/polyfill-intl-grapheme v1.23.1 php-composer ssl_client 1.36.1-r29 apk
symfony/polyfill-intl-idn v1.27.0 php-composer stecman/symfony-console-completion v0.13.0 php-composer
symfony/polyfill-intl-normalizer v1.27.0 php-composer sudo 1.9.15_p5-r0 apk
symfony/polyfill-mbstring v1.27.0 php-composer support 2.0.0 npm
symfony/polyfill-php72 v1.27.0 php-composer suspicious_login 8.0.0 npm
symfony/polyfill-php73 v1.23.0 php-composer symfony/console v6.4.12 php-composer
symfony/polyfill-php73 v1.26.0 php-composer symfony/css-selector v6.4.3 php-composer
symfony/polyfill-php80 v1.27.0 php-composer symfony/deprecation-contracts v3.5.0 php-composer
symfony/process v5.4.24 php-composer symfony/dom-crawler v6.4.4 php-composer
symfony/routing v5.4.25 php-composer symfony/event-dispatcher v6.4.8 php-composer
symfony/service-contracts v3.0.2 php-composer symfony/event-dispatcher-contracts v3.0.2 php-composer
symfony/string v6.0.19 php-composer symfony/http-foundation v6.4.12 php-composer
symfony/translation v5.4.24 php-composer symfony/mailer v6.4.12 php-composer
symfony/translation-contracts v2.4.0 php-composer symfony/mime v6.4.12 php-composer
talloc 2.4.0-r1 apk symfony/polyfill-ctype v1.29.0 php-composer
tdb-libs 1.4.8-r1 apk symfony/polyfill-intl-grapheme v1.31.0 php-composer
tevent 0.14.1-r1 apk symfony/polyfill-intl-idn v1.31.0 php-composer
thecodingmachine/safe v1.3.3 php-composer symfony/polyfill-intl-normalizer v1.31.0 php-composer
tiff 4.5.1-r0 apk symfony/polyfill-mbstring v1.27.0 php-composer
twofactor_totp 10.0.0-beta2 npm symfony/polyfill-mbstring v1.31.0 php-composer
tzdata 2023d-r0 apk symfony/polyfill-php73 v1.26.0 php-composer
utmps-libs 0.1.2.1-r1 apk symfony/polyfill-php80 v1.27.0 php-composer
v4l-utils-libs 1.24.1-r0 apk symfony/polyfill-php80 v1.29.0 php-composer
vidstab 1.1.1-r0 apk symfony/polyfill-php83 v1.31.0 php-composer
viewer 2.2.0 npm symfony/polyfill-uuid v1.31.0 php-composer
vulkan-loader 1.3.243.0-r1 apk symfony/process v6.4.12 php-composer
wapmorgan/mp3info 0.1.0 php-composer symfony/routing v6.4.12 php-composer
wayland-libs-client 1.22.0-r2 apk symfony/service-contracts v3.0.2 php-composer
web-auth/cose-lib v3.3.9 php-composer symfony/string v6.0.19 php-composer
web-auth/metadata-service v3.3.9 php-composer symfony/translation v6.4.12 php-composer
web-auth/webauthn-lib v3.3.9 php-composer symfony/translation-contracts v3.4.2 php-composer
x264-libs 0.164_git20220602-r1 apk symfony/uid v6.4.12 php-composer
x265-libs 3.5-r4 apk talloc 2.4.2-r1 apk
xvidcore 1.3.7-r1 apk tdb-libs 1.4.9-r1 apk
xz-libs 5.4.3-r0 apk tevent 0.16.1-r0 apk
zimg 3.0.5-r0 apk text 4.0.0 npm
zlib 1.2.13-r1 apk twofactor_nextcloud_notification 4.0.0 npm
zstd-libs 1.5.5-r4 apk twofactor_totp 12.0.0-dev npm
tzdata 2024b-r0 apk
utmps-libs 0.1.2.2-r1 apk
v4l-utils-libs 1.24.1-r1 apk
vidstab 1.1.1-r0 apk
viewer 3.0.0 npm
vulkan-loader 1.3.261.1-r0 apk
wapmorgan/mp3info 0.1.0 php-composer
wayland-libs-client 1.22.0-r4 apk
web-auth/cose-lib 4.4.0 php-composer
web-auth/webauthn-lib 4.9.1 php-composer
x264-libs 0.164_git20231001-r0 apk
x265-libs 3.6-r0 apk
xvidcore 1.3.7-r2 apk
xz-libs 5.6.2-r0 apk
zimg 3.0.5-r2 apk
zix-libs 0.4.2-r0 apk
zlib 1.3.1-r1 apk
zstd-libs 1.5.6-r0 apk
+3 -16
View File
@@ -9,7 +9,6 @@ project_blurb: |
Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_blurb_optional_extras_enabled: false
# supported architectures # supported architectures
available_architectures: available_architectures:
@@ -25,27 +24,13 @@ development_versions_items:
# container parameters # container parameters
common_param_env_vars_enabled: true common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_net: false
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/appdata", desc: "Nextcloud configs." } - { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files" }
- { vol_path: "/data", vol_host_path: "/path/to/data", desc: "Your personal data." } - { vol_path: "/data", vol_host_path: "/path/to/data", desc: "Your personal data." }
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "443", internal_port: "443", port_desc: "WebUI" } - { external_port: "443", internal_port: "443", port_desc: "WebUI" }
param_device_map: false
cap_add_param: false
# optional container parameters
opt_param_usage_include_env: false
opt_param_usage_include_vols: false
opt_param_usage_include_ports: false
opt_param_device_map: false
opt_cap_add_param: false
optional_block_1: false
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
@@ -79,6 +64,8 @@ app_setup_block: |
# changelog # changelog
changelogs: changelogs:
- { date: "24.06.24:", desc: "Rebase to Alpine 3.20. Existing users should update their nginx confs to avoid http2 deprecation warnings."}
- { date: "06.03.24:", desc: "Rebase to Alpine 3.19 with php 8.3."}
- { date: "02.01.24:", desc: "Existing users should update: site-confs/default.conf - Cleanup default site conf." } - { date: "02.01.24:", desc: "Existing users should update: site-confs/default.conf - Cleanup default site conf." }
- { date: "22.12.23:", desc: "Site default conf updating to include mime.types for js and mjs and update location to include more file types." } - { date: "22.12.23:", desc: "Site default conf updating to include mime.types for js and mjs and update location to include more file types." }
- { date: "28.10.23:", desc: "Disable web upgrades using occ during init." } - { date: "28.10.23:", desc: "Disable web upgrades using occ during init." }
@@ -1,4 +1,4 @@
## Version 2024/01/03 - Changelog: https://github.com/linuxserver/docker-nextcloud/commits/master/root/defaults/nginx/site-confs/default.conf.sample ## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-nextcloud/commits/master/root/defaults/nginx/site-confs/default.conf.sample
# Set the `immutable` cache control options only for assets with a cache busting `v` argument # Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable { map $arg_v $asset_immutable {
@@ -9,9 +9,8 @@ map $arg_v $asset_immutable {
server { server {
listen 80 default_server; listen 80 default_server;
listen [::]:80 default_server; listen [::]:80 default_server;
listen 443 ssl default_server;
listen 443 ssl http2 default_server; listen [::]:443 ssl default_server;
listen [::]:443 ssl http2 default_server;
server_name _; server_name _;