Compare commits

..

25 Commits

Author SHA1 Message Date
LinuxServer-CI fd22973a29 Bot Updating Templated Files 2023-10-28 19:54:45 +00:00
Eric Nemchik 186e5194f5 Merge pull request #375 from linuxserver/disable-web-upgrade-master
Disable web upgrades using occ during init master
2023-10-28 14:53:07 -05:00
Eric Nemchik 7e18f6f27d Disable web upgrades using occ during init
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-10-28 14:24:11 -05:00
LinuxServer-CI b7d9f30b0d Bot Updating Package Versions 2023-10-28 15:33:13 +00:00
LinuxServer-CI 64922d3839 Bot Updating Package Versions 2023-10-24 11:50:26 +00:00
LinuxServer-CI 05e5c8363a Bot Updating Package Versions 2023-10-17 11:52:30 +00:00
LinuxServer-CI 2ecd6cb8d9 Bot Updating Package Versions 2023-10-10 11:54:26 +00:00
LinuxServer-CI 1cce29259a Bot Updating Templated Files 2023-10-10 11:50:44 +00:00
LinuxServer-CI 8e3018012d Bot Updating Templated Files 2023-10-10 11:49:16 +00:00
LinuxServer-CI 12810033bf Bot Updating Package Versions 2023-09-29 00:39:44 +00:00
Eric Nemchik 5f37ac0862 Merge pull request #358 from linuxserver/updatenotification-app
Re-add updatenotification app
2023-09-28 19:35:41 -05:00
LinuxServer-CI b92694d865 Bot Updating Package Versions 2023-09-26 11:50:26 +00:00
LinuxServer-CI 6f2ac537d5 Bot Updating Package Versions 2023-09-21 10:37:14 +00:00
quietsy 3accfcac32 Merge pull request #364 from linuxserver/fix-lsiown
Fix lsiown -R order
2023-09-18 17:01:45 +03:00
quietsy c93fe11b13 Fix lsiown -R order 2023-09-18 16:38:05 +03:00
LinuxServer-CI 330bf2caca Bot Updating Package Versions 2023-09-16 09:34:06 +00:00
LinuxServer-CI 9ac9165b38 Bot Updating Package Versions 2023-09-12 11:56:00 +00:00
LinuxServer-CI a116d0836b Bot Updating Package Versions 2023-09-05 11:52:55 +00:00
Eric Nemchik 2e9769050c Re-add updatenotification app
Closes https://github.com/linuxserver/docker-nextcloud/issues/356

