Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 017b7f8444 |
+1511
-1
File diff suppressed because it is too large
Load Diff
+1
-9
@@ -28,15 +28,7 @@
|
||||
/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
|
||||
|
||||
@@ -51,7 +43,7 @@
|
||||
/core/routes.php @Altahrim
|
||||
|
||||
# OpenAPI
|
||||
openapi*.json @provokateurin
|
||||
openapi.json @provokateurin
|
||||
ResponseDefinitions.php @provokateurin
|
||||
|
||||
# Talk team
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
require: write
|
||||
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
|
||||
uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.1.0
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
@@ -39,9 +39,9 @@ jobs:
|
||||
id: git-path
|
||||
run: |
|
||||
if ${{ startsWith(steps.command.outputs.arg1, '/') }}; then
|
||||
echo "path=${{steps.command.outputs.arg1}}" >> $GITHUB_OUTPUT
|
||||
echo "path=${{ github.workspace }}${{steps.command.outputs.arg1}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "path=${{steps.command.outputs.arg2}}" >> $GITHUB_OUTPUT
|
||||
echo "path=${{ github.workspace }}${{steps.command.outputs.arg2}}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Init branch
|
||||
@@ -54,13 +54,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Restore cached git repository
|
||||
uses: buildjet/cache@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3
|
||||
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2
|
||||
with:
|
||||
path: .git
|
||||
key: git-repo
|
||||
|
||||
- name: Checkout ${{ needs.init.outputs.head_ref }}
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3.6.0
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
fetch-depth: 0
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
fallbackNpm: '^9'
|
||||
|
||||
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
|
||||
with:
|
||||
node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
cache: npm
|
||||
@@ -98,26 +98,26 @@ jobs:
|
||||
- name: Commit and push default
|
||||
if: ${{ needs.init.outputs.arg1 != 'fixup' && needs.init.outputs.arg1 != 'amend' }}
|
||||
run: |
|
||||
git add ${{ github.workspace }}${{ needs.init.outputs.git_path }}
|
||||
git add ${{ 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' }}
|
||||
run: |
|
||||
git add ${{ github.workspace }}${{ needs.init.outputs.git_path }}
|
||||
git add ${{ 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' }}
|
||||
run: |
|
||||
git add ${{ github.workspace }}${{ needs.init.outputs.git_path }}
|
||||
git add ${{ needs.init.outputs.git_path }}
|
||||
git commit --amend --no-edit --signoff
|
||||
git push --force origin ${{ needs.init.outputs.head_ref }}
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
|
||||
uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.1.0
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
|
||||
uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # 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@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
|
||||
uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.0.1
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
|
||||
uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # 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@71345be0265236311c031f5c7866368bd1eff043 # v3.0.1
|
||||
uses: peter-evans/create-or-update-comment@23ff15729ef2fc348714a3bb66d2f655ca9066f2 # v3.0.1
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
fallbackNpm: "^9"
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
|
||||
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, 3, 4, 5]
|
||||
containers: ["component", 0, 1, 2]
|
||||
# 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: [6]
|
||||
total-containers: [3]
|
||||
|
||||
name: runner ${{ matrix.containers }}
|
||||
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
path: ./
|
||||
|
||||
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
|
||||
with:
|
||||
node-version: ${{ needs.init.outputs.nodeVersion }}
|
||||
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }}
|
||||
|
||||
- name: Upload snapshots
|
||||
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
|
||||
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||
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@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
|
||||
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||
if: failure() && matrix.containers != 'component'
|
||||
with:
|
||||
name: nc_logs_${{ matrix.containers }}
|
||||
@@ -143,7 +143,7 @@ jobs:
|
||||
run: docker exec nextcloud-cypress-tests-server tar -cvjf - data > data.tar
|
||||
|
||||
- name: Upload data dir archive
|
||||
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
|
||||
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||
if: failure() && matrix.containers != 'component'
|
||||
with:
|
||||
name: nc_data_${{ matrix.containers }}
|
||||
|
||||
@@ -1,186 +0,0 @@
|
||||
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
|
||||
|
||||
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/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- '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.3'
|
||||
coverage: true
|
||||
|
||||
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@v3
|
||||
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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,167 +0,0 @@
|
||||
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
|
||||
|
||||
outputs:
|
||||
# FIXME src: ${{ steps.changes.outputs.src}}
|
||||
src: 'true'
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
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
|
||||
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
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.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@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.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@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65
|
||||
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@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.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@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ["main", "master", "stable28", "stable27", "stable26"]
|
||||
branches: ["main", "master", "stable28", "stable27", "stable26", "stable25", "stable24"]
|
||||
|
||||
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@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
|
||||
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,131 +0,0 @@
|
||||
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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,121 +0,0 @@
|
||||
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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -82,7 +82,7 @@ jobs:
|
||||
|
||||
- name: Upload profiles
|
||||
if: always()
|
||||
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8
|
||||
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
|
||||
with:
|
||||
name: profiles
|
||||
path: |
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
# 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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,123 +0,0 @@
|
||||
# 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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,144 +0,0 @@
|
||||
# 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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,127 +0,0 @@
|
||||
# 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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -2,8 +2,6 @@ name: PHPUnit oci
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -17,10 +15,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
||||
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
@@ -28,51 +26,36 @@ jobs:
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/appinfo/**'
|
||||
- '**/lib/**'
|
||||
- '**/templates/**'
|
||||
- '**/tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '**/vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
|
||||
phpunit-oci:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
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
|
||||
php-versions: ['8.0', '8.1', '8.2']
|
||||
|
||||
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:${{ matrix.oracle-versions }}
|
||||
image: ghcr.io/gvenzl/oracle-xe:11
|
||||
|
||||
# Provide passwords and other environment variables to container
|
||||
env:
|
||||
ORACLE_RANDOM_PASSWORD: true
|
||||
APP_USER: oc_autotest
|
||||
APP_USER_PASSWORD: nextcloud
|
||||
APP_USER: autotest
|
||||
APP_USER_PASSWORD: owncloud
|
||||
|
||||
# Forward Oracle port
|
||||
ports:
|
||||
- 4444:1521/tcp
|
||||
- 1521:1521/tcp
|
||||
|
||||
# Provide healthcheck script options for startup
|
||||
options: >-
|
||||
@@ -88,38 +71,24 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
|
||||
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: 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' }}
|
||||
extensions: ctype, curl, dom, fileinfo, gd, imagick, intl, json, mbstring, oci8, openssl, pcntl, pdo_sqlite, posix, sqlite, xml, zip
|
||||
coverage: 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
|
||||
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
|
||||
./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
|
||||
|
||||
- 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@v3
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-oci
|
||||
run: composer run test:db
|
||||
|
||||
- name: Run repair steps
|
||||
run: |
|
||||
|
||||
@@ -1,143 +0,0 @@
|
||||
# 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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -1,127 +0,0 @@
|
||||
# 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
|
||||
|
||||
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/**'
|
||||
- '**/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@v3
|
||||
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
|
||||
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
|
||||
@@ -0,0 +1,130 @@
|
||||
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
|
||||
+14
-20
@@ -4,7 +4,6 @@ on:
|
||||
paths:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'build/integration/**'
|
||||
- '**/*.php'
|
||||
- '**/lib/**'
|
||||
- '**/tests/**'
|
||||
@@ -14,12 +13,12 @@ on:
|
||||
- 'composer.lock'
|
||||
|
||||
concurrency:
|
||||
group: integration-s3-primary-${{ github.head_ref || github.run_id }}
|
||||
group: s3-external-integration-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
integration-s3-primary:
|
||||
runs-on: ubuntu-latest
|
||||
s3-primary-integration-tests-minio:
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
@@ -34,16 +33,14 @@ jobs:
|
||||
|
||||
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
|
||||
image: redis
|
||||
ports:
|
||||
- 6379:6379/tcp
|
||||
- "6379:6379"
|
||||
minio:
|
||||
image: bitnami/minio
|
||||
env:
|
||||
MINIO_ROOT_USER: nextcloud
|
||||
MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
MINIO_DEFAULT_BUCKETS: nextcloud
|
||||
MINIO_ACCESS_KEY: minio
|
||||
MINIO_SECRET_KEY: minio123
|
||||
image: bitnami/minio:2021.12.29
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
@@ -54,13 +51,10 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@4bd44f22a98a19e0950cbad5f31095157cc9621b # v2
|
||||
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: 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
|
||||
extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, redis
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -72,7 +66,7 @@ jobs:
|
||||
- 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=["${{ 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
|
||||
@@ -80,7 +74,7 @@ jobs:
|
||||
- name: Integration
|
||||
run: |
|
||||
cd build/integration
|
||||
bash run.sh --tags "~@failure-s3" dav_features/webdav-related.feature
|
||||
bash run.sh --tags "~@failure-s3" features/webdav-related.feature
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
@@ -92,10 +86,10 @@ jobs:
|
||||
|
||||
s3-primary-integration-summary:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [integration-s3-primary]
|
||||
needs: [s3-primary-integration-tests-minio]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.integration-s3-primary.result != 'success' }}; then exit 1; fi
|
||||
run: if ${{ needs.s3-primary-integration-tests-minio.result != 'success' }}; then exit 1; fi
|
||||
@@ -0,0 +1,87 @@
|
||||
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
|
||||
@@ -11,7 +11,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
smb-kerberos-tests:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
|
||||
@@ -40,4 +40,3 @@ jobs:
|
||||
labels: |
|
||||
dependencies
|
||||
3. to review
|
||||
reviewers: ChristophWurst, miaulalala, nickvergessen
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
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@153407881ec5c347639a548ade7d8ad1d6740e38
|
||||
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
|
||||
@@ -129,8 +129,6 @@ nbproject
|
||||
/build/bin
|
||||
/build/lib/
|
||||
/build/jsdocs/
|
||||
/build/integration/output/
|
||||
/build/integration/phpserver.log
|
||||
/npm-debug.log
|
||||
/PhantomJS_*
|
||||
|
||||
|
||||
@@ -94,19 +94,5 @@
|
||||
RewriteRule ^(?:\.(?!well-known)|autotest|occ|issue|indie|db_|console).* - [R=404,L]
|
||||
</IfModule>
|
||||
|
||||
# Clients like xDavv5 on Android, or Cyberduck, use chunked requests.
|
||||
# When FastCGI or FPM is used with apache, requests arrive to Nextcloud without any content.
|
||||
# This leads to the creation of empty files.
|
||||
# The following directive will force the problematic requests to be buffered before being forwarded to Nextcloud.
|
||||
# This way, the "Transfer-Encoding" header is removed, the "Content-Length" header is set, and the request content is proxied to Nextcloud.
|
||||
# Here are more information about the issue:
|
||||
# - https://docs.cyberduck.io/mountainduck/issues/fastcgi/
|
||||
# - https://docs.nextcloud.com/server/latest/admin_manual/issues/general_troubleshooting.html#troubleshooting-webdav
|
||||
<IfModule setenvif.c>
|
||||
<Location "/remote.php">
|
||||
SetEnvIf Transfer-Encoding "chunked" proxy-sendcl=1
|
||||
</Location>
|
||||
</IfModule>
|
||||
|
||||
AddDefaultCharset utf-8
|
||||
Options -Indexes
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: 77db3ca48a...a71bd8af76
+9
-12
@@ -1,14 +1,14 @@
|
||||
# Security Policy
|
||||
|
||||
[Security](https://nextcloud.com/security/) is very important to us.
|
||||
[Security](https://nextcloud.com/security/) is very important to us.
|
||||
|
||||
If you believe you have found a security vulnerability that meets our definition of a security
|
||||
If you believe you have found a security vulnerability that meets our definition of a security
|
||||
vulnerability, please report is as described below.
|
||||
|
||||
## Context
|
||||
|
||||
Please review our [threat model and accepted risks](https://nextcloud.com/security/threat-model) to learn what
|
||||
is currently considered a security vulnerability versus expected behavior. And review what is considered
|
||||
Please review our [threat model and accepted risks](https://nextcloud.com/security/threat-model) to learn what
|
||||
is currently considered a security vulnerability versus expected behavior. And review what is considered
|
||||
[in scope or bounty eligible](https://hackerone.com/nextcloud/policy_scopes).
|
||||
|
||||
|
||||
@@ -31,17 +31,13 @@ Your report should include:
|
||||
|
||||
You should receive an initial acknowledgement within 24 hours in most cases.
|
||||
|
||||
A member of the security team will confirm the vulnerability, determine its impact, follow-up with any questions,
|
||||
A member of the security team will confirm the vulnerability, determine its impact, follow-up with any questions,
|
||||
and coordinate the fix and publication.
|
||||
|
||||
The fix will be applied to all applicable and still supported stable branches, tested, and packaged in the next security release.
|
||||
The vulnerability will be publicly announced after the release. Finally, your name will be added
|
||||
to the [hall of fame](https://hackerone.com/nextcloud/thanks) as a thank you from the entire Nextcloud
|
||||
community.
|
||||
|
||||
If the vulnerability involves an app that is not maintained by Nextcloud (i.e. hosted by the
|
||||
Nextcloud project but community maintained, or hosted elsewhere), the security team will try to coordinate with the
|
||||
current maintainer and help to get the issue fixed in similar fashion.
|
||||
to the [hall of fame](https://hackerone.com/nextcloud/thanks) as a thank you from the entire Nextcloud
|
||||
community.
|
||||
|
||||
### Bug Bounties
|
||||
|
||||
@@ -51,7 +47,8 @@ on past bounty ranges can be found at [hackerone.com/nextcloud](https://hackeron
|
||||
## Existing Security Advisories
|
||||
|
||||
Published security advisories for the Nextcloud Server, Clients and Apps can be viewed at
|
||||
[https://github.com/nextcloud/security-advisories/security/advisories](https://github.com/nextcloud/security-advisories/security/advisories).
|
||||
[https://github.com/nextcloud/security-advisories/security/advisories](https://github.com/nextcloud/security-advisories/security/advisories
|
||||
).
|
||||
|
||||
## Supported Versions
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Log\Audit\CriticalActionPerformedEvent;
|
||||
|
||||
/** @template-implements IEventListener<CriticalActionPerformedEvent> */
|
||||
class CriticalActionPerformedEventListener extends Action implements IEventListener {
|
||||
public function handle(Event $event): void {
|
||||
if (!($event instanceof CriticalActionPerformedEvent)) {
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"cloud_federation_api",
|
||||
{
|
||||
"Cloud Federation API" : "API de Federación en la Nube",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Permitir que las nubes se comuniquen entre sí e intercambien datos",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "La API de Federación de Nubes permite que varias instancias de Nextcloud se comuniquen entre sí y intercambien datos."
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
@@ -1,6 +0,0 @@
|
||||
{ "translations": {
|
||||
"Cloud Federation API" : "API de Federación en la Nube",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Permitir que las nubes se comuniquen entre sí e intercambien datos",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "La API de Federación de Nubes permite que varias instancias de Nextcloud se comuniquen entre sí y intercambien datos."
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -30,7 +30,6 @@ use OCA\CloudFederationAPI\Config;
|
||||
use OCA\CloudFederationAPI\ResponseDefinitions;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\Attribute\OpenAPI;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\Federation\Exceptions\ActionNotSupportedException;
|
||||
use OCP\Federation\Exceptions\AuthenticationFailedException;
|
||||
@@ -56,7 +55,6 @@ use Psr\Log\LoggerInterface;
|
||||
* @psalm-import-type CloudFederationAPIValidationError from ResponseDefinitions
|
||||
* @psalm-import-type CloudFederationAPIError from ResponseDefinitions
|
||||
*/
|
||||
#[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)]
|
||||
class RequestHandlerController extends Controller {
|
||||
public function __construct(
|
||||
string $appName,
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "تعديل التعليق",
|
||||
"Delete comment" : "حذف التعليق",
|
||||
"Cancel edit" : "إلغاء التعديل",
|
||||
"New comment" : "ملاحظة جديدة",
|
||||
"Write a comment …" : "أكتُب ملاحظةً ...",
|
||||
"Post comment" : "أضف تعليق",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ للإشارات، : للإيموجي، / للاقط الذكي",
|
||||
"Could not reload comments" : "تعذّرت إعادة تحميل الملاحظات",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "تعديل التعليق",
|
||||
"Delete comment" : "حذف التعليق",
|
||||
"Cancel edit" : "إلغاء التعديل",
|
||||
"New comment" : "ملاحظة جديدة",
|
||||
"Write a comment …" : "أكتُب ملاحظةً ...",
|
||||
"Post comment" : "أضف تعليق",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ للإشارات، : للإيموجي، / للاقط الذكي",
|
||||
"Could not reload comments" : "تعذّرت إعادة تحميل الملاحظات",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Upravit komentář",
|
||||
"Delete comment" : "Smazat komentář",
|
||||
"Cancel edit" : "Zrušit úpravu",
|
||||
"New comment" : "Nový komentář",
|
||||
"Write a comment …" : "Napsat komentář…",
|
||||
"Post comment" : "Odeslat komentář",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ pro zmínění, : pro emotikony, / pro inteligentní výběr",
|
||||
"Could not reload comments" : "Znovunačtení komentářů se nezdařilo",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Upravit komentář",
|
||||
"Delete comment" : "Smazat komentář",
|
||||
"Cancel edit" : "Zrušit úpravu",
|
||||
"New comment" : "Nový komentář",
|
||||
"Write a comment …" : "Napsat komentář…",
|
||||
"Post comment" : "Odeslat komentář",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ pro zmínění, : pro emotikony, / pro inteligentní výběr",
|
||||
"Could not reload comments" : "Znovunačtení komentářů se nezdařilo",
|
||||
|
||||
@@ -15,7 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Kommentar bearbeiten",
|
||||
"Delete comment" : "Kommentar löschen",
|
||||
"Cancel edit" : "Bearbeiten abbrechen",
|
||||
"New comment" : "Neuer Kommentar",
|
||||
"Post comment" : "Kommentar veröffentlichen",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ für Erwähnungen, : für Emoji, / für Smart Picker",
|
||||
"Could not reload comments" : "Kommentare konnten nicht erneut geladen werden",
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"Edit comment" : "Kommentar bearbeiten",
|
||||
"Delete comment" : "Kommentar löschen",
|
||||
"Cancel edit" : "Bearbeiten abbrechen",
|
||||
"New comment" : "Neuer Kommentar",
|
||||
"Post comment" : "Kommentar veröffentlichen",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ für Erwähnungen, : für Emoji, / für Smart Picker",
|
||||
"Could not reload comments" : "Kommentare konnten nicht erneut geladen werden",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Kommentar bearbeiten",
|
||||
"Delete comment" : "Kommentar löschen",
|
||||
"Cancel edit" : "Bearbeiten abbrechen",
|
||||
"New comment" : "Neuer Kommentar",
|
||||
"Write a comment …" : "Schreiben Sie einen Kommentar …",
|
||||
"Post comment" : "Kommentar veröffentlichen",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ für Erwähnungen, : für Emoji, / für Smart Picker",
|
||||
"Could not reload comments" : "Kommentare konnten nicht erneut geladen werden",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Kommentar bearbeiten",
|
||||
"Delete comment" : "Kommentar löschen",
|
||||
"Cancel edit" : "Bearbeiten abbrechen",
|
||||
"New comment" : "Neuer Kommentar",
|
||||
"Write a comment …" : "Schreiben Sie einen Kommentar …",
|
||||
"Post comment" : "Kommentar veröffentlichen",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ für Erwähnungen, : für Emoji, / für Smart Picker",
|
||||
"Could not reload comments" : "Kommentare konnten nicht erneut geladen werden",
|
||||
|
||||
@@ -15,7 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Επεξεργασία σχολίου",
|
||||
"Delete comment" : "Διαγραφή σχολίου",
|
||||
"Cancel edit" : "Ακύρωση επεξεργασίας",
|
||||
"New comment" : "Νέο σχόλιο",
|
||||
"Post comment" : "Αναρτήστε σχόλιο",
|
||||
"No comments yet, start the conversation!" : "Δεν υπάρχουν σχόλια, ξεκινήστε την συζήτηση!",
|
||||
"No more messages" : "Δεν υπάρχουν άλλα μηνύματα",
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"Edit comment" : "Επεξεργασία σχολίου",
|
||||
"Delete comment" : "Διαγραφή σχολίου",
|
||||
"Cancel edit" : "Ακύρωση επεξεργασίας",
|
||||
"New comment" : "Νέο σχόλιο",
|
||||
"Post comment" : "Αναρτήστε σχόλιο",
|
||||
"No comments yet, start the conversation!" : "Δεν υπάρχουν σχόλια, ξεκινήστε την συζήτηση!",
|
||||
"No more messages" : "Δεν υπάρχουν άλλα μηνύματα",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Edit comment",
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"New comment" : "New comment",
|
||||
"Write a comment …" : "Write a comment …",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Edit comment",
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"New comment" : "New comment",
|
||||
"Write a comment …" : "Write a comment …",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Editar comentario",
|
||||
"Delete comment" : "Borrar comentario",
|
||||
"Cancel edit" : "Cacelar edición",
|
||||
"New comment" : "Comentario nuevo",
|
||||
"Write a comment …" : "Escribir un comentario …",
|
||||
"Post comment" : "Publicar comentario",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ para menciones, : para emoji, / para selector inteligente",
|
||||
"Could not reload comments" : "No se pudieron recargar los comentarios",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Editar comentario",
|
||||
"Delete comment" : "Borrar comentario",
|
||||
"Cancel edit" : "Cacelar edición",
|
||||
"New comment" : "Comentario nuevo",
|
||||
"Write a comment …" : "Escribir un comentario …",
|
||||
"Post comment" : "Publicar comentario",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ para menciones, : para emoji, / para selector inteligente",
|
||||
"Could not reload comments" : "No se pudieron recargar los comentarios",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Modifier le commentaire",
|
||||
"Delete comment" : "Supprimer le commentaire",
|
||||
"Cancel edit" : "Annuler les modifications",
|
||||
"New comment" : "Nouveau commentaire",
|
||||
"Write a comment …" : "Écrire un commentaire…",
|
||||
"Post comment" : "Publier le commentaire",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ pour les mentions, : pour les émojis, / pour le sélecteur intelligent",
|
||||
"Could not reload comments" : "Impossible de rafraichir les commentaires",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Modifier le commentaire",
|
||||
"Delete comment" : "Supprimer le commentaire",
|
||||
"Cancel edit" : "Annuler les modifications",
|
||||
"New comment" : "Nouveau commentaire",
|
||||
"Write a comment …" : "Écrire un commentaire…",
|
||||
"Post comment" : "Publier le commentaire",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ pour les mentions, : pour les émojis, / pour le sélecteur intelligent",
|
||||
"Could not reload comments" : "Impossible de rafraichir les commentaires",
|
||||
|
||||
@@ -15,7 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Editar comentario",
|
||||
"Delete comment" : "Eliminar comentario",
|
||||
"Cancel edit" : "Cancelar a edición",
|
||||
"New comment" : "Comentario novo",
|
||||
"Post comment" : "Publicar comentario",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ para mencións, : para «emoji», / para selector intelixente",
|
||||
"Could not reload comments" : "Non foi posíbel volver cargar os comentarios",
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"Edit comment" : "Editar comentario",
|
||||
"Delete comment" : "Eliminar comentario",
|
||||
"Cancel edit" : "Cancelar a edición",
|
||||
"New comment" : "Comentario novo",
|
||||
"Post comment" : "Publicar comentario",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ para mencións, : para «emoji», / para selector intelixente",
|
||||
"Could not reload comments" : "Non foi posíbel volver cargar os comentarios",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Modifica commento",
|
||||
"Delete comment" : "Elimina commento",
|
||||
"Cancel edit" : "Annulla modifica",
|
||||
"New comment" : "Nuovo commento",
|
||||
"Write a comment …" : "Scrivi un commento...",
|
||||
"Post comment" : "Pubblica commento",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
|
||||
"Could not reload comments" : "Impossibile ricaricare i commenti",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Modifica commento",
|
||||
"Delete comment" : "Elimina commento",
|
||||
"Cancel edit" : "Annulla modifica",
|
||||
"New comment" : "Nuovo commento",
|
||||
"Write a comment …" : "Scrivi un commento...",
|
||||
"Post comment" : "Pubblica commento",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
|
||||
"Could not reload comments" : "Impossibile ricaricare i commenti",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "コメントを編集",
|
||||
"Delete comment" : "コメントを削除",
|
||||
"Cancel edit" : "編集をキャンセル",
|
||||
"New comment" : "新しいコメント",
|
||||
"Write a comment …" : "コメントを書く...",
|
||||
"Post comment" : "コメントを投稿",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "メンションには@、絵文字には:、スマートピッカーには/",
|
||||
"Could not reload comments" : "コメントをリロードできませんでした",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "コメントを編集",
|
||||
"Delete comment" : "コメントを削除",
|
||||
"Cancel edit" : "編集をキャンセル",
|
||||
"New comment" : "新しいコメント",
|
||||
"Write a comment …" : "コメントを書く...",
|
||||
"Post comment" : "コメントを投稿",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "メンションには@、絵文字には:、スマートピッカーには/",
|
||||
"Could not reload comments" : "コメントをリロードできませんでした",
|
||||
|
||||
@@ -9,28 +9,13 @@ OC.L10N.register(
|
||||
"%1$s commented on %2$s" : "%2$s에 %1$s 님이 댓글 남김",
|
||||
"{author} commented on {file}" : "{author} 님이 {file}에 댓글 남김",
|
||||
"<strong>Comments</strong> for files" : "파일의 <strong>댓글</strong>",
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "삭제된 사용자가 남긴 “{file}”의 댓글에서 나를 언급함",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} 님이 “{file}”에 남긴 댓글에서 나를 언급함",
|
||||
"Files app plugin to add comments to files" : "파일에 댓글을 남기는 파일 앱 플러그인",
|
||||
"Edit comment" : "댓글 편집",
|
||||
"Delete comment" : "댓글 삭제",
|
||||
"Cancel edit" : "편집 취소",
|
||||
"New comment" : "새로운 댓글",
|
||||
"Write a comment …" : "댓글 쓰기 ...",
|
||||
"Post comment" : "댓글 게시",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@을 입력해 언급, :을 입력해 이모지 추가, /을 입력해 스마트 피커를 사용하십시오.",
|
||||
"Could not reload comments" : "댓글을 다시 불러올 수 없음",
|
||||
"No comments yet, start the conversation!" : "아직 댓글이 없습니다. 대화를 시작하십시오!",
|
||||
"No more messages" : "메시지 더 이상 없음",
|
||||
"Retry" : "다시 시도",
|
||||
"Failed to mark comments as read" : "댓글을 읽음 표시할 수 없음",
|
||||
"Unable to load the comments list" : "댓글 목록을 불러올 수 없음",
|
||||
"_1 new comment_::_{unread} new comments_" : ["새 댓글 {unread}개"],
|
||||
"Comment" : "설명",
|
||||
"An error occurred while trying to edit the comment" : "댓글을 편집하는 중 오류 발생",
|
||||
"Comment deleted" : "댓글이 삭제됨",
|
||||
"An error occurred while trying to delete the comment" : "댓글을 삭제하는 중 오류 발생",
|
||||
"An error occurred while trying to create the comment" : "댓글을 작성하는 중 오류 발생",
|
||||
"_%n unread comment_::_%n unread comments_" : ["읽지 않은 댓글 %n개"]
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -7,28 +7,13 @@
|
||||
"%1$s commented on %2$s" : "%2$s에 %1$s 님이 댓글 남김",
|
||||
"{author} commented on {file}" : "{author} 님이 {file}에 댓글 남김",
|
||||
"<strong>Comments</strong> for files" : "파일의 <strong>댓글</strong>",
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "삭제된 사용자가 남긴 “{file}”의 댓글에서 나를 언급함",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} 님이 “{file}”에 남긴 댓글에서 나를 언급함",
|
||||
"Files app plugin to add comments to files" : "파일에 댓글을 남기는 파일 앱 플러그인",
|
||||
"Edit comment" : "댓글 편집",
|
||||
"Delete comment" : "댓글 삭제",
|
||||
"Cancel edit" : "편집 취소",
|
||||
"New comment" : "새로운 댓글",
|
||||
"Write a comment …" : "댓글 쓰기 ...",
|
||||
"Post comment" : "댓글 게시",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@을 입력해 언급, :을 입력해 이모지 추가, /을 입력해 스마트 피커를 사용하십시오.",
|
||||
"Could not reload comments" : "댓글을 다시 불러올 수 없음",
|
||||
"No comments yet, start the conversation!" : "아직 댓글이 없습니다. 대화를 시작하십시오!",
|
||||
"No more messages" : "메시지 더 이상 없음",
|
||||
"Retry" : "다시 시도",
|
||||
"Failed to mark comments as read" : "댓글을 읽음 표시할 수 없음",
|
||||
"Unable to load the comments list" : "댓글 목록을 불러올 수 없음",
|
||||
"_1 new comment_::_{unread} new comments_" : ["새 댓글 {unread}개"],
|
||||
"Comment" : "설명",
|
||||
"An error occurred while trying to edit the comment" : "댓글을 편집하는 중 오류 발생",
|
||||
"Comment deleted" : "댓글이 삭제됨",
|
||||
"An error occurred while trying to delete the comment" : "댓글을 삭제하는 중 오류 발생",
|
||||
"An error occurred while trying to create the comment" : "댓글을 작성하는 중 오류 발생",
|
||||
"_%n unread comment_::_%n unread comments_" : ["읽지 않은 댓글 %n개"]
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -13,7 +13,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Taisyti komentarą",
|
||||
"Delete comment" : "Ištrinti komentarą",
|
||||
"Cancel edit" : "Atsisakyti taisymo",
|
||||
"New comment" : "Naujas komentaras",
|
||||
"Post comment" : "Paskelbti komentarą",
|
||||
"No comments yet, start the conversation!" : "Komentarų kol kas nėra, pradėkite pokalbį!",
|
||||
"Retry" : "Bandyti dar kartą",
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
"Edit comment" : "Taisyti komentarą",
|
||||
"Delete comment" : "Ištrinti komentarą",
|
||||
"Cancel edit" : "Atsisakyti taisymo",
|
||||
"New comment" : "Naujas komentaras",
|
||||
"Post comment" : "Paskelbti komentarą",
|
||||
"No comments yet, start the conversation!" : "Komentarų kol kas nėra, pradėkite pokalbį!",
|
||||
"Retry" : "Bandyti dar kartą",
|
||||
|
||||
@@ -15,7 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Edytuj komentarz",
|
||||
"Delete comment" : "Usuń komentarz",
|
||||
"Cancel edit" : "Anuluj edycję",
|
||||
"New comment" : "Nowy komentarz",
|
||||
"Post comment" : "Wyślij komentarz",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ dla wzmianek, : dla emoji, / dla inteligentnego wybierania",
|
||||
"Could not reload comments" : "Nie można ponownie załadować komentarzy",
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"Edit comment" : "Edytuj komentarz",
|
||||
"Delete comment" : "Usuń komentarz",
|
||||
"Cancel edit" : "Anuluj edycję",
|
||||
"New comment" : "Nowy komentarz",
|
||||
"Post comment" : "Wyślij komentarz",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ dla wzmianek, : dla emoji, / dla inteligentnego wybierania",
|
||||
"Could not reload comments" : "Nie można ponownie załadować komentarzy",
|
||||
|
||||
@@ -15,7 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Editar comentário",
|
||||
"Delete comment" : "Excluir comentário",
|
||||
"Cancel edit" : "Cancelar edição",
|
||||
"New comment" : "Novo comentário",
|
||||
"Post comment" : "Postar comentário",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ para menções, : para emoji, / para seletor inteligente",
|
||||
"Could not reload comments" : "Não foi possível recarregar comentários",
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"Edit comment" : "Editar comentário",
|
||||
"Delete comment" : "Excluir comentário",
|
||||
"Cancel edit" : "Cancelar edição",
|
||||
"New comment" : "Novo comentário",
|
||||
"Post comment" : "Postar comentário",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ para menções, : para emoji, / para seletor inteligente",
|
||||
"Could not reload comments" : "Não foi possível recarregar comentários",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Измени коментар",
|
||||
"Delete comment" : "Обриши коментар",
|
||||
"Cancel edit" : "Поништи измену",
|
||||
"New comment" : "Нови коментар",
|
||||
"Write a comment …" : "Напишите коментар…",
|
||||
"Post comment" : "Објави коментар",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ за помињања, : за емођи, / за паметни бирач",
|
||||
"Could not reload comments" : "Коментари не могу поново да се учитају",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Измени коментар",
|
||||
"Delete comment" : "Обриши коментар",
|
||||
"Cancel edit" : "Поништи измену",
|
||||
"New comment" : "Нови коментар",
|
||||
"Write a comment …" : "Напишите коментар…",
|
||||
"Post comment" : "Објави коментар",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ за помињања, : за емођи, / за паметни бирач",
|
||||
"Could not reload comments" : "Коментари не могу поново да се учитају",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Redigera kommentar",
|
||||
"Delete comment" : "Ta bort kommentar",
|
||||
"Cancel edit" : "Avbryt redigering",
|
||||
"New comment" : "Ny kommentar",
|
||||
"Write a comment …" : "Skriv en kommentar ...",
|
||||
"Post comment" : "Publicera kommentar",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ för omnämnanden, : för emoji, / för smart picker",
|
||||
"Could not reload comments" : "Kunde inte ladda om kommentarer",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Redigera kommentar",
|
||||
"Delete comment" : "Ta bort kommentar",
|
||||
"Cancel edit" : "Avbryt redigering",
|
||||
"New comment" : "Ny kommentar",
|
||||
"Write a comment …" : "Skriv en kommentar ...",
|
||||
"Post comment" : "Publicera kommentar",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ för omnämnanden, : för emoji, / för smart picker",
|
||||
"Could not reload comments" : "Kunde inte ladda om kommentarer",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Yorumu düzenle",
|
||||
"Delete comment" : "Yorumu sil",
|
||||
"Cancel edit" : "Düzenlemeyi iptal et",
|
||||
"New comment" : "Yorum ekle",
|
||||
"Write a comment …" : "Bir yorum yazın…",
|
||||
"Post comment" : "Yorum gönder",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "Anmalar için @, emojiler için :, akıllı seçici için /",
|
||||
"Could not reload comments" : "Yorumlar yeniden yüklenemedi",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Yorumu düzenle",
|
||||
"Delete comment" : "Yorumu sil",
|
||||
"Cancel edit" : "Düzenlemeyi iptal et",
|
||||
"New comment" : "Yorum ekle",
|
||||
"Write a comment …" : "Bir yorum yazın…",
|
||||
"Post comment" : "Yorum gönder",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "Anmalar için @, emojiler için :, akıllı seçici için /",
|
||||
"Could not reload comments" : "Yorumlar yeniden yüklenemedi",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Редагувати коментар",
|
||||
"Delete comment" : "Вилучити коментар",
|
||||
"Cancel edit" : "Скасувати редагування",
|
||||
"New comment" : "Новий коментар",
|
||||
"Write a comment …" : "Додати коментар ...",
|
||||
"Post comment" : "Опублікувати коментар",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for згадування, : для емоційок, / для асистента з вибору",
|
||||
"Could not reload comments" : "Не вдалося перезавантажити коментарі",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "Редагувати коментар",
|
||||
"Delete comment" : "Вилучити коментар",
|
||||
"Cancel edit" : "Скасувати редагування",
|
||||
"New comment" : "Новий коментар",
|
||||
"Write a comment …" : "Додати коментар ...",
|
||||
"Post comment" : "Опублікувати коментар",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for згадування, : для емоційок, / для асистента з вибору",
|
||||
"Could not reload comments" : "Не вдалося перезавантажити коментарі",
|
||||
|
||||
@@ -15,7 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "编辑评论",
|
||||
"Delete comment" : "删除评论",
|
||||
"Cancel edit" : "取消编辑",
|
||||
"New comment" : "新评论",
|
||||
"Post comment" : "发表评论",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "使用“@”提及,“:”输入表情符号,“/”唤起智能选择",
|
||||
"Could not reload comments" : "无法重载评论",
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"Edit comment" : "编辑评论",
|
||||
"Delete comment" : "删除评论",
|
||||
"Cancel edit" : "取消编辑",
|
||||
"New comment" : "新评论",
|
||||
"Post comment" : "发表评论",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "使用“@”提及,“:”输入表情符号,“/”唤起智能选择",
|
||||
"Could not reload comments" : "无法重载评论",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "編輯留言",
|
||||
"Delete comment" : "刪除留言",
|
||||
"Cancel edit" : "取消編輯",
|
||||
"New comment" : "新評論",
|
||||
"Write a comment …" : "發表評論 ...",
|
||||
"Post comment" : "張貼留言",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "“@” 表示提及,“:” 表示表情符號,“/” 表示智慧型選擇器",
|
||||
"Could not reload comments" : "無法重新加載評論",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "編輯留言",
|
||||
"Delete comment" : "刪除留言",
|
||||
"Cancel edit" : "取消編輯",
|
||||
"New comment" : "新評論",
|
||||
"Write a comment …" : "發表評論 ...",
|
||||
"Post comment" : "張貼留言",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "“@” 表示提及,“:” 表示表情符號,“/” 表示智慧型選擇器",
|
||||
"Could not reload comments" : "無法重新加載評論",
|
||||
|
||||
@@ -15,8 +15,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "編輯留言",
|
||||
"Delete comment" : "刪除留言",
|
||||
"Cancel edit" : "取消編輯",
|
||||
"New comment" : "新留言",
|
||||
"Write a comment …" : "編寫留言……",
|
||||
"Post comment" : "張貼留言",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ 表示提及、: 表示表情符號、/ 表示智慧型選取程式",
|
||||
"Could not reload comments" : "無法重新載入留言",
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
"Edit comment" : "編輯留言",
|
||||
"Delete comment" : "刪除留言",
|
||||
"Cancel edit" : "取消編輯",
|
||||
"New comment" : "新留言",
|
||||
"Write a comment …" : "編寫留言……",
|
||||
"Post comment" : "張貼留言",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ 表示提及、: 表示表情符號、/ 表示智慧型選取程式",
|
||||
"Could not reload comments" : "無法重新載入留言",
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OCA\Comments\Controller;
|
||||
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\Attribute\OpenAPI;
|
||||
use OCP\AppFramework\Http\Attribute\IgnoreOpenAPI;
|
||||
use OCP\AppFramework\Http\NotFoundResponse;
|
||||
use OCP\AppFramework\Http\RedirectResponse;
|
||||
use OCP\Comments\IComment;
|
||||
@@ -41,7 +41,7 @@ use OCP\Notification\IManager;
|
||||
/**
|
||||
* @package OCA\Comments\Controller
|
||||
*/
|
||||
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
|
||||
#[IgnoreOpenAPI]
|
||||
class NotificationsController extends Controller {
|
||||
public function __construct(
|
||||
string $appName,
|
||||
|
||||
@@ -30,7 +30,6 @@ use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Files\IRootFolder;
|
||||
|
||||
/** @template-implements IEventListener<CommentsEntityEvent> */
|
||||
class CommentsEntityEventListener implements IEventListener {
|
||||
public function __construct(
|
||||
private IRootFolder $rootFolder,
|
||||
|
||||
@@ -33,7 +33,6 @@ use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Util;
|
||||
|
||||
/** @template-implements IEventListener<LoadAdditionalScriptsEvent> */
|
||||
class LoadAdditionalScripts implements IEventListener {
|
||||
public function handle(Event $event): void {
|
||||
if (!($event instanceof LoadAdditionalScriptsEvent)) {
|
||||
|
||||
@@ -35,7 +35,6 @@ use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Util;
|
||||
|
||||
/** @template-implements IEventListener<LoadSidebar> */
|
||||
class LoadSidebarScripts implements IEventListener {
|
||||
public function __construct(
|
||||
private ICommentsManager $commentsManager,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
OC.L10N.register(
|
||||
"contactsinteraction",
|
||||
{
|
||||
"Recently contacted" : "Нещодавно спілкувалися",
|
||||
"Recently contacted" : "Нещодавно спілкувався",
|
||||
"Contacts Interaction" : "Взаємодія з контактами",
|
||||
"Manages interaction between users and contacts" : "Керує взаємодією між користувачами та контактами",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Збирайте дані про взаємодію користувачів і контактів та створюйте адресну книгу на основі цих даних"
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Збирайте дані про взаємодію користувачів і контактів і створюйте адресну книгу для цих даних"
|
||||
},
|
||||
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Нещодавно спілкувалися",
|
||||
"Recently contacted" : "Нещодавно спілкувався",
|
||||
"Contacts Interaction" : "Взаємодія з контактами",
|
||||
"Manages interaction between users and contacts" : "Керує взаємодією між користувачами та контактами",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Збирайте дані про взаємодію користувачів і контактів та створюйте адресну книгу на основі цих даних"
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Збирайте дані про взаємодію користувачів і контактів і створюйте адресну книгу для цих даних"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
|
||||
}
|
||||
@@ -40,7 +40,6 @@ use Psr\Log\LoggerInterface;
|
||||
use Sabre\VObject\Component\VCard;
|
||||
use Sabre\VObject\UUIDUtil;
|
||||
|
||||
/** @template-implements IEventListener<ContactInteractedWithEvent> */
|
||||
class ContactInteractionListener implements IEventListener {
|
||||
|
||||
use TTransactional;
|
||||
@@ -75,7 +74,7 @@ class ContactInteractionListener implements IEventListener {
|
||||
$uid = $event->getUid();
|
||||
$email = $event->getEmail();
|
||||
$federatedCloudId = $event->getFederatedCloudId();
|
||||
|
||||
|
||||
$existingContact = $this->cardSearchDao->findExisting(
|
||||
$event->getActor(),
|
||||
$uid,
|
||||
|
||||
@@ -34,7 +34,7 @@ use OCA\Files\Event\LoadSidebar;
|
||||
use OCA\Viewer\Event\LoadViewer;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\Attribute\OpenAPI;
|
||||
use OCP\AppFramework\Http\Attribute\IgnoreOpenAPI;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
@@ -46,7 +46,7 @@ use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\IRequest;
|
||||
|
||||
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
|
||||
#[IgnoreOpenAPI]
|
||||
class DashboardController extends Controller {
|
||||
|
||||
/** @var IInitialState */
|
||||
|
||||
@@ -74,8 +74,7 @@
|
||||
:checked="isStatusActive(status)"
|
||||
@input="updateStatusCheckbox(status, $event.target.checked)">
|
||||
<label :for="'status-checkbox-' + status">
|
||||
<NcUserStatusIcon v-if="status === 'status'" status="online" aria-hidden="true" />
|
||||
<span v-else :class="statusInfo[status].icon" aria-hidden="true" />
|
||||
<span :class="statusInfo[status].icon" aria-hidden="true" />
|
||||
{{ statusInfo[status].text }}
|
||||
</label>
|
||||
</li>
|
||||
@@ -125,7 +124,6 @@ import axios from '@nextcloud/axios'
|
||||
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
|
||||
import Draggable from 'vuedraggable'
|
||||
import NcModal from '@nextcloud/vue/dist/Components/NcModal.js'
|
||||
import NcUserStatusIcon from '@nextcloud/vue/dist/Components/NcUserStatusIcon.js'
|
||||
import Pencil from 'vue-material-design-icons/Pencil.vue'
|
||||
import Vue from 'vue'
|
||||
|
||||
@@ -142,6 +140,7 @@ const statusInfo = {
|
||||
},
|
||||
status: {
|
||||
text: t('dashboard', 'Status'),
|
||||
icon: 'icon-user-status-online',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -153,7 +152,6 @@ export default {
|
||||
Draggable,
|
||||
NcModal,
|
||||
Pencil,
|
||||
NcUserStatusIcon,
|
||||
},
|
||||
mixins: [
|
||||
isMobile,
|
||||
|
||||
@@ -73,7 +73,7 @@ $linkCheckPlugin = new \OCA\DAV\Files\Sharing\PublicLinkCheckPlugin();
|
||||
$filesDropPlugin = new \OCA\DAV\Files\Sharing\FilesDropPlugin();
|
||||
|
||||
$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
|
||||
$isAjax = in_array('XMLHttpRequest', explode(',', $_SERVER['HTTP_X_REQUESTED_WITH'] ?? ''));
|
||||
$isAjax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest');
|
||||
/** @var \OCA\FederatedFileSharing\FederatedShareProvider $shareProvider */
|
||||
$federatedShareProvider = \OC::$server->query(\OCA\FederatedFileSharing\FederatedShareProvider::class);
|
||||
if ($federatedShareProvider->isOutgoingServer2serverShareEnabled() === false && !$isAjax) {
|
||||
|
||||
@@ -96,7 +96,7 @@ preg_match('/(^files\/\w+)/i', substr($requestUri, strlen($baseuri)), $match);
|
||||
$baseuri = $baseuri . $match[0];
|
||||
|
||||
$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
|
||||
$isAjax = in_array('XMLHttpRequest', explode(',', $_SERVER['HTTP_X_REQUESTED_WITH'] ?? ''));
|
||||
$isAjax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest');
|
||||
$federatedShareProvider = \OCP\Server::get(FederatedShareProvider::class);
|
||||
if ($federatedShareProvider->isOutgoingServer2serverShareEnabled() === false && !$isAjax) {
|
||||
// this is what is thrown when trying to access a non-existing share
|
||||
|
||||
@@ -1 +1 @@
|
||||
<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1c-0.5 0-1 0.5-1 1v2c0 0.5 0.5 1 1 1s1-0.5 1-1v-2c0-0.5-0.5-1-1-1zm8 0c-0.5 0-1 0.5-1 1v2c0 0.5 0.5 1 1 1s1-0.5 1-1v-2c0-0.5-0.5-1-1-1zm-6.5 2v1c0 0.831-0.5 1.5-1.5 1.5s-1.5-0.5-1.5-1.5v-0.9375c-0.8841 0.227-1.5 1.0247-1.5 1.9375v8c0 1.108 0.892 2 2 2h10c1.108 0 2-0.892 2-2v-8c0-0.9128-0.61588-1.7105-1.5-1.9375v0.9375c0 0.831-0.5 1.5-1.5 1.5s-1.5-0.5-1.5-1.5v-1zm7.5 5v5h-10v-5z"/></svg>
|
||||
<svg width="16" height="16" version="1.1" viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1c-0.5 0-1 0.5-1 1v2c0 0.5 0.5 1 1 1s1-0.5 1-1v-2c0-0.5-0.5-1-1-1zm8 0c-0.5 0-1 0.5-1 1v2c0 0.5 0.5 1 1 1s1-0.5 1-1v-2c0-0.5-0.5-1-1-1zm-6.5 2v1c0 0.831-0.5 1.5-1.5 1.5s-1.5-0.5-1.5-1.5v-0.9375c-0.8841 0.227-1.5 1.0247-1.5 1.9375v8c0 1.108 0.892 2 2 2h10c1.108 0 2-0.892 2-2v-8c0-0.9128-0.61588-1.7105-1.5-1.9375v0.9375c0 0.831-0.5 1.5-1.5 1.5s-1.5-0.5-1.5-1.5v-1zm7.5 5v5h-10v-5z"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 499 B After Width: | Height: | Size: 499 B |
+6
-6
@@ -178,8 +178,8 @@ OC.L10N.register(
|
||||
"Friday" : "Viernes",
|
||||
"Saturday" : "Sábado",
|
||||
"Sunday" : "Domingo",
|
||||
"Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}",
|
||||
"Pick a end time for {dayName}" : "Elija una hora fin para {dayName}",
|
||||
"Pick a start time for {dayName}" : "Elige una hora de inicio para {dayName}",
|
||||
"Pick a end time for {dayName}" : "Elige una hora de fin para {dayName}",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.",
|
||||
"Failed to load availability" : "No se ha podido cargar la disponibilidad",
|
||||
"Saved availability" : "Disponibilidad guardada",
|
||||
@@ -194,12 +194,12 @@ OC.L10N.register(
|
||||
"Birthday calendars will be generated by a background job." : "Los calendarios de cumpleaños se generarán mediante un trabajo en segundo plano.",
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Por ello, no estarán disponibles inmediatamente tras activarlos, sino que aparecerán después de cierto tiempo.",
|
||||
"Send notifications for events" : "Enviar notificaciones de los eventos",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "Las notificaciones son enviadas a través de trabajos en segundo plano, por lo que estos deben ocurrir con suficiente frecuencia.",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "Las notificaciones son enviadas a través de trabajos en segundo plano, por lo que estos deben ocurrir con la suficiente frecuencia.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envía a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Activar notificaciones push para eventos",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instala también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecta tu escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrate de configurar correctamente {emailopen}el servidor web{linkclose}",
|
||||
"There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -176,8 +176,8 @@
|
||||
"Friday" : "Viernes",
|
||||
"Saturday" : "Sábado",
|
||||
"Sunday" : "Domingo",
|
||||
"Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}",
|
||||
"Pick a end time for {dayName}" : "Elija una hora fin para {dayName}",
|
||||
"Pick a start time for {dayName}" : "Elige una hora de inicio para {dayName}",
|
||||
"Pick a end time for {dayName}" : "Elige una hora de fin para {dayName}",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.",
|
||||
"Failed to load availability" : "No se ha podido cargar la disponibilidad",
|
||||
"Saved availability" : "Disponibilidad guardada",
|
||||
@@ -192,12 +192,12 @@
|
||||
"Birthday calendars will be generated by a background job." : "Los calendarios de cumpleaños se generarán mediante un trabajo en segundo plano.",
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Por ello, no estarán disponibles inmediatamente tras activarlos, sino que aparecerán después de cierto tiempo.",
|
||||
"Send notifications for events" : "Enviar notificaciones de los eventos",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "Las notificaciones son enviadas a través de trabajos en segundo plano, por lo que estos deben ocurrir con suficiente frecuencia.",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "Las notificaciones son enviadas a través de trabajos en segundo plano, por lo que estos deben ocurrir con la suficiente frecuencia.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envía a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Activar notificaciones push para eventos",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instala también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecta tu escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrate de configurar correctamente {emailopen}el servidor web{linkclose}",
|
||||
"There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
+5
-5
@@ -113,8 +113,8 @@ OC.L10N.register(
|
||||
"{actor} unshared address book {addressbook} from group {group}" : "{actor} ha eliminato la condivisone della rubrica {addressbook} con il gruppo {group}",
|
||||
"{actor} created contact {card} in address book {addressbook}" : "{actor} ha creato il contatto {card} nella rubrica {addressbook}",
|
||||
"You created contact {card} in address book {addressbook}" : "Hai creato il contatto {card} nella rubrica {addressbook}",
|
||||
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha eliminato il contatto {card} nella rubrica {addressbook}",
|
||||
"You deleted contact {card} from address book {addressbook}" : "Hai eliminato il contatto {card} nella rubrica {addressbook}",
|
||||
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha cancellato il contatto {card} nella rubrica {addressbook}",
|
||||
"You deleted contact {card} from address book {addressbook}" : "Hai cancellato il contatto {card} nella rubrica {addressbook}",
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha aggiornato il contatto {card} nella rubrica {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Hai aggiornato il contatto {card} nella rubrica {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contatto</strong> o <strong>rubrica</strong> sono stati modificati ",
|
||||
@@ -123,16 +123,16 @@ OC.L10N.register(
|
||||
"File is not updatable: %1$s" : "Il file non è aggiornabile: %1$s",
|
||||
"Could not write to final file, canceled by hook" : "Impossibile scrivere nel file finale, annullato da hook",
|
||||
"Could not write file contents" : "Impossibile scrivere il contenuto del file",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n byte","%n byte"],
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
|
||||
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Errore durante la copia del file nella destinazione (copiato: %1$s, dimensione prevista del file: %2$s)",
|
||||
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Dimensione prevista del file %1$s, letto (dal client Nextcloud) e scritto (nell'archivio Nextcloud) %2$s. Potrebbe trattarsi di un problema di rete sul lato d'invio o di un problema di scrittura nell'archivio sul lato server.",
|
||||
"Could not rename part file to final file, canceled by hook" : "Impossibile rinominare il file di parte in file finale, annullato da hook",
|
||||
"Could not rename part file to final file" : "Impossibile rinominare il file di parte in file finale",
|
||||
"Failed to check file size: %1$s" : "Verifica della dimensione del file non riuscito: %1$s",
|
||||
"Could not open file" : "Impossibile aprire il file",
|
||||
"Encryption not ready: %1$s" : "Cifratura non pronta: %1$s",
|
||||
"Encryption not ready: %1$s" : "Crittografia non pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Apertura del file non riuscito: %1$s",
|
||||
"Failed to unlink: %1$s" : "Scollegamento non riuscito: %1$s",
|
||||
"Failed to unlink: %1$s" : "Scollegamento fallito: %1$s",
|
||||
"Invalid chunk name" : "Nome non valido per lo spezzone",
|
||||
"Could not rename part file assembled from chunks" : "Non è possibile rinominare il file assemblato da più spezzoni",
|
||||
"Failed to write file contents: %1$s" : "Scrittura del contenuto del file non riuscita: %1$s",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user