Compare commits

..

145 Commits

Author SHA1 Message Date
LinuxServer-CI cc54304aca Bot Updating Package Versions 2026-06-02 11:51:19 +00:00
LinuxServer-CI b75b58c26d Bot Updating Package Versions 2026-05-28 18:30:25 +00:00
LinuxServer-CI 9a51ddf4d0 Bot Updating Package Versions 2026-05-26 14:22:44 +00:00
LinuxServer-CI 087f1397ed Bot Updating Package Versions 2026-05-15 18:42:16 +00:00
LinuxServer-CI 6c1a89e936 Bot Updating Package Versions 2026-05-12 13:40:59 +00:00
LinuxServer-CI 5265411720 Bot Updating Templated Files 2026-05-12 13:28:19 +00:00
LinuxServer-CI b0b8a2cded Bot Updating Package Versions 2026-05-05 12:57:12 +00:00
LinuxServer-CI ee6658bdc0 Bot Updating Package Versions 2026-04-30 17:53:38 +00:00
LinuxServer-CI 0119f24aab Bot Updating Package Versions 2026-04-28 13:25:01 +00:00
LinuxServer-CI 1795161c0f Bot Updating Package Versions 2026-04-21 12:50:28 +00:00
LinuxServer-CI 05c55cdcb8 Bot Updating Package Versions 2026-04-14 12:49:24 +00:00
LinuxServer-CI c6eb2a710b Bot Updating Templated Files 2026-04-07 12:43:48 +00:00
LinuxServer-CI f712209adf Bot Updating Package Versions 2026-04-02 09:39:21 +00:00
LinuxServer-CI cd6d7be44c Bot Updating Package Versions 2026-03-26 17:38:11 +00:00
LinuxServer-CI 11b4d51abc Bot Updating Package Versions 2026-03-17 12:37:51 +00:00
LinuxServer-CI 4b09bd1d22 Bot Updating Package Versions 2026-03-03 12:07:37 +00:00
LinuxServer-CI 2841ac911d Bot Updating Package Versions 2026-02-24 12:11:15 +00:00
LinuxServer-CI 9a54966413 Bot Updating Package Versions 2026-02-18 13:49:07 +00:00
LinuxServer-CI ef78539aa8 Bot Updating Package Versions 2026-02-17 12:09:43 +00:00
LinuxServer-CI dd8a6470e0 Bot Updating Templated Files 2026-02-12 11:13:52 +00:00
LinuxServer-CI f8db376478 Bot Updating Templated Files 2026-02-12 11:11:38 +00:00
LinuxServer-CI d14531deb5 Bot Updating Package Versions 2026-02-10 12:40:25 +00:00
LinuxServer-CI fd8684d41f Bot Updating Package Versions 2026-02-03 12:05:43 +00:00
LinuxServer-CI 2a5f9d2b05 Bot Updating Package Versions 2026-01-27 11:58:38 +00:00
LinuxServer-CI 271f2d8937 Bot Updating Package Versions 2026-01-15 11:43:13 +00:00
LinuxServer-CI 5245b16b81 Bot Updating Package Versions 2026-01-13 11:55:46 +00:00
LinuxServer-CI 81aec3f457 Bot Updating Package Versions 2026-01-06 11:54:06 +00:00
LinuxServer-CI 68a9ef6d60 Bot Updating Package Versions 2025-12-23 11:53:23 +00:00
LinuxServer-CI 2b72530f8f Bot Updating Package Versions 2025-12-16 11:54:07 +00:00
LinuxServer-CI b37cc80fe0 Bot Updating Package Versions 2025-12-09 11:53:01 +00:00
LinuxServer-CI 90ae0699f7 Bot Updating Package Versions 2025-12-02 11:53:11 +00:00
LinuxServer-CI c55960faad Bot Updating Package Versions 2025-11-25 11:52:39 +00:00
LinuxServer-CI 3e9639bc9c Bot Updating Package Versions 2025-11-20 10:48:52 +00:00
LinuxServer-CI e49698776a Bot Updating Templated Files 2025-11-20 10:43:03 +00:00
LinuxServer-CI a988e18597 Bot Updating Package Versions 2025-11-18 11:52:50 +00:00
LinuxServer-CI d765d296e7 Bot Updating Package Versions 2025-11-11 11:52:59 +00:00
LinuxServer-CI 2b10bdeab4 Bot Updating Package Versions 2025-10-28 11:52:43 +00:00
LinuxServer-CI 71679df706 Bot Updating Package Versions 2025-10-23 15:42:22 +00:00
LinuxServer-CI 3d8e8ffd92 Bot Updating Templated Files 2025-10-23 13:47:13 +00:00
LinuxServer-CI 6bee23fa13 Bot Updating Package Versions 2025-10-21 11:56:10 +00:00
LinuxServer-CI 61c22a7270 Bot Updating Templated Files 2025-10-21 11:49:55 +00:00
LinuxServer-CI 8c560d9e81 Bot Updating Package Versions 2025-10-14 20:58:10 +00:00
LinuxServer-CI c7ba8dd567 Bot Updating Templated Files 2025-10-14 19:59:58 +00:00
Adam 349f723241 Merge pull request #529 from linuxserver/previous-3.22 2025-10-14 20:57:38 +01:00
LinuxServer-CI a1c5a02841 Bot Updating Package Versions 2025-10-14 11:53:06 +00:00
thespad 41a1c80112 Remove obsolete mcrypt package 2025-10-14 10:11:49 +01:00
thespad c3811ffcd0 Rebase to 3.22 2025-10-14 10:08:35 +01:00
LinuxServer-CI 43464eac91 Bot Updating Package Versions 2025-10-07 11:53:24 +00:00
LinuxServer-CI b5e1ea428f Bot Updating Package Versions 2025-09-27 08:42:24 +00:00
LinuxServer-CI dd0693c9e2 Bot Updating Package Versions 2025-09-23 11:53:56 +00:00
LinuxServer-CI ed8c5b0703 Bot Updating Package Versions 2025-09-16 11:52:59 +00:00
Adam c2057ca1ed Merge pull request #520 from linuxserver/previous-version-spaces 2025-08-26 15:57:04 +01:00
thespad 00b7ea5cb3 Trim whitespace around version numbers 2025-08-26 13:48:57 +01:00
LinuxServer-CI 0ec959e8c7 Bot Updating Package Versions 2025-08-26 11:52:59 +00:00
LinuxServer-CI 6159545435 Bot Updating Package Versions 2025-08-19 11:52:47 +00:00
LinuxServer-CI df969acaaf Bot Updating Package Versions 2025-08-14 07:43:42 +00:00
LinuxServer-CI 08b3153c6c Bot Updating Package Versions 2025-08-05 11:55:13 +00:00
LinuxServer-CI e2f5a4881d Bot Updating Package Versions 2025-07-29 11:54:22 +00:00
LinuxServer-CI f46689ba0a Bot Updating Package Versions 2025-07-22 11:54:31 +00:00
LinuxServer-CI 0725c68408 Bot Updating Package Versions 2025-07-15 11:53:36 +00:00
LinuxServer-CI 1fb67f3cf0 Bot Updating Package Versions 2025-07-10 10:48:45 +00:00
LinuxServer-CI 2f2f584fb0 Bot Updating Package Versions 2025-07-08 11:57:46 +00:00
LinuxServer-CI 1247a815de Bot Updating Templated Files 2025-07-08 11:52:20 +00:00
LinuxServer-CI 8c6dafe518 Bot Updating Templated Files 2025-07-08 11:50:11 +00:00
LinuxServer-CI af856445db Bot Updating Package Versions 2025-06-10 11:55:56 +00:00
LinuxServer-CI 103f1d67c6 Bot Updating Templated Files 2025-06-10 11:49:47 +00:00
LinuxServer-CI b621b67f26 Bot Updating Package Versions 2025-05-26 23:56:22 +00:00
LinuxServer-CI 38d52211e9 Bot Updating Package Versions 2025-05-20 11:54:03 +00:00
LinuxServer-CI 6a2d868229 Bot Updating Templated Files 2025-05-20 11:49:27 +00:00
LinuxServer-CI ea707b9e5d Bot Updating Package Versions 2025-05-15 13:08:00 +00:00
LinuxServer-CI 5450bab38a Bot Updating Package Versions 2025-05-06 11:52:08 +00:00
LinuxServer-CI a9aaf78b30 Bot Updating Package Versions 2025-04-22 11:51:24 +00:00
aptalca 716d6dbb2e Merge pull request #505 from linuxserver/previous-trigger
fix external trigger (when upstream marks a previous version as latest on GH)
2025-04-17 11:37:31 -04:00
aptalca 930e6bb596 fix external trigger (when upstream marks a previous version as latest on GH) 2025-04-17 11:28:03 -04:00
LinuxServer-CI d0b76f5482 Bot Updating Package Versions 2025-04-16 08:47:54 +00:00
LinuxServer-CI db360ca162 Bot Updating Package Versions 2025-04-15 17:40:42 +00:00
LinuxServer-CI 98da436987 Bot Updating Package Versions 2025-04-11 08:06:00 +00:00
LinuxServer-CI 76ab834a20 Bot Updating Package Versions 2025-04-08 11:51:58 +00:00
LinuxServer-CI b46c42cacf Bot Updating Package Versions 2025-04-01 11:54:06 +00:00
LinuxServer-CI ce900d8d8e Bot Updating Package Versions 2025-03-18 11:51:25 +00:00
LinuxServer-CI 8bdbbf982e Bot Updating Package Versions 2025-03-11 11:54:13 +00:00
LinuxServer-CI dec81a2751 Bot Updating Package Versions 2025-03-01 14:41:32 +00:00
LinuxServer-CI 1fde72fae4 Bot Updating Package Versions 2025-02-25 11:51:56 +00:00
LinuxServer-CI 21f0bce059 Bot Updating Package Versions 2025-02-18 11:51:34 +00:00
LinuxServer-CI 83d8ac703d Bot Updating Package Versions 2025-02-13 21:02:17 +00:00
LinuxServer-CI 7b5a4358b7 Bot Updating Templated Files 2025-02-13 20:55:09 +00:00
Adam e04f41c4a3 Merge pull request #493 from linuxserver/previous-3.21 2025-02-13 20:53:36 +00:00
LinuxServer-CI fc3e3d2724 Bot Updating Package Versions 2025-02-13 15:37:43 +00:00
thespad a208935571 Rebase to 3.21 2025-02-12 21:23:08 +00:00
LinuxServer-CI 9e202081d7 Bot Updating Package Versions 2025-02-11 11:59:28 +00:00
LinuxServer-CI 2d602b0e46 Bot Updating Templated Files 2025-02-11 11:51:35 +00:00
LinuxServer-CI 8c1048c348 Bot Updating Templated Files 2025-02-04 11:51:49 +00:00
LinuxServer-CI 5bf22d2a8c Bot Updating Templated Files 2025-02-04 11:49:58 +00:00
LinuxServer-CI d05e5a7904 Bot Updating Package Versions 2025-01-28 11:51:55 +00:00
LinuxServer-CI 4ff83c7210 Bot Updating Package Versions 2025-01-21 11:51:59 +00:00
LinuxServer-CI d2ca43078a Bot Updating Package Versions 2025-01-16 18:47:16 +00:00
quietsy 523b71f45c Merge pull request #482 from linuxserver/fix-large-files-previous
Fix uploading large files
2025-01-09 13:35:02 +02:00
quietsy 0f41399c9f Fix uploading large files 2025-01-09 12:49:39 +02:00
LinuxServer-CI 72192aeb47 Bot Updating Package Versions 2025-01-07 11:51:26 +00:00
LinuxServer-CI fecf7673d6 Bot Updating Package Versions 2024-12-24 11:51:31 +00:00
LinuxServer-CI a39017cc73 Bot Updating Package Versions 2024-12-17 12:03:06 +00:00
LinuxServer-CI 2e2b3b9cf6 Bot Updating Templated Files 2024-12-17 11:52:37 +00:00
LinuxServer-CI e17cb4a648 Bot Updating Templated Files 2024-12-17 11:49:24 +00:00
LinuxServer-CI 1cbdb9f4e7 Bot Updating Templated Files 2024-12-05 13:43:02 +00:00
LinuxServer-CI 9d83dc0ece Bot Updating Templated Files 2024-12-03 11:53:05 +00:00
LinuxServer-CI 3abdcce7b0 Bot Updating Templated Files 2024-12-03 11:51:17 +00:00
LinuxServer-CI 05bafbb7b1 Bot Updating Templated Files 2024-12-03 11:49:36 +00:00
LinuxServer-CI 08449338b2 Bot Updating Package Versions 2024-11-26 11:52:15 +00:00
LinuxServer-CI 1cf1a7f450 Bot Updating Package Versions 2024-11-19 11:51:11 +00:00
LinuxServer-CI bfbe03b675 Bot Updating Templated Files 2024-11-12 11:51:44 +00:00
LinuxServer-CI 32117124ec Bot Updating Templated Files 2024-11-12 11:49:18 +00:00
LinuxServer-CI f10a2c5ebb Bot Updating Package Versions 2024-11-05 11:52:27 +00:00
LinuxServer-CI 65336aae28 Bot Updating Package Versions 2024-10-29 11:51:59 +00:00
LinuxServer-CI 5d472c622c Bot Updating Package Versions 2024-10-22 11:50:58 +00:00
LinuxServer-CI 33c48f4405 Bot Updating Package Versions 2024-10-10 14:40:38 +00:00
LinuxServer-CI 7ef7a7025d Bot Updating Package Versions 2024-10-08 11:51:08 +00:00
LinuxServer-CI e4058b48df Bot Updating Package Versions 2024-10-01 11:57:39 +00:00
LinuxServer-CI dbe6f269c5 Bot Updating Templated Files 2024-10-01 11:52:42 +00:00
LinuxServer-CI 5eeca64e8e Bot Updating Templated Files 2024-10-01 11:51:28 +00:00
LinuxServer-CI 8c3a38e0be Bot Updating Templated Files 2024-10-01 11:49:42 +00:00
LinuxServer-CI bd23955995 Bot Updating Package Versions 2024-09-25 23:34:02 +00:00
LinuxServer-CI fb7d5ec411 Bot Updating Package Versions 2024-09-24 11:50:55 +00:00
LinuxServer-CI 7aa8d56075 Bot Updating Package Versions 2024-09-14 16:29:05 +00:00
Eric Nemchik 55012a2508 Merge pull request #455 from linuxserver/ipv6-listen-previous
separate ipv6 listen in default site-conf [previous]
2024-09-14 09:10:11 -07:00
LinuxServer-CI f2aeaf922e Bot Updating Package Versions 2024-09-12 19:34:21 +00:00
LinuxServer-CI 87797a998c Bot Updating Package Versions 2024-09-10 11:51:56 +00:00
LinuxServer-CI 7251f37675 Bot Updating Package Versions 2024-09-03 11:51:42 +00:00
LinuxServer-CI e2cf4b7e1b Bot Updating Package Versions 2024-08-27 11:51:32 +00:00
LinuxServer-CI 6bd06be5b2 Bot Updating Package Versions 2024-08-20 11:55:45 +00:00
LinuxServer-CI 0dba137a29 Bot Updating Templated Files 2024-08-20 11:52:00 +00:00
LinuxServer-CI e150ec8200 Bot Updating Templated Files 2024-08-20 11:50:27 +00:00
LinuxServer-CI a6f3b90552 Bot Updating Package Versions 2024-08-13 11:51:07 +00:00
LinuxServer-CI ce8f20b1a0 Bot Updating Package Versions 2024-08-06 11:50:58 +00:00
LinuxServer-CI 1ed02051f3 Bot Updating Package Versions 2024-07-26 12:52:59 +00:00
LinuxServer-CI 8de888ed1e Bot Updating Package Versions 2024-07-23 11:54:34 +00:00
Eric Nemchik 52caabe6e1 separate ipv6 listen in default site-conf [previous] 2024-07-16 20:40:58 -05:00
LinuxServer-CI abcb894240 Bot Updating Package Versions 2024-07-14 21:22:43 +00:00
aptalca 70c4bd63f1 Merge pull request #451 from linuxserver/previous-escape
fix escape for external version
2024-07-14 17:18:59 -04:00
aptalca a101ff6d14 fix escape for external version 2024-07-14 16:31:21 -04:00
thespad fbdf2b2eb3 Fix release check 2024-07-14 18:37:42 +01:00
LinuxServer-CI e3250f0107 Bot Updating Templated Files 2024-07-14 17:19:41 +00:00
LinuxServer-CI ed224e0523 Bot Updating Templated Files 2024-07-14 17:17:44 +00:00
Adam fa1225fd22 Merge pull request #449 from linuxserver/previous-initial
Initial release for previous tag
2024-07-14 18:16:24 +01:00
thespad 7e34d51683 Remove leading v from version 2024-07-09 16:22:48 +01:00
thespad f1fb49429c Initial release for previous tag 2024-07-09 16:16:27 +01:00
12 changed files with 279 additions and 278 deletions
+2 -2
View File
@@ -24,7 +24,7 @@
## Readme
If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit.
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-nextcloud/edit/master/readme-vars.yml).
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-nextcloud/edit/previous/readme-vars.yml).
These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play.
Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-nextcloud)
@@ -115,7 +115,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Update the changelog
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-nextcloud/tree/master/root), add an entry to the changelog
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-nextcloud/tree/previous/root), add an entry to the changelog
```yml
changelogs:
+1 -1
View File
@@ -21,7 +21,7 @@
------------------------------
- [ ] I have read the [contributing](https://github.com/linuxserver/docker-nextcloud/blob/master/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
- [ ] I have read the [contributing](https://github.com/linuxserver/docker-nextcloud/blob/previous/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
------------------------------
+16 -16
View File
@@ -7,31 +7,31 @@ permissions:
contents: read
jobs:
external-trigger-master:
external-trigger-previous:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: External Trigger
if: github.ref == 'refs/heads/master'
if: github.ref == 'refs/heads/previous'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: |
printf "# External trigger for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^nextcloud_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
if grep -q "^nextcloud_previous_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`nextcloud_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^nextcloud_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`nextcloud_previous_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^nextcloud_previous" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`nextcloud_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`nextcloud_previous\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of master branch. To disable this trigger, add \`nextcloud_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of previous branch. To disable this trigger, add \`nextcloud_previous\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
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 "first(.[] | select(.tag_name | contains($(( $(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' | awk -F '.' '{print $1}' | sort -rV | head -1) -1 ))|tostring ) and (contains( \"rc\" )|not)) | .tag_name)" | sed 's|^v||g')
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^nextcloud_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
if grep -q "^nextcloud_previous_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
@@ -39,7 +39,7 @@ jobs:
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for nextcloud branch master"
FAILURE_REASON="Can't retrieve external version for nextcloud branch previous"
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,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}],
@@ -50,7 +50,7 @@ jobs:
echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/nextcloud"
tag="latest"
tag="previous"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fnextcloud%3Apull" \
| jq -r '.token')
@@ -96,7 +96,7 @@ jobs:
if [ -z "${IMAGE_VERSION}" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for nextcloud tag latest"
FAILURE_REASON="Can't retrieve last pushed version for nextcloud tag previous"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
@@ -106,14 +106,14 @@ jobs:
if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/previous/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0
else
if [[ "${artifacts_found}" == "false" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for nextcloud tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
FAILURE_REASON="New version ${EXT_RELEASE} for nextcloud tag previous is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
@@ -124,7 +124,7 @@ jobs:
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/master/buildWithParameters?PACKAGE_CHECK=false \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/previous/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
@@ -139,7 +139,7 @@ jobs:
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for nextcloud tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
TRIGGER_REASON="A version change was detected for nextcloud tag previous. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
+1 -1
View File
@@ -15,5 +15,5 @@ jobs:
- uses: actions/first-interaction@v1
with:
issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-nextcloud/blob/master/.github/PULL_REQUEST_TEMPLATE.md)!'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-nextcloud/blob/previous/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }}
+3 -2
View File
@@ -84,8 +84,9 @@ RUN \
/app/www/src/ && \
if [ -z ${NEXTCLOUD_RELEASE+x} ]; then \
NEXTCLOUD_RELEASE=$(curl -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); \
| jq -r "first(.[] | select(.tag_name | contains($(( $(curl -sX GET https://api.github.com/repos/nextcloud/server/releases/latest \
| jq -r '.tag_name' | sed 's|^v||g' | awk -F '.' '{print $1}') -1 ))|tostring ) and (contains( \"rc\" )|not)) | .tag_name)" \
| sed 's|^v||g'); \
fi && \
curl -o \
/tmp/nextcloud.tar.bz2 -L \
+3 -2
View File
@@ -84,8 +84,9 @@ RUN \
/app/www/src/ && \
if [ -z ${NEXTCLOUD_RELEASE+x} ]; then \
NEXTCLOUD_RELEASE=$(curl -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); \
| jq -r "first(.[] | select(.tag_name | contains($(( $(curl -sX GET https://api.github.com/repos/nextcloud/server/releases/latest \
| jq -r '.tag_name' | sed 's|^v||g' | awk -F '.' '{print $1}') -1 ))|tostring ) and (contains( \"rc\" )|not)) | .tag_name)" \
| sed 's|^v||g'); \
fi && \
curl -o \
/tmp/nextcloud.tar.bz2 -L \
Vendored
+163 -147
View File
@@ -75,8 +75,10 @@ pipeline {
'''
script{
env.EXIT_STATUS = ''
env.CI_TEST_ATTEMPTED = ''
env.PUSH_ATTEMPTED = ''
env.LS_RELEASE = sh(
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:latest 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:previous 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
returnStdout: true).trim()
env.LS_RELEASE_NOTES = sh(
script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''',
@@ -109,7 +111,7 @@ pipeline {
script{
env.LS_TAG_NUMBER = sh(
script: '''#! /bin/bash
tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null)
tagsha=$(git rev-list -n 1 previous-${LS_RELEASE} 2>/dev/null)
if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
echo ${LS_RELEASE_NUMBER}
elif [ -z "${GIT_COMMIT}" ]; then
@@ -147,7 +149,7 @@ pipeline {
steps{
script{
env.EXT_RELEASE = sh(
script: ''' curl -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 ''',
script: ''' curl -sX GET https://api.github.com/repos/nextcloud/server/releases | jq -r "first(.[] | select(.tag_name | contains($(( $(curl -sX GET https://api.github.com/repos/nextcloud/server/releases | jq -r '.[] | select(.prerelease != true) | .tag_name' | sed 's|^v||g' | awk -F '.' '{print $1}' | sort -rV | head -1) -1 ))|tostring ) and (contains( \\"rc\\" )|not)) | .tag_name)" | sed 's|^v||g' ''',
returnStdout: true).trim()
env.RELEASE_LINK = 'custom_command'
}
@@ -187,10 +189,10 @@ pipeline {
}
}
}
// If this is a master build use live docker endpoints
// If this is a previous build use live docker endpoints
stage("Set ENV live build"){
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
}
steps {
@@ -200,13 +202,13 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.CI_TAGS = 'amd64-previous-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-previous-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.CI_TAGS = 'previous-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.META_TAG = 'previous-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'previous-version-' + env.EXT_RELEASE_CLEAN
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
env.CITEST_IMAGETAG = 'latest'
}
@@ -215,7 +217,7 @@ pipeline {
// If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){
when {
not {branch "master"}
not {branch "previous"}
environment name: 'CHANGE_ID', value: ''
}
steps {
@@ -225,13 +227,13 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.CI_TAGS = 'amd64-previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.CI_TAGS = 'previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
}
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.META_TAG = 'previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'previous-version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
env.CITEST_IMAGETAG = 'develop'
@@ -250,13 +252,13 @@ pipeline {
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.CI_TAGS = 'amd64-previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.CI_TAGS = 'previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
}
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
env.META_TAG = 'previous-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.EXT_RELEASE_TAG = 'previous-version-' + env.EXT_RELEASE_CLEAN
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
env.BUILDCACHE = 'docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
@@ -283,7 +285,7 @@ pipeline {
-v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
ghcr.io/linuxserver/baseimage-alpine:3 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
ghcr.io/linuxserver/baseimage-alpine:3.23 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache python3 && \
python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \
@@ -295,7 +297,7 @@ pipeline {
// Use helper containers to render templated files
stage('Update-Templates') {
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
expression {
env.CONTAINER_NAME != null
@@ -307,24 +309,24 @@ pipeline {
TEMPDIR=$(mktemp -d)
docker pull ghcr.io/linuxserver/jenkins-builder:latest
# Cloned repo paths for templating:
# ${TEMPDIR}/docker-${CONTAINER_NAME}: Cloned branch master of ${LS_USER}/${LS_REPO} for running the jenkins builder on
# ${TEMPDIR}/repo/${LS_REPO}: Cloned branch master of ${LS_USER}/${LS_REPO} for commiting various templated file changes and pushing back to Github
# ${TEMPDIR}/docker-${CONTAINER_NAME}: Cloned branch previous of ${LS_USER}/${LS_REPO} for running the jenkins builder on
# ${TEMPDIR}/repo/${LS_REPO}: Cloned branch previous of ${LS_USER}/${LS_REPO} for commiting various templated file changes and pushing back to Github
# ${TEMPDIR}/docs/docker-documentation: Cloned docs repo for pushing docs updates to Github
# ${TEMPDIR}/unraid/docker-templates: Cloned docker-templates repo to check for logos
# ${TEMPDIR}/unraid/templates: Cloned templates repo for commiting unraid template changes and pushing back to Github
git clone --branch master --depth 1 https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/docker-${CONTAINER_NAME}
git clone --branch previous --depth 1 https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/docker-${CONTAINER_NAME}
docker run --rm -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/tmp -e LOCAL=true -e PUID=$(id -u) -e PGID=$(id -g) ghcr.io/linuxserver/jenkins-builder:latest
echo "Starting Stage 1 - Jenkinsfile update"
if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master
git checkout -f previous
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
git add Jenkinsfile
git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating Jenkinsfile and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
@@ -343,13 +345,13 @@ pipeline {
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master
git checkout -f previous
for i in ${TEMPLATES_TO_DELETE}; do
git rm "${i}"
done
git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Deleting old/deprecated templates and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
@@ -364,20 +366,20 @@ pipeline {
sed -i 's|^changelogs:|# init diagram\\ninit_diagram:\\n\\n# changelog\\nchangelogs:|' readme-vars.yml
fi
mkdir -p ${TEMPDIR}/d2
docker run --rm -v ${TEMPDIR}/d2:/output -e PUID=$(id -u) -e PGID=$(id -g) -e RAW="true" ghcr.io/linuxserver/d2-builder:latest ${CONTAINER_NAME}:latest
docker run --rm -v ${TEMPDIR}/d2:/output -e PUID=$(id -u) -e PGID=$(id -g) -e RAW="true" ghcr.io/linuxserver/d2-builder:latest ${CONTAINER_NAME}:previous
ls -al ${TEMPDIR}/d2
yq -ei ".init_diagram |= load_str(\\"${TEMPDIR}/d2/${CONTAINER_NAME}-latest.d2\\")" readme-vars.yml
yq -ei ".init_diagram |= load_str(\\"${TEMPDIR}/d2/${CONTAINER_NAME}-previous.d2\\")" readme-vars.yml
if [[ $(md5sum readme-vars.yml | cut -c1-8) != $(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/readme-vars.yml | cut -c1-8) ]]; then
echo "'init_diagram' has been updated. Updating repo and exiting build, new one will trigger based on commit."
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master
git checkout -f previous
cp ${WORKSPACE}/readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/readme-vars.yml
git add readme-vars.yml
git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating templates and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
@@ -394,7 +396,7 @@ pipeline {
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master
git checkout -f previous
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
@@ -407,8 +409,8 @@ pipeline {
fi
git add readme-vars.yml ${TEMPLATED_FILES}
git commit -m 'Bot Updating Templated Files'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating templates and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
@@ -509,7 +511,7 @@ pipeline {
// Exit the build if the Templated files were just updated
stage('Template-exit') {
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true'
expression {
@@ -522,10 +524,10 @@ pipeline {
}
}
}
// If this is a master build check the S6 service file perms
// If this is a previous build check the S6 service file perms
stage("Check S6 Service file Permissions"){
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
@@ -778,7 +780,7 @@ pipeline {
// Take the image we just built and dump package versions for comparison
stage('Update-packages') {
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
@@ -801,14 +803,14 @@ pipeline {
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f previous
cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
cd ${TEMPDIR}/${LS_REPO}/
wait
git add package_versions.txt
git commit -m 'Bot Updating Package Versions'
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git previous
echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag updated, stopping build process"
else
@@ -826,7 +828,7 @@ pipeline {
// Exit the build if the package file was just updated
stage('PACKAGE-exit') {
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: ''
@@ -840,7 +842,7 @@ pipeline {
// Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') {
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: ''
@@ -871,6 +873,7 @@ pipeline {
script{
env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json'
env.CI_TEST_ATTEMPTED = 'true'
}
sh '''#! /bin/bash
set -e
@@ -894,7 +897,7 @@ pipeline {
-e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e RELEASE_TAG=\"latest\" \
-e RELEASE_TAG=\"previous\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
@@ -923,6 +926,9 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
env.PUSH_ATTEMPTED = 'true'
}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
@@ -934,7 +940,7 @@ pipeline {
CACHEIMAGE=${i}
fi
done
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:previous -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${PUSHIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
@@ -952,20 +958,27 @@ pipeline {
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
env.PUSH_ATTEMPTED = 'true'
}
retry_backoff(5,5) {
sh '''#! /bin/bash
set -e
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
if [[ "${MANIFESTIMAGE%%/*}" =~ \\. ]]; then
MANIFESTIMAGEPLUS="${MANIFESTIMAGE}"
else
MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
fi
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
for i in "${CACHE[@]}"; do
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
CACHEIMAGE=${i}
fi
done
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-previous -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-previous -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
if [ -n "${SEMVER}" ]; then
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
@@ -975,7 +988,7 @@ pipeline {
fi
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \
docker buildx imagetools create -t ${MANIFESTIMAGE}:previous ${MANIFESTIMAGE}:amd64-previous ${MANIFESTIMAGE}:arm64v8-previous || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} || \
{ if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
@@ -993,7 +1006,7 @@ pipeline {
// If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') {
when {
branch "master"
branch "previous"
expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
@@ -1009,21 +1022,21 @@ pipeline {
else
AUTO_RELEASE_NOTES=$(curl -fsL -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github+json" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/generate-notes \
-d '{"tag_name":"'${META_TAG}'",\
"target_commitish": "master"}' \
"target_commitish": "previous"}' \
| jq -r '.body' | sed 's|## What.s Changed||')
fi
echo "Pushing New tag for current commit ${META_TAG}"
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to previous",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}'
echo "Pushing New release for Tag"
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
jq -n \
--arg tag_name "$META_TAG" \
--arg target_commitish "master" \
--arg target_commitish "previous" \
--arg ci_url "${CI_URL:-N/A}" \
--arg ls_notes "$AUTO_RELEASE_NOTES" \
--arg remote_notes "$(cat releasebody.json)" \
@@ -1033,7 +1046,7 @@ pipeline {
"name": $tag_name,
"body": ("**CI Report:**\\n\\n" + $ci_url + "\\n\\n**LinuxServer Changes:**\\n\\n" + $ls_notes + "\\n\\n**Remote Changes:**\\n\\n" + $remote_notes),
"draft": false,
"prerelease": false }' > releasebody.json.done
"prerelease": true }' > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done
'''
}
@@ -1041,14 +1054,14 @@ pipeline {
// Add protection to the release branch
stage('Github-Release-Branch-Protection') {
when {
branch "master"
branch "previous"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
echo "Setting up protection for release branch master"
echo "Setting up protection for release branch previous"
sh '''#! /bin/bash
curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/master/protection \
curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/previous/protection \
-d $(jq -c . << EOF
{
"required_status_checks": null,
@@ -1073,98 +1086,13 @@ EOF
) '''
}
}
// If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') {
when {
not {environment name: 'CHANGE_ID', value: ''}
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''#! /bin/bash
# Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
}
}
}
/* ######################
Send status to Discord
Comment on PR and Send status to Discord
###################### */
post {
always {
sh '''#!/bin/bash
rm -rf /config/.ssh/id_sign
rm -rf /config/.ssh/id_sign.pub
git config --global --unset gpg.format
git config --global --unset user.signingkey
git config --global --unset commit.gpgsign
'''
script{
script {
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
@@ -1207,6 +1135,94 @@ EOF
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
script {
if (env.GITHUBIMAGE =~ /lspipepr/){
if (env.CI_TEST_ATTEMPTED == "true" || env.PUSH_ATTEMPTED == "true"){
sh '''#! /bin/bash
# Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR for commit ${COMMIT_SHA:0:7} : \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR for commit ${COMMIT_SHA:0:7} : \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
} else {
sh '''#! /bin/bash
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, the build for PR commit ${COMMIT_SHA:0:7} failed and as a result no CI test was attempted and no images were pushed.\\"}"
'''
}
}
}
sh '''#!/bin/bash
rm -rf /config/.ssh/id_sign
rm -rf /config/.ssh/id_sign.pub
git config --global --unset gpg.format
git config --global --unset user.signingkey
git config --global --unset commit.gpgsign
'''
}
cleanup {
sh '''#! /bin/bash
+11 -11
View File
@@ -1,5 +1,5 @@
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-nextcloud/blob/master/.github/CONTRIBUTING.md -->
<!-- Please read https://github.com/linuxserver/docker-nextcloud/blob/previous/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
@@ -34,8 +34,8 @@ Find us at:
[![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/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)
[![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%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/master/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fnextcloud%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/nextcloud/latest/index.html)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-nextcloud%2Fjob%2Fprevious%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/previous/)
[![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%2Fprevious%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/nextcloud/previous/index.html)
[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are.
@@ -47,7 +47,7 @@ Where are your photos and documents? With Nextcloud you pick a server of your ch
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/nextcloud:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
Simply pulling `lscr.io/linuxserver/nextcloud:previous` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are:
@@ -135,7 +135,7 @@ If you are using a reverse proxy which validates certificates, you need to [disa
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
>[!NOTE]
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
>Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
@@ -143,7 +143,7 @@ To help you get started creating a container from this image you can either use
---
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
image: lscr.io/linuxserver/nextcloud:previous
container_name: nextcloud
environment:
- PUID=1000
@@ -169,7 +169,7 @@ docker run -d \
-v /path/to/nextcloud/config:/config \
-v /path/to/data:/data \
--restart unless-stopped \
lscr.io/linuxserver/nextcloud:latest
lscr.io/linuxserver/nextcloud:previous
```
## Parameters
@@ -249,7 +249,7 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nextcloud:latest
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nextcloud:previous
```
## Updating Info
@@ -297,7 +297,7 @@ Below are the instructions for updating containers:
* Update the image:
```bash
docker pull lscr.io/linuxserver/nextcloud:latest
docker pull lscr.io/linuxserver/nextcloud:previous
```
* Stop the running container:
@@ -334,7 +334,7 @@ cd docker-nextcloud
docker build \
--no-cache \
--pull \
-t lscr.io/linuxserver/nextcloud:latest .
-t lscr.io/linuxserver/nextcloud:previous .
```
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
@@ -347,7 +347,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions
* **10.07.25:** - Rebase to Alpine 3.22.
* **14.10.25:** - Rebase to Alpine 3.22.
* **12.02.25:** - Rebase to Alpine 3.21.
* **09.01.25:** - Fix uploading large files. Existing users should update their nginx confs.
* **09.07.24:** - Add `previous` tag for n-1 releases.
+4 -4
View File
@@ -3,10 +3,10 @@
# jenkins variables
project_name: docker-nextcloud
external_type: na
custom_version_command: "curl -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"
release_type: stable
release_tag: latest
ls_branch: master
custom_version_command: "curl -sX GET https://api.github.com/repos/nextcloud/server/releases | jq -r \"first(.[] | select(.tag_name | contains($(( $(curl -sX GET https://api.github.com/repos/nextcloud/server/releases | jq -r '.[] | select(.prerelease != true) | .tag_name' | sed 's|^v||g' | awk -F '.' '{print $1}' | sort -rV | head -1) -1 ))|tostring ) and (contains( \\\\\"rc\\\\\" )|not)) | .tag_name)\" | sed 's|^v||g'"
release_type: prerelease
release_tag: previous
ls_branch: previous
repo_vars:
- BUILD_VERSION_ARG = 'NEXTCLOUD_RELEASE'
- LS_USER = 'linuxserver'
+49 -50
View File
@@ -6,7 +6,7 @@ agetty 2.41-r9 apk
alpine-baselayout 3.7.0-r0 apk
alpine-baselayout-data 3.7.0-r0 apk
alpine-keys 2.5-r0 apk
alpine-release 3.22.2-r0 apk
alpine-release 3.22.4-r0 apk
alsa-lib 1.2.14-r0 apk
amphp/amp v2.6.4 php-composer
amphp/byte-stream v1.8.2 php-composer
@@ -23,7 +23,7 @@ anstyle-query 1.0.2 rust-crate
anyhow 1.0.79 rust-crate
anyhow 1.0.98 rust-crate
aom-libs 3.12.1-r0 apk
apache2-utils 2.4.66-r0 apk
apache2-utils 2.4.67-r0 apk
apk-tools 2.14.9-r3 apk
apr 1.7.5-r0 apk
apr-util 1.6.3-r1 apk
@@ -34,7 +34,7 @@ av-metrics 0.9.1 rust-crate
av1-grain 0.2.3 rust-crate
avahi-libs 0.8-r21 apk
aws/aws-crt-php v1.2.7 php-composer
aws/aws-sdk-php 3.369.9 php-composer
aws/aws-sdk-php 3.376.2 php-composer
bamarni/composer-bin-plugin 1.8.2 php-composer
bantu/ini-get-wrapper v1.0.1 php-composer
bash 5.2.37-r0 apk
@@ -50,8 +50,8 @@ busybox 1.37.0-r20 apk
busybox-binsh 1.37.0-r20 apk
c-ares 1.34.6-r0 apk
c-client 2007f-r15 apk
ca-certificates 20250911-r0 apk
ca-certificates-bundle 20250911-r0 apk
ca-certificates 20260413-r0 apk
ca-certificates-bundle 20260413-r0 apk
cairo 1.18.4-r0 apk
catatonit 0.2.1-r0 apk
cfdisk 2.41-r9 apk
@@ -64,7 +64,7 @@ clap_complete 4.4.6 rust-crate
clap_derive 4.4.7 rust-crate
clap_lex 0.6.0 rust-crate
colorchoice 1.0.0 rust-crate
composer 2.9.5 binary
composer 2.10.0 binary
console 0.15.8 rust-crate
coreutils 9.7-r1 apk
coreutils-env 9.7-r1 apk
@@ -78,7 +78,7 @@ crossbeam-deque 0.8.5 rust-crate
crossbeam-epoch 0.9.18 rust-crate
crossbeam-queue 0.3.11 rust-crate
crossbeam-utils 0.8.19 rust-crate
cups-libs 2.4.16-r0 apk
cups-libs 2.4.18-r0 apk
curl 8.14.1-r2 apk
cweagans/composer-patches 1.7.3 php-composer
dbus-libs 1.16.2-r1 apk
@@ -105,7 +105,7 @@ ffmpeg-libswresample 6.1.2-r2 apk
ffmpeg-libswscale 6.1.2-r2 apk
fftw-double-libs 3.3.10-r6 apk
files_downloadlimit 5.0.0-dev.0 npm
files_pdfviewer 5.0.0-dev.0 npm
files_pdfviewer 5.0.0 npm
findmnt 2.41-r9 apk
findutils 4.10.0-r0 apk
firstrunwizard 5.0.0-dev.0 npm
@@ -129,7 +129,7 @@ glslang-libs 1.4.309.0-r0 apk
gmp 6.3.0-r3 apk
gnu-libiconv 1.17-r2 apk
gnu-libiconv-libs 1.17-r2 apk
gnutls 3.8.8-r0 apk
gnutls 3.8.13-r0 apk
graphite2 1.3.14-r6 apk
guzzlehttp/guzzle 7.9.3 php-composer
guzzlehttp/promises 2.2.0 php-composer
@@ -145,17 +145,17 @@ icewind/smb v3.7.0 php-composer
icewind/streams v0.7.8 php-composer
icu-data-en 76.1-r1 apk
icu-libs 76.1-r1 apk
imagemagick 7.1.2.8-r0 apk
imagemagick-heic 7.1.2.8-r0 apk
imagemagick-jpeg 7.1.2.8-r0 apk
imagemagick-jxl 7.1.2.8-r0 apk
imagemagick-libs 7.1.2.8-r0 apk
imagemagick-openexr 7.1.2.8-r0 apk
imagemagick-pango 7.1.2.8-r0 apk
imagemagick-pdf 7.1.2.8-r0 apk
imagemagick-svg 7.1.2.8-r0 apk
imagemagick-tiff 7.1.2.8-r0 apk
imagemagick-webp 7.1.2.8-r0 apk
imagemagick 7.1.2.15-r0 apk
imagemagick-heic 7.1.2.15-r0 apk
imagemagick-jpeg 7.1.2.15-r0 apk
imagemagick-jxl 7.1.2.15-r0 apk
imagemagick-libs 7.1.2.15-r0 apk
imagemagick-openexr 7.1.2.15-r0 apk
imagemagick-pango 7.1.2.15-r0 apk
imagemagick-pdf 7.1.2.15-r0 apk
imagemagick-svg 7.1.2.15-r0 apk
imagemagick-tiff 7.1.2.15-r0 apk
imagemagick-webp 7.1.2.15-r0 apk
imath 3.1.12-r0 apk
interpolate_name 0.2.4 rust-crate
itertools 0.10.5 rust-crate
@@ -171,7 +171,7 @@ lab 0.11.0 rust-crate
lame-libs 3.100-r5 apk
laravel/serializable-closure v2.0.4 php-composer
lazy_static 1.4.0 rust-crate
lcms2 2.16-r0 apk
lcms2 2.19-r0 apk
lcobucci/clock 3.0.0 php-composer
ldb 4.21.9-r1 apk
libSvtAv1Enc 2.3.0-r0 apk
@@ -189,8 +189,8 @@ libbz2 1.0.8-r6 apk
libc 0.2.155 rust-crate
libc 0.2.172 rust-crate
libcap-ng 0.8.5-r0 apk
libcap2 2.76-r0 apk
libcrypto3 3.5.5-r0 apk
libcap2 2.78-r0 apk
libcrypto3 3.5.6-r0 apk
libcurl 8.14.1-r2 apk
libdav1d 1.5.1-r0 apk
libde265 1.0.15-r1 apk
@@ -200,7 +200,7 @@ libdrm 2.4.124-r0 apk
libeconf 0.6.3-r0 apk
libedit 20250104.3.1-r1 apk
libevent 2.1.12-r8 apk
libexpat 2.7.3-r0 apk
libexpat 2.7.5-r0 apk
libfdisk 2.41-r9 apk
libffi 3.4.8-r0 apk
libflac 1.4.3-r1 apk
@@ -225,8 +225,8 @@ libopenmpt 0.7.15-r0 apk
libpanelw 6.5_p20250503-r0 apk
libpciaccess 0.18.1-r0 apk
libplacebo 6.338.2-r3 apk
libpng 1.6.54-r0 apk
libpq 17.7-r0 apk
libpng 1.6.57-r0 apk
libpq 17.10-r0 apk
libproc2 4.0.4-r3 apk
libpsl 0.21.5-r3 apk
libpulse 17.0-r5 apk
@@ -241,7 +241,7 @@ libsndfile 1.2.2-r2 apk
libsodium 1.0.20-r1 apk
libsrt 1.5.3-r1 apk
libssh 0.11.2-r0 apk
libssl3 3.5.5-r0 apk
libssl3 3.5.6-r0 apk
libstdc++ 14.2.0-r6 apk
libtasn1 4.21.0-r0 apk
libtheora 1.1.1-r18 apk
@@ -264,7 +264,7 @@ libxext 1.3.6-r2 apk
libxfixes 6.0.1-r4 apk
libxft 2.3.8-r3 apk
libxml2 2.13.9-r0 apk
libxpm 3.5.17-r0 apk
libxpm 3.5.19-r0 apk
libxrender 0.9.12-r0 apk
libxt 1.3.1-r0 apk
libxxhash 0.8.3-r0 apk
@@ -277,7 +277,7 @@ linux-raw-sys 0.4.12 rust-crate
lmdb 0.9.33-r0 apk
log 0.4.20 rust-crate
logger 2.41-r9 apk
logreader 5.0.0-dev.0 npm
logreader 5.0.0 npm
logrotate 3.21.0-r1 apk
losetup 2.41-r9 apk
lsblk 2.41-r9 apk
@@ -286,7 +286,7 @@ lz4-libs 1.10.0-r0 apk
marc-mabe/php-enum v4.7.1 php-composer
masterminds/html5 2.9.0 php-composer
maybe-rayon 0.1.1 rust-crate
mbedtls 3.6.5-r0 apk
mbedtls 3.6.6-r0 apk
mcookie 2.41-r9 apk
memchr 2.7.1 rust-crate
mexitek/phpcolors v1.0.4 php-composer
@@ -297,17 +297,17 @@ mlocati/ip-lib 1.20.0 php-composer
mount 2.41-r9 apk
mpg123-libs 1.32.10-r0 apk
mtdowling/jmespath.php 2.8.0 php-composer
musl 1.2.5-r10 apk
musl-utils 1.2.5-r10 apk
musl 1.2.5-r12 apk
musl-utils 1.2.5-r12 apk
nano 8.4-r0 apk
ncurses-terminfo-base 6.5_p20250503-r0 apk
netcat-openbsd 1.229.1-r0 apk
nettle 3.10.1-r0 apk
nettle 3.10.2-r0 apk
new_debug_unreachable 1.0.4 rust-crate
nextcloud 1.0.0 npm
nextcloud/lognormalizer v1.0.0 php-composer
nghttp2-libs 1.65.0-r0 apk
nginx 1.28.0-r3 apk
nghttp2-libs 1.69.0-r0 apk
nginx 1.28.3-r2 apk
nom 7.1.3 rust-crate
noop_proc_macro 0.3.0 rust-crate
notifications 5.0.0-dev.0 npm
@@ -325,7 +325,7 @@ openexr-libilmthread 3.3.2-r0 apk
openexr-libopenexr 3.3.2-r0 apk
openexr-libopenexrcore 3.3.2-r0 apk
openjpeg 2.5.3-r0 apk
openssl 3.5.5-r0 apk
openssl 3.5.6-r0 apk
opus 1.5.2-r1 apk
orc 0.4.40-r1 apk
p11-kit 0.25.5-r2 apk
@@ -390,7 +390,7 @@ php84-xml 8.4.16-r0 apk
php84-xmlreader 8.4.16-r0 apk
php84-xmlwriter 8.4.16-r0 apk
php84-zip 8.4.16-r0 apk
phpseclib/phpseclib 2.0.47 php-composer
phpseclib/phpseclib 2.0.53 php-composer
pimple/pimple v3.5.0 php-composer
pixman 0.46.4-r0 apk
pkgconf 2.4.3-r0 apk
@@ -422,7 +422,7 @@ rayon 1.8.0 rust-crate
rayon-core 1.12.0 rust-crate
readline 8.2.13-r1 apk
recommendations 5.0.0-dev.0 npm
rsync 3.4.1-r1 apk
rsync 3.4.3-r0 apk
rubix/ml 2.5.2 php-composer
rubix/tensor 3.0.5 php-composer
rullzer/easytotp v0.1.4 php-composer
@@ -466,16 +466,16 @@ ssl_client 1.37.0-r20 apk
stecman/symfony-console-completion v0.14.0 php-composer
sudo 1.9.17_p2-r0 apk
support 4.0.0-dev.0 npm
symfony/console v6.4.30 php-composer
symfony/console v6.4.32 php-composer
symfony/css-selector v6.4.13 php-composer
symfony/deprecation-contracts v3.6.0 php-composer (+1 duplicate)
symfony/dom-crawler v6.4.23 php-composer
symfony/event-dispatcher v6.4.25 php-composer
symfony/event-dispatcher v6.4.32 php-composer
symfony/event-dispatcher-contracts v3.6.0 php-composer
symfony/filesystem v6.4.30 php-composer
symfony/http-foundation v6.4.30 php-composer
symfony/mailer v6.4.27 php-composer
symfony/mime v6.4.30 php-composer
symfony/http-foundation v6.4.32 php-composer
symfony/mailer v6.4.31 php-composer
symfony/mime v6.4.32 php-composer
symfony/polyfill-intl-grapheme v1.33.0 php-composer
symfony/polyfill-intl-idn v1.33.0 php-composer
symfony/polyfill-intl-normalizer v1.33.0 php-composer
@@ -487,11 +487,11 @@ symfony/polyfill-php83 v1.31.0 php-composer
symfony/polyfill-php83 v1.33.0 php-composer
symfony/polyfill-php84 v1.32.0 php-composer
symfony/polyfill-uuid v1.33.0 php-composer
symfony/process v6.4.26 php-composer
symfony/routing v6.4.30 php-composer
symfony/process v6.4.33 php-composer
symfony/routing v6.4.32 php-composer
symfony/service-contracts v3.6.1 php-composer
symfony/string v6.4.30 php-composer
symfony/translation v6.4.30 php-composer
symfony/translation v6.4.32 php-composer
symfony/translation-contracts v3.6.1 php-composer
symfony/uid v6.4.24 php-composer
syn 2.0.48 rust-crate
@@ -506,8 +506,7 @@ thiserror 1.0.56 rust-crate
thiserror-impl 1.0.56 rust-crate
tiff 4.7.1-r0 apk
tinyvec 1.9.0 rust-crate
twofactor_totp 14.0.0 npm
tzdata 2025c-r0 apk
tzdata 2026b-r0 apk
umount 2.41-r9 apk
unicode-ident 1.0.12 rust-crate
unicode-width 0.1.11 rust-crate
@@ -531,9 +530,9 @@ wyz 0.5.1 rust-crate
x264-libs 0.164.3108-r0 apk
x265-libs 3.6-r0 apk
xvidcore 1.3.7-r2 apk
xz-libs 5.8.1-r0 apk
xz-libs 5.8.3-r0 apk
y4m 0.8.0 rust-crate
zimg 3.0.5-r3 apk
zix-libs 0.6.2-r0 apk
zlib 1.3.1-r2 apk
zlib 1.3.2-r0 apk
zstd-libs 1.5.7-r0 apk
+3 -5
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.
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Cloud,Documents"
# supported architectures
available_architectures:
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
@@ -93,7 +92,7 @@ app_setup_block: |
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).
# init diagram
init_diagram: |
"nextcloud:latest": {
"nextcloud:previous": {
docker-mods
base {
fix-attr +\nlegacy cont-init
@@ -142,11 +141,10 @@ init_diagram: |
Base Images: {
"baseimage-alpine-nginx:3.22" <- "baseimage-alpine:3.22"
}
"nextcloud:latest" <- Base Images
"nextcloud:previous" <- Base Images
# changelog
changelogs:
- {date: "08.02.26:", desc: "Existing users should update: site-confs/default.conf - Deny access to all dotfiles."}
- {date: "10.07.25:", desc: "Rebase to Alpine 3.22."}
- {date: "14.10.25:", desc: "Rebase to Alpine 3.22."}
- {date: "12.02.25:", desc: "Rebase to Alpine 3.21."}
- {date: "09.01.25:", desc: "Fix uploading large files. Existing users should update their nginx confs."}
- {date: "09.07.24:", desc: "Add `previous` tag for n-1 releases."}
@@ -1,4 +1,4 @@
## Version 2026/05/05 - Changelog: https://github.com/linuxserver/docker-nextcloud/commits/master/root/defaults/nginx/site-confs/default.conf.sample
## Version 2025/10/14 - Changelog: https://github.com/linuxserver/docker-nextcloud/commits/previous/root/defaults/nginx/site-confs/default.conf.sample
# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
@@ -20,13 +20,6 @@ server {
root /app/www/public;
# deny access to all dotfiles
location ~ /\. {
access_log off;
log_not_found off;
return 404;
}
# display real ip in nginx logs when connected through reverse proxy via docker network
set_real_ip_from 172.16.0.0/12;
real_ip_header X-Forwarded-For;
@@ -56,12 +49,12 @@ server {
client_body_buffer_size 512k;
# HTTP response headers borrowed from Nextcloud `.htaccess`
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
@@ -99,19 +92,11 @@ server {
# The rules in this block are an adaptation of the rules
# in `.htaccess` that concern `/.well-known`.
location = /.well-known/carddav {
return 301 /remote.php/dav/;
}
location = /.well-known/caldav {
return 301 /remote.php/dav/;
}
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge {
try_files $uri $uri/ =404;
}
location /.well-known/pki-validation {
try_files $uri $uri/ =404;
}
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
# Let Nextcloud's API for `/.well-known` URIs handle all other
# requests by passing them to the front-end controller.
@@ -119,12 +104,8 @@ server {
}
# Rules borrowed from `.htaccess` to hide certain paths from clients
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) {
return 404;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
return 404;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
# Ensure this block, which passes PHP files to the PHP process, is above the blocks
# which handle static assets (as seen below). If this block is not declared first,
@@ -143,8 +124,8 @@ server {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_pass 127.0.0.1:9000;
fastcgi_intercept_errors on;
@@ -157,7 +138,7 @@ server {
location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463, $asset_immutable";
access_log off; # Optional: Don't log access to assets
access_log off; # Optional: Don't log access to assets
location ~ \.wasm$ {
default_type application/wasm;
@@ -167,8 +148,8 @@ server {
location ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
expires 7d; # Cache-Control policy borrowed from `.htaccess`
access_log off; # Optional: Don't log access to assets
expires 7d; # Cache-Control policy borrowed from `.htaccess`
access_log off; # Optional: Don't log access to assets
}
# Rule borrowed from `.htaccess`
@@ -191,4 +172,9 @@ server {
try_files $uri $uri/ /index.php$request_uri;
}
# deny access to .htaccess/.htpasswd files
location ~ /\.ht {
deny all;
}
}