Signed-off-by: GitHub <noreply@github.com>
2023-08-31 13:59:44 +00:00
LinuxServer-CI 76d3af10c2 Bot Updating Package Versions 2023-08-29 11:53:09 +00:00
LinuxServer-CI 87ab71daba Bot Updating Package Versions 2023-08-22 11:52:44 +00:00
LinuxServer-CI 8263ebe714 Bot Updating Package Versions 2023-08-15 11:57:27 +00:00
LinuxServer-CI 61cacaaa92 Bot Updating Package Versions 2023-08-15 11:52:26 +00:00
quietsy 1585ba556b Merge pull request #354 from linuxserver/master-develop
Add the develop tag to the readme
2023-08-15 10:54:46 +03:00
quietsy 8e868b8471 Add the develop tag to the readme 2023-08-15 10:21:47 +03:00
27 changed files with 881 additions and 939 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/develop/readme-vars.yml).
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-nextcloud/edit/master/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/develop/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/master/root), add an entry to the changelog
```yml
changelogs:
+2 -2
View File
@@ -67,10 +67,10 @@ body:
- type: textarea
attributes:
description: |
Provide a full docker log, output of "docker logs nextcloud"
Provide a full docker log, output of "docker logs linuxserver.io"
label: Container logs
placeholder: |
Output of `docker logs nextcloud`
Output of `docker logs linuxserver.io`
render: bash
validations:
required: true
+1 -1
View File
@@ -21,7 +21,7 @@
------------------------------
- [ ] I have read the [contributing](https://github.com/linuxserver/docker-nextcloud/blob/develop/.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/master/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
------------------------------
+48 -61
View File
@@ -4,31 +4,26 @@ on:
workflow_dispatch:
jobs:
external-trigger-develop:
external-trigger-master:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- uses: actions/checkout@v3.1.0
- name: External Trigger
if: github.ref == 'refs/heads/develop'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
if: github.ref == 'refs/heads/master'
run: |
printf "# External trigger for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^nextcloud_develop" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`nextcloud_develop\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_MASTER }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "> [!NOTE]" >> $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
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)
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_MASTER\". ****"
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_NEXTCLOUD_MASTER\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****"
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)
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 develop"
echo "**** Can't retrieve external version, exiting ****"
FAILURE_REASON="Can't retrieve external version for nextcloud branch master"
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"}],
@@ -36,10 +31,11 @@ jobs:
exit 1
fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
echo "**** External version: ${EXT_RELEASE} ****"
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
image="linuxserver/nextcloud"
tag="develop"
tag="latest"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fnextcloud%3Apull" \
| jq -r '.token')
@@ -64,54 +60,45 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
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 develop"
echo "**** Can't retrieve last pushed version, exiting ****"
FAILURE_REASON="Can't retrieve last pushed version for nextcloud tag latest"
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 }}
exit 1
fi
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
echo "**** Last pushed version: ${IMAGE_VERSION} ****"
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
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
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
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 develop 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 }}
else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
if "${artifacts_found}" == "true" ]]; then
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/develop/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
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 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
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/master/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'} ****"
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 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}"
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
@@ -9,37 +9,37 @@ jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- uses: actions/checkout@v3.1.0
with:
fetch-depth: '0'
- name: External Trigger Scheduler
run: |
printf "# External trigger scheduler for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
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:lstrip=3)' refs/remotes)
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
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_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-nextcloud/actions/workflows/external_trigger.yml/dispatches
else
echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
else
echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi
done
+1 -1
View File
@@ -9,5 +9,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/develop/.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/master/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }}
+42
View File
@@ -0,0 +1,42 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-master:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: Package Trigger
if: github.ref == 'refs/heads/master'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_MASTER }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_MASTER\` 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/master/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 master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_MASTER\". ****"
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_NEXTCLOUD_MASTER\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-nextcloud/job/master/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"
+26 -58
View File
@@ -9,74 +9,42 @@ jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- uses: actions/checkout@v3.1.0
with:
fetch-depth: '0'
- name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: |
printf "# Package trigger scheduler for docker-nextcloud\n\n" >> $GITHUB_STEP_SUMMARY
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:lstrip=3)' refs/remotes)
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/jenkins-vars.yml)
if [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
if [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif grep -q "^nextcloud_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
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
echo "> [!NOTE]" >> $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
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-nextcloud/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "Triggering package trigger workflow for branch ${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
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-nextcloud/actions/workflows/package_trigger.yml/dispatches
sleep 30
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
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
fi
done
if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
if [[ -n "${triggered_branches}" ]]; then
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
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) Triggered for nextcloud** \n'"${NOTIFY_BRANCHES}"'**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-nextcloud/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
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) 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"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
-2
View File
@@ -5,8 +5,6 @@ on:
- '**/run'
- '**/finish'
- '**/check'
- 'root/migrations/*'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1
+37 -37
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.20
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.18
# set version label
ARG BUILD_DATE
@@ -19,44 +19,45 @@ RUN \
gnu-libiconv \
imagemagick \
libxml2 \
php83-apcu \
php83-bcmath \
php83-bz2 \
php83-dom \
php83-exif \
php83-ftp \
php83-gd \
php83-gmp \
php83-imap \
php83-intl \
php83-ldap \
php83-opcache \
php83-pcntl \
php83-pdo_mysql \
php83-pdo_pgsql \
php83-pdo_sqlite \
php83-pecl-imagick \
php83-pecl-mcrypt \
php83-pecl-memcached \
php83-pecl-smbclient \
php83-pgsql \
php83-posix \
php83-redis \
php83-sodium \
php83-sqlite3 \
php83-sysvsem \
php83-xmlreader \
php82-apcu \
php82-bcmath \
php82-bz2 \
php82-dom \
php82-exif \
php82-ftp \
php82-gd \
php82-gmp \
php82-imap \
php82-intl \
php82-ldap \
php82-opcache \
php82-pcntl \
php82-pdo_mysql \
php82-pdo_pgsql \
php82-pdo_sqlite \
php82-pecl-imagick \
php82-pecl-memcached \
php82-pecl-smbclient \
php82-pgsql \
php82-posix \
php82-redis \
php82-sodium \
php82-sqlite3 \
php82-sysvsem \
php82-xmlreader \
rsync \
samba-client \
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 ****" && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php82/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 && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php82/php-fpm.conf && \
echo "**** configure php for nextcloud ****" && \
{ \
echo 'apc.enable_cli=1'; \
} >> /etc/php83/conf.d/apcu.ini && \
} >> /etc/php82/conf.d/apcu.ini && \
{ \
echo 'opcache.enable=1'; \
echo 'opcache.interned_strings_buffer=32'; \
@@ -66,7 +67,7 @@ RUN \
echo 'opcache.revalidate_freq=60'; \
echo 'opcache.jit=1255'; \
echo 'opcache.jit_buffer_size=128M'; \
} >> "/etc/php83/conf.d/00_opcache.ini" && \
} >> "/etc/php82/conf.d/00_opcache.ini" && \
{ \
echo 'memory_limit=512M'; \
echo 'upload_max_filesize=512M'; \
@@ -75,24 +76,23 @@ RUN \
echo 'max_execution_time=300'; \
echo 'output_buffering=0'; \
echo 'always_populate_raw_post_data=-1'; \
} >> "/etc/php83/conf.d/nextcloud.ini" && \
} >> "/etc/php82/conf.d/nextcloud.ini" && \
echo "**** install nextcloud ****" && \
mkdir -p \
/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' \
| jq -r '.[] | select(.prerelease != true) | .tag_name' \
| sed 's|^v||g' | sort -rV | head -1); \
fi && \
curl -o \
/tmp/nextcloud.tar.bz2 -L \
https://download.nextcloud.com/server/prereleases/nextcloud-${NEXTCLOUD_RELEASE}.tar.bz2 && \
https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_RELEASE}.tar.bz2 && \
tar xf /tmp/nextcloud.tar.bz2 -C \
/app/www/src --strip-components=1 && \
rm -rf /app/www/src/updater && \
mkdir -p /app/www/src/data && \
chmod +x /app/www/src/occ && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
rm -rf \
/tmp/*
+37 -37
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.20
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.18
# set version label
ARG BUILD_DATE
@@ -19,44 +19,45 @@ RUN \
gnu-libiconv \
imagemagick \
libxml2 \
php83-apcu \
php83-bcmath \
php83-bz2 \
php83-dom \
php83-exif \
php83-ftp \
php83-gd \
php83-gmp \
php83-imap \
php83-intl \
php83-ldap \
php83-opcache \
php83-pcntl \
php83-pdo_mysql \
php83-pdo_pgsql \
php83-pdo_sqlite \
php83-pecl-imagick \
php83-pecl-mcrypt \
php83-pecl-memcached \
php83-pecl-smbclient \
php83-pgsql \
php83-posix \
php83-redis \
php83-sodium \
php83-sqlite3 \
php83-sysvsem \
php83-xmlreader \
php82-apcu \
php82-bcmath \
php82-bz2 \
php82-dom \
php82-exif \
php82-ftp \
php82-gd \
php82-gmp \
php82-imap \
php82-intl \
php82-ldap \
php82-opcache \
php82-pcntl \
php82-pdo_mysql \
php82-pdo_pgsql \
php82-pdo_sqlite \
php82-pecl-imagick \
php82-pecl-memcached \
php82-pecl-smbclient \
php82-pgsql \
php82-posix \
php82-redis \
php82-sodium \
php82-sqlite3 \
php82-sysvsem \
php82-xmlreader \
rsync \
samba-client \
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 ****" && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php83/php-fpm.conf && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php82/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 && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php82/php-fpm.conf && \
echo "**** configure php for nextcloud ****" && \
{ \
echo 'apc.enable_cli=1'; \
} >> /etc/php83/conf.d/apcu.ini && \
} >> /etc/php82/conf.d/apcu.ini && \
{ \
echo 'opcache.enable=1'; \
echo 'opcache.interned_strings_buffer=32'; \
@@ -66,7 +67,7 @@ RUN \
echo 'opcache.revalidate_freq=60'; \
echo 'opcache.jit=1255'; \
echo 'opcache.jit_buffer_size=128M'; \
} >> "/etc/php83/conf.d/00_opcache.ini" && \
} >> "/etc/php82/conf.d/00_opcache.ini" && \
{ \
echo 'memory_limit=512M'; \
echo 'upload_max_filesize=512M'; \
@@ -75,24 +76,23 @@ RUN \
echo 'max_execution_time=300'; \
echo 'output_buffering=0'; \
echo 'always_populate_raw_post_data=-1'; \
} >> "/etc/php83/conf.d/nextcloud.ini" && \
} >> "/etc/php82/conf.d/nextcloud.ini" && \
echo "**** install nextcloud ****" && \
mkdir -p \
/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' \
| jq -r '.[] | select(.prerelease != true) | .tag_name' \
| sed 's|^v||g' | sort -rV | head -1); \
fi && \
curl -o \
/tmp/nextcloud.tar.bz2 -L \
https://download.nextcloud.com/server/prereleases/nextcloud-${NEXTCLOUD_RELEASE}.tar.bz2 && \
https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_RELEASE}.tar.bz2 && \
tar xf /tmp/nextcloud.tar.bz2 -C \
/app/www/src --strip-components=1 && \
rm -rf /app/www/src/updater && \
mkdir -p /app/www/src/data && \
chmod +x /app/www/src/occ && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
rm -rf \
/tmp/*
Vendored
+173 -263
View File
@@ -16,9 +16,6 @@ pipeline {
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
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'
LS_USER = 'linuxserver'
LS_REPO = 'docker-nextcloud'
@@ -33,28 +30,14 @@ pipeline {
CI_PORT='443'
CI_SSL='true'
CI_DELAY='120'
CI_DOCKERENV=''
CI_AUTH=''
CI_DOCKERENV='TZ=US/Pacific'
CI_AUTH='user:password'
CI_WEBPATH=''
}
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
stage("Set ENV Variables base"){
steps{
echo "Running on node: ${NODE_NAME}"
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
@@ -64,7 +47,7 @@ pipeline {
script{
env.EXIT_STATUS = ''
env.LS_RELEASE = sh(
script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:develop 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}:latest 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' ''',
@@ -75,16 +58,11 @@ pipeline {
env.COMMIT_SHA = sh(
script: '''git rev-parse HEAD''',
returnStdout: true).trim()
env.GH_DEFAULT_BRANCH = sh(
script: '''git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||' ''',
returnStdout: true).trim()
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.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml'
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
}
sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{
env.LS_RELEASE_NUMBER = sh(
script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''',
@@ -93,7 +71,7 @@ pipeline {
script{
env.LS_TAG_NUMBER = sh(
script: '''#! /bin/bash
tagsha=$(git rev-list -n 1 develop-${LS_RELEASE} 2>/dev/null)
tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null)
if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
echo ${LS_RELEASE_NUMBER}
elif [ -z "${GIT_COMMIT}" ]; then
@@ -131,7 +109,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 '.[] | select(.prerelease != true) | .tag_name' | sed 's|^v||g' | sort -rV | head -1 ''',
returnStdout: true).trim()
env.RELEASE_LINK = 'custom_command'
}
@@ -142,7 +120,7 @@ pipeline {
steps{
script{
env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/ ]//g' ''',
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim()
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/
@@ -160,7 +138,7 @@ pipeline {
}
if (env.SEMVER != null) {
if (BRANCH_NAME != "${env.GH_DEFAULT_BRANCH}") {
if (BRANCH_NAME != "master" && BRANCH_NAME != "main") {
env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}"
}
println("SEMVER: ${env.SEMVER}")
@@ -171,10 +149,10 @@ pipeline {
}
}
}
// If this is a develop build use live docker endpoints
// If this is a master build use live docker endpoints
stage("Set ENV live build"){
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
}
steps {
@@ -184,20 +162,20 @@ 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-develop-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-develop-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else {
env.CI_TAGS = 'develop-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = 'develop-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'develop-version-' + env.EXT_RELEASE_CLEAN
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'version-' + env.EXT_RELEASE_CLEAN
}
}
}
// If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){
when {
not {branch "develop"}
not {branch "master"}
environment name: 'CHANGE_ID', value: ''
}
steps {
@@ -207,13 +185,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-develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
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
} else {
env.CI_TAGS = 'develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.CI_TAGS = 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 = 'develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'develop-version-' + env.EXT_RELEASE_CLEAN
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.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
}
}
@@ -230,13 +208,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-develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
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
} else {
env.CI_TAGS = 'develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.CI_TAGS = 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 = 'develop-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.EXT_RELEASE_TAG = 'develop-version-' + env.EXT_RELEASE_CLEAN
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.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/'
}
@@ -261,11 +239,9 @@ pipeline {
-v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
ghcr.io/linuxserver/baseimage-alpine:3.20 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache python3 && \
python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \
pip install --no-cache-dir s3cmd && \
ghcr.io/linuxserver/baseimage-alpine:3.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache py3-pip && \
pip install 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" || :'''
}
}
@@ -273,7 +249,7 @@ pipeline {
// Use helper containers to render templated files
stage('Update-Templates') {
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
expression {
env.CONTAINER_NAME != null
@@ -284,34 +260,26 @@ pipeline {
set -e
TEMPDIR=$(mktemp -d)
docker pull ghcr.io/linuxserver/jenkins-builder:latest
# Cloned repo paths for templating:
# ${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
# ${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 develop --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"
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
# 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 develop
git checkout -f master
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 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 --all
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}
exit 0
else
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"
# 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 Dockerfile.armhf"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
@@ -321,21 +289,20 @@ 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 develop
git checkout -f master
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 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 --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Deleting old/deprecated templates and exiting build, new one will trigger based on commit"
echo "Deleting old and deprecated templates"
rm -Rf ${TEMPDIR}
exit 0
else
echo "No templates to delete"
fi
echo "Starting Stage 3 - Update templates"
# Stage 3 - Update templates
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
@@ -343,7 +310,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 develop
git checkout -f master
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
@@ -356,50 +323,31 @@ 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 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 --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating templates and exiting build, new one will trigger based on commit"
rm -Rf ${TEMPDIR}
exit 0
else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "No templates to update"
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
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -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"
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
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
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone 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"
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -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 && [[ -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
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
@@ -410,42 +358,7 @@ pipeline {
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} --rebase
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} || \
(MAXWAIT="10" && echo "Push to unraid templates failed, trying again in ${MAXWAIT} seconds" && \
sleep $((RANDOM % MAXWAIT)) && \
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase && \
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH})
else
echo "No updates to Unraid template needed, skipping"
fi
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
if curl -s https://hub.docker.com/v2/namespaces/${DOCKERHUB_IMAGE%%/*}/repositories/${DOCKERHUB_IMAGE##*/}/tags | jq -r '.message' | grep -q 404; then
echo "Docker Hub endpoint doesn't exist. Creating endpoint first."
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')
curl -s \
-H "Authorization: JWT ${DH_TOKEN}" \
-H "Content-Type: application/json" \
-X POST \
-d '{"name":"'${DOCKERHUB_IMAGE##*/}'", "namespace":"'${DOCKERHUB_IMAGE%%/*}'"}' \
https://hub.docker.com/v2/repositories/ || :
fi
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')
curl -s \
-H "Authorization: JWT ${DH_TOKEN}" \
-H "Content-Type: application/json" \
-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."
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git --all
fi
rm -Rf ${TEMPDIR}'''
script{
@@ -458,7 +371,7 @@ pipeline {
// Exit the build if the Templated files were just updated
stage('Template-exit') {
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true'
expression {
@@ -471,10 +384,10 @@ pipeline {
}
}
}
// If this is a develop build check the S6 service file perms
// If this is a master build check the S6 service file perms
stage("Check S6 Service file Permissions"){
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
@@ -492,27 +405,23 @@ pipeline {
}
}
/* #######################
GitLab Mirroring and Quay.io Repo Visibility
GitLab Mirroring
####################### */
// Ping into Gitlab to mirror this repo and have a registry endpoint & mark this repo on Quay.io as public
stage("GitLab Mirror and Quay.io Visibility"){
// Ping into Gitlab to mirror this repo and have a registry endpoint
stage("GitLab Mirror"){
when {
environment name: 'EXIT_STATUS', value: ''
}
steps{
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}',\
"name":"'${LS_REPO}'",
"mirror":true,\
"import_url":"https://github.com/linuxserver/'${LS_REPO}'.git",\
"issues_access_level":"disabled",\
"merge_requests_access_level":"disabled",\
"repository_access_level":"enabled",\
"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"}' ||: '''
-d '{"namespace_id":'${GITLAB_NAMESPACE}',\
"name":"'${LS_REPO}'",
"mirror":true,\
"import_url":"https://github.com/linuxserver/'${LS_REPO}'.git",\
"issues_access_level":"disabled",\
"merge_requests_access_level":"disabled",\
"repository_access_level":"enabled",\
"visibility":"public"}' '''
}
}
/* ###############
@@ -543,7 +452,6 @@ pipeline {
--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. \" \
--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} ."
}
}
@@ -575,7 +483,6 @@ pipeline {
--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. \" \
--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} ."
}
}
@@ -604,10 +511,9 @@ pipeline {
--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. \" \
--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} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry_backoff(5,5) {
retry(5) {
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
}
sh '''#! /bin/bash
@@ -623,7 +529,7 @@ pipeline {
// Take the image we just built and dump package versions for comparison
stage('Update-packages') {
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
@@ -631,7 +537,7 @@ pipeline {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" != "true" ]; then
if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else
LOCAL_CONTAINER=${IMAGE}:${META_TAG}
@@ -646,14 +552,13 @@ 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 develop
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master
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 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 --all
echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag updated, stopping build process"
else
@@ -671,7 +576,7 @@ pipeline {
// Exit the build if the package file was just updated
stage('PACKAGE-exit') {
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: ''
@@ -685,7 +590,7 @@ pipeline {
// Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') {
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: ''
@@ -719,27 +624,18 @@ pipeline {
}
sh '''#! /bin/bash
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
if [ "${MULTIARCH}" == "true" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi
docker run --rm \
--shm-size=1gb \
-v /var/run/docker.sock:/var/run/docker.sock \
-e IMAGE=\"${IMAGE}\" \
-e DOCKER_LOGS_TIMEOUT=\"${CI_DELAY}\" \
-e DELAY_START=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e RELEASE_TAG=\"develop\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
@@ -749,7 +645,6 @@ pipeline {
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-e NODE_NAME=\"${NODE_NAME}\" \
-t ghcr.io/linuxserver/ci:latest \
python3 test_build.py'''
}
@@ -766,6 +661,12 @@ pipeline {
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
@@ -773,25 +674,25 @@ pipeline {
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $DOCKERPASS | docker login -u $DOCKERUSER --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 $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:develop
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi
docker push ${PUSHIMAGE}:develop
docker push ${PUSHIMAGE}:latest
docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${PUSHIMAGE}:${SEMVER}
docker push ${PUSHIMAGE}:${SEMVER}
fi
done
'''
@@ -807,6 +708,12 @@ pipeline {
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
@@ -814,23 +721,23 @@ pipeline {
passwordVariable: 'QUAYPASS'
]
]) {
retry_backoff(5,5) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $DOCKERPASS | docker login -u $DOCKERUSER --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 $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-develop
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-develop
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
@@ -838,21 +745,43 @@ pipeline {
fi
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:amd64-develop
docker push ${MANIFESTIMAGE}:amd64-latest
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-develop
docker push ${MANIFESTIMAGE}:arm64v8-latest
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
done
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker buildx imagetools create -t ${MANIFESTIMAGE}:develop ${MANIFESTIMAGE}:amd64-develop ${MANIFESTIMAGE}:arm64v8-develop
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm64v8-latest --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_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
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest push --purge ${MANIFESTIMAGE}:${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-latest")
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:amd64-latest
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-latest
fi
docker manifest push --purge ${MANIFESTIMAGE}:latest
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
done
'''
@@ -863,7 +792,7 @@ pipeline {
// If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') {
when {
branch "develop"
branch "master"
expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
@@ -875,17 +804,17 @@ pipeline {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to develop",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\
"tagger": {"name": "LinuxServer-CI","email": "ci@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag"
sh '''#! /bin/bash
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "develop",\
"target_commitish": "master",\
"name": "'${META_TAG}'",\
"body": "**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": false}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
}
@@ -893,14 +822,14 @@ pipeline {
// Add protection to the release branch
stage('Github-Release-Branch-Protection') {
when {
branch "develop"
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
echo "Setting up protection for release branch develop"
echo "Setting up protection for release branch master"
sh '''#! /bin/bash
curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/develop/protection \
curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/master/protection \
-d $(jq -c . << EOF
{
"required_status_checks": null,
@@ -925,6 +854,39 @@ EOF
) '''
}
}
// Use helper container to sync the current README on master to the dockerhub endpoint
stage('Sync-README') {
when {
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
docker pull ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH="${BRANCH_NAME}" -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
docker pull ghcr.io/linuxserver/readme-sync
docker run --rm=true \
-e DOCKERHUB_USERNAME=$DOCKERUSER \
-e DOCKERHUB_PASSWORD=$DOCKERPASS \
-e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \
-e DOCKER_REPOSITORY=${IMAGE} \
-e GIT_BRANCH=master \
-v ${TEMPDIR}/docker-${CONTAINER_NAME}:/mnt \
ghcr.io/linuxserver/readme-sync bash -c 'node sync'
rm -Rf ${TEMPDIR} '''
}
}
}
// If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') {
when {
@@ -1009,53 +971,18 @@ EOF
###################### */
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{
env.JOB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"'
}else{
if (currentBuild.currentResult == "SUCCESS"){
if (env.GITHUBIMAGE =~ /lspipepr/){
env.JOB_WEBHOOK_STATUS='Success'
env.JOB_WEBHOOK_COLOUR=3957028
env.JOB_WEBHOOK_FOOTER='PR Build'
}else if (env.GITHUBIMAGE =~ /lsiodev/){
env.JOB_WEBHOOK_STATUS='Success'
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"}],\
}
else 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,\
"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"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
else {
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,\
"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"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
@@ -1073,20 +1000,3 @@ 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
}
+32 -21
View File
@@ -1,5 +1,5 @@
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-nextcloud/blob/develop/.github/CONTRIBUTING.md -->
<!-- Please read https://github.com/linuxserver/docker-nextcloud/blob/master/.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!")
@@ -28,7 +28,7 @@ Find us at:
# [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)
[![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)
[![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 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)
@@ -36,8 +36,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%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%2Fdevelop%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/nextcloud/develop/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%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)
[Nextcloud](https://nextcloud.com/) gives you access to all your files wherever you are.
@@ -47,9 +47,9 @@ Where are your photos and documents? With Nextcloud you pick a server of your ch
## Supported Architectures
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/).
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/nextcloud:develop` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
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.
The architectures supported by this image are:
@@ -110,16 +110,17 @@ To help you get started creating a container from this image you can either use
```yaml
---
version: "2.1"
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:develop
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /path/to/nextcloud/config:/config
- /path/to/appdata:/config
- /path/to/data:/data
ports:
- 443:443
@@ -135,10 +136,10 @@ docker run -d \
-e PGID=1000 \
-e TZ=Etc/UTC \
-p 443:443 \
-v /path/to/nextcloud/config:/config \
-v /path/to/appdata:/config \
-v /path/to/data:/data \
--restart unless-stopped \
lscr.io/linuxserver/nextcloud:develop
lscr.io/linuxserver/nextcloud:latest
```
## Parameters
@@ -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 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). |
| `-v /config` | Persistent config files |
| `-v /config` | Nextcloud configs. |
| `-v /data` | Your personal data. |
## Environment variables from files (Docker secrets)
@@ -218,12 +219,12 @@ 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:develop
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nextcloud:latest
```
## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers:
@@ -266,7 +267,7 @@ Below are the instructions for updating containers:
* Update the image:
```bash
docker pull lscr.io/linuxserver/nextcloud:develop
docker pull lscr.io/linuxserver/nextcloud:latest
```
* Stop the running container:
@@ -288,10 +289,24 @@ Below are the instructions for updating containers:
docker image prune
```
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
* Pull the latest image at its tag and replace it with the same env variables in one run:
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once nextcloud
```
* You can also remove the old dangling images: `docker image prune`
**warning**: We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
### 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
@@ -303,7 +318,7 @@ cd docker-nextcloud
docker build \
--no-cache \
--pull \
-t lscr.io/linuxserver/nextcloud:develop .
-t lscr.io/linuxserver/nextcloud:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
@@ -316,10 +331,6 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## 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.
* **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.
* **31.08.23:** - Re-add updatenotification app. This allows users to be notified for app updates, but also notifies for NextCloud updates. Updating NextCloud via the web UI is not supported when using this image.
* **14.08.23:** - Add develop branch.
+7 -6
View File
@@ -3,10 +3,11 @@
# 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: prerelease
release_tag: develop
ls_branch: develop
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
build_armhf: false
repo_vars:
- BUILD_VERSION_ARG = 'NEXTCLOUD_RELEASE'
- LS_USER = 'linuxserver'
@@ -22,6 +23,6 @@ repo_vars:
- CI_PORT='443'
- CI_SSL='true'
- CI_DELAY='120'
- CI_DOCKERENV=''
- CI_AUTH=''
- CI_DOCKERENV='TZ=US/Pacific'
- CI_AUTH='user:password'
- CI_WEBPATH=''
+391 -404
View File
@@ -1,404 +1,391 @@
NAME VERSION TYPE
Process Wrapper 1.0.0.0 dotnet (+1 duplicate)
activity 3.0.0 npm
alpine-baselayout 3.6.5-r0 apk
alpine-baselayout-data 3.6.5-r0 apk
alpine-keys 2.4-r1 apk
alpine-release 3.20.3-r0 apk
alsa-lib 1.2.11-r0 apk
amphp/amp v2.6.4 php-composer
amphp/byte-stream v1.8.1 php-composer
amphp/parallel v1.4.3 php-composer
amphp/parser v1.1.0 php-composer
amphp/process v1.1.4 php-composer
amphp/serialization v1.0.0 php-composer
amphp/sync v1.4.2 php-composer
aom-libs 3.9.1-r0 apk
apache2-utils 2.4.62-r0 apk
apk-tools 2.14.4-r0 apk
app_api 1.0.0 npm
apr 1.7.5-r0 apk
apr-util 1.6.3-r1 apk
argon2-libs 20190702-r5 apk
aws/aws-crt-php v1.2.5 php-composer
aws/aws-sdk-php 3.311.2 php-composer
bamarni/composer-bin-plugin 1.8.2 php-composer
bantu/ini-get-wrapper v1.0.1 php-composer
bash 5.2.26-r0 apk
brick/math 0.12.1 php-composer
brotli-libs 1.1.0-r2 apk
bruteforcesettings 3.0.0 npm
busybox 1.36.1-r29 apk
busybox-binsh 1.36.1-r29 apk
c-ares 1.28.1-r0 apk
c-client 2007f-r15 apk
ca-certificates 20240705-r0 apk
ca-certificates-bundle 20240705-r0 apk
catatonit 0.2.0-r0 apk
christian-riesen/base32 1.6.0 php-composer
cjson 1.7.18-r0 apk
composer 2.7.9 binary
coreutils 9.5-r1 apk
coreutils-env 9.5-r1 apk
coreutils-fmt 9.5-r1 apk
coreutils-sha512sum 9.5-r1 apk
curl 8.9.1-r2 apk
cweagans/composer-patches 1.7.3 php-composer
dbus-libs 1.14.10-r1 apk
deepdiver/zipstreamer v2.0.3 php-composer
deepdiver1975/tarstreamer v2.1.0 php-composer
doctrine/cache 2.2.0 php-composer
doctrine/dbal 3.9.1 php-composer
doctrine/deprecations 1.1.3 php-composer
doctrine/event-manager 2.0.1 php-composer
doctrine/lexer 3.0.1 php-composer
egulias/email-validator 4.0.2 php-composer
ffmpeg 6.1.1-r8 apk
ffmpeg-libavcodec 6.1.1-r8 apk
ffmpeg-libavdevice 6.1.1-r8 apk
ffmpeg-libavfilter 6.1.1-r8 apk
ffmpeg-libavformat 6.1.1-r8 apk
ffmpeg-libavutil 6.1.1-r8 apk
ffmpeg-libpostproc 6.1.1-r8 apk
ffmpeg-libswresample 6.1.1-r8 apk
ffmpeg-libswscale 6.1.1-r8 apk
fftw-double-libs 3.3.10-r5 apk
files_downloadlimit 3.0.0 npm
files_pdfviewer 3.0.0 npm
findutils 4.9.0-r5 apk
firstrunwizard 3.0.0 npm
fontconfig 2.15.0-r1 apk
freetype 2.13.2-r0 apk
fribidi 1.0.15-r0 apk
fusonic/opengraph v2.3.0 php-composer
gdbm 1.23-r1 apk
giflib 5.2.2-r0 apk
giggsey/libphonenumber-for-php-lite 8.13.45 php-composer
git 2.45.2-r0 apk
git-init-template 2.45.2-r0 apk
glib 2.80.5-r0 apk
glslang-libs 1.3.261.1-r0 apk
gmp 6.3.0-r1 apk
gnu-libiconv 1.17-r2 apk
gnu-libiconv-libs 1.17-r2 apk
gnutls 3.8.5-r0 apk
graphite2 1.3.14-r6 apk
guzzlehttp/guzzle 7.8.1 php-composer
guzzlehttp/promises 2.0.2 php-composer
guzzlehttp/psr7 2.6.2 php-composer
guzzlehttp/uri-template v1.0.3 php-composer
harfbuzz 8.5.0-r0 apk
hexogen/kdtree v0.2.5 php-composer
hwdata-pci 0.382-r0 apk
icewind/searchdav v3.1.0 php-composer
icewind/smb v3.5.4 php-composer
icewind/streams v0.7.7 php-composer (+1 duplicate)
icu-data-en 74.2-r0 apk
icu-libs 74.2-r0 apk
imagemagick 7.1.1.32-r2 apk
imagemagick-jpeg 7.1.1.32-r2 apk
imagemagick-jxl 7.1.1.32-r2 apk
imagemagick-libs 7.1.1.32-r2 apk
imagemagick-webp 7.1.1.32-r2 apk
imath 3.1.12-r0 apk
jansson 2.14-r4 apk
jq 1.7.1-r0 apk
justinrainbow/json-schema v5.2.13 php-composer
kornrunner/blurhash v1.2.2 php-composer
lame-libs 3.100-r5 apk
laravel/serializable-closure v1.3.5 php-composer
lcms2 2.16-r0 apk
lcobucci/clock 3.0.0 php-composer
ldb 2.8.0-r1 apk
league/flysystem 2.5.0 php-composer
league/mime-type-detection 1.11.0 php-composer
libSvtAv1Enc 2.0.0-r1 apk
libacl 2.3.2-r0 apk
libarchive 3.7.6-r0 apk
libass 0.17.2-r0 apk
libasyncns 0.8-r3 apk
libattr 2.5.2-r0 apk
libauth-samba 4.19.6-r0 apk
libavif 1.0.4-r0 apk
libblkid 2.40.1-r1 apk
libbluray 1.3.4-r1 apk
libbsd 0.12.2-r0 apk
libbz2 1.0.8-r6 apk
libcap2 2.70-r0 apk
libcrypto3 3.3.2-r0 apk
libcurl 8.9.1-r2 apk
libdav1d 1.4.2-r0 apk
libdovi 3.3.0-r0 apk
libdrm 2.4.120-r0 apk
libeconf 0.6.3-r0 apk
libedit 20240517.3.1-r0 apk
libevent 2.1.12-r7 apk
libexpat 2.6.3-r0 apk
libffi 3.4.6-r0 apk
libflac 1.4.3-r1 apk
libformw 6.4_p20240420-r1 apk
libgcc 13.2.1_git20240309-r0 apk
libgomp 13.2.1_git20240309-r0 apk
libhwy 1.0.7-r0 apk
libice 1.1.1-r6 apk
libidn2 2.3.7-r0 apk
libintl 0.22.5-r0 apk
libjpeg-turbo 3.0.3-r0 apk
libjxl 0.10.2-r0 apk
libldap 2.6.8-r0 apk
libltdl 2.4.7-r3 apk
libmcrypt 2.5.8-r10 apk
libmd 1.1.0-r0 apk
libmemcached-libs 1.1.4-r1 apk
libmount 2.40.1-r1 apk
libncursesw 6.4_p20240420-r1 apk
libogg 1.3.5-r5 apk
libopenmpt 0.7.7-r0 apk
libpanelw 6.4_p20240420-r1 apk
libpciaccess 0.18.1-r0 apk
libplacebo 6.338.2-r1 apk
libpng 1.6.44-r0 apk
libpq 16.3-r0 apk
libproc2 4.0.4-r0 apk
libpsl 0.21.5-r1 apk
libpulse 17.0-r0 apk
librist 0.2.10-r1 apk
libsasl 2.1.28-r6 apk
libsharpyuv 1.3.2-r0 apk
libsm 1.2.4-r4 apk
libsmbclient 4.19.6-r0 apk
libsndfile 1.2.2-r0 apk
libsodium 1.0.19-r0 apk
libsrt 1.5.3-r0 apk
libssh 0.10.6-r0 apk
libssl3 3.3.2-r0 apk
libstdc++ 13.2.1_git20240309-r0 apk
libtasn1 4.19.0-r2 apk
libtheora 1.1.1-r18 apk
libunibreak 6.1-r0 apk
libunistring 1.2-r0 apk
libuuid 2.40.1-r1 apk
libva 2.21.0-r0 apk
libvdpau 1.5-r3 apk
libvorbis 1.3.7-r2 apk
libvpx 1.14.1-r0 apk
libwbclient 4.19.6-r0 apk
libwebp 1.3.2-r0 apk
libwebpdemux 1.3.2-r0 apk
libwebpmux 1.3.2-r0 apk
libx11 1.8.9-r1 apk
libxau 1.0.11-r4 apk
libxcb 1.16.1-r0 apk
libxdmcp 1.1.5-r1 apk
libxext 1.3.6-r2 apk
libxfixes 6.0.1-r4 apk
libxml2 2.12.7-r0 apk
libxpm 3.5.17-r0 apk
libxt 1.3.0-r5 apk
libxxhash 0.8.2-r2 apk
libzip 1.10.1-r0 apk
libzmq 4.3.5-r2 apk
lilv-libs 0.24.24-r1 apk
linux-pam 1.6.0-r0 apk
lmdb 0.9.32-r0 apk
logreader 3.0.0 npm
logrotate 3.21.0-r1 apk
lz4-libs 1.9.4-r5 apk
masterminds/html5 2.9.0 php-composer
mbedtls 3.6.1-r0 apk
mexitek/phpcolors v1.0.4 php-composer
microsoft/azure-storage-blob 1.5.4 php-composer
microsoft/azure-storage-common 1.5.2 php-composer
mlocati/ip-lib 1.18.0 php-composer
mpg123-libs 1.32.6-r0 apk
mtdowling/jmespath.php 2.7.0 php-composer
musl 1.2.5-r0 apk
musl-utils 1.2.5-r0 apk
nano 8.0-r0 apk
ncurses-terminfo-base 6.4_p20240420-r1 apk
netcat-openbsd 1.226-r0 apk
nettle 3.9.1-r0 apk
nextcloud 1.0.0 npm
nextcloud/coding-standard v1.2.1 php-composer
nextcloud/lognormalizer v1.0.0 php-composer
nghttp2-libs 1.62.1-r0 apk
nginx 1.26.2-r0 apk
notifications 3.0.0 npm
numactl 2.0.18-r0 apk
onevpl-libs 2023.3.1-r2 apk
oniguruma 6.9.9-r0 apk
openexr-libiex 3.1.13-r1 apk
openexr-libilmthread 3.1.13-r1 apk
openexr-libopenexr 3.1.13-r1 apk
openssl 3.3.2-r0 apk
opus 1.5.2-r0 apk
orc 0.4.39-r0 apk
p11-kit 0.25.3-r0 apk
paragonie/constant_time_encoding v2.7.0 php-composer
password_policy 2.0.0 npm
pcre 8.45-r3 apk
pcre2 10.43-r0 apk
pear/archive_tar 1.5.0 php-composer
pear/console_getopt v1.4.3 php-composer
pear/pear-core-minimal v1.10.15 php-composer
pear/pear_exception v1.0.2 php-composer
photos 3.0.0 npm
php-cs-fixer/shim v3.61.1 php-composer
php-http/guzzle7-adapter 1.0.0 php-composer
php-http/httplug 2.2.0 php-composer
php-http/promise 1.1.0 php-composer
php-opencloud/openstack v3.10.0 php-composer
php83 8.3.12-r0 apk
php83-bcmath 8.3.12-r0 apk
php83-bz2 8.3.12-r0 apk
php83-common 8.3.12-r0 apk
php83-ctype 8.3.12-r0 apk
php83-curl 8.3.12-r0 apk
php83-dom 8.3.12-r0 apk
php83-exif 8.3.12-r0 apk
php83-fileinfo 8.3.12-r0 apk
php83-fpm 8.3.12-r0 apk
php83-ftp 8.3.12-r0 apk
php83-gd 8.3.12-r0 apk
php83-gmp 8.3.12-r0 apk
php83-iconv 8.3.12-r0 apk
php83-imap 8.3.12-r0 apk
php83-intl 8.3.12-r0 apk
php83-ldap 8.3.12-r0 apk
php83-mbstring 8.3.12-r0 apk
php83-mysqlnd 8.3.12-r0 apk
php83-opcache 8.3.12-r0 apk
php83-openssl 8.3.12-r0 apk
php83-pcntl 8.3.12-r0 apk
php83-pdo 8.3.12-r0 apk
php83-pdo_mysql 8.3.12-r0 apk
php83-pdo_pgsql 8.3.12-r0 apk
php83-pdo_sqlite 8.3.12-r0 apk
php83-pecl-apcu 5.1.23-r0 apk
php83-pecl-igbinary 3.2.15-r0 apk
php83-pecl-imagick 3.7.0-r0 apk
php83-pecl-mcrypt 1.0.7-r0 apk
php83-pecl-memcached 3.2.0-r0 apk
php83-pecl-msgpack 2.2.0-r2 apk
php83-pecl-redis 6.1.0-r0 apk
php83-pecl-smbclient 1.1.1-r0 apk
php83-pgsql 8.3.12-r0 apk
php83-phar 8.3.12-r0 apk
php83-posix 8.3.12-r0 apk
php83-session 8.3.12-r0 apk
php83-simplexml 8.3.12-r0 apk
php83-sockets 8.3.12-r0 apk
php83-sodium 8.3.12-r0 apk
php83-sqlite3 8.3.12-r0 apk
php83-sysvsem 8.3.12-r0 apk
php83-xml 8.3.12-r0 apk
php83-xmlreader 8.3.12-r0 apk
php83-xmlwriter 8.3.12-r0 apk
php83-zip 8.3.12-r0 apk
phpseclib/phpseclib 2.0.47 php-composer
pimple/pimple v3.5.0 php-composer
popt 1.19-r3 apk
privacy 2.0.0 npm
procps-ng 4.0.4-r0 apk
psr/cache 3.0.0 php-composer
psr/clock 1.0.0 php-composer
psr/container 2.0.2 php-composer
psr/event-dispatcher 1.0.0 php-composer
psr/http-client 1.0.3 php-composer
psr/http-factory 1.1.0 php-composer
psr/http-message 1.1 php-composer
psr/log 1.1.4 php-composer
psr/log 2.0.0 php-composer
punic/punic 3.8.1 php-composer
ralouphie/getallheaders 3.0.3 php-composer
rav1e-libs 0.7.1-r0 apk
readline 8.2.10-r0 apk
recommendations 3.0.0 npm
related_resources 1.5.0 npm
rsync 3.3.0-r0 apk
rubix/ml dev-chore/bump-flysystem-v2.1.1 php-composer
rubix/tensor 2.2.3 php-composer
rullzer/easytotp v0.1.4 php-composer
sabre/dav 4.6.0 php-composer
sabre/event 5.1.4 php-composer
sabre/http 5.1.10 php-composer
sabre/uri 2.3.3 php-composer
sabre/vobject 4.5.4 php-composer
sabre/xml 2.2.7 php-composer
samba-client 4.19.6-r0 apk
samba-client-libs 4.19.6-r0 apk
samba-common 4.19.6-r0 apk
samba-libs 4.19.6-r0 apk
samba-util-libs 4.19.6-r0 apk
scanelf 1.3.7-r2 apk
scssphp/scssphp v1.12.1 php-composer
sdl2 2.28.5-r1 apk
serd-libs 0.32.2-r0 apk
shaderc 2024.0-r0 apk
shadow 4.15.1-r0 apk
skalibs 2.14.1.1-r0 apk
sord-libs 0.16.16-r0 apk
soxr 0.1.3-r7 apk
speexdsp 1.2.1-r2 apk
spirv-tools 1.3.261.1-r0 apk
spomky-labs/cbor-php 3.1.0 php-composer
spomky-labs/pki-framework 1.2.1 php-composer
sqlite-libs 3.45.3-r1 apk
sratom 0.6.16-r0 apk
ssl_client 1.36.1-r29 apk
stecman/symfony-console-completion 0.11.0 php-composer
sudo 1.9.15_p5-r0 apk
support 2.0.0 npm
suspicious_login 8.0.0 npm
symfony/console v5.4.35 php-composer
symfony/css-selector v6.4.3 php-composer
symfony/deprecation-contracts v3.5.0 php-composer
symfony/dom-crawler v6.4.4 php-composer
symfony/event-dispatcher v5.4.26 php-composer
symfony/event-dispatcher-contracts v3.0.2 php-composer
symfony/http-foundation v5.4.25 php-composer
symfony/mailer v5.4.22 php-composer
symfony/mime v5.4.19 php-composer
symfony/polyfill-ctype v1.29.0 php-composer
symfony/polyfill-intl-grapheme v1.29.0 php-composer
symfony/polyfill-intl-idn v1.29.0 php-composer
symfony/polyfill-intl-normalizer v1.29.0 php-composer
symfony/polyfill-mbstring v1.27.0 php-composer
symfony/polyfill-mbstring v1.31.0 php-composer
symfony/polyfill-php72 v1.29.0 php-composer
symfony/polyfill-php73 v1.26.0 php-composer
symfony/polyfill-php73 v1.28.0 php-composer
symfony/polyfill-php80 v1.27.0 php-composer
symfony/polyfill-php80 v1.29.0 php-composer
symfony/polyfill-uuid v1.31.0 php-composer
symfony/process v5.4.34 php-composer
symfony/routing v5.4.25 php-composer
symfony/service-contracts v3.0.2 php-composer
symfony/string v6.0.19 php-composer
symfony/translation v6.4.4 php-composer
symfony/translation-contracts v3.4.2 php-composer
symfony/uid v6.4.12 php-composer
talloc 2.4.2-r1 apk
tdb-libs 1.4.9-r1 apk
tevent 0.16.1-r0 apk
text 4.0.0 npm
twofactor_nextcloud_notification 4.0.0 npm
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
NAME VERSION TYPE
@nextcloud/text 27.0.0-alpha.1 npm
Executes a command and passes the stdio streams of the created process to TCP sockets 1.0.0.0 dotnet
activity 2.19.0 npm
alpine-baselayout 3.4.3-r1 apk
alpine-baselayout-data 3.4.3-r1 apk
alpine-keys 2.4-r1 apk
alpine-release 3.18.4-r0 apk
alsa-lib 1.2.9-r1 apk
amphp/amp v2.6.2 php-composer
amphp/byte-stream v1.8.1 php-composer
amphp/parallel v1.4.3 php-composer
amphp/parser v1.1.0 php-composer
amphp/process v1.1.4 php-composer
amphp/serialization v1.0.0 php-composer
amphp/sync v1.4.2 php-composer
aom-libs 3.6.1-r0 apk
apache2-utils 2.4.58-r0 apk
apk-tools 2.14.0-r2 apk
apr 1.7.4-r0 apk
apr-util 1.6.3-r1 apk
argon2-libs 20190702-r4 apk
avahi-libs 0.8-r13 apk
aws/aws-crt-php v1.0.2 php-composer
aws/aws-sdk-php 3.240.8 php-composer
bantu/ini-get-wrapper v1.0.1 php-composer
bash 5.2.15-r5 apk
beberlei/assert v3.3.1 php-composer
brick/math 0.9.2 php-composer
brotli-libs 1.0.9-r14 apk
bruteforcesettings 2.7.0 npm
busybox 1.36.1-r4 apk
busybox-binsh 1.36.1-r4 apk
c-client 2007f-r15 apk
ca-certificates 20230506-r0 apk
ca-certificates-bundle 20230506-r0 apk
cairo 1.17.8-r1 apk
cairo-gobject 1.17.8-r1 apk
christian-riesen/base32 1.6.0 php-composer
christophwurst/id3parser v0.1.4 php-composer
cjson 1.7.15-r4 apk
coreutils 9.3-r1 apk
cups-libs 2.4.7-r0 apk
curl 8.4.0-r0 apk
cweagans/composer-patches 1.7.3 php-composer
darsyn/ip 4.1.0 php-composer
dbus-libs 1.14.8-r0 apk
deepdiver/zipstreamer 2.0.0 php-composer
deepdiver1975/tarstreamer v2.1.0 php-composer
doctrine/cache 2.2.0 php-composer
doctrine/dbal 3.3.8 php-composer
doctrine/deprecations v1.0.0 php-composer
doctrine/event-manager 1.2.0 php-composer
doctrine/lexer 1.2.3 php-composer
egulias/email-validator 3.2.5 php-composer
ffmpeg 6.0-r15 apk
ffmpeg-libavcodec 6.0-r15 apk
ffmpeg-libavdevice 6.0-r15 apk
ffmpeg-libavfilter 6.0-r15 apk
ffmpeg-libavformat 6.0-r15 apk
ffmpeg-libavutil 6.0-r15 apk
ffmpeg-libpostproc 6.0-r15 apk
ffmpeg-libswresample 6.0-r15 apk
ffmpeg-libswscale 6.0-r15 apk
fgrosse/phpasn1 v2.3.0 php-composer
files_pdfviewer 2.8.0 npm
files_recommendation 1.6.0 npm
firstrunwizard 2.16.0 npm
flac-libs 1.4.3-r0 apk
fontconfig 2.14.2-r3 apk
freetype 2.13.0-r5 apk
fribidi 1.0.13-r0 apk
fusonic/linq v1.1.0 php-composer
fusonic/opengraph v2.2.0 php-composer
gdbm 1.23-r1 apk
gdk-pixbuf 2.42.10-r5 apk
ghostscript 10.01.2-r0 apk
giggsey/libphonenumber-for-php 8.13.7 php-composer
giggsey/locale 2.3 php-composer
git 2.40.1-r0 apk
glib 2.76.4-r0 apk
glslang-libs 1.3.243.0-r1 apk
gmp 6.2.1-r3 apk
gnu-libiconv 1.17-r1 apk
gnu-libiconv-libs 1.17-r1 apk
gnutls 3.8.0-r2 apk
graphite2 1.3.14-r5 apk
guzzlehttp/guzzle 7.5.0 php-composer
guzzlehttp/promises 1.5.2 php-composer
guzzlehttp/psr7 2.4.5 php-composer
guzzlehttp/uri-template v0.2.0 php-composer
harfbuzz 7.3.0-r0 apk
hexogen/kdtree v0.2.5 php-composer
hwdata-pci 0.370-r0 apk
icewind/searchdav v3.0.1 php-composer
icewind/smb v3.5.4 php-composer
icewind/streams v0.7.7 php-composer
icu-data-en 73.2-r2 apk
icu-libs 73.2-r2 apk
imagemagick 7.1.1.13-r0 apk
imagemagick-libs 7.1.1.13-r0 apk
jansson 2.14-r3 apk
jbig2dec 0.19-r3 apk
jq 1.6-r3 apk
justinrainbow/json-schema 5.2.10 php-composer
lame-libs 3.100-r5 apk
laravel/serializable-closure v1.2.2 php-composer
lcms2 2.15-r2 apk
ldb 2.7.2-r1 apk
league/flysystem 2.5.0 php-composer
league/mime-type-detection 1.11.0 php-composer
league/uri 6.4.0 php-composer
league/uri-interfaces 2.2.0 php-composer
libacl 2.3.1-r3 apk
libarchive 3.7.2-r0 apk
libass 0.17.1-r0 apk
libasyncns 0.8-r1 apk
libattr 2.5.1-r4 apk
libavif 0.11.1-r2 apk
libblkid 2.38.1-r8 apk
libbluray 1.3.4-r0 apk
libbsd 0.11.7-r1 apk
libbz2 1.0.8-r5 apk
libc-utils 0.7.2-r5 apk
libcap2 2.69-r0 apk
libcrypto3 3.1.4-r0 apk
libcurl 8.4.0-r0 apk
libdav1d 1.2.1-r0 apk
libde265 1.0.12-r0 apk
libdrm 2.4.115-r4 apk
libedit 20221030.3.1-r1 apk
libevent 2.1.12-r6 apk
libexpat 2.5.0-r1 apk
libffi 3.4.4-r2 apk
libformw 6.4_p20230506-r0 apk
libgcc 12.2.1_git20220924-r10 apk
libgomp 12.2.1_git20220924-r10 apk
libheif 1.16.2-r0 apk
libhwy 1.0.4-r1 apk
libice 1.1.1-r2 apk
libidn2 2.3.4-r1 apk
libintl 0.21.1-r7 apk
libjpeg-turbo 2.1.5.1-r3 apk
libjxl 0.8.2-r0 apk
libldap 2.6.5-r0 apk
libltdl 2.4.7-r2 apk
libmcrypt 2.5.8-r10 apk
libmd 1.0.4-r2 apk
libmemcached-libs 1.1.4-r1 apk
libmount 2.38.1-r8 apk
libncursesw 6.4_p20230506-r0 apk
libogg 1.3.5-r4 apk
libopenmpt 0.7.2-r0 apk
libpanelw 6.4_p20230506-r0 apk
libpciaccess 0.17-r2 apk
libplacebo 5.264.1-r1 apk
libpng 1.6.39-r3 apk
libpq 15.4-r0 apk
libproc2 4.0.4-r0 apk
libpulse 16.1-r10 apk
libraw 0.21.1-r1 apk
librist 0.2.7-r0 apk
librsvg 2.56.3-r0 apk
libsasl 2.1.28-r4 apk
libsm 1.2.4-r1 apk
libsmbclient 4.18.8-r0 apk
libsndfile 1.2.0-r2 apk
libsodium 1.0.18-r3 apk
libsrt 1.5.2-r0 apk
libssh 0.10.5-r0 apk
libssl3 3.1.4-r0 apk
libstdc++ 12.2.1_git20220924-r10 apk
libtasn1 4.19.0-r1 apk
libtheora 1.1.1-r17 apk
libunibreak 5.1-r0 apk
libunistring 1.1-r1 apk
libuuid 2.38.1-r8 apk
libva 2.18.0-r1 apk
libvdpau 1.5-r1 apk
libvorbis 1.3.7-r1 apk
libvpx 1.13.0-r2 apk
libwbclient 4.18.8-r0 apk
libwebp 1.3.2-r0 apk
libx11 1.8.4-r4 apk
libxau 1.0.11-r2 apk
libxcb 1.15-r1 apk
libxdmcp 1.1.4-r2 apk
libxext 1.3.5-r2 apk
libxfixes 6.0.1-r2 apk
libxft 2.3.8-r1 apk
libxml2 2.11.4-r0 apk
libxpm 3.5.16-r1 apk
libxrender 0.9.11-r3 apk
libxt 1.3.0-r2 apk
libxxhash 0.8.2-r0 apk
libzip 1.9.2-r2 apk
libzmq 4.3.4-r4 apk
linux-pam 1.5.2-r10 apk
lmdb 0.9.31-r0 apk
logrotate 3.21.0-r1 apk
lz4-libs 1.9.4-r4 apk
mbedtls 2.28.5-r0 apk
mexitek/phpcolors v1.0.4 php-composer
microsoft/azure-storage-blob 1.5.4 php-composer
microsoft/azure-storage-common 1.5.2 php-composer
mlocati/ip-lib 1.18.0 php-composer
mpg123-libs 1.31.3-r1 apk
mtdowling/jmespath.php 2.6.1 php-composer
musl 1.2.4-r2 apk
musl-utils 1.2.4-r2 apk
nano 7.2-r1 apk
ncurses-terminfo-base 6.4_p20230506-r0 apk
netcat-openbsd 1.219-r1 apk
nettle 3.8.1-r2 apk
nextcloud 1.0.0 npm
nextcloud/lognormalizer v1.0.0 php-composer
nghttp2-libs 1.57.0-r0 apk
nginx 1.24.0-r7 apk
notifications 2.15.0 npm
numactl 2.0.16-r4 apk
onevpl-libs 2023.2.1-r0 apk
oniguruma 6.9.8-r1 apk
openssl 3.1.4-r0 apk
opis/closure 3.6.3 php-composer
opus 1.4-r0 apk
orc 0.4.34-r0 apk
p11-kit 0.24.1-r2 apk
pango 1.50.14-r1 apk
password_policy 1.17.0 npm
pcre 8.45-r3 apk
pcre2 10.42-r1 apk
pear/archive_tar 1.4.14 php-composer
pear/console_getopt v1.4.3 php-composer
pear/pear-core-minimal v1.10.10 php-composer
pear/pear_exception v1.0.2 php-composer
photos 2.3.0 npm
php-http/guzzle7-adapter 1.0.0 php-composer
php-http/httplug 2.2.0 php-composer
php-http/promise 1.1.0 php-composer
php-opencloud/openstack v3.2.1 php-composer
php82 8.2.10-r0 apk
php82-bcmath 8.2.10-r0 apk
php82-bz2 8.2.10-r0 apk
php82-common 8.2.10-r0 apk
php82-ctype 8.2.10-r0 apk
php82-curl 8.2.10-r0 apk
php82-dom 8.2.10-r0 apk
php82-exif 8.2.10-r0 apk
php82-fileinfo 8.2.10-r0 apk
php82-fpm 8.2.10-r0 apk
php82-ftp 8.2.10-r0 apk
php82-gd 8.2.10-r0 apk
php82-gmp 8.2.10-r0 apk
php82-iconv 8.2.10-r0 apk
php82-imap 8.2.10-r0 apk
php82-intl 8.2.10-r0 apk
php82-ldap 8.2.10-r0 apk
php82-mbstring 8.2.10-r0 apk
php82-mysqlnd 8.2.10-r0 apk
php82-opcache 8.2.10-r0 apk
php82-openssl 8.2.10-r0 apk
php82-pcntl 8.2.10-r0 apk
php82-pdo 8.2.10-r0 apk
php82-pdo_mysql 8.2.10-r0 apk
php82-pdo_pgsql 8.2.10-r0 apk
php82-pdo_sqlite 8.2.10-r0 apk
php82-pecl-apcu 5.1.22-r0 apk
php82-pecl-igbinary 3.2.14-r0 apk
php82-pecl-imagick 3.7.0-r5 apk
php82-pecl-mcrypt 1.0.6-r0 apk
php82-pecl-memcached 3.2.0-r1 apk
php82-pecl-msgpack 2.2.0-r0 apk
php82-pecl-redis 6.0.2-r0 apk
php82-pecl-smbclient 1.1.1-r0 apk
php82-pgsql 8.2.10-r0 apk
php82-phar 8.2.10-r0 apk
php82-posix 8.2.10-r0 apk
php82-session 8.2.10-r0 apk
php82-simplexml 8.2.10-r0 apk
php82-sockets 8.2.10-r0 apk
php82-sodium 8.2.10-r0 apk
php82-sqlite3 8.2.10-r0 apk
php82-sysvsem 8.2.10-r0 apk
php82-xml 8.2.10-r0 apk
php82-xmlreader 8.2.10-r0 apk
php82-xmlwriter 8.2.10-r0 apk
php82-zip 8.2.10-r0 apk
phpseclib/phpseclib 2.0.40 php-composer
pimple/pimple v3.5.0 php-composer
pixman 0.42.2-r1 apk
pkgconf 1.9.5-r0 apk
popt 1.19-r2 apk
privacy 1.11.0 npm
procps-ng 4.0.4-r0 apk
psr/cache 1.0.1 php-composer
psr/clock 1.0.0 php-composer
psr/container 2.0.2 php-composer
psr/event-dispatcher 1.0.0 php-composer
psr/http-client 1.0.1 php-composer
psr/http-factory 1.0.1 php-composer
psr/http-message 1.0.1 php-composer
psr/log 1.1.4 php-composer
punic/punic 1.6.5 php-composer
ralouphie/getallheaders 3.0.3 php-composer
ramsey/collection 1.1.3 php-composer
ramsey/uuid 4.1.1 php-composer
readline 8.2.1-r1 apk
related_resources 1.2.0 npm
rsync 3.2.7-r4 apk
rubix/ml dev-chore/bump-flysystem-v2.1.1 php-composer
rubix/tensor 2.2.3 php-composer
rullzer/easytotp v0.1.4 php-composer
sabre/dav 4.4.0 php-composer
sabre/event 5.1.4 php-composer
sabre/http 5.1.10 php-composer
sabre/uri 2.2.2 php-composer
sabre/vobject 4.4.2 php-composer
sabre/xml 2.2.5 php-composer
samba-client 4.18.8-r0 apk
samba-client-libs 4.18.8-r0 apk
samba-common 4.18.8-r0 apk
samba-libs 4.18.8-r0 apk
samba-util-libs 4.18.8-r0 apk
scanelf 1.3.7-r1 apk
scssphp/scssphp v1.11.0 php-composer
sdl2 2.26.5-r0 apk
shaderc 2023.3-r1 apk
shadow 4.13-r4 apk
shared-mime-info 2.2-r5 apk
skalibs 2.13.1.1-r1 apk
soxr 0.1.3-r5 apk
speexdsp 1.2.1-r1 apk
spirv-tools 1.3.243.0-r1 apk
spomky-labs/base64url v2.0.4 php-composer
spomky-labs/cbor-php v2.0.1 php-composer
sqlite-libs 3.41.2-r2 apk
ssl_client 1.36.1-r4 apk
stecman/symfony-console-completion 0.11.0 php-composer
sudo 1.9.13_p3-r2 apk
suspicious_login 5.0.0 npm
svt-av1-libs 1.6.0-r0 apk
swiftmailer/swiftmailer v6.3.0 php-composer
symfony/console v5.4.19 php-composer
symfony/css-selector v5.4.11 php-composer
symfony/deprecation-contracts v2.5.2 php-composer
symfony/dom-crawler v5.4.11 php-composer
symfony/event-dispatcher v4.4.30 php-composer
symfony/event-dispatcher-contracts v1.1.9 php-composer
symfony/http-foundation v5.4.10 php-composer
symfony/mailer v5.4.19 php-composer
symfony/mime v5.4.19 php-composer
symfony/polyfill-ctype v1.23.0 php-composer
symfony/polyfill-iconv v1.27.0 php-composer
symfony/polyfill-intl-grapheme v1.23.1 php-composer
symfony/polyfill-intl-idn v1.27.0 php-composer
symfony/polyfill-intl-normalizer v1.27.0 php-composer
symfony/polyfill-mbstring v1.27.0 php-composer
symfony/polyfill-php72 v1.27.0 php-composer
symfony/polyfill-php73 v1.23.0 php-composer
symfony/polyfill-php73 v1.26.0 php-composer
symfony/polyfill-php80 v1.26.0 php-composer
symfony/polyfill-php80 v1.27.0 php-composer
symfony/process v4.4.30 php-composer
symfony/routing v4.4.30 php-composer
symfony/service-contracts v3.0.2 php-composer
symfony/string v6.0.19 php-composer
symfony/translation v4.4.41 php-composer
symfony/translation-contracts v2.4.0 php-composer
talloc 2.4.0-r1 apk
tdb-libs 1.4.8-r1 apk
tevent 0.14.1-r1 apk
thecodingmachine/safe v1.3.3 php-composer
tiff 4.5.1-r0 apk
twofactor_totp 9.0.0 npm
tzdata 2023c-r1 apk
utmps-libs 0.1.2.1-r1 apk
v4l-utils-libs 1.24.1-r0 apk
vidstab 1.1.1-r0 apk
viewer 2.1.0 npm
vulkan-loader 1.3.243.0-r1 apk
wayland-libs-client 1.22.0-r2 apk
web-auth/cose-lib v3.3.9 php-composer
web-auth/metadata-service v3.3.9 php-composer
web-auth/webauthn-lib v3.3.9 php-composer
x264-libs 0.164_git20220602-r1 apk
x265-libs 3.5-r4 apk
xvidcore 1.3.7-r1 apk
xz-libs 5.4.3-r0 apk
zimg 3.0.5-r0 apk
zlib 1.2.13-r1 apk
zstd-libs 1.5.5-r4 apk
+16 -5
View File
@@ -9,6 +9,7 @@ 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_blurb_optional_extras_enabled: false
# supported architectures
available_architectures:
@@ -24,13 +25,27 @@ development_versions_items:
# container parameters
common_param_env_vars_enabled: true
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_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files" }
- { vol_path: "/config", vol_host_path: "/path/to/appdata", desc: "Nextcloud configs." }
- { vol_path: "/data", vol_host_path: "/path/to/data", desc: "Your personal data." }
param_usage_include_ports: true
param_ports:
- { 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
app_setup_block_enabled: true
@@ -64,10 +79,6 @@ app_setup_block: |
# changelog
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: "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: "31.08.23:", desc: "Re-add updatenotification app. This allows users to be notified for app updates, but also notifies for NextCloud updates. Updating NextCloud via the web UI is not supported when using this image." }
- { date: "14.08.23:", desc: "Add develop branch." }
@@ -1,4 +1,4 @@
## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-nextcloud/commits/master/root/defaults/nginx/site-confs/default.conf.sample
## Version 2023/06/23 - 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
map $arg_v $asset_immutable {
@@ -9,8 +9,9 @@ map $arg_v $asset_immutable {
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
@@ -35,24 +36,25 @@ server {
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml text/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Pagespeed is not supported by Nextcloud, so if your server is built
# with the `ngx_pagespeed` module, uncomment this line to disable it.
#pagespeed off;
# The settings allows you to optimize the HTTP2 bandwidth.
# The settings allows you to optimize the HTTP2 bandwitdth.
# See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
# for tuning hints
# for tunning hints
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-Download-Options "noopen" 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;
@@ -64,7 +66,7 @@ server {
# that file is correctly served; if it doesn't, then the request is passed to
# the front-end controller. This consistent behaviour means that we don't need
# to specify custom rules for certain paths (e.g. images and other assets,
# `/updater`, `/ocs-provider`), and thus
# `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
# `try_files $uri $uri/ /index.php$request_uri`
# always provides the desired behaviour.
index index.php index.html /index.php$request_uri;
@@ -111,7 +113,7 @@ server {
# to the URI, resulting in a HTTP 500 error response.
location ~ \.php(?:$|/) {
# Required for legacy support
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
@@ -132,8 +134,7 @@ server {
fastcgi_max_temp_file_size 0;
}
# Serve static files
location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
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
@@ -141,7 +142,6 @@ server {
location ~ \.wasm$ {
default_type application/wasm;
}
}
location ~ \.woff2?$ {
-2
View File
@@ -1,2 +0,0 @@
# min hour day month weekday command
*/5 * * * * /usr/bin/php /app/www/public/cron.php 2>&1
+9
View File
@@ -0,0 +1,9 @@
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
# nextcloud cron
*/5 * * * * s6-setuidgid abc php -f /app/www/public/cron.php
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# make folders
mkdir -p \
/config/crontabs
## root
# if crontabs do not exist in config
if [[ ! -f /config/crontabs/root ]]; then
# copy crontab from system
if crontab -l -u root; then
crontab -l -u root >/config/crontabs/root
fi
# if crontabs still do not exist in config (were not copied from system)
# copy crontab from included defaults (using -n, do not overwrite an existing file)
cp -n /etc/crontabs/root /config/crontabs/
fi
sed -i "s|s6-setuidgid abc php[0-9]* -f /config/www/nextcloud/cron.php|s6-setuidgid abc php -f /app/www/public/cron.php|" /config/crontabs/root
# set permissions and import user crontabs
lsiown root:root /config/crontabs/root
crontab -u root /config/crontabs/root
@@ -0,0 +1 @@
oneshot
@@ -0,0 +1 @@
/etc/s6-overlay/s6-rc.d/init-crontabs-config/run
@@ -21,6 +21,7 @@ if [ -f /config/www/nextcloud/version.php ]; then
! -path "/config/www/nextcloud/config" \
! -path "/config/www/nextcloud/themes" \
-delete
sed -i "s|/config/www/nextcloud/cron.php|/app/www/public/cron.php|g" /config/crontabs/root
touch /config/www/nextcloud/config/needs_migration
fi
@@ -168,9 +169,3 @@ if [ ! -s /config/www/nextcloud/config/config.php ]; then
elif [ -f /config/www/nextcloud/config/config.php ]; then
sed -i "s|/app/www/public/data|/data|g" /config/www/nextcloud/config/config.php
fi
#modify javascript mime type and add .mjs support
if [ -s /etc/nginx/mime.types ]; then
sed -i 's|\bjs;|js mjs;|g' /etc/nginx/mime.types
sed -i 's|\bapplication/javascript|text/javascript|g' /etc/nginx/mime.types
fi
+1 -1
View File
@@ -5,7 +5,7 @@ DEFAULT_CONF="/config/nginx/site-confs/default.conf"
OLD_ROOT="root /config/www/nextcloud/;"
NEW_ROOT="root /app/www/public;"
if [[ -f "${DEFAULT_CONF}" ]] && grep -q "${OLD_ROOT}" "${DEFAULT_CONF}" 2>/dev/null; then
if grep -q "${OLD_ROOT}" "${DEFAULT_CONF}"; then
echo "updating root in ${DEFAULT_CONF}"
sed -i "s|${OLD_ROOT}|${NEW_ROOT}|" "${DEFAULT_CONF}"
fi