aboutsummaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@users.noreply.github.com>2024-03-15 13:01:10 +0100
committerGitHub <noreply@github.com>2024-03-15 13:01:10 +0100
commit3f560ae940a5648572104c1287929b66b196fa4c (patch)
tree0d6a645ef3bc08bd94a48d0fb64954f733a0f10b /.github
parent40edb426a3a6857598ff3f447a85e83e32ff0c32 (diff)
parentdf1cd1ba7e6e1f6e66a2b3229b5c082f1b81162e (diff)
downloadnextcloud-server-3f560ae940a5648572104c1287929b66b196fa4c.tar.gz
nextcloud-server-3f560ae940a5648572104c1287929b66b196fa4c.zip
Merge branch 'master' into refactor/OC-Server-getRootFolder
Signed-off-by: John Molakvoæ <skjnldsv@users.noreply.github.com>
Diffstat (limited to '.github')
-rw-r--r--.github/CODEOWNERS10
-rw-r--r--.github/CONTRIBUTING.md13
-rw-r--r--.github/ISSUE_TEMPLATE/BUG_REPORT.yml2
-rw-r--r--.github/dependabot.yml69
-rw-r--r--.github/workflows/autocheckers.yml96
-rw-r--r--.github/workflows/block-merge-eol.yml2
-rw-r--r--.github/workflows/block-merge-freeze.yml2
-rw-r--r--.github/workflows/block-unconventional-commits.yml31
-rw-r--r--.github/workflows/command-compile.yml60
-rw-r--r--.github/workflows/command-pull-3rdparty.yml4
-rw-r--r--.github/workflows/command-rebase.yml4
-rw-r--r--.github/workflows/cypress.yml20
-rw-r--r--.github/workflows/dependabot-approve-merge.yml2
-rw-r--r--.github/workflows/files-external-ftp.yml (renamed from .github/workflows/ftp.yml)75
-rw-r--r--.github/workflows/files-external-s3.yml185
-rw-r--r--.github/workflows/files-external-sftp.yml109
-rw-r--r--.github/workflows/files-external-smb-kerberos.yml (renamed from .github/workflows/smb-kerberos.yml)54
-rw-r--r--.github/workflows/files-external-smb.yml108
-rw-r--r--.github/workflows/files-external-webdav.yml105
-rw-r--r--.github/workflows/files-external.yml93
-rw-r--r--.github/workflows/fixup.yml2
-rw-r--r--.github/workflows/integration-s3-primary.yml117
-rw-r--r--.github/workflows/integration-sqlite.yml166
-rw-r--r--.github/workflows/lint-eslint.yml8
-rw-r--r--.github/workflows/lint-php-cs.yml6
-rw-r--r--.github/workflows/lint-php.yml6
-rw-r--r--.github/workflows/node-tests.yml14
-rw-r--r--.github/workflows/node.yml8
-rw-r--r--.github/workflows/npm-audit-fix.yml6
-rw-r--r--.github/workflows/object-storage-azure.yml125
-rw-r--r--.github/workflows/object-storage-s3.yml131
-rw-r--r--.github/workflows/object-storage-swift.yml121
-rw-r--r--.github/workflows/performance.yml9
-rw-r--r--.github/workflows/phpunit-mariadb.yml144
-rw-r--r--.github/workflows/phpunit-memcached.yml123
-rw-r--r--.github/workflows/phpunit-mysql.yml144
-rw-r--r--.github/workflows/phpunit-nodb.yml127
-rw-r--r--.github/workflows/phpunit-oci.yml70
-rw-r--r--.github/workflows/phpunit-pgsql.yml143
-rw-r--r--.github/workflows/phpunit-sqlite.yml127
-rw-r--r--.github/workflows/s3-external.yml130
-rw-r--r--.github/workflows/s3-primary-integration.yml95
-rw-r--r--.github/workflows/s3-primary.yml87
-rw-r--r--.github/workflows/sftp.yml73
-rw-r--r--.github/workflows/stale.yml2
-rw-r--r--.github/workflows/static-code-analysis.yml4
-rw-r--r--.github/workflows/update-cacert-bundle.yml5
-rw-r--r--.github/workflows/update-code-signing-crl.yml46
-rw-r--r--.github/workflows/update-psalm-baseline.yml10
49 files changed, 2568 insertions, 525 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 8db2cad2c2b..4caf4b2cd19 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -28,7 +28,15 @@
/apps/weather_status/appinfo/info.xml @julien-nc @juliushaertl
/apps/workflowengine/appinfo/info.xml @blizzz @juliushaertl
+# Frontend expertise
+/apps/files/src* @skjnldsv
+/apps/files_external/src* @skjnldsv
+/apps/files_reminders/src* @skjnldsv
+/apps/files_sharing/src/actions* @skjnldsv
+/apps/files_trashbin/src* @skjnldsv
+
# Security team
+/resources/codesigning @mgallien @miaulalala @nickvergessen
/resources/config/ca-bundle.crt @ChristophWurst @miaulalala @nickvergessen
/.drone.yml @nickvergessen
@@ -43,7 +51,7 @@
/core/routes.php @Altahrim
# OpenAPI
-openapi.json @provokateurin
+openapi*.json @provokateurin
ResponseDefinitions.php @provokateurin
# Talk team
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index f7eb7c1df98..98c93c4a41e 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -29,6 +29,13 @@ Thanks for wanting to contribute source code to Nextcloud. That's great!
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the Nextcloud code with PHPUnit.
+### Conventional Commits
+
+Please use [Conventional Commits](https://www.conventionalcommits.org) for your commit messages. This helps maintain clarity and consistency across the project, making it easier to understand changes and automate versioning.
+```
+feat(files_sharing): allow sharing with contacts
+```
+
### Tests
In order to constantly increase the quality of our software we can no longer accept pull request which submit un-tested code.
@@ -44,9 +51,9 @@ their contribution under the project's license.
Please read [contribute/developer-certificate-of-origin][dcofile].
If you can certify it, then just add a line to every git commit message:
-````
- Signed-off-by: Random J Developer <random@developer.example.org>
-````
+```
+Signed-off-by: Random J Developer <random@developer.example.org>
+```
Use your real name (sorry, no pseudonyms or anonymous contributions).
If you set your `user.name` and `user.email` git configs, you can sign your
diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml
index 74eb31507a2..93c213ecc3e 100644
--- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml
+++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml
@@ -101,10 +101,10 @@ body:
Select PHP engine version serving Nextcloud Server.
_Describe in the "Additional info" section if you chose "Other"._
options:
- - "PHP 7.4"
- "PHP 8.0"
- "PHP 8.1"
- "PHP 8.2"
+ - "PHP 8.3"
- "Other"
- type: dropdown
id: webserver
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 4fa8a215ac1..6023a59cc88 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -14,6 +14,49 @@ updates:
reviewers:
- "nextcloud/server-dependabot"
+# cs-fixer
+- package-ecosystem: composer
+ directory: "/vendor-bin/cs-fixer"
+ schedule:
+ interval: weekly
+ day: saturday
+ time: "04:10"
+ timezone: Europe/Copenhagen
+ labels:
+ - "3. to review"
+ - "feature: dependencies"
+ reviewers:
+ - "nextcloud/server-dependabot"
+
+# openapi-extractor
+- package-ecosystem: composer
+ directory: "/vendor-bin/openapi-extractor"
+ schedule:
+ interval: weekly
+ day: saturday
+ time: "04:20"
+ timezone: Europe/Brussels
+ labels:
+ - "3. to review"
+ - "feature: dependencies"
+ reviewers:
+ - "nextcloud/server-dependabot"
+ - "provokateurin"
+
+# psalm
+- package-ecosystem: composer
+ directory: "/vendor-bin/psalm"
+ schedule:
+ interval: weekly
+ day: saturday
+ time: "04:30"
+ timezone: Europe/Madrid
+ labels:
+ - "3. to review"
+ - "feature: dependencies"
+ reviewers:
+ - "nextcloud/server-dependabot"
+
# Main master npm
- package-ecosystem: npm
directory: "/"
@@ -64,7 +107,7 @@ updates:
day: saturday
time: "03:00"
timezone: Europe/Paris
- target-branch: stable25
+ target-branch: stable26
labels:
- "3. to review"
- "feature: dependencies"
@@ -84,7 +127,7 @@ updates:
day: saturday
time: "03:00"
timezone: Europe/Paris
- target-branch: stable26
+ target-branch: stable27
labels:
- "3. to review"
- "feature: dependencies"
@@ -104,7 +147,7 @@ updates:
day: saturday
time: "03:00"
timezone: Europe/Paris
- target-branch: stable27
+ target-branch: stable28
labels:
- "3. to review"
- "feature: dependencies"
@@ -125,7 +168,7 @@ updates:
day: saturday
time: "03:00"
timezone: Europe/Paris
- target-branch: stable25
+ target-branch: stable26
labels:
- "3. to review"
- "feature: dependencies"
@@ -143,7 +186,7 @@ updates:
day: saturday
time: "03:00"
timezone: Europe/Paris
- target-branch: stable26
+ target-branch: stable27
labels:
- "3. to review"
- "feature: dependencies"
@@ -161,7 +204,7 @@ updates:
day: saturday
time: "03:00"
timezone: Europe/Paris
- target-branch: stable27
+ target-branch: stable28
labels:
- "3. to review"
- "feature: dependencies"
@@ -176,7 +219,15 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
- interval: weekly
- day: saturday
- time: "03:00"
+ interval: monthly
timezone: Europe/Paris
+ groups:
+ github-actions:
+ patterns:
+ - "*"
+ labels:
+ - "3. to review"
+ - "feature: dependencies"
+ reviewers:
+ - "nextcloud/server-dependabot"
+
diff --git a/.github/workflows/autocheckers.yml b/.github/workflows/autocheckers.yml
new file mode 100644
index 00000000000..7c706d43ad5
--- /dev/null
+++ b/.github/workflows/autocheckers.yml
@@ -0,0 +1,96 @@
+name: Code checkers
+
+on:
+ pull_request:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: autocheckers-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src }}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ autocheckers:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.3']
+
+ name: PHP checkers
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@7fdd3ece872ec7ec4c098ae5ab7637d5e0a96067 # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ extensions: ctype, json, mbstring
+ coverage: none
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Check auto loaders
+ run: bash ./build/autoloaderchecker.sh
+
+ - name: Check translations are JSON decodeable
+ run: php ./build/translation-checker.php
+
+ - name: Check translations do not contain triple dot but ellipsis
+ run: php ./build/triple-dot-checker.php
+
+ - name: Check .htaccess does not contain invalid changes
+ run: php ./build/htaccess-checker.php
+
+ - name: Check that all and only expected files are included
+ run: php ./build/files-checker.php
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, autocheckers]
+
+ if: always()
+
+ name: autocheckers-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.autocheckers.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/block-merge-eol.yml b/.github/workflows/block-merge-eol.yml
index 8c7653eac9e..5f34853bab7 100644
--- a/.github/workflows/block-merge-eol.yml
+++ b/.github/workflows/block-merge-eol.yml
@@ -20,7 +20,7 @@ jobs:
# Only run on stableXX branches
if: startsWith( github.base_ref, 'stable')
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
steps:
- name: Download updater config
diff --git a/.github/workflows/block-merge-freeze.yml b/.github/workflows/block-merge-freeze.yml
index f2d029c9927..11f8b9e37d1 100644
--- a/.github/workflows/block-merge-freeze.yml
+++ b/.github/workflows/block-merge-freeze.yml
@@ -22,7 +22,7 @@ jobs:
if: github.event.pull_request.draft == false
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
steps:
- name: Download version.php from ${{ github.base_ref }}
diff --git a/.github/workflows/block-unconventional-commits.yml b/.github/workflows/block-unconventional-commits.yml
new file mode 100644
index 00000000000..295c30bd62a
--- /dev/null
+++ b/.github/workflows/block-unconventional-commits.yml
@@ -0,0 +1,31 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+name: Block unconventional commits
+
+on:
+ pull_request:
+ types: [opened, ready_for_review, reopened, synchronize]
+
+permissions:
+ contents: read
+
+concurrency:
+ group: block-unconventional-commits-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ block-unconventional-commits:
+ name: Block unconventional commits
+
+ runs-on: ubuntu-latest-low
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+
+ - uses: webiny/action-conventional-commits@8bc41ff4e7d423d56fa4905f6ff79209a78776c7 # v1.3.0
+ with:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/command-compile.yml b/.github/workflows/command-compile.yml
index 8c012a98e7a..282189788a1 100644
--- a/.github/workflows/command-compile.yml
+++ b/.github/workflows/command-compile.yml
@@ -15,15 +15,16 @@ jobs:
arg1: ${{ steps.command.outputs.arg1 }}
arg2: ${{ steps.command.outputs.arg2 }}
head_ref: ${{ steps.comment-branch.outputs.head_ref }}
+ base_ref: ${{ steps.comment-branch.outputs.base_ref }}
steps:
- name: Check actor permission
- uses: skjnldsv/check-actor-permission@e591dbfe838300c007028e1219ca82cc26e8d7c5 # v2
+ uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v2
with:
require: write
- name: Add reaction on start
- uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.1.0
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
@@ -31,7 +32,7 @@ jobs:
reactions: "+1"
- name: Parse command
- uses: skjnldsv/parse-command-comment@7cef1df370a99dfd5bf896d50121390c96785db8 # v2
+ uses: skjnldsv/parse-command-comment@5c955203c52424151e6d0e58fb9de8a9f6a605a1 # v2
id: command
# Init path depending on which command is run
@@ -39,9 +40,9 @@ jobs:
id: git-path
run: |
if ${{ startsWith(steps.command.outputs.arg1, '/') }}; then
- echo "path=${{ github.workspace }}${{steps.command.outputs.arg1}}" >> $GITHUB_OUTPUT
+ echo "path=${{steps.command.outputs.arg1}}" >> $GITHUB_OUTPUT
else
- echo "path=${{ github.workspace }}${{steps.command.outputs.arg2}}" >> $GITHUB_OUTPUT
+ echo "path=${{steps.command.outputs.arg2}}" >> $GITHUB_OUTPUT
fi
- name: Init branch
@@ -54,13 +55,13 @@ jobs:
steps:
- name: Restore cached git repository
- uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2
+ uses: buildjet/cache@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3
with:
path: .git
key: git-repo
- name: Checkout ${{ needs.init.outputs.head_ref }}
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3.6.0
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
fetch-depth: 0
@@ -76,16 +77,22 @@ jobs:
id: package-engines-versions
with:
fallbackNode: '^20'
- fallbackNpm: '^9'
+ fallbackNpm: '^10'
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v3
with:
node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }}
cache: npm
- name: Set up npm ${{ steps.package-engines-versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.package-engines-versions.outputs.npmVersion }}"
+
+ - name: Rebase to ${{ needs.init.outputs.base_ref }}
+ if: ${{ contains(needs.init.outputs.arg1, 'rebase') }}
+ run: |
+ git fetch origin ${{ needs.init.outputs.base_ref }}:${{ needs.init.outputs.base_ref }}
+ git rebase origin/${{ needs.init.outputs.base_ref }}
- name: Install dependencies & build
env:
@@ -95,29 +102,36 @@ jobs:
npm ci
npm run build --if-present
- - name: Commit and push default
- if: ${{ needs.init.outputs.arg1 != 'fixup' && needs.init.outputs.arg1 != 'amend' }}
+ - name: Commit default
+ if: ${{ !contains(needs.init.outputs.arg1, 'fixup') && !contains(needs.init.outputs.arg1, 'amend') }}
run: |
- git add ${{ needs.init.outputs.git_path }}
+ git add ${{ github.workspace }}${{ needs.init.outputs.git_path }}
git commit --signoff -m 'chore(assets): Recompile assets'
- git push origin ${{ needs.init.outputs.head_ref }}
-
- - name: Commit and push fixup
- if: ${{ needs.init.outputs.arg1 == 'fixup' }}
+
+ - name: Commit fixup
+ if: ${{ contains(needs.init.outputs.arg1, 'fixup') }}
run: |
- git add ${{ needs.init.outputs.git_path }}
+ git add ${{ github.workspace }}${{ needs.init.outputs.git_path }}
git commit --fixup=HEAD --signoff
- git push origin ${{ needs.init.outputs.head_ref }}
- - name: Commit and push amend
- if: ${{ needs.init.outputs.arg1 == 'amend' }}
+ - name: Commit amend
+ if: ${{ contains(needs.init.outputs.arg1, 'amend') }}
run: |
- git add ${{ needs.init.outputs.git_path }}
+ git add ${{ github.workspace }}${{ needs.init.outputs.git_path }}
git commit --amend --no-edit --signoff
- git push --force origin ${{ needs.init.outputs.head_ref }}
+ # Remove any [skip ci] from the amended commit
+ git commit --amend -m "$(git log -1 --format='%B' | sed '/\[skip ci\]/d')"
+
+ - name: Push normally
+ if: ${{ !contains(needs.init.outputs.arg1, 'rebase') && !contains(needs.init.outputs.arg1, 'amend') }}
+ run: git push origin ${{ needs.init.outputs.head_ref }}
+
+ - name: Force push
+ if: ${{ contains(needs.init.outputs.arg1, 'rebase') || contains(needs.init.outputs.arg1, 'amend') }}
+ run: git push --force origin ${{ needs.init.outputs.head_ref }}
- name: Add reaction on failure
- uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.1.0
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
diff --git a/.github/workflows/command-pull-3rdparty.yml b/.github/workflows/command-pull-3rdparty.yml
index 264eb3f99a5..9ef32185195 100644
--- a/.github/workflows/command-pull-3rdparty.yml
+++ b/.github/workflows/command-pull-3rdparty.yml
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Add reaction on start
- uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.0.1
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
@@ -51,7 +51,7 @@ jobs:
git push
- name: Add reaction on failure
- uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.0.1
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
diff --git a/.github/workflows/command-rebase.yml b/.github/workflows/command-rebase.yml
index 01d2e6dc1db..d6b054a08e7 100644
--- a/.github/workflows/command-rebase.yml
+++ b/.github/workflows/command-rebase.yml
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Add reaction on start
- uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.0.1
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
@@ -42,7 +42,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
- name: Add reaction on failure
- uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.0.1
+ uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml
index 510e18b7216..a7187ac65e4 100644
--- a/.github/workflows/cypress.yml
+++ b/.github/workflows/cypress.yml
@@ -31,7 +31,7 @@ jobs:
- name: Check composer.json
id: check_composer
- uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
+ uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v2
with:
files: "composer.json"
@@ -47,7 +47,7 @@ jobs:
fallbackNpm: "^9"
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -77,10 +77,10 @@ jobs:
matrix:
# Run multiple copies of the current job in parallel
# Please increase the number or runners as your tests suite grows (0 based index for e2e tests)
- containers: ["component", 0, 1, 2]
+ containers: ["component", 0, 1, 2, 3, 4, 5]
# Hack as strategy.job-total includes the component and GitHub does not allow math expressions
# Always aling this number with the total of e2e runners (max. index + 1)
- total-containers: [3]
+ total-containers: [6]
name: runner ${{ matrix.containers }}
@@ -93,7 +93,7 @@ jobs:
path: ./
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ needs.init.outputs.nodeVersion }}
@@ -101,7 +101,7 @@ jobs:
run: npm i -g npm@"${{ needs.init.outputs.npmVersion }}"
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
- uses: cypress-io/github-action@ebe8b24c4428922d0f793a5c4c96853a633180e3 # v6.6.0
+ uses: cypress-io/github-action@1b70233146622b69e789ccdd4f9452adc638d25a # v6.6.1
with:
component: ${{ matrix.containers == 'component' }}
group: ${{ matrix.use-cypress-cloud && matrix.containers == 'component' && 'Run component' || matrix.use-cypress-cloud && 'Run E2E' || '' }}
@@ -121,7 +121,7 @@ jobs:
SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }}
- name: Upload snapshots
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
if: always()
with:
name: snapshots_${{ matrix.containers }}
@@ -132,7 +132,7 @@ jobs:
run: docker logs nextcloud-cypress-tests-${{ env.APP_NAME }} > nextcloud.log
- name: Upload NC logs
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
if: failure() && matrix.containers != 'component'
with:
name: nc_logs_${{ matrix.containers }}
@@ -143,14 +143,14 @@ jobs:
run: docker exec nextcloud-cypress-tests-server tar -cvjf - data > data.tar
- name: Upload data dir archive
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
if: failure() && matrix.containers != 'component'
with:
name: nc_data_${{ matrix.containers }}
path: data.tar
summary:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [init, cypress]
if: always()
diff --git a/.github/workflows/dependabot-approve-merge.yml b/.github/workflows/dependabot-approve-merge.yml
index 9951547f76a..00b019613f5 100644
--- a/.github/workflows/dependabot-approve-merge.yml
+++ b/.github/workflows/dependabot-approve-merge.yml
@@ -22,7 +22,7 @@ concurrency:
jobs:
auto-approve-merge:
if: github.actor == 'dependabot[bot]'
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
permissions:
# for hmarr/auto-approve-action to approve PRs
pull-requests: write
diff --git a/.github/workflows/ftp.yml b/.github/workflows/files-external-ftp.yml
index ffa2722d342..7e22484e1bf 100644
--- a/.github/workflows/ftp.yml
+++ b/.github/workflows/files-external-ftp.yml
@@ -1,29 +1,51 @@
-name: FTP unit tests
+name: PHPUnit files_external FTP
on:
pull_request:
- paths:
- - '.github/**'
- - 'apps/files_external/**'
+ schedule:
+ - cron: "5 2 * * *"
concurrency:
- group: ftp-${{ github.head_ref || github.run_id }}
+ group: files-external-ftp-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
-env:
- APP_NAME: files_external
-
jobs:
- ftp-tests:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ files-external-ftp:
runs-on: ubuntu-latest
+ needs: changes
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
strategy:
# do not stop on another job's failure
fail-fast: false
matrix:
- php-versions: ['8.0']
+ php-versions: ['8.0', '8.3']
ftpd: ['proftpd', 'vsftpd', 'pure-ftpd']
+ include:
+ - php-versions: '8.0'
+ coverage: ${{ github.event_name != 'pull_request' }}
name: php${{ matrix.php-versions }}-${{ matrix.ftpd }}
@@ -42,11 +64,14 @@ jobs:
if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then docker run --name ftp -d --net host -e PASV_ADDRESS=127.0.0.1 -e FTPUSER_NAME=test -v /tmp/secret.txt:/run/secrets/ftp-user-password-secret -v /tmp/ftp:/home/test instantlinux/proftpd; fi
if [[ "${{ matrix.ftpd }}" == 'vsftpd' ]]; then docker run --name ftp -d --net host -e FTP_USER=test -e FTP_PASS=test -e PASV_ADDRESS=127.0.0.1 -v /tmp/ftp:/home/vsftpd/test fauria/vsftpd; fi
if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp:/home/test -v /tmp/ftp:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi
+
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
with:
php-version: ${{ matrix.php-versions }}
- extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -55,8 +80,9 @@ jobs:
composer install
mkdir data
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
- ./occ app:enable --force ${{ env.APP_NAME }}
- php -S localhost:8080 &
+ ./occ app:enable --force files_external
+ echo "<?php return ['run' => true,'host' => 'localhost','user' => 'test','password' => 'test', 'root' => '${{ env.FTP_ROOT }}'];" > apps/files_external/tests/config.ftp.php
+
- name: smoketest ftp
run: |
php -r 'var_dump(file_put_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt", "asd"));'
@@ -64,21 +90,30 @@ jobs:
php -r 'var_dump(mkdir("ftp://test:test@localhost${{ env.FTP_ROOT }}/asdads"));'
ls -l /tmp/ftp
[ -f /tmp/ftp/ftp.txt ]
+
- name: PHPUnit
- run: |
- echo "<?php return ['run' => true,'host' => 'localhost','user' => 'test','password' => 'test', 'root' => '${{ env.FTP_ROOT }}'];" > apps/${{ env.APP_NAME }}/tests/config.ftp.php
- composer run test:files_external apps/files_external/tests/Storage/FtpTest.php
+ run: composer run test:files_external -- \
+ apps/files_external/tests/Storage/FtpTest.php \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-ftp
+
- name: ftpd logs
if: always()
run: |
docker logs ftp
ftp-summary:
- runs-on: ubuntu-latest
- needs: ftp-tests
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-ftp]
if: always()
steps:
- name: Summary status
- run: if ${{ needs.ftp-tests.result != 'success' }}; then exit 1; fi
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-ftp.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/files-external-s3.yml b/.github/workflows/files-external-s3.yml
new file mode 100644
index 00000000000..4559d78cec2
--- /dev/null
+++ b/.github/workflows/files-external-s3.yml
@@ -0,0 +1,185 @@
+name: PHPUnit files_external S3
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+concurrency:
+ group: files-external-s3-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ files-external-s3-minio:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.2'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: php${{ matrix.php-versions }}-s3
+
+ services:
+ minio:
+ image: bitnami/minio
+ env:
+ MINIO_ROOT_USER: nextcloud
+ MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ MINIO_DEFAULT_BUCKETS: nextcloud
+ ports:
+ - "9000:9000"
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ env:
+ OBJECT_STORE_KEY: nextcloud
+ OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ run: |
+ composer install
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ ./occ app:enable --force files_external
+ echo "<?php return ['run' => true, 'secret' => 'actually-not-secret', 'passwordsalt' => 'actually-not-secret', 'hostname' => 'localhost','key' => '$OBJECT_STORE_KEY','secret' => '$OBJECT_STORE_SECRET', 'bucket' => 'bucket', 'port' => 9000, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/files_external/tests/config.amazons3.php
+
+ - name: Wait for S3
+ run: |
+ sleep 10
+ curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
+
+ - name: PHPUnit
+ run: composer run test:files_external -- \
+ apps/files_external/tests/Storage/Amazons3Test.php \
+ apps/files_external/tests/Storage/VersionedAmazonS3Test.php \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-s3
+
+ - name: S3 logs
+ if: always()
+ run: |
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+ files-external-s3-localstack:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.3'
+ coverage: true
+
+ name: php${{ matrix.php-versions }}-s3
+
+ services:
+ localstack:
+ env:
+ SERVICES: s3
+ DEBUG: 1
+ image: localstack/localstack
+ ports:
+ - "4566:4566"
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ run: |
+ composer install
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ ./occ app:enable --force files_external
+ echo "<?php return ['run' => true,'hostname' => 'localhost','key' => 'ignored','secret' => 'ignored', 'bucket' => 'bucket', 'port' => 4566, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/files_external/tests/config.amazons3.php
+
+ - name: PHPUnit
+ run: composer run test:files_external -- \
+ apps/files_external/tests/Storage/Amazons3Test.php \
+ apps/files_external/tests/Storage/VersionedAmazonS3Test.php \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-s3
+
+ - name: S3 logs
+ if: always()
+ run: |
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+ s3-external-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-s3-minio, files-external-s3-localstack]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-s3-minio.result != 'success' && needs.files-external-s3-localstack.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/files-external-sftp.yml b/.github/workflows/files-external-sftp.yml
new file mode 100644
index 00000000000..012ca4acaed
--- /dev/null
+++ b/.github/workflows/files-external-sftp.yml
@@ -0,0 +1,109 @@
+name: PHPUnit files_external sFTP
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+concurrency:
+ group: files-external-sftp-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ files-external-sftp:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ # do not stop on another job's failure
+ fail-fast: false
+ matrix:
+ php-versions: ['8.0', '8.3']
+ sftpd: ['openssh']
+ include:
+ - php-versions: '8.0'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: php${{ matrix.php-versions }}-${{ matrix.sftpd }}
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up sftpd
+ run: |
+ sudo mkdir /tmp/sftp
+ sudo chown -R 0777 /tmp/sftp
+ if [[ "${{ matrix.sftpd }}" == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp "test:test:::data"; fi
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ run: |
+ composer install
+ mkdir data
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ ./occ app:enable --force files_external
+ echo "<?php return ['run' => true, 'host' => 'localhost:2222','user' => 'test','password' => 'test', 'root' => 'data'];" > apps/files_external/tests/config.sftp.php
+
+ - name: PHPUnit
+ run: composer run test:files_external -- \
+ apps/files_external/tests/Storage/SftpTest.php \
+ apps/files_external/tests/Storage/SFTP_KeyTest.php \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-sftp
+
+ - name: sftpd logs
+ if: always()
+ run: |
+ ls -l /tmp/sftp
+ docker logs sftp
+
+ sftp-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-sftp]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-sftp.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/smb-kerberos.yml b/.github/workflows/files-external-smb-kerberos.yml
index d52b85d045f..4c00df5a6af 100644
--- a/.github/workflows/smb-kerberos.yml
+++ b/.github/workflows/files-external-smb-kerberos.yml
@@ -1,19 +1,41 @@
name: Samba Kerberos SSO
on:
pull_request:
- paths:
- - 'apps/files_external/**'
- - '.github/workflows/smb-kerberos.yml'
+ schedule:
+ - cron: "5 2 * * *"
concurrency:
- group: smb-kerberos-${{ github.head_ref || github.run_id }}
+ group: files-external-smb-kerberos-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
- smb-kerberos-tests:
- runs-on: ubuntu-latest
+ changes:
+ runs-on: ubuntu-latest-low
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ files-external-smb-kerberos:
+ runs-on: ubuntu-22.04
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
name: smb-kerberos-sso
@@ -22,11 +44,13 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
submodules: true
+
- name: Checkout user_saml
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
repository: nextcloud/user_saml
path: apps/user_saml
+
- name: Pull images
run: |
docker pull ghcr.io/icewind1991/samba-krb-test-dc
@@ -35,21 +59,35 @@ jobs:
docker tag ghcr.io/icewind1991/samba-krb-test-dc icewind1991/samba-krb-test-dc
docker tag ghcr.io/icewind1991/samba-krb-test-apache icewind1991/samba-krb-test-apache
docker tag ghcr.io/icewind1991/samba-krb-test-client icewind1991/samba-krb-test-client
+
- name: Setup AD-DC
run: |
DC_IP=$(apps/files_external/tests/sso-setup/start-dc.sh)
sleep 1
apps/files_external/tests/sso-setup/start-apache.sh $DC_IP $PWD
echo "DC_IP=$DC_IP" >> $GITHUB_ENV
+
- name: Set up Nextcloud
run: |
apps/files_external/tests/sso-setup/setup-sso-nc.sh
+
- name: Test SSO
run: |
apps/files_external/tests/sso-setup/test-sso-smb.sh ${{ env.DC_IP }}
+
- name: Show logs
- if: failure()
+ if: always()
run: |
FILEPATH=$(docker exec --user 33 apache ./occ log:file | grep "Log file:" | cut -d' ' -f3)
echo "$FILEPATH:"
docker exec --user 33 apache cat $FILEPATH
+
+ sftp-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-smb-kerberos]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-smb-kerberos.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/files-external-smb.yml b/.github/workflows/files-external-smb.yml
new file mode 100644
index 00000000000..b19fbbd5296
--- /dev/null
+++ b/.github/workflows/files-external-smb.yml
@@ -0,0 +1,108 @@
+name: PHPUnit files_external SMB
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+concurrency:
+ group: files-external-smb-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ files-external-smb:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.3']
+ include:
+ - php-versions: '8.0'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: php${{ matrix.php-versions }}-smb
+
+ services:
+ samba:
+ image: ghcr.io/nextcloud/continuous-integration-samba:latest
+ ports:
+ - 445:445
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, smbclient, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up smbclient
+ # This is needed as icewind/smb php library for notify
+ run: sudo apt-get install -y smbclient
+
+ - name: Set up Nextcloud
+ run: |
+ composer install
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ ./occ config:system:set --value true --type boolean allow_local_remote_servers
+ ./occ app:enable --force files_external
+ echo "<?php return ['run'=>true, 'host'=>'localhost', 'user'=>'test', 'password'=>'test', 'root'=>'', 'share'=>'public'];" > apps/files_external/tests/config.smb.php
+
+ - name: Wait for smb
+ run: |
+ apps/files_external/tests/env/wait-for-connection 127.0.0.1 445 60
+
+ - name: PHPUnit
+ run: composer run test:files_external -- --verbose \
+ apps/files_external/tests/Storage/SmbTest.php \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@4fe8c5f003fae66aa5ebb77cfd3e7bfbbda0b6b0 # v3.1.5
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-smb
+
+ files-external-smb-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-smb]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-smb.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/files-external-webdav.yml b/.github/workflows/files-external-webdav.yml
new file mode 100644
index 00000000000..09cd2149c87
--- /dev/null
+++ b/.github/workflows/files-external-webdav.yml
@@ -0,0 +1,105 @@
+name: PHPUnit files_external WebDAV
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+concurrency:
+ group: files-external-webdav-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ files-external-webdav-apache:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.2'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: php${{ matrix.php-versions }}-webdav
+
+ services:
+ apache:
+ image: ghcr.io/nextcloud/continuous-integration-webdav-apache:latest
+ ports:
+ - 8081:80
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ run: |
+ composer install
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ ./occ config:system:set --value true --type boolean allow_local_remote_servers
+ ./occ app:enable --force files_external
+ echo "<?php return ['run' => true, 'host' => 'localhost:8081/webdav/', 'user' => 'test', 'password'=>'pass', 'root' => '', 'wait' => 0];" > apps/files_external/tests/config.webdav.php
+
+ - name: Wait for WebDAV
+ run: |
+ sleep 5
+ curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://test:pass@localhost:8081/webdav/
+
+ - name: PHPUnit
+ run: composer run test:files_external -- --verbose \
+ apps/files_external/tests/Storage/WebdavTest.php \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-webdav
+
+ files-external-webdav-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-webdav-apache]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-webdav-apache.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/files-external.yml b/.github/workflows/files-external.yml
new file mode 100644
index 00000000000..83f47c5ff18
--- /dev/null
+++ b/.github/workflows/files-external.yml
@@ -0,0 +1,93 @@
+name: PHPUnit files_external generic
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+concurrency:
+ group: files-external-generic-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - 'apps/files_external/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - 'composer.json'
+ - 'composer.lock'
+
+ files-external-generic:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.2'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: php${{ matrix.php-versions }}-generic
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ env:
+ OBJECT_STORE_KEY: nextcloud
+ OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ run: |
+ composer install
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ ./occ app:enable --force files_external
+
+ - name: PHPUnit
+ run: composer run test:files_external \
+ ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-files-external-generic
+
+ files-external-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, files-external-generic ]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-generic.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/fixup.yml b/.github/workflows/fixup.yml
index 9548d19f2d5..98d49927ab8 100644
--- a/.github/workflows/fixup.yml
+++ b/.github/workflows/fixup.yml
@@ -24,7 +24,7 @@ jobs:
pull-requests: write
name: Block fixup and squash commits
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
steps:
- name: Run check
diff --git a/.github/workflows/integration-s3-primary.yml b/.github/workflows/integration-s3-primary.yml
new file mode 100644
index 00000000000..d8c4ff9409f
--- /dev/null
+++ b/.github/workflows/integration-s3-primary.yml
@@ -0,0 +1,117 @@
+name: S3 primary storage integration tests
+on:
+ pull_request:
+
+concurrency:
+ group: integration-s3-primary-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/*.php'
+ - '**/lib/**'
+ - '**/tests/**'
+ - '**/vendor-bin/**'
+ - 'build/integration/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+
+ integration-s3-primary:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh'
+
+ strategy:
+ # do not stop on another job's failure
+ fail-fast: false
+ matrix:
+ php-versions: ['8.0']
+ key: ['objectstore', 'objectstore_multibucket']
+
+ name: php${{ matrix.php-versions }}-${{ matrix.key }}-minio
+
+ services:
+ redis:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+ ports:
+ - 6379:6379/tcp
+ minio:
+ image: bitnami/minio
+ env:
+ MINIO_ROOT_USER: nextcloud
+ MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ MINIO_DEFAULT_BUCKETS: nextcloud
+ ports:
+ - "9000:9000"
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: 'none'
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Wait for S3
+ run: |
+ sleep 10
+ curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
+
+ - name: Set up Nextcloud
+ run: |
+ mkdir data
+ echo '<?php $CONFIG=["${{ matrix.key }}" => ["class" => "OC\Files\ObjectStore\S3", "arguments" => ["bucket" => "nextcloud", "autocreate" => true, "key" => "nextcloud", "secret" => "bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=", "hostname" => "localhost", "port" => 9000, "use_ssl" => false, "use_path_style" => true, "uploadPartSize" => 52428800]]];' > config/config.php
+ echo '<?php $CONFIG=["redis" => ["host" => "localhost", "port" => 6379], "memcache.local" => "\OC\Memcache\Redis", "memcache.distributed" => "\OC\Memcache\Redis"];' > config/redis.config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f index.php
+
+ - name: Integration
+ run: |
+ cd build/integration
+ bash run.sh --tags "~@failure-s3" dav_features/webdav-related.feature
+
+ - name: S3 logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+
+ s3-primary-integration-summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, integration-s3-primary]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-s3-primary.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/integration-sqlite.yml b/.github/workflows/integration-sqlite.yml
new file mode 100644
index 00000000000..558eab50639
--- /dev/null
+++ b/.github/workflows/integration-sqlite.yml
@@ -0,0 +1,166 @@
+name: Integration sqlite
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - master
+ - stable*
+
+permissions:
+ contents: read
+
+concurrency:
+ group: integration-sqlite-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/*.php'
+ - '**/lib/**'
+ - '**/tests/**'
+ - '**/vendor-bin/**'
+ - 'build/integration/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+
+ integration-sqlite:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ fail-fast: false
+ matrix:
+ test-suite:
+ - 'capabilities_features'
+ - 'collaboration_features'
+ - 'comments_features'
+ - 'dav_features'
+ - 'features'
+ - 'federation_features'
+ - '--tags ~@large files_features'
+ - 'filesdrop_features'
+ - 'openldap_features'
+ - 'openldap_numerical_features'
+ - 'ldap_features'
+ - 'remoteapi_features'
+ - 'setup_features'
+ - 'sharees_features'
+ - 'sharing_features'
+ - 'videoverification_features'
+
+ php-versions: ['8.2']
+ spreed-versions: ['main']
+
+ services:
+ redis:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+ ports:
+ - 6379:6379/tcp
+ openldap:
+ image: ghcr.io/nextcloud/continuous-integration-openldap:openldap-7
+ ports:
+ - 389:389
+ env:
+ SLAPD_DOMAIN: nextcloud.ci
+ SLAPD_ORGANIZATION: Nextcloud
+ SLAPD_PASSWORD: admin
+ SLAPD_ADDITIONAL_MODULES: memberof
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ with:
+ submodules: true
+
+ - name: Checkout Talk app
+ if: ${{ matrix.test-suite == 'videoverification_features' }}
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ with:
+ repository: nextcloud/spreed
+ path: apps/spreed
+ ref: ${{ matrix.spreed-versions }}
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, imagick, intl, json, ldap, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: none
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up production dependencies
+ run: composer i --no-dev
+
+ - name: Set up behat dependencies
+ working-directory: build/integration
+ run: composer i
+
+ - name: Set up Talk dependencies
+ if: ${{ matrix.test-suite == 'videoverification_features' }}
+ working-directory: apps/spreed
+ run: composer i --no-dev
+
+ - name: Set up Nextcloud
+ run: |
+ mkdir data
+ ./occ maintenance:install --verbose ${{ contains(matrix.test-suite,'ldap') && '--data-dir=/dev/shm/nc_int' || '' }} --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ ./occ config:system:set hashing_default_password --value=true --type=boolean
+
+ - name: Configure caching
+ if: ${{ contains(matrix.test-suite,'ldap') }}
+ run: |
+ ./occ config:system:set redis host --value=localhost
+ ./occ config:system:set redis port --value=6379 --type=integer
+ ./occ config:system:set redis timeout --value=0 --type=integer
+ ./occ config:system:set memcache.local --value='\OC\Memcache\Redis'
+ ./occ config:system:set memcache.distributed --value='\OC\Memcache\Redis'
+
+ - name: Run integration
+ working-directory: build/integration
+ env:
+ LDAP_HOST: localhost
+ run: bash run.sh ${{ matrix.test-suite }} no-tail-log
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, integration-sqlite]
+
+ if: always()
+
+ name: integration-sqlite-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-sqlite.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/lint-eslint.yml b/.github/workflows/lint-eslint.yml
index d29485046ca..292204ff962 100644
--- a/.github/workflows/lint-eslint.yml
+++ b/.github/workflows/lint-eslint.yml
@@ -20,13 +20,13 @@ concurrency:
jobs:
changes:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: changes
continue-on-error: true
with:
@@ -64,7 +64,7 @@ jobs:
fallbackNpm: '^9'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -83,7 +83,7 @@ jobs:
summary:
permissions:
contents: none
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [changes, lint]
if: always()
diff --git a/.github/workflows/lint-php-cs.yml b/.github/workflows/lint-php-cs.yml
index ea04076e25b..003c58f63aa 100644
--- a/.github/workflows/lint-php-cs.yml
+++ b/.github/workflows/lint-php-cs.yml
@@ -16,13 +16,13 @@ concurrency:
jobs:
changes:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: changes
continue-on-error: true
with:
@@ -65,7 +65,7 @@ jobs:
summary:
permissions:
contents: none
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [changes, lint]
if: always()
diff --git a/.github/workflows/lint-php.yml b/.github/workflows/lint-php.yml
index 6fcda6cd5ee..f970ad54842 100644
--- a/.github/workflows/lint-php.yml
+++ b/.github/workflows/lint-php.yml
@@ -17,13 +17,13 @@ concurrency:
jobs:
changes:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: changes
continue-on-error: true
with:
@@ -70,7 +70,7 @@ jobs:
summary:
permissions:
contents: none
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [changes, lint]
if: always()
diff --git a/.github/workflows/node-tests.yml b/.github/workflows/node-tests.yml
index 984bed9a472..7d720bbe849 100644
--- a/.github/workflows/node-tests.yml
+++ b/.github/workflows/node-tests.yml
@@ -11,13 +11,13 @@ concurrency:
jobs:
changes:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: changes
continue-on-error: true
with:
@@ -72,7 +72,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8
with:
node-version: ${{ needs.versions.outputs.nodeVersion }}
@@ -89,7 +89,7 @@ jobs:
run: npm run test:coverage
- name: Collect coverage
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4
+ uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6
with:
files: ./coverage/lcov.info
@@ -107,7 +107,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8
with:
node-version: ${{ needs.versions.outputs.nodeVersion }}
@@ -138,7 +138,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8
with:
node-version: ${{ needs.versions.outputs.nodeVersion }}
@@ -157,7 +157,7 @@ jobs:
summary:
permissions:
contents: none
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [changes, test, jsunit, handlebars]
if: always()
diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index e9032dacad2..f11eed0b99a 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -17,13 +17,13 @@ concurrency:
jobs:
changes:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: changes
continue-on-error: true
with:
@@ -58,7 +58,7 @@ jobs:
fallbackNpm: '^9'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -87,7 +87,7 @@ jobs:
summary:
permissions:
contents: none
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [changes, build]
if: always()
diff --git a/.github/workflows/npm-audit-fix.yml b/.github/workflows/npm-audit-fix.yml
index 051bf4d1f40..687c47d3dfa 100644
--- a/.github/workflows/npm-audit-fix.yml
+++ b/.github/workflows/npm-audit-fix.yml
@@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- branches: ["main", "master", "stable27", "stable26", "stable25", "stable24"]
+ branches: ["main", "master", "stable28", "stable27", "stable26"]
name: npm-audit-fix-${{ matrix.branches }}
@@ -36,7 +36,7 @@ jobs:
fallbackNpm: '^9'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -58,7 +58,7 @@ jobs:
- name: Create Pull Request
if: always()
- uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # v5
+ uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc # v5
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: "chore(deps): fix npm audit"
diff --git a/.github/workflows/object-storage-azure.yml b/.github/workflows/object-storage-azure.yml
new file mode 100644
index 00000000000..61644893ea9
--- /dev/null
+++ b/.github/workflows/object-storage-azure.yml
@@ -0,0 +1,125 @@
+name: Object storage azure
+on:
+ pull_request:
+ schedule:
+ - cron: "15 2 * * *"
+
+concurrency:
+ group: object-storage-azure-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ azure-primary-tests:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.3'
+ coverage: true
+
+ name: php${{ matrix.php-versions }}-azure
+
+ services:
+ azurite:
+ image: mcr.microsoft.com/azure-storage/azurite
+ env:
+ AZURITE_ACCOUNTS: nextcloud:bmV4dGNsb3Vk
+ ports:
+ - 10000:10000
+ options: --health-cmd="nc 127.0.0.1 10000 -z" --health-interval=1s --health-retries=30
+
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ env:
+ OBJECT_STORE: azure
+ OBJECT_STORE_KEY: nextcloud
+ OBJECT_STORE_SECRET: bmV4dGNsb3Vk
+ run: |
+ composer install
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit
+ env:
+ OBJECT_STORE: azure
+ OBJECT_STORE_KEY: nextcloud
+ OBJECT_STORE_SECRET: bmV4dGNsb3Vk
+ run: composer run test -- --group PRIMARY-azure ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-azure
+
+ - name: Azurite logs
+ if: always()
+ run: |
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+ azure-primary-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes, azure-primary-tests]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.azure-primary-tests.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/object-storage-s3.yml b/.github/workflows/object-storage-s3.yml
new file mode 100644
index 00000000000..f7997e38e00
--- /dev/null
+++ b/.github/workflows/object-storage-s3.yml
@@ -0,0 +1,131 @@
+name: Object storage S3
+on:
+ pull_request:
+ schedule:
+ - cron: "15 2 * * *"
+
+concurrency:
+ group: object-storage-s3-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ s3-primary-tests-minio:
+ runs-on: ubuntu-22.04
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.3'
+ coverage: true
+
+ name: php${{ matrix.php-versions }}-s3
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ minio:
+ image: bitnami/minio
+ env:
+ MINIO_ROOT_USER: nextcloud
+ MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ MINIO_DEFAULT_BUCKETS: nextcloud
+ ports:
+ - "9000:9000"
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ env:
+ OBJECT_STORE: s3
+ OBJECT_STORE_KEY: nextcloud
+ OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ run: |
+ composer install
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: Wait for S3
+ run: |
+ sleep 10
+ curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
+
+ - name: PHPUnit
+ env:
+ OBJECT_STORE: s3
+ OBJECT_STORE_KEY: nextcloud
+ OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
+ run: composer run test -- --group PRIMARY-s3 ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-s3
+
+ - name: S3 logs
+ if: always()
+ run: |
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+ s3-primary-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes,s3-primary-tests-minio]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.s3-primary-tests-minio.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/object-storage-swift.yml b/.github/workflows/object-storage-swift.yml
new file mode 100644
index 00000000000..08e4d9ebeca
--- /dev/null
+++ b/.github/workflows/object-storage-swift.yml
@@ -0,0 +1,121 @@
+name: Object storage Swift
+on:
+ pull_request:
+ schedule:
+ - cron: "15 2 * * *"
+
+concurrency:
+ group: object-storage-swift-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ swift-primary-tests:
+ runs-on: ubuntu-latest
+ needs: changes
+
+ if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.3'
+ coverage: true
+
+ name: php${{ matrix.php-versions }}-swift
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ swift:
+ image: ghcr.io/cscfi/docker-keystone-swift
+ ports:
+ - 5000:5000
+ - 8080:8080
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Nextcloud
+ env:
+ OBJECT_STORE: swift
+ OBJECT_STORE_SECRET: veryfast
+ run: |
+ composer install
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit
+ env:
+ OBJECT_STORE: swift
+ OBJECT_STORE_SECRET: veryfast
+ run: composer run test -- --group PRIMARY-swift ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-swift
+
+ - name: Swift logs
+ if: always()
+ run: |
+ docker ps -a
+ docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
+
+ swift-primary-summary:
+ runs-on: ubuntu-latest-low
+ needs: [changes,swift-primary-tests]
+
+ if: always()
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.swift-primary-tests.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml
index d47fc6c7f84..9e03a135e62 100644
--- a/.github/workflows/performance.yml
+++ b/.github/workflows/performance.yml
@@ -45,8 +45,9 @@ jobs:
with:
blueprint: tests/blueprints/basic.toml
ref: ${{ github.event.pull_request.head.ref }}
+
- name: Run before measurements
- uses: nextcloud/profiler@1e66a9de5f76a01e9d1db4f0153bcc1cbf989b3d
+ uses: nextcloud/profiler@6801ee10fc80f10b444388fb6ca9b36ad8a2ea83
with:
run: |
curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test
@@ -68,7 +69,7 @@ jobs:
- name: Run after measurements
id: compare
- uses: nextcloud/profiler@1e66a9de5f76a01e9d1db4f0153bcc1cbf989b3d
+ uses: nextcloud/profiler@6801ee10fc80f10b444388fb6ca9b36ad8a2ea83
with:
run: |
curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test
@@ -82,14 +83,14 @@ jobs:
- name: Upload profiles
if: always()
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
+ uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
with:
name: profiles
path: |
before.json
after.json
- - uses: actions/github-script@v6
+ - uses: actions/github-script@v7
if: failure() && steps.compare.outcome == 'failure'
with:
github-token: ${{secrets.GITHUB_TOKEN}}
diff --git a/.github/workflows/phpunit-mariadb.yml b/.github/workflows/phpunit-mariadb.yml
new file mode 100644
index 00000000000..84a76c423aa
--- /dev/null
+++ b/.github/workflows/phpunit-mariadb.yml
@@ -0,0 +1,144 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+name: PHPUnit mariadb
+
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+permissions:
+ contents: read
+
+concurrency:
+ group: phpunit-mariadb-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ phpunit-mariadb:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.0']
+ mariadb-versions: ['10.3', '10.4', '10.5', '10.6', '10.11']
+ include:
+ - php-versions: '8.3'
+ mariadb-versions: '10.6'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: MariaDB ${{ matrix.mariadb-versions }} (PHP ${{ matrix.php-versions }}) - database tests
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ mariadb:
+ image: mariadb:${{ matrix.mariadb-versions }}
+ ports:
+ - 4444:3306/tcp
+ env:
+ MYSQL_ROOT_PASSWORD: rootpassword
+ MYSQL_USER: oc_autotest
+ MYSQL_PASSWORD: nextcloud
+ MYSQL_DATABASE: oc_autotest
+ options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 5
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Enable ONLY_FULL_GROUP_BY MySQL option
+ run: |
+ echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
+ echo "SELECT @@sql_mode;" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
+
+ - name: Set up Nextcloud
+ env:
+ DB_PORT: 4444
+ run: |
+ mkdir data
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit
+ run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
+
+ - name: Upload db code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.db.xml
+ flags: phpunit-mariadb
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, phpunit-mariadb]
+
+ if: always()
+
+ name: phpunit-mariadb-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mariadb.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/phpunit-memcached.yml b/.github/workflows/phpunit-memcached.yml
new file mode 100644
index 00000000000..5479356abf7
--- /dev/null
+++ b/.github/workflows/phpunit-memcached.yml
@@ -0,0 +1,123 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+name: PHPUnit memcached
+
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+permissions:
+ contents: read
+
+concurrency:
+ group: phpunit-memcached-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src}}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ phpunit-memcached:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.2'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: Memcached (PHP ${{ matrix.php-versions }})
+
+ services:
+ memcached:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 11212:11212/tcp
+ - 11212:11212/udp
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@7fdd3ece872ec7ec4c098ae5ab7637d5e0a96067 # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, memcached, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Set up Nextcloud
+ run: |
+ mkdir data
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit memcached tests
+ run: composer run test -- --group Memcache,Memcached ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
+
+ - name: Upload code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.xml
+ flags: phpunit-memcached
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, phpunit-memcached]
+
+ if: always()
+
+ name: phpunit-memcached-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-memcached.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml
new file mode 100644
index 00000000000..3fb7b8d27c0
--- /dev/null
+++ b/.github/workflows/phpunit-mysql.yml
@@ -0,0 +1,144 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+name: PHPUnit mysql
+
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+permissions:
+ contents: read
+
+concurrency:
+ group: phpunit-mysql-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src }}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ phpunit-mysql:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.0']
+ mysql-versions: ['8.0', '8.3']
+ include:
+ - mysql-versions: '8.0'
+ php-versions: '8.3'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: MySQL ${{ matrix.mysql-versions }} (PHP ${{ matrix.php-versions }}) - database tests
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ mysql:
+ image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
+ ports:
+ - 4444:3306/tcp
+ env:
+ MYSQL_ROOT_PASSWORD: rootpassword
+ MYSQL_USER: oc_autotest
+ MYSQL_PASSWORD: nextcloud
+ MYSQL_DATABASE: oc_autotest
+ options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 5
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Enable ONLY_FULL_GROUP_BY MySQL option
+ run: |
+ echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
+ echo "SELECT @@sql_mode;" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
+
+ - name: Set up Nextcloud
+ env:
+ DB_PORT: 4444
+ run: |
+ mkdir data
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit
+ run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
+
+ - name: Upload db code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.db.xml
+ flags: phpunit-mysql
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, phpunit-mysql]
+
+ if: always()
+
+ name: phpunit-mysql-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/phpunit-nodb.yml b/.github/workflows/phpunit-nodb.yml
new file mode 100644
index 00000000000..676405eb32f
--- /dev/null
+++ b/.github/workflows/phpunit-nodb.yml
@@ -0,0 +1,127 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+# This is the testsuite running all non-database agnostic unit tests
+name: PHPUnit nodb
+
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+permissions:
+ contents: read
+
+concurrency:
+ group: phpunit-nodb-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src }}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ phpunit-nodb:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.2'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: No DB unit tests (PHP ${{ matrix.php-versions }})
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@7fdd3ece872ec7ec4c098ae5ab7637d5e0a96067 # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, imagick, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ # Required for tests that use pcntl
+ ini-values: disable_functions=""
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Set up Nextcloud
+ run: |
+ mkdir data
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit nodb testsuite
+ run: composer run test -- --exclude-group DB,SLOWDB ${{ matrix.coverage && ' --coverage-clover ./clover.nodb.xml' || '' }}
+
+ - name: Upload nodb code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.nodb.xml
+ flags: phpunit-nodb
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, phpunit-nodb]
+
+ if: always()
+
+ name: phpunit-nodb-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-nodb.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/phpunit-oci.yml b/.github/workflows/phpunit-oci.yml
index 2c90b992cd0..09b67011beb 100644
--- a/.github/workflows/phpunit-oci.yml
+++ b/.github/workflows/phpunit-oci.yml
@@ -2,6 +2,8 @@ name: PHPUnit oci
on:
pull_request:
+ schedule:
+ - cron: "5 2 * * *"
permissions:
contents: read
@@ -12,13 +14,13 @@ concurrency:
jobs:
changes:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
outputs:
- src: ${{ steps.changes.outputs.src}}
+ src: ${{ steps.changes.outputs.src }}
steps:
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
id: changes
continue-on-error: true
with:
@@ -26,36 +28,52 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
+ - '**/appinfo/**'
- '**/lib/**'
+ - '**/templates/**'
- '**/tests/**'
- - '**/vendor-bin/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'
- '**.php'
phpunit-oci:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-latest
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
+ needs: changes
+ if: needs.changes.outputs.src != 'false' && ${{ github.repository_owner != 'nextcloud-gmbh' }}
strategy:
matrix:
- php-versions: ['8.0', '8.1', '8.2']
+ oracle-versions: ['11']
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.3'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: Oracle ${{ matrix.oracle-versions }} (PHP ${{ matrix.php-versions }}) - database tests
services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
oracle:
- image: ghcr.io/gvenzl/oracle-xe:11
+ image: ghcr.io/gvenzl/oracle-xe:${{ matrix.oracle-versions }}
# Provide passwords and other environment variables to container
env:
ORACLE_RANDOM_PASSWORD: true
- APP_USER: autotest
- APP_USER_PASSWORD: owncloud
+ APP_USER: oc_autotest
+ APP_USER_PASSWORD: nextcloud
# Forward Oracle port
ports:
- - 1521:1521/tcp
+ - 4444:1521/tcp
# Provide healthcheck script options for startup
options: >-
@@ -71,24 +89,38 @@ jobs:
submodules: true
- name: Set up php ${{ matrix.php-versions }}
- uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
with:
php-version: ${{ matrix.php-versions }}
- extensions: ctype, curl, dom, fileinfo, gd, imagick, intl, json, mbstring, oci8, openssl, pcntl, pdo_sqlite, posix, sqlite, xml, zip
- coverage: none
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, oci8
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
ini-file: development
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Set up dependencies
+ run: composer i
+
- name: Set up Nextcloud
+ env:
+ DB_PORT: 4444
run: |
- composer install
mkdir data
- ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=1521 --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin
- php -f index.php
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=oc_autotest --database-pass=nextcloud --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
- name: PHPUnit
- run: composer run test:db
+ run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
+
+ - name: Upload db code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.db.xml
+ flags: phpunit-oci
- name: Run repair steps
run: |
@@ -97,7 +129,7 @@ jobs:
summary:
permissions:
contents: none
- runs-on: ubuntu-latest
+ runs-on: ubuntu-latest-low
needs: [changes, phpunit-oci]
if: always()
diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml
new file mode 100644
index 00000000000..ce074e415e9
--- /dev/null
+++ b/.github/workflows/phpunit-pgsql.yml
@@ -0,0 +1,143 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+name: PHPUnit pgsql
+
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+permissions:
+ contents: read
+
+concurrency:
+ group: phpunit-pgsql-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src }}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ phpunit-pgsql:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.0']
+ # To keep the matrix smaller we ignore PostgreSQL '11', '13', '14' as we already test 10 and 15 as lower and upper bound
+ postgres-versions: ['10', '15', '16']
+ include:
+ - php-versions: '8.3'
+ postgres-versions: '15'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: PostgreSQL ${{ matrix.postgres-versions }} (PHP ${{ matrix.php-versions }}) - database tests
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ postgres:
+ image: ghcr.io/nextcloud/continuous-integration-postgres-${{ matrix.postgres-versions }}:latest
+ ports:
+ - 4444:5432/tcp
+ env:
+ POSTGRES_USER: root
+ POSTGRES_PASSWORD: rootpassword
+ POSTGRES_DB: nextcloud
+ options: --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Set up Nextcloud
+ env:
+ DB_PORT: 4444
+ run: |
+ mkdir data
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: PHPUnit database tests
+ run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
+
+ - name: Upload db code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.db.xml
+ flags: phpunit-postgres
+
+ - name: Run repair steps
+ run: |
+ ./occ maintenance:repair --include-expensive
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, phpunit-pgsql]
+
+ if: always()
+
+ name: phpunit-pgsql-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-pgsql.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml
new file mode 100644
index 00000000000..64557e34076
--- /dev/null
+++ b/.github/workflows/phpunit-sqlite.yml
@@ -0,0 +1,127 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+name: PHPUnit sqlite
+
+on:
+ pull_request:
+ schedule:
+ - cron: "5 2 * * *"
+
+permissions:
+ contents: read
+
+concurrency:
+ group: phpunit-sqlite-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ changes:
+ runs-on: ubuntu-latest-low
+
+ outputs:
+ src: ${{ steps.changes.outputs.src }}
+
+ steps:
+ - uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1
+ id: changes
+ continue-on-error: true
+ with:
+ filters: |
+ src:
+ - '.github/workflows/**'
+ - '3rdparty/**'
+ - '**/appinfo/**'
+ - '**/lib/**'
+ - '**/templates/**'
+ - '**/tests/**'
+ - 'vendor/**'
+ - 'vendor-bin/**'
+ - '.php-cs-fixer.dist.php'
+ - 'composer.json'
+ - 'composer.lock'
+ - '**.php'
+
+ phpunit-sqlite:
+ runs-on: ubuntu-latest
+
+ needs: changes
+ if: needs.changes.outputs.src != 'false'
+
+ strategy:
+ matrix:
+ php-versions: ['8.0', '8.1', '8.2', '8.3']
+ include:
+ - php-versions: '8.1'
+ coverage: ${{ github.event_name != 'pull_request' }}
+
+ name: SQLite (PHP ${{ matrix.php-versions }})
+
+ services:
+ cache:
+ image: ghcr.io/nextcloud/continuous-integration-redis:latest
+ ports:
+ - 6379:6379/tcp
+ options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+ steps:
+ - name: Checkout server
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ submodules: true
+
+ - name: Set up php ${{ matrix.php-versions }}
+ uses: shivammathur/setup-php@7fdd3ece872ec7ec4c098ae5ab7637d5e0a96067 # v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+ extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+ coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
+ ini-file: development
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up dependencies
+ run: composer i
+
+ - name: Set up Nextcloud
+ run: |
+ mkdir data
+ cp tests/redis.config.php config/
+ cp tests/preseed-config.php config/config.php
+ ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
+ php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
+
+ - name: Nextcloud debug information
+ run: ./occ app:list && echo "======= System config =======" && ./occ config:list system
+
+ - name: PHPUnit database tests
+ run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
+
+ - name: Upload db code coverage
+ if: ${{ !cancelled() && matrix.coverage }}
+ uses: codecov/codecov-action@v4
+ with:
+ files: ./clover.db.xml
+ flags: phpunit-sqlite
+
+ - name: Print logs
+ if: always()
+ run: |
+ cat data/nextcloud.log
+
+ summary:
+ permissions:
+ contents: none
+ runs-on: ubuntu-latest-low
+ needs: [changes, phpunit-sqlite]
+
+ if: always()
+
+ name: phpunit-sqlite-summary
+
+ steps:
+ - name: Summary status
+ run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/s3-external.yml b/.github/workflows/s3-external.yml
deleted file mode 100644
index ae859a97df3..00000000000
--- a/.github/workflows/s3-external.yml
+++ /dev/null
@@ -1,130 +0,0 @@
-name: S3 External storage
-on:
- pull_request:
- paths:
- - 'apps/files_external/**'
-
-concurrency:
- group: s3-external-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-env:
- APP_NAME: files_external
-
-jobs:
- s3-external-tests-minio:
- runs-on: ubuntu-latest
-
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
-
- strategy:
- # do not stop on another job's failure
- fail-fast: false
- matrix:
- php-versions: ['8.0', '8.1']
-
- name: php${{ matrix.php-versions }}-minio
-
- services:
- minio:
- env:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- image: bitnami/minio:2021.10.6
- ports:
- - "9000:9000"
-
- steps:
- - name: Checkout server
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- with:
- submodules: true
-
- - name: Set up php ${{ matrix.php-versions }}
- uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
- with:
- php-version: ${{ matrix.php-versions }}
- extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set up Nextcloud
- run: |
- composer install
- mkdir data
- ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
- ./occ app:enable --force ${{ env.APP_NAME }}
- php -S localhost:8080 &
- - name: PHPUnit
- run: |
- echo "<?php return ['run' => true, 'secret' => 'actually-not-secret', 'passwordsalt' => 'actually-not-secret', 'hostname' => 'localhost','key' => 'minio','secret' => 'minio123', 'bucket' => 'bucket', 'port' => 9000, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/${{ env.APP_NAME }}/tests/config.amazons3.php
- composer run test:files_external apps/files_external/tests/Storage/Amazons3Test.php
- composer run test:files_external apps/files_external/tests/Storage/VersionedAmazonS3Test.php
- - name: S3 logs
- if: always()
- run: |
- docker ps -a
- docker logs $(docker ps -aq)
- s3-external-tests-localstack:
- runs-on: ubuntu-latest
-
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
-
- strategy:
- # do not stop on another job's failure
- fail-fast: false
- matrix:
- php-versions: ['8.0', '8.1']
-
- name: php${{ matrix.php-versions }}-localstack
-
- services:
- minio:
- env:
- SERVICES: s3
- DEBUG: 1
- image: localstack/localstack:0.12.7
- ports:
- - "4566:4566"
-
- steps:
- - name: Checkout server
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- with:
- submodules: true
-
- - name: Set up php ${{ matrix.php-versions }}
- uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
- with:
- php-version: ${{ matrix.php-versions }}
- extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set up Nextcloud
- run: |
- composer install
- mkdir data
- ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
- ./occ app:enable --force ${{ env.APP_NAME }}
- php -S localhost:8080 &
- - name: PHPUnit
- run: |
- echo "<?php return ['run' => true,'hostname' => 'localhost','key' => 'ignored','secret' => 'ignored', 'bucket' => 'bucket', 'port' => 4566, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/${{ env.APP_NAME }}/tests/config.amazons3.php
- composer run test:files_external apps/files_external/tests/Storage/Amazons3Test.php
- composer run test:files_external apps/files_external/tests/Storage/VersionedAmazonS3Test.php
- - name: S3 logs
- if: always()
- run: |
- docker ps -a
- docker logs $(docker ps -aq)
-
- s3-external-summary:
- runs-on: ubuntu-latest
- needs: [s3-external-tests-minio, s3-external-tests-localstack]
-
- if: always()
-
- steps:
- - name: Summary status
- run: if ${{ needs.s3-external-tests-minio.result != 'success' }} || ${{ needs.s3-external-tests-localstack.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/s3-primary-integration.yml b/.github/workflows/s3-primary-integration.yml
deleted file mode 100644
index c957af7ada0..00000000000
--- a/.github/workflows/s3-primary-integration.yml
+++ /dev/null
@@ -1,95 +0,0 @@
-name: S3 primary storage integration tests
-on:
- pull_request:
- paths:
- - '.github/workflows/**'
- - '3rdparty/**'
- - '**/*.php'
- - '**/lib/**'
- - '**/tests/**'
- - '**/vendor-bin/**'
- - '.php-cs-fixer.dist.php'
- - 'composer.json'
- - 'composer.lock'
-
-concurrency:
- group: s3-external-integration-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-jobs:
- s3-primary-integration-tests-minio:
- runs-on: ubuntu-20.04
-
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
-
- strategy:
- # do not stop on another job's failure
- fail-fast: false
- matrix:
- php-versions: ['8.0']
- key: ['objectstore', 'objectstore_multibucket']
-
- name: php${{ matrix.php-versions }}-${{ matrix.key }}-minio
-
- services:
- redis:
- image: redis
- ports:
- - "6379:6379"
- minio:
- env:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- image: bitnami/minio:2021.12.29
- ports:
- - "9000:9000"
-
- steps:
- - name: Checkout server
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- with:
- submodules: true
-
- - name: Set up php ${{ matrix.php-versions }}
- uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
- with:
- php-version: ${{ matrix.php-versions }}
- extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, redis
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Wait for S3
- run: |
- sleep 10
- curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
-
- - name: Set up Nextcloud
- run: |
- mkdir data
- echo '<?php $CONFIG=["${{ matrix.key }}" => ["class" => "OC\Files\ObjectStore\S3", "arguments" => ["bucket" => "nextcloud", "autocreate" => true, "key" => "minio", "secret" => "minio123", "hostname" => "localhost", "port" => 9000, "use_ssl" => false, "use_path_style" => true, "uploadPartSize" => 52428800]]];' > config/config.php
- echo '<?php $CONFIG=["redis" => ["host" => "localhost", "port" => 6379], "memcache.local" => "\OC\Memcache\Redis", "memcache.distributed" => "\OC\Memcache\Redis"];' > config/redis.config.php
- ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
- php -f index.php
-
- - name: Integration
- run: |
- cd build/integration
- bash run.sh --tags "~@failure-s3" features/webdav-related.feature
-
- - name: S3 logs
- if: always()
- run: |
- cat data/nextcloud.log
- docker ps -a
- docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
-
-
- s3-primary-integration-summary:
- runs-on: ubuntu-latest
- needs: [s3-primary-integration-tests-minio]
-
- if: always()
-
- steps:
- - name: Summary status
- run: if ${{ needs.s3-primary-integration-tests-minio.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/s3-primary.yml b/.github/workflows/s3-primary.yml
deleted file mode 100644
index 2b7c6e8d7f0..00000000000
--- a/.github/workflows/s3-primary.yml
+++ /dev/null
@@ -1,87 +0,0 @@
-name: S3 primary storage
-on:
- pull_request:
- paths:
- - '.github/workflows/**'
- - '3rdparty/**'
- - '**/*.php'
- - '**/lib/**'
- - '**/tests/**'
- - '**/vendor-bin/**'
- - '.php-cs-fixer.dist.php'
- - 'composer.json'
- - 'composer.lock'
-
-concurrency:
- group: s3-primary-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-jobs:
- s3-primary-tests-minio:
- runs-on: ubuntu-20.04
-
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
-
- strategy:
- # do not stop on another job's failure
- fail-fast: false
- matrix:
- php-versions: ['8.0']
- key: ['objectstore', 'objectstore_multibucket']
-
- name: php${{ matrix.php-versions }}-${{ matrix.key }}-minio
-
- services:
- minio:
- env:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- image: bitnami/minio:2021.12.29
- ports:
- - "9000:9000"
-
- steps:
- - name: Checkout server
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- with:
- submodules: true
-
- - name: Set up php ${{ matrix.php-versions }}
- uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
- with:
- php-version: ${{ matrix.php-versions }}
- extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set up Nextcloud
- run: |
- composer install
- mkdir data
- echo '<?php $CONFIG=["${{ matrix.key }}" => ["class" => "OC\Files\ObjectStore\S3", "arguments" => ["bucket" => "nextcloud", "autocreate" => true, "key" => "minio", "secret" => "minio123", "hostname" => "localhost", "port" => 9000, "use_ssl" => false, "use_path_style" => true, "uploadPartSize" => 52428800]]];' > config/config.php
- ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
- php -f index.php
-
- - name: Wait for S3
- run: |
- sleep 10
- curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
-
- - name: PHPUnit
- run: composer run test:db
- - name: S3 logs
- if: always()
- run: |
- docker ps -a
- docker logs $(docker ps -aq)
-
-
- s3-primary-summary:
- runs-on: ubuntu-latest
- needs: [s3-primary-tests-minio]
-
- if: always()
-
- steps:
- - name: Summary status
- run: if ${{ needs.s3-primary-tests-minio.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/sftp.yml b/.github/workflows/sftp.yml
deleted file mode 100644
index d1f8a60c6a1..00000000000
--- a/.github/workflows/sftp.yml
+++ /dev/null
@@ -1,73 +0,0 @@
-name: SFTP unit tests
-on:
- pull_request:
- paths:
- - 'apps/files_external/**'
-
-env:
- APP_NAME: files_external
-
-concurrency:
- group: sftp-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-jobs:
- sftp-tests:
- runs-on: ubuntu-latest
-
- if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
-
- strategy:
- # do not stop on another job's failure
- fail-fast: false
- matrix:
- php-versions: ['8.0']
- sftpd: ['openssh']
-
- name: php${{ matrix.php-versions }}-${{ matrix.sftpd }}
-
- steps:
- - name: Checkout server
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- with:
- submodules: true
-
- - name: Set up sftpd
- run: |
- sudo mkdir /tmp/sftp
- sudo chown -R 0777 /tmp/sftp
- if [[ "${{ matrix.sftpd }}" == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp "test:test:::data"; fi
- - name: Set up php ${{ matrix.php-versions }}
- uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
- with:
- php-version: ${{ matrix.php-versions }}
- extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set up Nextcloud
- run: |
- composer install
- mkdir data
- ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
- ./occ app:enable --force ${{ env.APP_NAME }}
- php -S localhost:8080 &
- - name: PHPUnit
- run: |
- echo "<?php return ['run' => true, 'host' => 'localhost:2222','user' => 'test','password' => 'test', 'root' => 'data'];" > apps/${{ env.APP_NAME }}/tests/config.sftp.php
- composer run test:files_external apps/files_external/tests/Storage/SftpTest.php
- - name: sftpd logs
- if: always()
- run: |
- ls -l /tmp/sftp
- docker logs sftp
-
- sftp-summary:
- runs-on: ubuntu-latest
- needs: sftp-tests
-
- if: always()
-
- steps:
- - name: Summary status
- run: if ${{ needs.sftp-tests.result != 'success' }}; then exit 1; fi
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 7016f5108a6..ec911455f61 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -15,7 +15,7 @@ jobs:
issues: write
steps:
- - uses: actions/stale@v8
+ - uses: actions/stale@v9
with:
repo-token: ${{ secrets.COMMAND_BOT_PAT }}
stale-issue-message: >
diff --git a/.github/workflows/static-code-analysis.yml b/.github/workflows/static-code-analysis.yml
index 1a58fe413f8..01f30f2574c 100644
--- a/.github/workflows/static-code-analysis.yml
+++ b/.github/workflows/static-code-analysis.yml
@@ -40,7 +40,7 @@ jobs:
- name: Upload Analysis results to GitHub
if: always()
- uses: github/codeql-action/upload-sarif@v2
+ uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
@@ -68,7 +68,7 @@ jobs:
- name: Upload Security Analysis results to GitHub
if: always()
- uses: github/codeql-action/upload-sarif@v2
+ uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
diff --git a/.github/workflows/update-cacert-bundle.yml b/.github/workflows/update-cacert-bundle.yml
index 38865663c7c..6fcd50c9585 100644
--- a/.github/workflows/update-cacert-bundle.yml
+++ b/.github/workflows/update-cacert-bundle.yml
@@ -12,7 +12,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- branches: ["master", "stable27", "stable26", "stable25", "stable24", "stable23", "stable22"]
+ branches: ["master", "stable28", "stable27", "stable26", "stable25", "stable24", "stable23", "stable22"]
name: update-ca-certificate-bundle-${{ matrix.branches }}
@@ -26,7 +26,7 @@ jobs:
run: curl --etag-compare build/ca-bundle-etag.txt --etag-save build/ca-bundle-etag.txt --output resources/config/ca-bundle.crt https://curl.se/ca/cacert.pem
- name: Create Pull Request
- uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38
+ uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: "fix(security): Update CA certificate bundle"
@@ -40,3 +40,4 @@ jobs:
labels: |
dependencies
3. to review
+ reviewers: ChristophWurst, miaulalala, nickvergessen
diff --git a/.github/workflows/update-code-signing-crl.yml b/.github/workflows/update-code-signing-crl.yml
new file mode 100644
index 00000000000..bcb90103b0a
--- /dev/null
+++ b/.github/workflows/update-code-signing-crl.yml
@@ -0,0 +1,46 @@
+name: Update code signing revocation list
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: "5 2 * * *"
+
+jobs:
+ update-code-signing-crl:
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ branches: ["master", "stable28", "stable27", "stable26", "stable25", "stable24", "stable23", "stable22"]
+
+ name: update-code-signing-crl-${{ matrix.branches }}
+
+ steps:
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ with:
+ ref: ${{ matrix.branches }}
+ submodules: true
+
+ - name: Download CRL file from Appstore repository
+ run: curl --output resources/codesigning/root.crl https://raw.githubusercontent.com/nextcloud/appstore/master/nextcloudappstore/certificate/nextcloud.crl
+
+ - name: Verify CRL is from CRT
+ run: openssl crl -verify -in resources/codesigning/root.crl -CAfile resources/codesigning/root.crt -noout
+
+ - name: Create Pull Request
+ uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc
+ with:
+ token: ${{ secrets.COMMAND_BOT_PAT }}
+ commit-message: "fix(security): Update code signing revocation list"
+ committer: GitHub <noreply@github.com>
+ author: nextcloud-command <nextcloud-command@users.noreply.github.com>
+ signoff: true
+ branch: automated/noid/${{ matrix.branches }}-update-code-signing-crl
+ title: "[${{ matrix.branches }}] fix(security): Update code signing revocation list"
+ body: |
+ Auto-generated update of code signing revocation list from [Appstore](https://github.com/nextcloud/appstore/commits/master/nextcloudappstore/certificate/nextcloud.crl)
+ labels: |
+ dependencies
+ 3. to review
+ reviewers: mgallien, miaulalala, nickvergessen
diff --git a/.github/workflows/update-psalm-baseline.yml b/.github/workflows/update-psalm-baseline.yml
index 1f3998759e1..a00668dff9a 100644
--- a/.github/workflows/update-psalm-baseline.yml
+++ b/.github/workflows/update-psalm-baseline.yml
@@ -14,7 +14,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- branches: ["master", "stable27", "stable26", "stable25"]
+ branches: ["master", "stable28", "stable27", "stable26"]
name: update-psalm-baseline-${{ matrix.branches }}
@@ -28,7 +28,7 @@ jobs:
uses: shivammathur/setup-php@v2
with:
php-version: '8.0'
- extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
+ extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -37,11 +37,11 @@ jobs:
run: composer install
- name: Psalm
- run: composer run psalm -- --monochrome --no-progress --output-format=text --update-baseline
+ run: composer run psalm:ci -- --monochrome --no-progress --output-format=text --update-baseline
continue-on-error: true
- name: Psalm OCP
- run: composer run psalm -- -c psalm-ocp.xml --monochrome --no-progress --output-format=github --update-baseline
+ run: composer run psalm:ci -- -c psalm-ocp.xml --monochrome --no-progress --output-format=github --update-baseline
continue-on-error: true
- name: Reset composer
@@ -50,7 +50,7 @@ jobs:
git checkout composer.json composer.lock lib/composer
- name: Create Pull Request
- uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38
+ uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: Update psalm baseline