Compare commits
100 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8231f657d9 | |||
| 4f9f5a41b1 | |||
| 5944ee6ebe | |||
| e1b6574ce7 | |||
| c16860e648 | |||
| d4a492d321 | |||
| a004266b7c | |||
| da96d1adb0 | |||
| ed39e47c9d | |||
| b9213cf451 | |||
| eeebf21fce | |||
| 75d944f96a | |||
| 4742d0eb94 | |||
| c901709d53 | |||
| 84bc4c175a | |||
| 4d50a21eb4 | |||
| 37971133f1 | |||
| c962f9db47 | |||
| 6333036a1a | |||
| 73758c1f78 | |||
| 7e9e94d8d7 | |||
| 07d0245336 | |||
| 0bbac66ec5 | |||
| 4411de0dbf | |||
| 871bbbba8a | |||
| 4384cf70da | |||
| e0cf61dfc8 | |||
| 2387fbd9dd | |||
| 0b6b5e807c | |||
| b2b78228d6 | |||
| 2e5829445f | |||
| e63a12a481 | |||
| 56302ff9cf | |||
| 707de3e644 | |||
| 19a65f6c3f | |||
| 011ab3a11c | |||
| ad62d89f2b | |||
| 9b84c50f15 | |||
| 01ffa519d5 | |||
| fe73b5919d | |||
| 5ad7eb080e | |||
| 2ce8329503 | |||
| 83e5383912 | |||
| 660d204cbf | |||
| d091db4bc7 | |||
| d61e820285 | |||
| 85613cc66c | |||
| 0fb9cc3c25 | |||
| 76e5ffaa92 | |||
| 9a26b1e0a6 | |||
| bfd69dc8e0 | |||
| 0d075df15e | |||
| c82f43ee55 | |||
| 0eaf141528 | |||
| ee0dab1b13 | |||
| 98ee292c93 | |||
| 4ff5658475 | |||
| 7de540b8ee | |||
| 9a41453254 | |||
| 707b319157 | |||
| f7911412e0 | |||
| 1cb3872df0 | |||
| 432fb55d91 | |||
| 98c5d10bb5 | |||
| 84a2be1aad | |||
| 9e383db75b | |||
| c12b30f7a2 | |||
| 5bf111e75f | |||
| f42d98edab | |||
| d392aa81c7 | |||
| 532e5463db | |||
| cfea3ce2d7 | |||
| 2c76ee1c8b | |||
| 9a2c1cbcc3 | |||
| e6616ed758 | |||
| b51b41468d | |||
| 6f86802a48 | |||
| 0c6c175d62 | |||
| 885b81ba23 | |||
| fc86815a2c | |||
| 6ca2abc108 | |||
| 0fe2f81a0c | |||
| 2cd52e52c8 | |||
| d06fec658c | |||
| 049329588f | |||
| 09d3b9ef26 | |||
| 92ce2bf89b | |||
| ca93f6e1de | |||
| d166471a46 | |||
| 896c56996e | |||
| 6017ca5ddd | |||
| eedc1e76db | |||
| 510cbc4ff9 | |||
| 9b9497bedf | |||
| 8846edd919 | |||
| 253f7ec932 | |||
| 8bafcd1414 | |||
| 40bb805b83 | |||
| 00030a6c24 | |||
| 2afece459a |
@@ -1,91 +0,0 @@
|
||||
FROM ubuntu:noble
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# PHP
|
||||
RUN apt-get update -y && \
|
||||
apt install -y apache2 vim software-properties-common sudo nano gnupg2 wget curl git \
|
||||
lsb-release ca-certificates apt-transport-https && \
|
||||
add-apt-repository ppa:ondrej/php -y && \
|
||||
apt-get update -y
|
||||
|
||||
RUN apt-get install --no-install-recommends -y \
|
||||
php8.4 \
|
||||
php8.4-common \
|
||||
php8.4-gd \
|
||||
php8.4-zip \
|
||||
php8.4-curl \
|
||||
php8.4-xml \
|
||||
php8.4-xmlrpc \
|
||||
php8.4-mbstring \
|
||||
php8.4-sqlite \
|
||||
php8.4-xdebug \
|
||||
php8.4-pgsql \
|
||||
php8.4-intl \
|
||||
php8.4-imagick \
|
||||
php8.4-gmp \
|
||||
php8.4-apcu \
|
||||
php8.4-bcmath \
|
||||
php8.4-redis \
|
||||
php8.4-soap \
|
||||
php8.4-imap \
|
||||
php8.4-opcache \
|
||||
php8.4-cli \
|
||||
php8.4-dev \
|
||||
libmagickcore-6.q16-7-extra \
|
||||
lsof \
|
||||
make \
|
||||
unzip
|
||||
|
||||
# Composer
|
||||
RUN curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php && \
|
||||
curl -sS https://composer.github.io/installer.sig -o /tmp/composer-setup.sig && \
|
||||
php -r "if (hash_file('sha384', '/tmp/composer-setup.php') !== trim(file_get_contents('/tmp/composer-setup.sig'))) { echo 'Composer installation failed, invalid hash'; exit(1); }" && \
|
||||
php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
|
||||
rm /tmp/composer-setup.php /tmp/composer-setup.sig
|
||||
|
||||
RUN echo "xdebug.remote_enable = 1" >> /etc/php/8.4/cli/conf.d/20-xdebug.ini && \
|
||||
echo "xdebug.remote_autostart = 1" >> /etc/php/8.4/cli/conf.d/20-xdebug.ini && \
|
||||
echo "apc.enable_cli=1" >> /etc/php/8.4/cli/conf.d/20-apcu.ini
|
||||
|
||||
# Autostart XDebug for apache
|
||||
RUN { \
|
||||
echo "xdebug.mode=debug"; \
|
||||
echo "xdebug.start_with_request=yes"; \
|
||||
} >> /etc/php/8.4/apache2/conf.d/20-xdebug.ini
|
||||
|
||||
# Increase PHP memory limit to 512mb
|
||||
RUN sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.4/apache2/php.ini
|
||||
|
||||
# Docker CLI only (for controlling host Docker via socket)
|
||||
RUN install -m 0755 -d /etc/apt/keyrings && \
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && \
|
||||
chmod a+r /etc/apt/keyrings/docker.asc && \
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
|
||||
tee /etc/apt/sources.list.d/docker.list > /dev/null && \
|
||||
apt-get update -y && \
|
||||
apt-get install -y docker-ce-cli && \
|
||||
ln -s /var/run/docker-host.sock /var/run/docker.sock
|
||||
|
||||
# Dedicated DevContainer user runs Apache
|
||||
ENV APACHE_RUN_USER=devcontainer
|
||||
ENV APACHE_RUN_GROUP=devcontainer
|
||||
# Delete any existing user/group with UID/GID 1000 first
|
||||
RUN (getent passwd 1000 && userdel -r $(getent passwd 1000 | cut -d: -f1)) || true && \
|
||||
(getent group 1000 && groupdel $(getent group 1000 | cut -d: -f1)) || true && \
|
||||
groupadd -g 1000 ${APACHE_RUN_GROUP} && \
|
||||
useradd -u 1000 -g 1000 -ms /bin/bash ${APACHE_RUN_USER} && \
|
||||
adduser ${APACHE_RUN_USER} sudo && \
|
||||
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
|
||||
sed -ri "s/^export APACHE_RUN_USER=.*$/export APACHE_RUN_USER=${APACHE_RUN_USER}/" "/etc/apache2/envvars" && \
|
||||
sed -ri "s/^export APACHE_RUN_GROUP=.*$/export APACHE_RUN_GROUP=${APACHE_RUN_GROUP}/" "/etc/apache2/envvars"
|
||||
|
||||
USER devcontainer
|
||||
|
||||
# NVM
|
||||
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
||||
RUN bash --login -i -c 'source /home/devcontainer/.bashrc && nvm install 22'
|
||||
|
||||
WORKDIR /var/www/html
|
||||
@@ -1,2 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -1,76 +0,0 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
# Nextcloud DevContainer
|
||||
|
||||
## Usage
|
||||
|
||||
Make sure you have the [VSCode DevContainer](https://code.visualstudio.com/docs/devcontainers/containers) extensions installed. If you open the project, VSCode will ask you if you want to open it inside of the DevContainer. If that's not the case, use <kbd>F1</kbd>→*Dev Containers: Open Folder in Container*.
|
||||
|
||||
Alternatively open the project directly in [GitHub Codespaces](https://github.com/codespaces/new?hide_repo_select=true&ref=master&repo=60243197&skip_quickstart=true).
|
||||
|
||||
That's already it. Everything else will be configured automatically by the Containers startup routine.
|
||||
|
||||
## Credentials
|
||||
|
||||
On first start the Container installs and configures Nextcloud with the following credentials:
|
||||
|
||||
**Nextcloud Admin Login**
|
||||
|
||||
Username: `admin` <br>
|
||||
Password: `admin`
|
||||
|
||||
**Postgres credentials**
|
||||
|
||||
Username: `postgres` <br>
|
||||
Password: `postgres` <br>
|
||||
Database: `postgres`
|
||||
|
||||
## Services
|
||||
|
||||
The following services will be started:
|
||||
|
||||
| Service | Local port | Description |
|
||||
|---------|------------|-------------|
|
||||
| Nextcloud (served via Apache) | `80` | The main application |
|
||||
| Mailhog | `8025` | SMTP email delivery for testing |
|
||||
| Adminer | `8080` | Database viewer. Use credentials from above and connect to `localhost` to get access to the NC database |
|
||||
|
||||
## Permissions
|
||||
|
||||
The container runs with the user `devcontainer` who is also running the Apache2 process. All mounted source files have
|
||||
proper permissions so that this user can access everything which is inside the current workspace. If you need to
|
||||
get root permissions for whatever reason, use `sudo su` or `sudo <command>` (for example `sudo service apache2 restart`).
|
||||
Everything else (like building the application, adjusting files, ...) should be done as `devcontainer` user.
|
||||
|
||||
## NodeJs and NVM
|
||||
|
||||
The container comes with [`nvm`](https://github.com/nvm-sh/nvm) and Node 16 installed. This should be sufficient to
|
||||
build Nextcloud Core sources via `make`. If you need a different Node Version (for example for
|
||||
app development), you can easily switch between different versions by running:
|
||||
|
||||
```bash
|
||||
# Install and use Node 14
|
||||
nvm install 14
|
||||
nvm use 14
|
||||
|
||||
# Check version
|
||||
node -v
|
||||
|
||||
# Switch back to Node 16
|
||||
nvm use 16
|
||||
|
||||
# Check version
|
||||
node -v
|
||||
```
|
||||
|
||||
Note that `nvm` is only installed for the user `devcontainer` and won't work out of the box for
|
||||
any other user.
|
||||
|
||||
## Debugging
|
||||
|
||||
The Apache webserver is already configured to automatically try to connect to a debugger process
|
||||
listening on port `9003`. To start the VSCode debugger process, use the delivered debug profile `Listen for XDebug`.
|
||||
After you started the VSCode debugger, just navigate to the appropriate Nextcloud URL to get your
|
||||
debug hits.
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
$codespaceName = getenv('CODESPACE_NAME');
|
||||
$codespaceDomain = getenv('GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN');
|
||||
|
||||
$CONFIG = [
|
||||
'mail_from_address' => 'no-reply',
|
||||
'mail_smtpmode' => 'smtp',
|
||||
'mail_sendmailmode' => 'smtp',
|
||||
'mail_domain' => 'example.com',
|
||||
'mail_smtphost' => 'localhost',
|
||||
'mail_smtpport' => '1025',
|
||||
'memcache.local' => '\OC\Memcache\APCu',
|
||||
];
|
||||
|
||||
if(is_string($codespaceName) && !empty($codespaceName) && is_string($codespaceDomain) && !empty($codespaceDomain)) {
|
||||
$host = $codespaceName . '-80.' . $codespaceDomain;
|
||||
$CONFIG['overwritehost'] = $host;
|
||||
$CONFIG['overwrite.cli.url'] = 'https://' . $host;
|
||||
$CONFIG['overwriteprotocol'] = 'https';
|
||||
$CONFIG['trusted_domains'] = [ $host ];
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"name": "NextcloudServer",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"service": "nextclouddev",
|
||||
"postCreateCommand": ".devcontainer/setup.sh",
|
||||
"postStartCommand": ".devcontainer/postStart.sh",
|
||||
"forwardPorts": [
|
||||
80,
|
||||
8080,
|
||||
8025
|
||||
],
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"felixfbecker.php-debug",
|
||||
"felixfbecker.php-intellisense",
|
||||
"ms-azuretools.vscode-docker",
|
||||
"xdebug.php-debug",
|
||||
"donjayamanne.githistory"
|
||||
],
|
||||
"settings": {
|
||||
"php.suggest.basic": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"workspaceFolder": "/var/www/html",
|
||||
"remoteUser": "devcontainer"
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -1,37 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
services:
|
||||
nextclouddev:
|
||||
build: .
|
||||
volumes:
|
||||
- .:/workspace:cached
|
||||
- /var/run/docker.sock:/var/run/docker-host.sock
|
||||
- ..:/var/www/html
|
||||
command: /var/www/html/.devcontainer/entrypoint.sh
|
||||
ports:
|
||||
- 80:80
|
||||
- 8080:8080
|
||||
- 8025:8025
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
PGDATA: /data/postgres
|
||||
volumes:
|
||||
- db:/data/postgres
|
||||
network_mode: service:nextclouddev
|
||||
|
||||
adminer:
|
||||
image: adminer
|
||||
restart: always
|
||||
network_mode: service:nextclouddev
|
||||
|
||||
mailhog:
|
||||
image: mailhog/mailhog
|
||||
restart: always
|
||||
network_mode: service:nextclouddev
|
||||
|
||||
volumes:
|
||||
db:
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
sudo service apache2 start
|
||||
|
||||
while sleep 1000; do :; done
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Listen for Xdebug",
|
||||
"type": "php",
|
||||
"request": "launch",
|
||||
"port": 9003
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
# Set git safe.directory
|
||||
git config --global --add safe.directory /var/www/html
|
||||
git config --global --add safe.directory /var/www/html/3rdparty
|
||||
|
||||
# Ensure devcontainer user has access to docker socket
|
||||
if [ -S /var/run/docker.sock ]; then
|
||||
sudo chmod 666 /var/run/docker.sock
|
||||
fi
|
||||
@@ -1,33 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../" >/dev/null 2>&1 && pwd )"
|
||||
|
||||
cd $DIR/
|
||||
|
||||
git submodule update --init
|
||||
|
||||
# Codespace config
|
||||
cp .devcontainer/codespace.config.php config/codespace.config.php
|
||||
|
||||
# VSCode debugger profile
|
||||
mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json
|
||||
|
||||
# Onetime installation setup
|
||||
if [[ ! $(sudo -u ${APACHE_RUN_USER} php occ status) =~ installed:[[:space:]]*true ]]; then
|
||||
echo "Running NC installation"
|
||||
sudo -u ${APACHE_RUN_USER} php occ maintenance:install \
|
||||
--verbose \
|
||||
--database=pgsql \
|
||||
--database-name=postgres \
|
||||
--database-host=127.0.0.1 \
|
||||
--database-port=5432 \
|
||||
--database-user=postgres \
|
||||
--database-pass=postgres \
|
||||
--admin-user admin \
|
||||
--admin-pass admin
|
||||
fi
|
||||
|
||||
sudo service apache2 restart
|
||||
@@ -1,36 +0,0 @@
|
||||
# https://editorconfig.org
|
||||
|
||||
# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = tab
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.svg]
|
||||
insert_final_newline = false
|
||||
|
||||
[package*.json]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
|
||||
[build/psalm-baseline.xml]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
|
||||
[config/*config.php]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
@@ -1,3 +0,0 @@
|
||||
watch_file lib/versioncheck.php
|
||||
watch_file package.json
|
||||
use flake
|
||||
@@ -1,25 +0,0 @@
|
||||
# .git-blame-ignore-revs
|
||||
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# Format control structures
|
||||
caff1023ea72bb2ea94130e18a2a6e2ccf819e5f
|
||||
# Update to coding-standard 1.1.1
|
||||
aa5f037af71c915424c6dcfd5ad2dc82797dc0d6
|
||||
# Update to coding-standard 1.2.3
|
||||
af6de04e9e141466dc229e444ff3f146f4a34765
|
||||
0bd284cb81b6866338aaaa67aa1d81ef9bfbb2ab
|
||||
8af7ecb2576071f170ecbb0aa2311b26581e40e2
|
||||
# Update to coding-standard 1.3.1
|
||||
9836e9b16484582d309c8437ab46d82e34956941
|
||||
# Automated refactorings
|
||||
49dd79eabb2b8902559a7a4e8f8fcad54f46b604
|
||||
# @nextcloud/vue import paths
|
||||
b06f5ba4c47450f355a8903c1a93ac68e8c6cfc2
|
||||
# Update to coding-standard 1.4.0
|
||||
5981b7eb512aa411f51cad541d01c5c6e93476f0
|
||||
# Migrate `and` `or` operators to logical `&&` `||` operators
|
||||
660f3f6fd1ae5539b8f74bfa48859d1b9f1e6abf
|
||||
# Migrate to ESLint v9 enforced code style
|
||||
91f3b6b4ee60e0f8bb6e21f92d5bc52e4cebe657
|
||||
@@ -1,6 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
/dist/* binary
|
||||
/package-lock.json merge=binary
|
||||
/core/css/*.css* binary
|
||||
/.devcontainer/*.sh text eol=lf
|
||||
@@ -1,111 +0,0 @@
|
||||
# Fallback owners for code review - ensure all PRs have someone assigned for review.
|
||||
# (the last match will used so this is only used if there is no more specific code owner below)
|
||||
|
||||
# Backend
|
||||
# is the first and gets everything to make things easier from matching syntax
|
||||
* @nextcloud/server-backend
|
||||
|
||||
# Frontend
|
||||
# this will override the backend code owners if needed
|
||||
/__mocks__ @nextcloud/server-frontend
|
||||
/__tests__ @nextcloud/server-frontend
|
||||
/dist @nextcloud/server-frontend
|
||||
/cypress @nextcloud/server-frontend
|
||||
**/css @nextcloud/server-frontend
|
||||
**/js @nextcloud/server-frontend
|
||||
**/src @nextcloud/server-frontend
|
||||
*.js @nextcloud/server-frontend
|
||||
*.cjs @nextcloud/server-frontend
|
||||
*.mjs @nextcloud/server-frontend
|
||||
*.ts @nextcloud/server-frontend
|
||||
|
||||
# dependency management
|
||||
package.json @nextcloud/server-dependabot @nextcloud/server-frontend
|
||||
package-lock.json @nextcloud/server-dependabot
|
||||
|
||||
# App maintainers
|
||||
/apps/admin_audit/appinfo/info.xml @luka-nextcloud @blizzz
|
||||
/apps/cloud_federation_api/appinfo/info.xml @nfebe @mejo-
|
||||
/apps/comments/appinfo/info.xml @edward-ly @sorbaugh
|
||||
/apps/contactsinteraction/appinfo/info.xml @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/lib @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/tests @kesselb @SebastianKrupinski
|
||||
/apps/dashboard/appinfo/info.xml @julien-nc @juliusknorr
|
||||
/apps/dav/lib/CalDAV @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/apps/dav/lib/CardDAV @hamza221 @SebastianKrupinski
|
||||
/apps/dav/tests/unit/CalDAV @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/apps/dav/tests/unit/CardDAV @hamza221 @SebastianKrupinski
|
||||
/apps/encryption/appinfo/info.xml @come-nc @icewind1991
|
||||
/apps/federatedfilesharing/appinfo/info.xml @icewind1991 @danxuliu
|
||||
/apps/federation/appinfo/info.xml @nfebe @sorbaugh
|
||||
/apps/files/appinfo/info.xml @skjnldsv @ArtificialOwl @come-nc @artonge @icewind1991 @szaimen @susnux @nfebe
|
||||
/apps/files_external/appinfo/info.xml @icewind1991 @artonge
|
||||
/apps/files_reminders/appinfo/info.xml @skjnldsv @sorbaugh
|
||||
/apps/files_sharing/appinfo/info.xml @skjnldsv @come-nc
|
||||
/apps/files_trashbin/appinfo/info.xml @icewind1991 @sorbaugh
|
||||
/apps/files_versions/appinfo/info.xml @artonge @icewind1991
|
||||
/apps/oauth2/appinfo/info.xml @julien-nc @ChristophWurst
|
||||
/apps/provisioning_api/appinfo/info.xml @provokateurin @nickvergessen
|
||||
/apps/settings/appinfo/info.xml @JuliaKirschenheuter @sorbaugh
|
||||
/apps/sharebymail/appinfo/info.xml @Altahrim @skjnldsv
|
||||
/apps/systemtags/appinfo/info.xml @Antreesy @marcelklehr
|
||||
/apps/theming/appinfo/info.xml @skjnldsv @juliusknorr
|
||||
/apps/twofactor_backupcodes/appinfo/info.xml @miaulalala @ChristophWurst
|
||||
/apps/updatenotification/appinfo/info.xml @JuliaKirschenheuter @sorbaugh
|
||||
/apps/user_ldap/appinfo/info.xml @come-nc @blizzz
|
||||
/apps/user_status/appinfo/info.xml @Antreesy @nickvergessen
|
||||
/apps/weather_status/appinfo/info.xml @julien-nc @juliusknorr
|
||||
/apps/webhook_listeners/appinfo/info.xml @come-nc @julien-nc
|
||||
/apps/workflowengine/appinfo/info.xml @blizzz @juliusknorr
|
||||
|
||||
# Files frontend expertise
|
||||
/apps/files/src* @skjnldsv @nextcloud/server-frontend
|
||||
/apps/files_external/src* @skjnldsv @nextcloud/server-frontend
|
||||
/apps/files_reminders/src* @skjnldsv @nextcloud/server-frontend
|
||||
/apps/files_sharing/src/actions* @skjnldsv @nextcloud/server-frontend
|
||||
/apps/files_trashbin/src* @skjnldsv @nextcloud/server-frontend
|
||||
|
||||
# Security team
|
||||
/build/psalm-baseline-security.xml @nickvergessen @nextcloud/server-backend
|
||||
/resources/codesigning @mgallien @miaulalala @nickvergessen
|
||||
/resources/config/ca-bundle.crt @miaulalala @nickvergessen
|
||||
|
||||
# Two-Factor Authentication
|
||||
# https://github.com/nextcloud/wg-two-factor-authentication#members
|
||||
**/TwoFactorAuth @ChristophWurst @miaulalala @nickvergessen
|
||||
/apps/twofactor_backupcodes @ChristophWurst @miaulalala @nickvergessen
|
||||
/core/templates/twofactor* @ChristophWurst @miaulalala @nickvergessen
|
||||
|
||||
# Limit login to IP
|
||||
# Watch login routes for https://github.com/nextcloud/limit_login_to_ip
|
||||
/core/routes.php @Altahrim @nextcloud/server-backend
|
||||
|
||||
# OpenAPI
|
||||
openapi*.json @provokateurin @nextcloud/server-backend
|
||||
ResponseDefinitions.php @provokateurin @nextcloud/server-backend
|
||||
|
||||
# Talk team
|
||||
/lib/private/Comments @nickvergessen @nextcloud/talk-backend
|
||||
/lib/private/Federation @nickvergessen @nextcloud/talk-backend @nextcloud/server-backend
|
||||
/lib/private/Talk @nickvergessen @nextcloud/talk-backend
|
||||
/lib/public/Comments @nickvergessen @nextcloud/talk-backend
|
||||
/lib/public/Federation @nickvergessen @nextcloud/talk-backend @nextcloud/server-backend
|
||||
/lib/public/OCM @nickvergessen @nextcloud/talk-backend @nextcloud/server-backend
|
||||
/lib/public/Talk @nickvergessen @nextcloud/talk-backend
|
||||
/lib/public/UserStatus @nickvergessen @nextcloud/talk-backend
|
||||
*/Notifications/* @nickvergessen @nextcloud/talk-backend
|
||||
|
||||
# Groupware team
|
||||
/build/integration/dav_features/caldav.feature @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/build/integration/dav_features/carddav.feature @hamza221 @SebastianKrupinski
|
||||
/lib/private/Calendar @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/lib/private/Contacts @hamza221 @SebastianKrupinski
|
||||
/lib/public/Calendar @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/lib/public/Contacts @hamza221 @SebastianKrupinski
|
||||
|
||||
# Desktop client teamn
|
||||
/apps/dav/lib/Connector/Sabre/BlockLegacyClientPlugin.php @nextcloud/desktop
|
||||
|
||||
# Personal interest
|
||||
*/Activity/* @nickvergessen @nextcloud/server-backend
|
||||
/apps/workflowengine/lib @nickvergessen @blizzz
|
||||
@@ -1,79 +0,0 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
## Submitting issues
|
||||
|
||||
If you have questions about how to install or use Nextcloud, please direct these to our [forum][forum]. We are also available on [IRC][irc] (unofficial).
|
||||
|
||||
### Short version
|
||||
|
||||
* The [**issue templates can be found here**][templates] but be aware of the different repositories! See list below. Please always use an issue template when reporting issues.
|
||||
|
||||
### Guidelines
|
||||
* Please search the existing issues first, it's likely that your issue was already reported or even fixed.
|
||||
- Go to one of the repositories, click "issues" and type any word in the top search/command bar.
|
||||
- You can also filter by appending e. g. "state:open" to the search string.
|
||||
- More info on [search syntax within github](https://help.github.com/articles/searching-issues)
|
||||
* This repository ([server](https://github.com/nextcloud/server/issues)) is *only* for issues within the Nextcloud Server code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth
|
||||
* __SECURITY__: Report any potential security bug to us via [our HackerOne page](https://hackerone.com/nextcloud) following our [security policy](https://nextcloud.com/security/) instead of filing an issue in our bug tracker.
|
||||
* The issues in other components should be reported in their respective repositories: You will find them in our [GitHub Organization](https://github.com/nextcloud/)
|
||||
|
||||
* Report the issue using one of our [templates][templates], they include all the information we need to track down the issue.
|
||||
|
||||
Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
|
||||
|
||||
[templates]: ./ISSUE_TEMPLATE
|
||||
[forum]: https://help.nextcloud.com/
|
||||
[irc]: https://web.libera.chat/#nextcloud
|
||||
|
||||
## Contributing to Source Code
|
||||
|
||||
Thanks for wanting to contribute source code to Nextcloud. That's great!
|
||||
|
||||
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the Nextcloud code with PHPUnit.
|
||||
|
||||
### Conventional Commits
|
||||
|
||||
Please use [Conventional Commits](https://www.conventionalcommits.org) for your commit messages. This helps maintain clarity and consistency across the project, making it easier to understand changes and automate versioning.
|
||||
```
|
||||
feat(files_sharing): allow sharing with contacts
|
||||
```
|
||||
|
||||
### Tests
|
||||
|
||||
In order to constantly increase the quality of our software we can no longer accept pull request which submit un-tested code.
|
||||
It is a must have that changed and added code segments are unit tested.
|
||||
In some areas unit testing is hard (aka almost impossible) as of today - in these areas refactoring WHILE fixing a bug is encouraged to enable unit testing.
|
||||
|
||||
### Sign your work
|
||||
|
||||
We use the Developer Certificate of Origin (DCO) as an additional safeguard
|
||||
for the Nextcloud project. This is a well established and widely used
|
||||
mechanism to assure contributors have confirmed their right to license
|
||||
their contribution under the project's license.
|
||||
Please read [contribute/developer-certificate-of-origin][dcofile].
|
||||
If you can certify it, then just add a line to every git commit message:
|
||||
|
||||
```
|
||||
Signed-off-by: Random J Developer <random@developer.example.org>
|
||||
```
|
||||
|
||||
Use your real name (sorry, no pseudonyms or anonymous contributions).
|
||||
If you set your `user.name` and `user.email` git configs, you can sign your
|
||||
commit automatically with `git commit -s`. You can also use git [aliases](https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases)
|
||||
like `git config --global alias.ci 'commit -s'`. Now you can commit with
|
||||
`git ci` and the commit will be signed.
|
||||
|
||||
### Apply a license
|
||||
|
||||
In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
|
||||
|
||||
[devmanual]: https://docs.nextcloud.com/server/latest/developer_manual/
|
||||
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
|
||||
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
|
||||
|
||||
## Translations
|
||||
Please submit translations via [Transifex][transifex].
|
||||
|
||||
[transifex]: https://www.transifex.com/nextcloud
|
||||
@@ -1,3 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
custom: https://nextcloud.com/include/
|
||||
@@ -1,212 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
name: "🐛 Bug report: Nextcloud Server"
|
||||
description: "Submit a report and help us improve Nextcloud Server"
|
||||
title: "[Bug]: "
|
||||
labels: ["bug", "0. Needs triage"]
|
||||
type: "Bug"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### 👍 Thank you for contributing to our project!
|
||||
Please note this is a **free and open-source** project. Most people take on their own time to help you, so please, be patient.
|
||||
You can obtain [Enterprise support](https://nextcloud.com/support/) if you run Nextcloud Server in a mission critical environment.
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### 🚨 SECURITY INFO
|
||||
If you are reporting a security concern, please report it via [our HackerOne page](https://hackerone.com/nextcloud) instead and review our [security policy](https://nextcloud.com/security/).
|
||||
This allows us to coordinate the fix and release without potentially exposing all Nextcloud servers and users in the meantime.
|
||||
It also may qualify your report for a bug bounty reward.
|
||||
Thank you for helping make Nextcloud more secure!
|
||||
- type: checkboxes
|
||||
id: before-posting
|
||||
attributes:
|
||||
label: "⚠️ This issue respects the following points: ⚠️"
|
||||
description: All conditions are **required**. Your issue can be closed if these are checked incorrectly.
|
||||
options:
|
||||
- label: This is a **bug**, not a question or a configuration/webserver/proxy issue.
|
||||
required: true
|
||||
- label: This issue is **not** already reported on [Github](https://github.com/nextcloud/server/issues?q=is%3Aopen+is%3Aissue+label%3Abug) OR [Nextcloud Community Forum](https://help.nextcloud.com/) _(I've searched it)_.
|
||||
required: true
|
||||
- label: Nextcloud Server **is** up to date. See [Maintenance and Release Schedule](https://github.com/nextcloud/server/wiki/Maintenance-and-Release-Schedule) for supported versions.
|
||||
required: true
|
||||
- label: I agree to follow Nextcloud's [Code of Conduct](https://nextcloud.com/contribute/code-of-conduct/).
|
||||
required: true
|
||||
- type: textarea
|
||||
id: bug-description
|
||||
attributes:
|
||||
label: Bug description
|
||||
description: |
|
||||
Provide a description of the bug you're experiencing.
|
||||
Don't just expect someone will guess what your specific problem is and provide full details.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: |
|
||||
Describe the steps to reproduce the bug.
|
||||
The better your description is _(go 'here', click 'there'...)_ the fastest you'll get an _(accurate)_ answer.
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: Describe what you expected to happen instead.
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: nextcloud-version
|
||||
attributes:
|
||||
label: Nextcloud Server version
|
||||
description: |
|
||||
Select Nextcloud Server version.
|
||||
_Versions not listed here are not maintained and not supported anymore_
|
||||
options:
|
||||
- "32"
|
||||
- "33"
|
||||
- "master"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: system
|
||||
attributes:
|
||||
label: Operating system
|
||||
description: |
|
||||
Select operating system where Nextcloud Server is installed.
|
||||
_Describe in the "Additional info" section if you chose "Other"._
|
||||
options:
|
||||
- "Debian/Ubuntu"
|
||||
- "RHEL/CentOS"
|
||||
- "Other"
|
||||
- type: dropdown
|
||||
id: php
|
||||
attributes:
|
||||
label: PHP engine version
|
||||
description: |
|
||||
Select PHP engine version serving Nextcloud Server.
|
||||
_Describe in the "Additional info" section if you chose "Other"._
|
||||
options:
|
||||
- "PHP 8.5"
|
||||
- "PHP 8.4"
|
||||
- "PHP 8.3"
|
||||
- "PHP 8.2"
|
||||
- "PHP 8.1"
|
||||
- "Other"
|
||||
- type: dropdown
|
||||
id: webserver
|
||||
attributes:
|
||||
label: Web server
|
||||
description: |
|
||||
Select Webserver serving Nextcloud Server.
|
||||
_Describe in the "Additional info" section if you chose "Other"._
|
||||
options:
|
||||
- "Apache (supported)"
|
||||
- "Nginx"
|
||||
- "Other"
|
||||
- type: dropdown
|
||||
id: database
|
||||
attributes:
|
||||
label: Database engine version
|
||||
description: |
|
||||
Select Database engine serving Nextcloud Server.
|
||||
_Describe in the "Additional info" section if you chose "Other"._
|
||||
options:
|
||||
- "MySQL"
|
||||
- "MariaDB"
|
||||
- "PostgreSQL"
|
||||
- "SQlite"
|
||||
- "Oracle"
|
||||
- "Other"
|
||||
- type: dropdown
|
||||
id: fresh
|
||||
attributes:
|
||||
label: Is this bug present after an update or on a fresh install?
|
||||
description: |
|
||||
Select if bug is present after an update or on a fresh install.
|
||||
options:
|
||||
- "Updated from a MINOR version (ex. 32.0.1 to 32.0.2)"
|
||||
- "Upgraded to a MAJOR version (ex. 31 to 32)"
|
||||
- "Fresh Nextcloud Server install"
|
||||
- type: dropdown
|
||||
id: encryption
|
||||
attributes:
|
||||
label: Are you using the Nextcloud Server Encryption module?
|
||||
description: Select if encryption is Enabled on your Nextcloud Server.
|
||||
options:
|
||||
- "Encryption is Enabled"
|
||||
- "Encryption is Disabled"
|
||||
- type: checkboxes
|
||||
id: users
|
||||
attributes:
|
||||
label: What user-backends are you using?
|
||||
description: |
|
||||
Select **all** user-backends Enabled on your Nextcloud Server.
|
||||
_Describe in the "Additional info" section if you chose "Other"._
|
||||
options:
|
||||
- label: "Default user-backend _(database)_"
|
||||
- label: "LDAP/ Active Directory"
|
||||
- label: "SSO - SAML"
|
||||
- label: "Other"
|
||||
- type: textarea
|
||||
id: configs
|
||||
attributes:
|
||||
label: Configuration report
|
||||
description: |
|
||||
Provide information about your configuration.
|
||||
To get this information, execute one of the following commands on the CLI:
|
||||
```shell
|
||||
sudo -u www-data php occ config:list system
|
||||
php occ config:list system
|
||||
./occ config:list system
|
||||
```
|
||||
> NOTE: This will be automatically formatted into code for better readability.
|
||||
render: json
|
||||
- type: textarea
|
||||
id: apps
|
||||
attributes:
|
||||
label: List of activated Apps
|
||||
description: |
|
||||
Provide information about your apps.
|
||||
To get this information, execute one of the following commands on the CLI:
|
||||
```shell
|
||||
sudo -u www-data php occ app:list
|
||||
php occ app:list
|
||||
./occ app:list
|
||||
```
|
||||
> NOTE: This will be automatically formatted into code for better readability.
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: nextcloud-signingstatus
|
||||
attributes:
|
||||
label: Nextcloud Signing status
|
||||
description: |
|
||||
Provide Nextcloud Signing status.
|
||||
First, login as Admin user into your Nextcloud, then access this URL:
|
||||
```shell
|
||||
https://yournextcloud.tld/index.php/settings/integrity/failed
|
||||
```
|
||||
> NOTE: This will be automatically formatted into code for better readability.
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: nextcloud-log
|
||||
attributes:
|
||||
label: Nextcloud Logs
|
||||
description: |
|
||||
Provide relevant Nextcloud log entries (e.g. from the time period you reproduced the problem).
|
||||
Copy full individual entries from `data/nextcloud.log` or use `Copy raw entry` from `/settings/admin/logging` section:
|
||||
> NOTE: This will be automatically formatted into code for better readability.
|
||||
render: json
|
||||
- type: textarea
|
||||
id: additional-info
|
||||
attributes:
|
||||
label: Additional info
|
||||
description: Any additional information related to the issue (ex. browser console errors, software versions).
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
name: 🚀 Feature request
|
||||
about: Suggest an idea for this project
|
||||
labels: enhancement, 0. Needs triage
|
||||
type: "Enhancement"
|
||||
---
|
||||
|
||||
<!--
|
||||
Have a security concern? Please report potential security issues via our HackerOne program (https://hackerone.com/nextcloud) instead of filing a public GitHub issue. See our security policy: https://nextcloud.com/security/
|
||||
-->
|
||||
|
||||
<!--
|
||||
Thanks for taking the time to suggest improvements to Nextcloud! Use this form to request features or propose enhancements.
|
||||
|
||||
Guidelines:
|
||||
|
||||
* Please search existing issues first; your idea may already have been discussed or implemented.
|
||||
* This repository (https://github.com/nextcloud/server/issues) is only for issues within the Nextcloud Server code. This includes shipped apps such as Files, DAV, Encryption, External Storage, Sharing, Deleted Files, Versions, Federation, and LDAP.
|
||||
* Issues for other components should be reported in their respective repositories in the Nextcloud GitHub organization: https://github.com/nextcloud/
|
||||
* Nextcloud is an open source project backed by Nextcloud GmbH. Many contributors are volunteers and primarily focus on issues affecting home users. Paid engineers prioritize customer-reported issues and critical defects.
|
||||
* This is the development issue tracker. Please do NOT use it for support questions or help diagnosing your installation.
|
||||
- For community/user help: https://help.nextcloud.com
|
||||
- For professional / large deployment support options: https://nextcloud.com/support
|
||||
-->
|
||||
|
||||
<!-- Please keep the note below for other contributors -->
|
||||
> [!TIP]
|
||||
> ### Help move this idea forward
|
||||
> * Use the 👍 reaction to show support for this feature.
|
||||
> * Avoid commenting unless you have relevant information to add; unnecessary comments create noise for subscribers.
|
||||
> * Subscribe to receive notifications about status changes and new comments.
|
||||
---
|
||||
<!-- DO NOT EDIT ABOVE THIS LINE -->
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
<!-- Provide a clear and concise description of the problem. For example: “I'm always frustrated when …” -->
|
||||
|
||||
**Describe the solution you'd like**
|
||||
<!-- Provide a clear and concise description of what you want to happen. -->
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
<!-- Provide a clear and concise description of any alternative solutions or features you've considered. -->
|
||||
|
||||
**Additional context**
|
||||
<!-- Add any other context or screenshots related to the feature request here. -->
|
||||
@@ -1,2 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -1,12 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
contact_links:
|
||||
- name: 🚨 Report a security or privacy issue
|
||||
url: https://hackerone.com/nextcloud
|
||||
about: Report security and privacy related issues privately to the Nextcloud team, so we can coordinate the fix and release without potentially exposing all Nextcloud servers and users in the meantime.
|
||||
- name: ❓ Community Support and Help
|
||||
url: https://help.nextcloud.com/
|
||||
about: Configuration, webserver/proxy or performance issues and other questions
|
||||
- name: 💼 Nextcloud Enterprise
|
||||
url: https://portal.nextcloud.com/
|
||||
about: If you are a Nextcloud Enterprise customer, or need Professional support, so it can be resolved directly by our dedicated engineers more quickly
|
||||
@@ -1,7 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
name: "CodeQL config"
|
||||
|
||||
paths-ignore:
|
||||
- dist
|
||||
@@ -1,5 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
firstPRMergeComment: >
|
||||
Thanks for your first pull request and welcome to the community!
|
||||
Feel free to keep them coming! If you are looking for issues to tackle then have a look at this selection: https://github.com/nextcloud/server/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22
|
||||
@@ -1,210 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
# GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: monthly
|
||||
timezone: Europe/Paris
|
||||
groups:
|
||||
github-actions:
|
||||
patterns:
|
||||
- "*"
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
|
||||
# Main composer (linting, testing, openapi)
|
||||
- package-ecosystem: composer
|
||||
directories:
|
||||
- "/"
|
||||
- "/vendor-bin/behat"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
- "/vendor-bin/rector"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
|
||||
# Main master npm frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/frontend"
|
||||
- "/build/frontend-legacy"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
groups:
|
||||
vite:
|
||||
patterns:
|
||||
- "vite"
|
||||
- "@nextcloud/vite-config"
|
||||
vitest:
|
||||
patterns:
|
||||
- "vitest"
|
||||
- "@vitest/*"
|
||||
|
||||
# Latest stable release
|
||||
|
||||
# Composer dependencies for linting and testing
|
||||
- package-ecosystem: composer
|
||||
target-branch: stable33
|
||||
directories:
|
||||
- "/"
|
||||
- "/vendor-bin/behat"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
- "/vendor-bin/rector"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:30"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
ignore:
|
||||
# only patch updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
# frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable33
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/frontend"
|
||||
- "/build/frontend-legacy"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:30"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
groups:
|
||||
vite:
|
||||
patterns:
|
||||
- "vite"
|
||||
- "@nextcloud/vite-config"
|
||||
vitest:
|
||||
patterns:
|
||||
- "vitest"
|
||||
- "@vitest/*"
|
||||
ignore:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
# Older stable releases
|
||||
|
||||
# Composer dependencies for linting and testing
|
||||
- package-ecosystem: composer
|
||||
target-branch: stable32
|
||||
directories:
|
||||
- "/"
|
||||
- "/vendor-bin/behat"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:30"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
ignore:
|
||||
# only patch updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
# frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable32
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:30"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
ignore:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
# Composer dependencies for linting and testing
|
||||
- package-ecosystem: composer
|
||||
target-branch: stable31
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/integration"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
ignore:
|
||||
# only patch updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
# frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable31
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
ignore:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
@@ -1,25 +0,0 @@
|
||||
<!--
|
||||
- 🚨 SECURITY INFO
|
||||
-
|
||||
- Before sending a pull request that fixes a security issue please report it via our HackerOne page (https://hackerone.com/nextcloud) following our security policy (https://nextcloud.com/security/). This allows us to coordinate the fix and release without potentially exposing all Nextcloud servers and users in the meantime.
|
||||
-->
|
||||
|
||||
* Resolves: # <!-- related github issue -->
|
||||
|
||||
## Summary
|
||||
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] ...
|
||||
|
||||
## Checklist
|
||||
|
||||
- Code is [properly formatted](https://docs.nextcloud.com/server/latest/developer_manual/digging_deeper/continuous_integration.html#linting)
|
||||
- [Sign-off message](https://github.com/src-d/guide/blob/master/developer-community/fix-DCO.md) is added to all commits
|
||||
- [ ] Tests ([unit](https://docs.nextcloud.com/server/latest/developer_manual/app_development/tutorial.html#unit-tests), [integration](https://docs.nextcloud.com/server/latest/developer_manual/app_development/tutorial.html#integration-tests), api and/or acceptance) are included
|
||||
- [ ] Screenshots before/after for front-end changes
|
||||
- [ ] Documentation ([manuals](https://github.com/nextcloud/documentation/) or wiki) has been updated or is not required
|
||||
- [ ] [Backports requested](https://github.com/nextcloud/backportbot/#usage) where applicable (ex: critical bugfixes)
|
||||
- [ ] [Labels added](https://github.com/nextcloud/server/labels) where applicable (ex: bug/enhancement, `3. to review`, feature component)
|
||||
- [ ] [Milestone added](https://github.com/nextcloud/server/milestones) for target branch/version (ex: 32.x for `stable32`)
|
||||
@@ -1,2 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -1,128 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Code checkers
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: autocheckers-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/appinfo/**'
|
||||
- '**/lib/**'
|
||||
- '**/templates/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
- build/autoloaderchecker.sh
|
||||
|
||||
autoloader:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
|
||||
name: PHP checkers
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check auto loaders
|
||||
run: bash ./build/autoloaderchecker.sh
|
||||
|
||||
autocheckers:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
|
||||
name: Translation and Files checkers
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check translations are JSON decodeable
|
||||
run: php ./build/translation-checker.php
|
||||
|
||||
- name: Check translations do not contain triple dot but ellipsis
|
||||
run: php ./build/triple-dot-checker.php
|
||||
|
||||
- name: Check .htaccess does not contain invalid changes
|
||||
run: php ./build/htaccess-checker.php
|
||||
|
||||
- name: Check that all and only expected files are included
|
||||
run: php ./build/files-checker.php
|
||||
|
||||
- name: Check that all shipped apps are linted by psalm
|
||||
run: sh ./build/psalm-checker.sh
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, autoloader, autocheckers]
|
||||
|
||||
if: always()
|
||||
|
||||
name: autocheckers-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.autocheckers.result != 'success' || (needs.changes.outputs.src != 'false' && needs.autoloader.result != 'success') }}; then exit 1; fi
|
||||
@@ -1,49 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Block merges for EOL
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: block-merge-eol-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
block-merges-eol:
|
||||
name: Block merges for EOL branches
|
||||
|
||||
# Only run on stableXX branches
|
||||
if: startsWith( github.base_ref, 'stable')
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- name: Set server major version environment
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const regex = /^stable(\d+)$/
|
||||
const baseRef = context.payload.pull_request.base.ref
|
||||
const match = baseRef.match(regex)
|
||||
if (match) {
|
||||
console.log('Setting server_major to ' + match[1]);
|
||||
core.exportVariable('server_major', match[1]);
|
||||
console.log('Setting current_day to ' + (new Date()).toISOString().substr(0, 10));
|
||||
core.exportVariable('current_day', (new Date()).toISOString().substr(0, 10));
|
||||
}
|
||||
|
||||
- name: Checking if server ${{ env.server_major }} is EOL
|
||||
if: ${{ env.server_major != '' }}
|
||||
run: |
|
||||
curl -s https://raw.githubusercontent.com/nextcloud-releases/updater_server/production/config/major_versions.json \
|
||||
| jq '.["${{ env.server_major }}"]["eol"] // "9999-99-99" | . >= "${{ env.current_day }}"' \
|
||||
| grep -q true
|
||||
@@ -1,57 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Block merges during freezes
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, ready_for_review, reopened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: block-merge-freeze-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
block-merges-during-freeze:
|
||||
name: Block merges during freezes
|
||||
|
||||
if: github.event.pull_request.draft == false
|
||||
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- name: Register server reference to fallback to master branch
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const baseRef = context.payload.pull_request.base.ref
|
||||
if (baseRef === 'main' || baseRef === 'master') {
|
||||
core.exportVariable('server_ref', 'master');
|
||||
console.log('Setting server_ref to master');
|
||||
} else {
|
||||
const regex = /^stable(\d+)$/
|
||||
const match = baseRef.match(regex)
|
||||
if (match) {
|
||||
core.exportVariable('server_ref', match[0]);
|
||||
console.log('Setting server_ref to ' + match[0]);
|
||||
} else {
|
||||
console.log('Not based on master/main/stable*, so skipping freeze check');
|
||||
}
|
||||
}
|
||||
|
||||
- name: Download version.php from ${{ env.server_ref }}
|
||||
if: ${{ env.server_ref != '' }}
|
||||
run: curl 'https://raw.githubusercontent.com/nextcloud/server/${{ env.server_ref }}/version.php' --output version.php
|
||||
|
||||
- name: Run check
|
||||
if: ${{ env.server_ref != '' }}
|
||||
run: cat version.php | grep 'OC_VersionString' | grep -i -v 'RC'
|
||||
@@ -1,79 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Block merging with outdated 3rdparty/
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, ready_for_review, reopened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: block-outdated-3rdparty-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
block-outdated-3rdparty:
|
||||
name: Block merging with outdated 3rdparty/
|
||||
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- name: Check requirement
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '3rdparty'
|
||||
- 'version.php'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: 3rdparty commit hash on current branch
|
||||
id: actual
|
||||
run: |
|
||||
echo "commit=$(git submodule status | grep ' 3rdparty' | egrep -o '[a-f0-9]{40}')" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Register server reference to fallback to master branch
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const baseRef = context.payload.pull_request.base.ref
|
||||
if (baseRef === 'main' || baseRef === 'master') {
|
||||
core.exportVariable('server_ref', 'master');
|
||||
console.log('Setting server_ref to master');
|
||||
} else {
|
||||
const regex = /^stable(\d+)$/
|
||||
const match = baseRef.match(regex)
|
||||
if (match) {
|
||||
core.exportVariable('server_ref', match[0]);
|
||||
console.log('Setting server_ref to ' + match[0]);
|
||||
} else {
|
||||
console.log('Not based on master/main/stable*, so skipping outdated 3rdparty check');
|
||||
}
|
||||
}
|
||||
|
||||
- name: Last 3rdparty commit on target branch
|
||||
if: ${{ env.server_ref != '' }}
|
||||
id: target
|
||||
run: |
|
||||
echo "commit=$(git ls-remote https://github.com/nextcloud/3rdparty refs/heads/${{ env.server_ref }} | awk '{ print $1}')" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Compare if 3rdparty commits are different
|
||||
if: ${{ env.server_ref != '' }}
|
||||
run: |
|
||||
echo '3rdparty/ seems to not point to the last commit of the dedicated branch:'
|
||||
echo 'Branch has: ${{ steps.actual.outputs.commit }}'
|
||||
echo '${{ env.server_ref }} has: ${{ steps.target.outputs.commit }}'
|
||||
|
||||
- name: Fail if 3rdparty commits are different
|
||||
if: ${{ env.server_ref != '' && steps.changes.outputs.src != 'false' && steps.actual.outputs.commit != steps.target.outputs.commit }}
|
||||
run: |
|
||||
exit 1
|
||||
@@ -1,36 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Block unconventional commits
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, ready_for_review, reopened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: block-unconventional-commits-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
block-unconventional-commits:
|
||||
name: Block unconventional commits
|
||||
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: webiny/action-conventional-commits@8bc41ff4e7d423d56fa4905f6ff79209a78776c7 # v1.3.0
|
||||
with:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,49 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
name: "CodeQL Advanced"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master", "stable*" ]
|
||||
pull_request:
|
||||
branches: [ "master", "stable*" ]
|
||||
schedule:
|
||||
- cron: '28 18 * * 1'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze (${{ matrix.language }})
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# required for all workflows
|
||||
security-events: write
|
||||
|
||||
# required to fetch internal or private CodeQL packs
|
||||
packages: read
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- language: actions
|
||||
build-mode: none
|
||||
- language: javascript-typescript
|
||||
build-mode: none
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
config-file: ./.github/codeql-config.yml
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
@@ -1,222 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Compile Command
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
init:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# On pull requests and if the comment starts with `/compile`
|
||||
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/compile')
|
||||
|
||||
outputs:
|
||||
git_path: ${{ steps.git-path.outputs.path }}
|
||||
arg1: ${{ steps.command.outputs.arg1 }}
|
||||
arg2: ${{ steps.command.outputs.arg2 }}
|
||||
head_ref: ${{ steps.comment-branch.outputs.head_ref }}
|
||||
base_ref: ${{ steps.comment-branch.outputs.base_ref }}
|
||||
|
||||
steps:
|
||||
- name: Get repository from pull request comment
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
id: get-repository
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const pull = await github.rest.pulls.get({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.issue.number
|
||||
});
|
||||
|
||||
const repositoryName = pull.data.head?.repo?.full_name
|
||||
console.log(repositoryName)
|
||||
return repositoryName
|
||||
|
||||
- name: Disabled on forks
|
||||
if: ${{ fromJSON(steps.get-repository.outputs.result) != github.repository }}
|
||||
run: |
|
||||
echo 'Can not execute /compile on forks'
|
||||
exit 1
|
||||
|
||||
- name: Check actor permission
|
||||
uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v2
|
||||
with:
|
||||
require: write
|
||||
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reactions: '+1'
|
||||
|
||||
- name: Parse command
|
||||
uses: skjnldsv/parse-command-comment@5c955203c52424151e6d0e58fb9de8a9f6a605a1 # v2
|
||||
id: command
|
||||
|
||||
# Init path depending on which command is run
|
||||
- name: Init path
|
||||
id: git-path
|
||||
run: |
|
||||
if ${{ startsWith(steps.command.outputs.arg1, '/') }}; then
|
||||
echo "path=${{steps.command.outputs.arg1}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "path=${{steps.command.outputs.arg2}}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Init branch
|
||||
uses: xt0rted/pull-request-comment-branch@e8b8daa837e8ea7331c0003c9c316a64c6d8b0b1 # v3.0.0
|
||||
id: comment-branch
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reactions: '-1'
|
||||
|
||||
process:
|
||||
runs-on: ubuntu-latest
|
||||
needs: init
|
||||
|
||||
steps:
|
||||
- name: Restore cached git repository
|
||||
uses: buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 # v4.0.2
|
||||
with:
|
||||
path: .git
|
||||
key: git-repo
|
||||
|
||||
- name: Checkout ${{ needs.init.outputs.head_ref }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
# Needed to allow force push later
|
||||
persist-credentials: true
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
fetch-depth: 0
|
||||
ref: ${{ needs.init.outputs.head_ref }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --local user.email 'nextcloud-command@users.noreply.github.com'
|
||||
git config --local user.name 'nextcloud-command'
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: package-engines-versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
cache: npm
|
||||
|
||||
- name: Set up npm ${{ steps.package-engines-versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.package-engines-versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Rebase to ${{ needs.init.outputs.base_ref }}
|
||||
if: ${{ contains(needs.init.outputs.arg1, 'rebase') }}
|
||||
run: |
|
||||
git fetch origin '${{ needs.init.outputs.base_ref }}:${{ needs.init.outputs.base_ref }}'
|
||||
|
||||
# Start the rebase
|
||||
git rebase 'origin/${{ needs.init.outputs.base_ref }}' || {
|
||||
# Handle rebase conflicts in a loop
|
||||
while [ -d .git/rebase-merge ] || [ -d .git/rebase-apply ]; do
|
||||
echo "Handling rebase conflict..."
|
||||
|
||||
# Remove and checkout /dist and /js folders from the base branch
|
||||
if [ -d "dist" ]; then
|
||||
rm -rf dist
|
||||
git checkout origin/${{ needs.init.outputs.base_ref }} -- dist/ 2>/dev/null || echo "No dist folder in base branch"
|
||||
fi
|
||||
if [ -d "js" ]; then
|
||||
rm -rf js
|
||||
git checkout origin/${{ needs.init.outputs.base_ref }} -- js/ 2>/dev/null || echo "No js folder in base branch"
|
||||
fi
|
||||
|
||||
# Stage all changes
|
||||
git add .
|
||||
|
||||
# Check if there are any changes after resolving conflicts
|
||||
if git diff --cached --quiet; then
|
||||
echo "No changes after conflict resolution, skipping commit"
|
||||
git rebase --skip
|
||||
else
|
||||
echo "Changes found, continuing rebase without editing commit message"
|
||||
git -c core.editor=true rebase --continue
|
||||
fi
|
||||
|
||||
# Break if rebase is complete
|
||||
if [ ! -d .git/rebase-merge ] && [ ! -d .git/rebase-apply ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
- name: Install dependencies & build
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
run: |
|
||||
npm ci
|
||||
npm run build --if-present
|
||||
|
||||
- name: Commit default
|
||||
if: ${{ !contains(needs.init.outputs.arg1, 'fixup') && !contains(needs.init.outputs.arg1, 'amend') }}
|
||||
run: |
|
||||
git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}'
|
||||
git commit --signoff -m 'chore(assets): Recompile assets'
|
||||
|
||||
- name: Commit fixup
|
||||
if: ${{ contains(needs.init.outputs.arg1, 'fixup') }}
|
||||
run: |
|
||||
git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}'
|
||||
git commit --fixup=HEAD --signoff
|
||||
|
||||
- name: Commit amend
|
||||
if: ${{ contains(needs.init.outputs.arg1, 'amend') }}
|
||||
run: |
|
||||
git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}'
|
||||
git commit --amend --no-edit --signoff
|
||||
# Remove any [skip ci] from the amended commit
|
||||
git commit --amend -m "$(git log -1 --format='%B' | sed '/\[skip ci\]/d')"
|
||||
|
||||
- name: Push normally
|
||||
if: ${{ !contains(needs.init.outputs.arg1, 'rebase') && !contains(needs.init.outputs.arg1, 'amend') }}
|
||||
env:
|
||||
HEAD_REF: ${{ needs.init.outputs.head_ref }}
|
||||
run: git push origin "$HEAD_REF"
|
||||
|
||||
- name: Force push
|
||||
if: ${{ contains(needs.init.outputs.arg1, 'rebase') || contains(needs.init.outputs.arg1, 'amend') }}
|
||||
env:
|
||||
HEAD_REF: ${{ needs.init.outputs.head_ref }}
|
||||
run: git push --force-with-lease origin "$HEAD_REF"
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reactions: '-1'
|
||||
@@ -1,100 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Update 3rdparty command
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: created
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
rebase:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: none
|
||||
|
||||
# On pull requests and if the comment starts with `/update-3rdparty`
|
||||
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/update-3rdparty')
|
||||
|
||||
steps:
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v3.0.1
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reactions: '+1'
|
||||
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not execute /update-3rdparty on forks'
|
||||
exit 1
|
||||
|
||||
- name: Init branch
|
||||
uses: xt0rted/pull-request-comment-branch@e8b8daa837e8ea7331c0003c9c316a64c6d8b0b1 # v1
|
||||
id: comment-branch
|
||||
|
||||
- name: Checkout ${{ steps.comment-branch.outputs.head_ref }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
ref: ${{ steps.comment-branch.outputs.head_ref }}
|
||||
|
||||
- name: Register server reference to fallback to master branch
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const baseRef = context.payload.pull_request.base.ref
|
||||
if (baseRef === 'main' || baseRef === 'master') {
|
||||
core.exportVariable('server_ref', 'master');
|
||||
console.log('Setting server_ref to master');
|
||||
} else {
|
||||
const regex = /^stable(\d+)$/
|
||||
const match = baseRef.match(regex)
|
||||
if (match) {
|
||||
core.exportVariable('server_ref', match[0]);
|
||||
console.log('Setting server_ref to ' + match[0]);
|
||||
} else {
|
||||
console.log('Not based on master/main/stable*, so skipping pull 3rdparty command');
|
||||
}
|
||||
}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --local user.email 'nextcloud-command@users.noreply.github.com'
|
||||
git config --local user.name 'nextcloud-command'
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v3.0.1
|
||||
if: ${{ env.server_ref == '' }}
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reactions: '-1'
|
||||
|
||||
- name: Pull 3rdparty
|
||||
if: ${{ env.server_ref != '' }}
|
||||
run: git submodule foreach 'if [ "$sm_path" == "3rdparty" ]; then git pull origin '"'"'${{ env.server_ref }}'"'"'; fi'
|
||||
|
||||
- name: Commit and push changes
|
||||
if: ${{ env.server_ref != '' }}
|
||||
run: |
|
||||
git add 3rdparty
|
||||
git commit -s -m 'Update submodule 3rdparty to latest ${{ env.server_ref }}'
|
||||
git push
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v3.0.1
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reactions: '-1'
|
||||
@@ -1,237 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Cypress
|
||||
|
||||
on: pull_request
|
||||
|
||||
concurrency:
|
||||
group: cypress-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
# Adjust APP_NAME if your repository name is different
|
||||
APP_NAME: ${{ github.event.repository.name }}
|
||||
|
||||
# This represents the server branch to checkout.
|
||||
# Usually it's the base branch of the PR, but for pushes it's the branch itself.
|
||||
# e.g. 'main', 'stable27' or 'feature/my-feature'
|
||||
# n.b. server will use head_ref, as we want to test the PR branch.
|
||||
BRANCH: ${{ github.base_ref || github.ref_name }}
|
||||
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
init:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
nodeVersion: ${{ steps.versions.outputs.nodeVersion }}
|
||||
npmVersion: ${{ steps.versions.outputs.npmVersion }}
|
||||
|
||||
env:
|
||||
# We'll install cypress in the cypress job
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
|
||||
steps:
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not run cypress on forks'
|
||||
exit 1
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
# We need to checkout submodules for 3rdparty
|
||||
submodules: true
|
||||
|
||||
- name: Check composer.json
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
|
||||
with:
|
||||
files: 'composer.json'
|
||||
|
||||
- name: Install composer dependencies
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
run: composer install --no-dev
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Install node dependencies & build app
|
||||
run: |
|
||||
npm ci
|
||||
TESTING=true npm run build --if-present
|
||||
|
||||
- name: Save context
|
||||
uses: buildjet/cache/save@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 # v4.0.2
|
||||
with:
|
||||
key: cypress-context-${{ github.run_id }}
|
||||
path: ./
|
||||
|
||||
cypress:
|
||||
runs-on: ubuntu-latest
|
||||
needs: init
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
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: ['setup', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
|
||||
# Hack as strategy.job-total includes the "setup" and GitHub does not allow math expressions
|
||||
# Always align this number with the total of e2e runners (max. index + 1)
|
||||
total-containers: [10]
|
||||
|
||||
services:
|
||||
mysql:
|
||||
# Only start mysql if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'ghcr.io/nextcloud/continuous-integration-mysql-8.4:latest' || ''}}
|
||||
ports:
|
||||
- '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 10
|
||||
|
||||
mariadb:
|
||||
# Only start mariadb if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'mariadb:11.4' || ''}}
|
||||
ports:
|
||||
- '3306/tcp'
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: oc_autotest
|
||||
options: --health-cmd="mariadb-admin ping" --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
postgres:
|
||||
# Only start postgres if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'ghcr.io/nextcloud/continuous-integration-postgres-17:latest' || ''}}
|
||||
ports:
|
||||
- '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
|
||||
|
||||
oracle:
|
||||
# Only start oracle if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'ghcr.io/gvenzl/oracle-free:23' || ''}}
|
||||
ports:
|
||||
- '1521'
|
||||
env:
|
||||
ORACLE_PASSWORD: oracle
|
||||
options: --health-cmd healthcheck.sh --health-interval 20s --health-timeout 10s --health-retries 10
|
||||
|
||||
name: runner ${{ matrix.containers }}
|
||||
|
||||
steps:
|
||||
- name: Restore context
|
||||
uses: buildjet/cache/restore@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 # v4.0.2
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: cypress-context-${{ github.run_id }}
|
||||
path: ./
|
||||
|
||||
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ needs.init.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ needs.init.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ needs.init.outputs.npmVersion }}'
|
||||
|
||||
- name: Install cypress
|
||||
run: ./node_modules/cypress/bin/cypress install
|
||||
|
||||
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
|
||||
uses: cypress-io/github-action@2ad32e649e4db26c07674ebae31a297601dbcbaf # v6.10.8
|
||||
with:
|
||||
# We already installed the dependencies in the init job
|
||||
install: false
|
||||
component: ${{ matrix.containers == 'component' }}
|
||||
group: ${{ matrix.use-cypress-cloud && matrix.containers == 'component' && 'Run component' || matrix.use-cypress-cloud && 'Run E2E' || '' }}
|
||||
# cypress env
|
||||
ci-build-id: ${{ matrix.use-cypress-cloud && format('{0}-{1}', github.sha, github.run_number) || '' }}
|
||||
tag: ${{ matrix.use-cypress-cloud && github.event_name || '' }}
|
||||
env:
|
||||
# Needs to be prefixed with CYPRESS_
|
||||
CYPRESS_BRANCH: ${{ env.BRANCH }}
|
||||
# https://github.com/cypress-io/github-action/issues/124
|
||||
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
|
||||
# Needed for some specific code workarounds
|
||||
TESTING: true
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||
SPLIT: ${{ matrix.total-containers }}
|
||||
SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }}
|
||||
SPLIT_RANDOM_SEED: ${{ github.run_id }}
|
||||
SETUP_TESTING: ${{ matrix.containers == 'setup' && 'true' || '' }}
|
||||
|
||||
- name: Upload snapshots and videos
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
if: always()
|
||||
with:
|
||||
name: snapshots_${{ matrix.containers }}
|
||||
path: |
|
||||
cypress/snapshots
|
||||
cypress/videos
|
||||
|
||||
- name: Show logs
|
||||
if: failure() && matrix.containers != 'component'
|
||||
run: |
|
||||
for id in $(docker ps -aq); do
|
||||
docker container inspect "$id" --format '=== Logs for container {{.Name}} ==='
|
||||
docker logs "$id" >> nextcloud.log
|
||||
done
|
||||
echo '=== Nextcloud server logs ==='
|
||||
docker exec nextcloud-e2e-test-server_${{ env.APP_NAME }} cat data/nextcloud.log
|
||||
|
||||
- name: Create data dir archive
|
||||
if: failure() && matrix.containers != 'component'
|
||||
run: docker exec nextcloud-e2e-test-server_${{ env.APP_NAME }} tar -cvjf - data > data.tar
|
||||
|
||||
- name: Upload data archive
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
if: failure() && matrix.containers != 'component'
|
||||
with:
|
||||
name: nc_data_${{ matrix.containers }}
|
||||
path: data.tar
|
||||
|
||||
summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [init, cypress]
|
||||
|
||||
if: always()
|
||||
|
||||
name: cypress-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.init.result != 'success' || ( needs.cypress.result != 'success' && needs.cypress.result != 'skipped' ) }}; then exit 1; fi
|
||||
@@ -1,58 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Auto approve Dependabot PRs
|
||||
|
||||
on:
|
||||
pull_request_target: # zizmor: ignore[dangerous-triggers]
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: dependabot-approve-merge-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
auto-approve-merge:
|
||||
if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'renovate[bot]'
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
# for hmarr/auto-approve-action to approve PRs
|
||||
pull-requests: write
|
||||
# for alexwilson/enable-github-automerge-action to approve PRs
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not approve PRs from forks'
|
||||
exit 1
|
||||
|
||||
- uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0
|
||||
id: branchname
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# GitHub actions bot approve
|
||||
- uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
|
||||
if: startsWith(steps.branchname.outputs.branch, 'dependabot/')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Enable GitHub auto merge
|
||||
- name: Auto merge
|
||||
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0
|
||||
if: startsWith(steps.branchname.outputs.branch, 'dependabot/')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,142 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit files_external FTP
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-ftp-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-ftp:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2', '8.4']
|
||||
ftpd: ['proftpd', 'vsftpd', 'pure-ftpd']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.ftpd }}
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up ftpd
|
||||
run: |
|
||||
sudo mkdir /tmp/ftp
|
||||
sudo chmod -R 0777 /tmp/ftp
|
||||
if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then echo '$6$Q7V2n3q2GRVv5YeQ$/AhLu07H76Asojy7bxGXMY1caKLAbp5Vt82LOZYMkD/8uDzyMAEXwk0c1Bdz1DkBsk2Vh/9SF130mOPavRGMo.' > /tmp/secret.txt; fi
|
||||
if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then echo 'FTP_ROOT=/home/test' > $GITHUB_ENV; fi
|
||||
if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then docker run --name ftp -d --net host -e PASV_ADDRESS=127.0.0.1 -e FTPUSER_NAME=test -v /tmp/secret.txt:/run/secrets/ftp-user-password-secret -v /tmp/ftp:/home/test instantlinux/proftpd; fi
|
||||
if [[ "${{ matrix.ftpd }}" == 'vsftpd' ]]; then docker run --name ftp -d --net host -e FTP_USER=test -e FTP_PASS=test -e PASV_ADDRESS=127.0.0.1 -v /tmp/ftp:/home/vsftpd/test fauria/vsftpd; fi
|
||||
if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp:/home/test -v /tmp/ftp:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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' }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
composer install
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ app:enable --force files_external
|
||||
echo "<?php return ['run' => true,'host' => 'localhost','user' => 'test','password' => 'test', 'root' => '${{ env.FTP_ROOT }}'];" > apps/files_external/tests/config.ftp.php
|
||||
|
||||
- name: smoketest ftp
|
||||
run: |
|
||||
php -r 'var_dump(file_put_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt", "asd"));'
|
||||
php -r 'var_dump(file_get_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt"));'
|
||||
php -r 'var_dump(mkdir("ftp://test:test@localhost${{ env.FTP_ROOT }}/asdads"));'
|
||||
ls -l /tmp/ftp
|
||||
[ -f /tmp/ftp/ftp.txt ]
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/FtpTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-ftp
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-ftp
|
||||
|
||||
- name: ftpd logs
|
||||
if: always()
|
||||
run: |
|
||||
docker logs ftp
|
||||
|
||||
ftp-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-ftp]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-ftp.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,225 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit files_external S3
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-s3-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-s3-minio:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2', '8.4']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-s3-minio
|
||||
|
||||
services:
|
||||
minio:
|
||||
image: bitnami/minio@sha256:50cec18ac4184af4671a78aedd5554942c8ae105d51a465fa82037949046da01 # v2025.4.22
|
||||
env:
|
||||
MINIO_ROOT_USER: nextcloud
|
||||
MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
MINIO_DEFAULT_BUCKETS: nextcloud
|
||||
ports:
|
||||
- '9000:9000'
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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, 'minio' => 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: |
|
||||
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 -- \
|
||||
--group S3 \
|
||||
--log-junit junit.xml \
|
||||
apps/files_external/tests/Storage \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: Nextcloud logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
- 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.2', '8.4']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-s3-localstack
|
||||
|
||||
services:
|
||||
localstack:
|
||||
env:
|
||||
SERVICES: s3
|
||||
DEBUG: 1
|
||||
image: localstack/localstack@sha256:9d4253786e0effe974d77fe3c390358391a56090a4fff83b4600d8a64404d95d # v4.5.0
|
||||
ports:
|
||||
- "4566:4566"
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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, 'localstack' => 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 -- \
|
||||
--group S3 \
|
||||
--log-junit junit.xml \
|
||||
apps/files_external/tests/Storage \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
s3-external-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-s3-minio, files-external-s3-localstack]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && (needs.files-external-s3-minio.result != 'success' || needs.files-external-s3-localstack.result != 'success') }}; then exit 1; fi
|
||||
@@ -1,132 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit files_external sFTP
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-sftp-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-sftp:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2', '8.4']
|
||||
sftpd: ['openssh']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.sftpd }}
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up sftpd
|
||||
run: |
|
||||
sudo mkdir /tmp/sftp
|
||||
sudo chown -R 0777 /tmp/sftp
|
||||
if [[ '${{ matrix.sftpd }}' == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp 'test:test:::data'; fi
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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' }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
composer install
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ app:enable --force files_external
|
||||
echo "<?php return ['run' => true, 'host' => 'localhost:2222','user' => 'test','password' => 'test', 'root' => 'data'];" > apps/files_external/tests/config.sftp.php
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/SftpTest.php \
|
||||
apps/files_external/tests/Storage/SFTP_KeyTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-sftp
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-sftp
|
||||
|
||||
- name: sftpd logs
|
||||
if: always()
|
||||
run: |
|
||||
ls -l /tmp/sftp
|
||||
docker logs sftp
|
||||
|
||||
sftp-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-sftp]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-sftp.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,128 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Samba Kerberos SSO
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-smb-kerberos-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-smb-kerberos:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
name: smb-kerberos-sso
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Checkout user_saml
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/user_saml
|
||||
path: apps/user_saml
|
||||
|
||||
- name: Install user_saml
|
||||
run: |
|
||||
cd apps/user_saml
|
||||
composer i
|
||||
cd ../..
|
||||
|
||||
- name: Pull images
|
||||
run: |
|
||||
docker pull ghcr.io/icewind1991/samba-krb-test-dc
|
||||
docker pull ghcr.io/icewind1991/samba-krb-test-apache-gssapi:8.4
|
||||
docker pull ghcr.io/icewind1991/samba-krb-test-client
|
||||
docker tag ghcr.io/icewind1991/samba-krb-test-dc icewind1991/samba-krb-test-dc
|
||||
docker tag ghcr.io/icewind1991/samba-krb-test-apache-gssapi:8.4 icewind1991/samba-krb-test-apache-gssapi
|
||||
docker tag ghcr.io/icewind1991/samba-krb-test-client icewind1991/samba-krb-test-client
|
||||
|
||||
- name: Setup AD-DC
|
||||
run: |
|
||||
DC_IP=$(apps/files_external/tests/sso-setup/start-dc.sh)
|
||||
sleep 1
|
||||
apps/files_external/tests/sso-setup/start-apache.sh $DC_IP $PWD
|
||||
echo "DC_IP=$DC_IP" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
apps/files_external/tests/sso-setup/setup-sso-nc.sh
|
||||
|
||||
- name: Test SSO
|
||||
run: |
|
||||
apps/files_external/tests/sso-setup/test-sso-smb.sh ${{ env.DC_IP }}
|
||||
|
||||
- name: Show logs DC
|
||||
if: always()
|
||||
run: |
|
||||
docker logs dc
|
||||
echo "------------"
|
||||
docker exec dc cat /var/log/samba/log.samba
|
||||
|
||||
- name: Show logs Apache
|
||||
if: always()
|
||||
run: |
|
||||
docker logs apache
|
||||
|
||||
- name: Show logs
|
||||
if: always()
|
||||
run: |
|
||||
FILEPATH=$(docker exec --user 33 apache ./occ log:file | grep "Log file:" | cut -d' ' -f3)
|
||||
echo "$FILEPATH:"
|
||||
docker exec --user 33 apache cat $FILEPATH
|
||||
|
||||
smb-kerberos-sso-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-smb-kerberos]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-smb-kerberos.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,138 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit files_external SMB
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-smb-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-smb:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-smb
|
||||
|
||||
services:
|
||||
samba:
|
||||
image: ghcr.io/servercontainers/samba:smbd-only-a3.18.0-s4.18.2-r0
|
||||
env:
|
||||
ACCOUNT_test: test
|
||||
UID_test: 1000
|
||||
SAMBA_VOLUME_CONFIG_test: "[public]; path=/tmp; valid users = test; guest ok = no; read only = no; browseable = yes"
|
||||
options: >-
|
||||
--health-cmd=true
|
||||
ports:
|
||||
- 445:445
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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, smbclient, sqlite, pdo_sqlite
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up smbclient
|
||||
# This is needed as icewind/smb php library for notify
|
||||
run: sudo apt-get install -y smbclient
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
composer install
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ config:system:set --value true --type boolean allow_local_remote_servers
|
||||
./occ app:enable --force files_external
|
||||
echo "<?php return ['run'=>true, 'host'=>'localhost', 'user'=>'test', 'password'=>'test', 'root'=>'', 'share'=>'public'];" > apps/files_external/tests/config.smb.php
|
||||
|
||||
- name: Wait for smb
|
||||
run: |
|
||||
apps/files_external/tests/env/wait-for-connection 127.0.0.1 445 60
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/SmbTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-smb
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-smb
|
||||
|
||||
files-external-smb-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-smb]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-smb.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,130 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit files_external WebDAV
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-webdav-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-webdav-apache:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.3', '8.4']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-webdav
|
||||
|
||||
services:
|
||||
apache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-webdav-apache:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 8081:80
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
composer install
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ config:system:set --value true --type boolean allow_local_remote_servers
|
||||
./occ app:enable --force files_external
|
||||
echo "<?php return ['run' => true, 'host' => 'localhost:8081/webdav/', 'user' => 'test', 'password'=>'pass', 'root' => '', 'wait' => 0];" > apps/files_external/tests/config.webdav.php
|
||||
|
||||
- name: Wait for WebDAV
|
||||
run: |
|
||||
sleep 5
|
||||
curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://test:pass@localhost:8081/webdav/
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/WebdavTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-webdav
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-webdav
|
||||
|
||||
files-external-webdav-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-webdav-apache]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-webdav-apache.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,119 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit files_external generic
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: files-external-generic-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
files-external-generic:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.3', '8.4']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-generic
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
OBJECT_STORE_KEY: nextcloud
|
||||
OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
run: |
|
||||
composer install
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ app:enable --force files_external
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-generic
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-files-external-generic
|
||||
|
||||
files-external-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-generic ]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-generic.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,36 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Block fixup and squash commits
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, ready_for_review, reopened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: fixup-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
commit-message-check:
|
||||
if: github.event.pull_request.draft == false
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
name: Block fixup and squash commits
|
||||
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- name: Run check
|
||||
uses: skjnldsv/block-fixup-merge-action@c138ea99e45e186567b64cf065ce90f7158c236a # v2
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,104 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Generate changelog on release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
changelog_generate:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Only allowed to be run on nextcloud-releases repositories
|
||||
if: ${{ github.repository_owner == 'nextcloud-releases' }}
|
||||
|
||||
steps:
|
||||
- name: Check actor permission
|
||||
uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0
|
||||
with:
|
||||
require: write
|
||||
|
||||
- name: Checkout github_helper
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/github_helper
|
||||
path: github_helper
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: server
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Get previous tag
|
||||
shell: bash
|
||||
run: |
|
||||
cd server
|
||||
# Print all tags
|
||||
git log --decorate --oneline | egrep 'tag: ' | sed -r 's/^.+tag: ([^,\)]+)[,\)].+$/\1/g'
|
||||
# Get the current tag
|
||||
TAGS=$(git log --decorate --oneline | egrep 'tag: ' | sed -r 's/^.+tag: ([^,\)]+)[,\)].+$/\1/g')
|
||||
CURRENT_TAG=$(echo "$TAGS" | head -n 1)
|
||||
|
||||
# If current tag is the first beta, we use the previous major RC1
|
||||
if echo "$CURRENT_TAG" | grep -q 'beta1'; then
|
||||
MAJOR=$(echo "$CURRENT_TAG" | sed -E 's/^v([0-9]+).*/\1/')
|
||||
PREV=$((MAJOR - 1))
|
||||
PREVIOUS_TAG="v${PREV}.0.0rc1"
|
||||
# Get the previous tag - filter pre-releases only if current tag is stable
|
||||
elif echo "$CURRENT_TAG" | grep -q 'rc\|beta\|alpha'; then
|
||||
# Current tag is pre-release, don't filter
|
||||
PREVIOUS_TAG=$(echo "$TAGS" | sed -n '2p')
|
||||
else
|
||||
# Current tag is stable, filter out pre-releases
|
||||
PREVIOUS_TAG=$(echo "$TAGS" | grep -v 'rc\|beta\|alpha' | sed -n '2p')
|
||||
fi
|
||||
|
||||
echo "CURRENT_TAG=$CURRENT_TAG" >> $GITHUB_ENV
|
||||
echo "PREVIOUS_TAG=$PREVIOUS_TAG" >> $GITHUB_ENV
|
||||
|
||||
# Since this action only runs on nextcloud-releases, ignoring is okay
|
||||
- name: Verify current tag # zizmor: ignore[template-injection]
|
||||
run: |
|
||||
if [ "${{ github.ref_name }}" != "${{ env.CURRENT_TAG }}" ]; then
|
||||
echo "Current tag does not match the release tag. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Set up php 8.2
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: 8.2
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set credentials
|
||||
run: |
|
||||
echo '{"username": "github-actions"}' > github_helper/credentials.json
|
||||
|
||||
# Since this action only runs on nextcloud-releases, ignoring is okay
|
||||
- name: Generate changelog between ${{ env.PREVIOUS_TAG }} and ${{ github.ref_name }} # zizmor: ignore[template-injection]
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd github_helper/changelog
|
||||
composer install
|
||||
php index.php generate:changelog --no-bots --format=forum server ${{ env.PREVIOUS_TAG }} ${{ github.ref_name }} > changelog.md
|
||||
|
||||
# Since this action only runs on nextcloud-releases, ignoring is okay
|
||||
- name: Set changelog to release # zizmor: ignore[template-injection]
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd server
|
||||
gh release edit ${{ github.ref_name }} --notes-file "../github_helper/changelog/changelog.md" --title "${{ github.ref_name }}"
|
||||
@@ -1,129 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: DAV integration tests
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: integration-caldav-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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-caldav:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
endpoint: ['old', 'new']
|
||||
service: ['CalDAV', 'CardDAV']
|
||||
|
||||
name: ${{ matrix.service }} (${{ matrix.endpoint }} endpoint) php${{ matrix.php-versions }}
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: 'none'
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Python
|
||||
uses: LizardByte/actions/actions/setup_python@e6bc045033a5614035b66daafc38ff86faecb23a # v2026.116.208
|
||||
with:
|
||||
python-version: '2.7'
|
||||
|
||||
- name: Set up CalDAVTester
|
||||
run: |
|
||||
git clone --depth=1 https://github.com/apple/ccs-caldavtester.git CalDAVTester
|
||||
git clone --depth=1 https://github.com/apple/ccs-pycalendar.git pycalendar
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
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 admin
|
||||
# disable the trashbin, so recurrent deletion of the same object works
|
||||
./occ config:app:set dav calendarRetentionObligation --value=0
|
||||
# Prepare users
|
||||
OC_PASS=user01 ./occ user:add --password-from-env user01
|
||||
OC_PASS=user02 ./occ user:add --password-from-env user02
|
||||
# Prepare calendars
|
||||
./occ dav:create-calendar user01 calendar
|
||||
./occ dav:create-calendar user01 shared
|
||||
./occ dav:create-calendar user02 calendar
|
||||
# Prepare address books
|
||||
./occ dav:create-addressbook user01 addressbook
|
||||
./occ dav:create-addressbook user02 addressbook
|
||||
|
||||
- name: Run Nextcloud
|
||||
run: |
|
||||
php -S localhost:8888 &
|
||||
|
||||
- name: Run CalDAVTester
|
||||
run: |
|
||||
cp "apps/dav/tests/testsuits/caldavtest/serverinfo-${{ matrix.endpoint }}${{ matrix.endpoint == 'old' && (matrix.service == 'CardDAV' && '-carddav' || '-caldav') || '' }}-endpoint.xml" "apps/dav/tests/testsuits/caldavtest/serverinfo.xml"
|
||||
pushd CalDAVTester
|
||||
PYTHONPATH="../pycalendar/src" python testcaldav.py --print-details-onfail --basedir "../apps/dav/tests/testsuits/caldavtest" -o cdt.txt \
|
||||
"${{ matrix.service }}/current-user-principal.xml" \
|
||||
"${{ matrix.service }}/sync-report.xml" \
|
||||
${{ matrix.endpoint == 'new' && format('{0}/sharing-{1}.xml', matrix.service, matrix.service == 'CalDAV' && 'calendars' || 'addressbooks') || ';' }}
|
||||
popd
|
||||
|
||||
- name: Print Nextcloud logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
caldav-integration-summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, integration-caldav]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-caldav.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,116 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Litmus integration tests
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: integration-litmus-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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-litmus:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
endpoint: ['webdav', 'dav']
|
||||
|
||||
name: Litmus WebDAV ${{ matrix.endpoint }}
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: 'none'
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
mkdir data
|
||||
./occ maintenance:install \
|
||||
--verbose \
|
||||
--database=sqlite \
|
||||
--database-name=nextcloud \
|
||||
--database-user=root \
|
||||
--database-pass=rootpassword \
|
||||
--admin-user admin \
|
||||
--admin-pass admin
|
||||
./occ config:system:set trusted_domains 2 --value=host.docker.internal:8080
|
||||
|
||||
- name: Run Nextcloud
|
||||
run: |
|
||||
php -S 0.0.0.0:8080 &
|
||||
|
||||
- name: Run Litmus test
|
||||
run: |
|
||||
docker run \
|
||||
--rm \
|
||||
--add-host=host.docker.internal:host-gateway \
|
||||
ghcr.io/nextcloud/continuous-integration-litmus-php8.3:latest \
|
||||
bash -c '\
|
||||
cd /tmp/litmus/litmus-0.13;
|
||||
make URL=http://host.docker.internal:8080/remote.php/${{ matrix.endpoint }}${{ matrix.endpoint == 'dav' && '/files/admin' || ''}} CREDS="admin admin" TESTS="basic copymove props largefile" check;
|
||||
status=$?;
|
||||
cat debug.log;
|
||||
exit $status;'
|
||||
|
||||
- name: Print Nextcloud logs
|
||||
if: always()
|
||||
run: cat data/nextcloud.log
|
||||
|
||||
integration-litmus-summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, integration-litmus]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-litmus.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,133 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: S3 primary storage integration tests
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: integration-s3-primary-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'build/integration/**'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
integration-s3-primary:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
key: ['objectstore', 'objectstore_multibucket']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.key }}-minio
|
||||
|
||||
services:
|
||||
redis:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
ports:
|
||||
- 6379:6379/tcp
|
||||
minio:
|
||||
image: bitnami/minio@sha256:50cec18ac4184af4671a78aedd5554942c8ae105d51a465fa82037949046da01 # v2025.4.22
|
||||
env:
|
||||
MINIO_ROOT_USER: nextcloud
|
||||
MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
MINIO_DEFAULT_BUCKETS: nextcloud
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: 'none'
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Wait for S3
|
||||
run: |
|
||||
sleep 10
|
||||
curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
composer install
|
||||
mkdir data
|
||||
echo '<?php $CONFIG=["${{ matrix.key }}" => ["class" => "OC\Files\ObjectStore\S3", "arguments" => ["bucket" => "nextcloud", "autocreate" => true, "key" => "nextcloud", "secret" => "bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=", "hostname" => "localhost", "port" => 9000, "use_ssl" => false, "use_path_style" => true, "uploadPartSize" => 52428800]]];' > config/config.php
|
||||
echo '<?php $CONFIG=["redis" => ["host" => "localhost", "port" => 6379], "memcache.local" => "\OC\Memcache\Redis", "memcache.distributed" => "\OC\Memcache\Redis"];' > config/redis.config.php
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
|
||||
php -f index.php
|
||||
|
||||
- name: Integration
|
||||
run: |
|
||||
cd build/integration
|
||||
bash run.sh --tags "~@failure-s3" dav_features/webdav-related.feature
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
|
||||
s3-primary-integration-summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, integration-s3-primary]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-s3-primary.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,184 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Integration sqlite
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: integration-sqlite-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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'
|
||||
- 'core/shipped.json'
|
||||
|
||||
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'
|
||||
- 'file_conversions'
|
||||
- 'files_reminders'
|
||||
- 'openldap_features'
|
||||
- 'openldap_numerical_features'
|
||||
- 'ldap_features'
|
||||
- 'remoteapi_features'
|
||||
- 'routing_features'
|
||||
- 'setup_features'
|
||||
- 'sharees_features'
|
||||
- 'sharing_features'
|
||||
- 'theming_features'
|
||||
- 'videoverification_features'
|
||||
|
||||
php-versions: ['8.4']
|
||||
spreed-versions: ['main']
|
||||
activity-versions: ['master']
|
||||
|
||||
services:
|
||||
redis:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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-8 # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 389:389
|
||||
- 636:636
|
||||
env:
|
||||
SLAPD_DOMAIN: nextcloud.ci
|
||||
SLAPD_ORGANIZATION: Nextcloud
|
||||
SLAPD_PASSWORD: admin
|
||||
SLAPD_ADDITIONAL_MODULES: memberof
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Checkout Talk app
|
||||
if: ${{ matrix.test-suite == 'videoverification_features' }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/spreed
|
||||
path: apps/spreed
|
||||
ref: ${{ matrix.spreed-versions }}
|
||||
|
||||
- name: Checkout Activity app
|
||||
if: ${{ matrix.test-suite == 'sharing_features' }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/activity
|
||||
path: apps/activity
|
||||
ref: ${{ matrix.activity-versions }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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 dependencies
|
||||
run: |
|
||||
composer install
|
||||
|
||||
- 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 $(./occ log:file |grep "Log file"|cut -d" " -f3)
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, integration-sqlite]
|
||||
|
||||
if: always()
|
||||
|
||||
name: integration-sqlite-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-sqlite.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,100 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Lint eslint
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-eslint-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '**/src/**'
|
||||
- '**/appinfo/info.xml'
|
||||
- 'package.json'
|
||||
- 'package-lock.json'
|
||||
- 'tsconfig.json'
|
||||
- '.eslintrc.*'
|
||||
- '.eslintignore'
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.vue'
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
name: NPM lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Install dependencies
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run lint
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, lint]
|
||||
|
||||
if: always()
|
||||
|
||||
# This is the summary, we just avoid to rename it so that branch protection rules still match
|
||||
name: eslint
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,85 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Lint php-cs
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-php-cs-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/lib/**'
|
||||
- '**/tests/**'
|
||||
- '**/vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: php-cs
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: 8.2
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer i
|
||||
|
||||
- name: Lint
|
||||
run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 )
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, lint]
|
||||
|
||||
if: always()
|
||||
|
||||
# This is the summary, we just avoid to rename it so that branch protection rules still match
|
||||
name: php-cs
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,86 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Lint php
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-php-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/lib/**'
|
||||
- '**/tests/**'
|
||||
- '**/vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: [ '8.2', '8.3', '8.4', '8.5' ]
|
||||
|
||||
name: php-lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Lint
|
||||
run: composer run lint
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, lint]
|
||||
|
||||
if: always()
|
||||
|
||||
name: php-lint-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,53 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Lint stylelint
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-stylelint-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: stylelint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Install dependencies
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run stylelint
|
||||
@@ -1,99 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Node handlebars tests
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: node-tests-handlebars-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '**/__tests__/**'
|
||||
- '**/__mocks__/**'
|
||||
- 'apps/*/src/**'
|
||||
- 'apps/*/appinfo/info.xml'
|
||||
- 'core/src/**'
|
||||
- 'package.json'
|
||||
- '**/package-lock.json'
|
||||
- 'tsconfig.json'
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.vue'
|
||||
|
||||
handlebars:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [changes]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run compile
|
||||
run: ./build/compile-handlebars-templates.sh
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, handlebars]
|
||||
|
||||
if: always()
|
||||
|
||||
name: test-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.handlebars.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,109 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Node tests
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: node-tests-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '**/__tests__/**'
|
||||
- '**/__mocks__/**'
|
||||
- 'apps/*/src/**'
|
||||
- 'apps/*/appinfo/info.xml'
|
||||
- 'core/src/**'
|
||||
- 'package.json'
|
||||
- '**/package-lock.json'
|
||||
- 'tsconfig.json'
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.vue'
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Install dependencies
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: |
|
||||
npm ci
|
||||
|
||||
# - name: Test
|
||||
# run: npm run test --if-present
|
||||
|
||||
- name: Test and process coverage
|
||||
run: npm run test:coverage
|
||||
|
||||
- name: Collect coverage
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./coverage/lcov.info,./coverage/legacy/lcov.info
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, test]
|
||||
|
||||
if: always()
|
||||
|
||||
name: node-test-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.test.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,117 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Node
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: node-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '**/src/**'
|
||||
- '**/appinfo/info.xml'
|
||||
- 'core/css/*'
|
||||
- 'core/img/**'
|
||||
- 'package.json'
|
||||
- '**/package-lock.json'
|
||||
- 'tsconfig.json'
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.vue'
|
||||
- 'version.php'
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
name: NPM build
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
# This does not work on server as we have some git dependencies that "npm-package-lock-add-resolved" cannot handle
|
||||
# - name: Validate package-lock.json # See https://github.com/npm/cli/issues/4460
|
||||
# run: |
|
||||
# npm i -g npm-package-lock-add-resolved@1.1.4
|
||||
# npm-package-lock-add-resolved
|
||||
# git --no-pager diff --exit-code
|
||||
|
||||
- name: Install dependencies & build
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
run: |
|
||||
npm ci
|
||||
npm run build --if-present
|
||||
|
||||
- name: Check build changes
|
||||
run: |
|
||||
bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)"
|
||||
|
||||
- name: Show changes on failure
|
||||
if: failure()
|
||||
run: |
|
||||
git status
|
||||
git --no-pager diff
|
||||
exit 1 # make it red to grab attention
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, build]
|
||||
|
||||
if: always()
|
||||
|
||||
# This is the summary, we just avoid to rename it so that branch protection rules still match
|
||||
name: node
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.build.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,85 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Npm audit fix and compile
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# At 2:30 on Sundays
|
||||
- cron: '30 2 * * 0'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches:
|
||||
- ${{ github.event.repository.default_branch }}
|
||||
- 'stable33'
|
||||
- 'stable32'
|
||||
- 'stable31'
|
||||
|
||||
name: npm-audit-fix-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
id: checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^24'
|
||||
fallbackNpm: '^11.3'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
|
||||
|
||||
- name: Fix npm audit
|
||||
id: npm-audit
|
||||
uses: nextcloud-libraries/npm-audit-action@1b1728b2b4a7a78d69de65608efcf4db0e3e42d0 # v0.2.0
|
||||
|
||||
- name: Run npm ci and npm run build
|
||||
if: steps.checkout.outcome == 'success'
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: |
|
||||
npm ci
|
||||
npm run build --if-present
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(deps): Fix npm audit'
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
|
||||
signoff: true
|
||||
branch: automated/noid/${{ matrix.branches }}-fix-npm-audit
|
||||
title: '[${{ matrix.branches }}] Fix npm audit'
|
||||
body: ${{ steps.npm-audit.outputs.markdown }}
|
||||
labels: |
|
||||
dependencies
|
||||
3. to review
|
||||
@@ -1,145 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Object storage azure
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "15 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: object-storage-azure-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
azure-primary-tests:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.4'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-azure
|
||||
|
||||
services:
|
||||
azurite:
|
||||
image: mcr.microsoft.com/azure-storage/azurite@sha256:0a47e12e3693483cef5c71f35468b91d751611f172d2f97414e9c69113b106d9 # v3.34.0
|
||||
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 # zizmor: ignore[unpinned-images]
|
||||
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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: PHPUnit
|
||||
env:
|
||||
OBJECT_STORE: azure
|
||||
OBJECT_STORE_KEY: nextcloud
|
||||
OBJECT_STORE_SECRET: bmV4dGNsb3Vk
|
||||
run: composer run test -- --group PRIMARY-azure --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-azure
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-azure
|
||||
|
||||
- name: Azurite logs
|
||||
if: always()
|
||||
run: |
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
azure-primary-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, azure-primary-tests]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.azure-primary-tests.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,151 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Object storage S3
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "15 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: object-storage-s3-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
s3-primary-tests-minio:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-s3
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 6379:6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
minio:
|
||||
image: bitnami/minio@sha256:50cec18ac4184af4671a78aedd5554942c8ae105d51a465fa82037949046da01 # v2025.4.22
|
||||
env:
|
||||
MINIO_ROOT_USER: nextcloud
|
||||
MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
MINIO_DEFAULT_BUCKETS: nextcloud
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- 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 --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-s3
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-s3
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
s3-primary-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes,s3-primary-tests-minio]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.s3-primary-tests-minio.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,141 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Object storage Swift
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "15 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: object-storage-swift-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'apps/files/lib/**'
|
||||
- 'apps/files/tests/**'
|
||||
- 'apps/files_external/**'
|
||||
- 'apps/files_sharing/lib/**'
|
||||
- 'apps/files_sharing/tests/**'
|
||||
- 'apps/files_trashbin/lib/**'
|
||||
- 'apps/files_trashbin/tests/**'
|
||||
- 'apps/files_versions/lib/**'
|
||||
- 'apps/files_versions/tests/**'
|
||||
- 'lib/private/Files/**'
|
||||
- 'lib/public/Files/**'
|
||||
- 'tests/lib/Files/**'
|
||||
|
||||
swift-primary-tests:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: php${{ matrix.php-versions }}-swift
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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@sha256:e8b1ec21120ab9adc6ac6a2b98785fd273676439a8633fe898e37f2aea7e0712
|
||||
ports:
|
||||
- 5000:5000
|
||||
- 8080:8080
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: PHPUnit
|
||||
env:
|
||||
OBJECT_STORE: swift
|
||||
OBJECT_STORE_SECRET: veryfast
|
||||
run: composer run test -- --group PRIMARY-swift --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-swift
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-swift
|
||||
|
||||
- name: Swift logs
|
||||
if: always()
|
||||
run: |
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
swift-primary-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes,swift-primary-tests]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.swift-primary-tests.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,48 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-FileCopyrightText: 2024 Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: OpenAPI
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: openapi-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
openapi:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: ctype, curl, dom, fileinfo, gd, json, libxml, mbstring, openssl, pcntl, pdo, posix, session, simplexml, xml, xmlreader, xmlwriter, zip, zlib
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up dependencies
|
||||
run: composer i
|
||||
|
||||
- name: OpenAPI checker
|
||||
run: build/openapi-checker.sh
|
||||
@@ -1,128 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Performance testing
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: performance-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
performance-testing:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
|
||||
name: performance-${{ matrix.php-versions }}
|
||||
|
||||
steps:
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not run performance tests on forks'
|
||||
exit 1
|
||||
|
||||
- name: Checkout server before PR
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
ref: ${{ github.event.pull_request.base.ref }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
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
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
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
|
||||
|
||||
php -S localhost:8080 &
|
||||
- name: Apply blueprint
|
||||
uses: icewind1991/blueprint@00504403f76cb2a09efd0d16793575055e6f63cb # v0.1.2
|
||||
with:
|
||||
blueprint: tests/blueprints/basic.toml
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
|
||||
- name: Run before measurements
|
||||
uses: nextcloud/profiler@6801ee10fc80f10b444388fb6ca9b36ad8a2ea83
|
||||
with:
|
||||
run: |
|
||||
curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test
|
||||
curl -s -u test:test http://localhost:8080/remote.php/dav/files/test/test.txt
|
||||
curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test/many_files
|
||||
curl -s -u test:test -T README.md http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
curl -s -u test:test -X DELETE http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
output: before.json
|
||||
profiler-branch: master
|
||||
|
||||
- name: Apply PR # zizmor: ignore[template-injection]
|
||||
run: |
|
||||
git remote add pr '${{ github.event.pull_request.head.repo.clone_url }}'
|
||||
git fetch pr '${{ github.event.pull_request.head.ref }}'
|
||||
git checkout -b 'pr/${{ github.event.pull_request.head.ref }}'
|
||||
git submodule update
|
||||
|
||||
./occ upgrade
|
||||
|
||||
- name: Run after measurements
|
||||
id: compare
|
||||
uses: nextcloud/profiler@6801ee10fc80f10b444388fb6ca9b36ad8a2ea83
|
||||
with:
|
||||
run: |
|
||||
curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test
|
||||
curl -s -u test:test http://localhost:8080/remote.php/dav/files/test/test.txt
|
||||
curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test/many_files
|
||||
curl -s -u test:test -T README.md http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
curl -s -u test:test -X DELETE http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
output: after.json
|
||||
profiler-branch: master
|
||||
compare-with: before.json
|
||||
|
||||
- name: Upload profiles
|
||||
if: always()
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
|
||||
with:
|
||||
name: profiles
|
||||
path: |
|
||||
before.json
|
||||
after.json
|
||||
|
||||
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v7
|
||||
if: failure() && steps.compare.outcome == 'failure'
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
let comment = `Possible performance regression detected\n`;
|
||||
comment += `<details><summary>Show Output</summary>
|
||||
|
||||
\`\`\`
|
||||
${{ steps.compare.outputs.compare }}
|
||||
\`\`\`
|
||||
|
||||
</details>`;
|
||||
|
||||
github.rest.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: comment
|
||||
})
|
||||
@@ -1,59 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit 32bits
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- "version.php"
|
||||
- ".github/workflows/phpunit-32bits.yml"
|
||||
- "tests/phpunit-autotest.xml"
|
||||
- "lib/private/Snowflake/*"
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "15 1 * * 1-6"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-32bits-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
phpunit-32bits:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ["8.4"]
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up dependencies
|
||||
uses: docker://ghcr.io/nextcloud/continuous-integration-php8.4-32bit:latest
|
||||
with:
|
||||
args: /bin/sh -c "
|
||||
git config --global --add safe.directory /github/workspace &&
|
||||
composer install --no-interaction"
|
||||
|
||||
- name: Set up Nextcloud
|
||||
uses: docker://ghcr.io/nextcloud/continuous-integration-php8.4-32bit:latest
|
||||
with:
|
||||
args: /bin/sh -c "
|
||||
mkdir data &&
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-user=autotest --database-pass=rootpassword --admin-user admin --admin-pass admin &&
|
||||
php -f tests/enable_all.php"
|
||||
|
||||
- name: PHPUnit
|
||||
uses: docker://ghcr.io/nextcloud/continuous-integration-php8.4-32bit:latest
|
||||
with:
|
||||
args: /bin/sh -c "composer run test -- --exclude-group PRIMARY-azure,PRIMARY-s3,PRIMARY-swift,Memcached,Redis,RoutingWeirdness"
|
||||
@@ -1,158 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit MariaDB
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-mariadb-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
mariadb-versions: ['10.6']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
mariadb-versions: '10.11'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
- php-versions: '8.4'
|
||||
mariadb-versions: '11.4'
|
||||
- php-versions: '8.5'
|
||||
mariadb-versions: '11.8'
|
||||
|
||||
name: MariaDB ${{ matrix.mariadb-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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="${{ matrix.mariadb-versions <= 10.4 && 'mysqladmin' || 'mariadb-admin'}} ping" --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
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 MariaDB 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
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mariadb
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-mariadb
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-mariadb]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-mariadb-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mariadb.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,135 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit memcached
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-memcached-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
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 # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 11212:11212/tcp
|
||||
- 11212:11212/udp
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: PHPUnit memcached tests
|
||||
run: composer run test -- --group Memcache --group Memcached --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-memcached
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-memcached
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-memcached]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-memcached-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-memcached.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,193 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit sharding
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-mysql-sharding-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
mysql-versions: ['8.4']
|
||||
|
||||
name: Sharding - MySQL ${{ matrix.mysql-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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 # zizmor: ignore[unpinned-images]
|
||||
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 10
|
||||
shard1:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 5001:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
shard2:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 5002:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
shard3:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 5003:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
shard4:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 5004:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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
|
||||
SHARDING: 1
|
||||
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
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-mysql]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-mysql-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,163 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit mysql
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-mysql-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
mysql-versions: ['8.0']
|
||||
include:
|
||||
- mysql-versions: '8.0'
|
||||
php-versions: '8.3'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
- mysql-versions: '8.4'
|
||||
php-versions: '8.4'
|
||||
- mysql-versions: '8.4'
|
||||
php-versions: '8.5'
|
||||
|
||||
name: MySQL ${{ matrix.mysql-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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 # zizmor: ignore[unpinned-images]
|
||||
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 10
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-mysql]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-mysql-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,141 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
# This is the testsuite running all non-database agnostic unit tests
|
||||
|
||||
name: PHPUnit nodb
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-nodb-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/appinfo/**'
|
||||
- '**/lib/**'
|
||||
- '**/templates/**'
|
||||
- '**/tests/**'
|
||||
- 'resources/**'
|
||||
- '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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
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 # zizmor: ignore[unpinned-images]
|
||||
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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: PHPUnit nodb testsuite
|
||||
run: composer run test -- --exclude-group DB --exclude-group SLOWDB --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.nodb.xml' || '' }}
|
||||
|
||||
- name: Upload nodb code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.nodb.xml
|
||||
flags: phpunit-nodb
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-nodb
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-nodb]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-nodb-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-nodb.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,125 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit primary object store
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "15 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-object-store-primary-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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'
|
||||
|
||||
object-store-primary-tests-minio:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
key: ['s3', 's3-multibucket']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.key }}-minio
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 6379:6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
minio:
|
||||
image: bitnami/minio@sha256:50cec18ac4184af4671a78aedd5554942c8ae105d51a465fa82037949046da01 # v2025.4.22
|
||||
env:
|
||||
MINIO_ROOT_USER: nextcloud
|
||||
MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
MINIO_DEFAULT_BUCKETS: nextcloud
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
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
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
OBJECT_STORE: ${{ matrix.key }}
|
||||
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
|
||||
|
||||
- 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: |
|
||||
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
|
||||
|
||||
|
||||
object-store-primary-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes,object-store-primary-tests-minio]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.object-store-primary-tests-minio.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,162 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit OCI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-oci-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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-oci:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: ${{ needs.changes.outputs.src != 'false' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- oracle-versions: '18'
|
||||
php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
- oracle-versions: '21'
|
||||
php-versions: '8.3'
|
||||
- oracle-versions: '23'
|
||||
php-versions: '8.4'
|
||||
- oracle-versions: '23'
|
||||
php-versions: '8.5'
|
||||
|
||||
name: Oracle ${{ matrix.oracle-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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-${{ matrix.oracle-versions < 23 && 'xe' || 'free' }}:${{ matrix.oracle-versions }}
|
||||
|
||||
# Provide passwords and other environment variables to container
|
||||
env:
|
||||
ORACLE_PASSWORD: oracle
|
||||
|
||||
# Forward Oracle port
|
||||
ports:
|
||||
- 1521:1521
|
||||
|
||||
# Provide healthcheck script options for startup
|
||||
options: >-
|
||||
--health-cmd healthcheck.sh
|
||||
--health-interval 20s
|
||||
--health-timeout 10s
|
||||
--health-retries 10
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
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' }}
|
||||
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=oci --database-name=${{ matrix.oracle-versions < 23 && 'XE' || 'FREE' }} --database-host=127.0.0.1 --database-port=1521 --database-user=system --database-pass=oracle --admin-user admin --admin-pass admin
|
||||
php -f tests/enable_all.php
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-oci
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-oci
|
||||
|
||||
- name: Run repair steps
|
||||
run: |
|
||||
./occ maintenance:repair --include-expensive
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-oci]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-oci-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-oci.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,162 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit PostgreSQL
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-pgsql-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
# To keep the matrix smaller we ignore PostgreSQL versions in between as we already test the minimum and the maximum
|
||||
postgres-versions: ['14']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
postgres-versions: '18'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
- php-versions: '8.4'
|
||||
postgres-versions: '18'
|
||||
- php-versions: '8.5'
|
||||
postgres-versions: '18'
|
||||
|
||||
name: PostgreSQL ${{ matrix.postgres-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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 # zizmor: ignore[unpinned-images]
|
||||
ports:
|
||||
- 4444:5432/tcp
|
||||
env:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: rootpassword
|
||||
POSTGRES_DB: nextcloud
|
||||
options: --mount type=tmpfs,destination=/var/lib/postgresql --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: PHPUnit database tests
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-postgres
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-postgres
|
||||
|
||||
- name: Run repair steps
|
||||
run: |
|
||||
./occ maintenance:repair --include-expensive
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-pgsql]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-pgsql-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-pgsql.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,142 +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
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit SQLite
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-sqlite-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
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:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
name: SQLite (PHP ${{ matrix.php-versions }})
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
||||
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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
|
||||
timeout-minutes: 5
|
||||
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
|
||||
|
||||
- name: Nextcloud debug information
|
||||
run: ./occ app:list && echo "======= System config =======" && ./occ config:list system
|
||||
|
||||
- name: PHPUnit database tests
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-sqlite
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
||||
with:
|
||||
flags: phpunit-sqlite
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-sqlite]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-sqlite-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi
|
||||
@@ -1,55 +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
|
||||
|
||||
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-FileCopyrightText: 2023 Marcel Klehr <mklehr@gmx.net>
|
||||
# SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 Daniel Kesselberg <mail@danielkesselberg.de>
|
||||
# SPDX-FileCopyrightText: 2023 Florian Steffens <florian.steffens@nextcloud.com>
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: 'Ask for feedback on PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
pr-feedback:
|
||||
if: ${{ github.repository_owner == 'nextcloud' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: The get-github-handles-from-website action
|
||||
uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1
|
||||
id: scrape
|
||||
with:
|
||||
website: 'https://nextcloud.com/team/'
|
||||
|
||||
- name: Get blocklist
|
||||
id: blocklist
|
||||
run: |
|
||||
blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
|
||||
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: nextcloud/pr-feedback-action@f0cab224dea8e1f282f9451de322f323c78fc7a5 # main
|
||||
with:
|
||||
feedback-message: |
|
||||
Hello there,
|
||||
Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
|
||||
|
||||
We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process.
|
||||
|
||||
Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6
|
||||
|
||||
Thank you for contributing to Nextcloud and we hope to hear from you soon!
|
||||
|
||||
(If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).)
|
||||
days-before-feedback: 14
|
||||
start-date: '2025-06-12'
|
||||
exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}'
|
||||
exempt-bots: true
|
||||
@@ -1,27 +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
|
||||
|
||||
# SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. <https://fsfe.org>
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
name: REUSE Compliance Check
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
reuse-compliance-check:
|
||||
runs-on: ubuntu-latest-low
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@676e2d560c9a403aa252096d99fcab3e1132b0f5 # v6.0.0
|
||||
@@ -1,37 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Close stale issues
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
steps:
|
||||
- uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v9
|
||||
with:
|
||||
repo-token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity and seems to be missing some essential information.
|
||||
It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
stale-issue-label: 'stale'
|
||||
only-labels: 'needs info'
|
||||
exempt-issue-labels: '1. to develop,2. developing,3. to review,4. to release,security'
|
||||
days-before-stale: 30
|
||||
days-before-close: 14
|
||||
# debug-only: true
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Psalm static code analysis
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
paths:
|
||||
- '.github/workflows/static-code-analysis.yml'
|
||||
- '**.php'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
concurrency:
|
||||
group: static-code-analysis-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
static-code-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Composer install
|
||||
run: composer i
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm -- --threads=1 --monochrome --no-progress --output-format=github --update-baseline
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
|
||||
static-code-analysis-security:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
|
||||
- name: Composer install
|
||||
run: composer i
|
||||
|
||||
- name: Psalm taint analysis
|
||||
run: composer run psalm:security -- --threads=1 --monochrome --no-progress --output-format=github --update-baseline --report=results.sarif
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
|
||||
- name: Upload Security Analysis results to GitHub
|
||||
if: always()
|
||||
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
static-code-analysis-ocp:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Composer install
|
||||
run: composer i
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm:ocp -- --threads=1 --monochrome --no-progress --output-format=github --update-baseline
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
|
||||
static-code-analysis-ncu:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Composer install
|
||||
run: composer i
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm:ncu -- --threads=1 --monochrome --no-progress --output-format=github
|
||||
@@ -1,49 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Update CA certificate bundle
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
update-ca-certificate-bundle:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['master', 'stable33', 'stable32', 'stable31', 'stable30', 'stable29', 'stable28', 'stable27', 'stable26', 'stable25', 'stable24', 'stable23', 'stable22']
|
||||
|
||||
name: update-ca-certificate-bundle-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
|
||||
- name: Download CA certificate bundle from curl
|
||||
run: curl --etag-compare build/ca-bundle-etag.txt --etag-save build/ca-bundle-etag.txt --output resources/config/ca-bundle.crt https://curl.se/ca/cacert.pem
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(security): Update CA certificate bundle'
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
|
||||
signoff: true
|
||||
branch: 'automated/noid/${{ matrix.branches }}-update-ca-cert-bundle'
|
||||
title: '[${{ matrix.branches }}] fix(security): Update CA certificate bundle'
|
||||
body: |
|
||||
Auto-generated update of CA certificate bundle from [https://curl.se/docs/caextract.html](https://curl.se/docs/caextract.html)
|
||||
labels: |
|
||||
dependencies
|
||||
3. to review
|
||||
reviewers: ChristophWurst, miaulalala, nickvergessen
|
||||
@@ -1,52 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Update code signing revocation list
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
update-code-signing-crl:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['master', 'stable33', 'stable32', 'stable31', 'stable30', 'stable29', 'stable28', 'stable27', 'stable26', 'stable25', 'stable24', 'stable23', 'stable22']
|
||||
|
||||
name: update-code-signing-crl-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
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@98357b18bf14b5342f975ff684046ec3b2a07725
|
||||
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
|
||||
@@ -1,128 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: Update min supported desktop version
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 * * 1"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
update-minimum-supported-desktop-version:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Download desktop client version file from 5 years ago
|
||||
id: download
|
||||
run: |
|
||||
# Create a temporary directory for the downloaded file
|
||||
mkdir -p tmp
|
||||
|
||||
# Download the version file from the provided URL
|
||||
VERSION_FILE_URL="https://github.com/nextcloud/desktop/raw/@%7B5.years.ago%7D/VERSION.cmake"
|
||||
|
||||
# Download the file using curl
|
||||
curl -s -L "$VERSION_FILE_URL" -o tmp/VERSION.cmake
|
||||
|
||||
if [ ! -f "tmp/VERSION.cmake" ]; then
|
||||
echo "Failed to download VERSION.cmake file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "VERSION_FILE=tmp/VERSION.cmake" >> $GITHUB_OUTPUT
|
||||
echo "Downloaded version file to tmp/VERSION.cmake"
|
||||
|
||||
- name: Extract version info
|
||||
id: extract-version
|
||||
run: |
|
||||
# Path to the downloaded version file
|
||||
VERSION_FILE="${{ steps.download.outputs.VERSION_FILE }}"
|
||||
|
||||
# Extract major, minor, patch versions
|
||||
MAJOR=$(grep "VERSION_MAJOR" $VERSION_FILE | grep -o '[0-9]\+')
|
||||
MINOR=$(grep "VERSION_MINOR" $VERSION_FILE | grep -o '[0-9]\+')
|
||||
PATCH=$(grep "VERSION_PATCH" $VERSION_FILE | grep -o '[0-9]\+')
|
||||
|
||||
# Construct the version string
|
||||
VERSION="$MAJOR.$MINOR.$PATCH"
|
||||
|
||||
# Validate format: xx.xx.xx where each x is a digit
|
||||
if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "Error: Extracted version '$VERSION' does not match required format (xx.xx.xx)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf tmp
|
||||
|
||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Extracted Version: $VERSION"
|
||||
|
||||
- name: Update files with new version ${{ steps.extract-version.outputs.VERSION }}
|
||||
id: update-files
|
||||
run: |
|
||||
VERSION="${{ steps.extract-version.outputs.VERSION }}"
|
||||
|
||||
# Define the files to update
|
||||
DAV_FILE="apps/dav/lib/Connector/Sabre/BlockLegacyClientPlugin.php"
|
||||
CONFIG_FILE="config/config.sample.php"
|
||||
|
||||
# Check if files exist
|
||||
if [ ! -f "$DAV_FILE" ]; then
|
||||
echo "Error: DAV file not found at $DAV_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
echo "Error: Config file not found at $CONFIG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update the DAV file - replace the version in the specific line
|
||||
sed -i "s/\('minimum\.supported\.desktop\.version', '\)[0-9]\+\.[0-9]\+\.[0-9]\+'/\1$VERSION'/g" "$DAV_FILE"
|
||||
echo "Updated $DAV_FILE"
|
||||
|
||||
# Update the config sample file
|
||||
PREV_VERSION=$(grep "'minimum.supported.desktop.version'" "$CONFIG_FILE" | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
sed -i "s/Defaults to \`\`$PREV_VERSION\`\`/Defaults to \`\`$VERSION\`\`/" "$CONFIG_FILE"
|
||||
sed -i "s/'minimum\.supported\.desktop\.version' => '[0-9]\+\.[0-9]\+\.[0-9]\+'/'minimum.supported.desktop.version' => '$VERSION'/g" "$CONFIG_FILE"
|
||||
echo "Updated $CONFIG_FILE"
|
||||
|
||||
# Check if any changes were made
|
||||
if [ -n "$(git diff "$DAV_FILE" "$CONFIG_FILE")" ]; then
|
||||
echo "CHANGES_MADE=true" >> $GITHUB_OUTPUT
|
||||
echo "Changes were made to the files"
|
||||
git diff "$DAV_FILE" "$CONFIG_FILE"
|
||||
else
|
||||
echo "CHANGES_MADE=false" >> $GITHUB_OUTPUT
|
||||
echo "No changes were needed (versions might already be up to date)"
|
||||
fi
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725
|
||||
if: steps.update-files.outputs.CHANGES_MADE == 'true'
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: "chore: Update minimum supported desktop version"
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
|
||||
signoff: true
|
||||
branch: "automated/noid/${{ matrix.branches }}-update-min-supported-desktop-version"
|
||||
title: "chore: Update minimum supported desktop version to ${{ steps.extract-version.outputs.VERSION }}"
|
||||
base: "master"
|
||||
body: |
|
||||
Auto-generated update of the minimum supported desktop version using last supported version.
|
||||
https://github.com/nextcloud/desktop/blob/@%7B5.years.ago%7D/VERSION.cmake
|
||||
labels: |
|
||||
client: 💻 desktop
|
||||
automated
|
||||
3. to review
|
||||
reviewers: '@nextcloud/desktop'
|
||||
@@ -1,69 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Update PRs titles on stable branches
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, edited]
|
||||
branches:
|
||||
- "stable*"
|
||||
|
||||
concurrency:
|
||||
group: stable-pr-title-${{ github.event.pull_request.number }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
update-pr-title:
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
pull-requests: write
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Wait for potential title edits
|
||||
run: sleep 15
|
||||
|
||||
- name: Get PR details and update title
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { data: pr } = await github.rest.pulls.get({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.issue.number,
|
||||
});
|
||||
|
||||
const baseBranch = pr.base.ref;
|
||||
const currentTitle = pr.title;
|
||||
|
||||
// Check if this is a stable branch
|
||||
// Should not happen as we only trigger on stable* branches 🤷♀️
|
||||
if (!baseBranch.startsWith('stable')) {
|
||||
console.log(`Not a stable branch: ${baseBranch}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const prefix = `[${baseBranch}]`;
|
||||
|
||||
// Check if title already has the correct prefix and no other stable tags
|
||||
const correctTagRegex = new RegExp(`^\\[${baseBranch}\\]\\s*`);
|
||||
const hasOtherStableTags = /\[stable[\d.]*\]/.test(currentTitle.replace(correctTagRegex, ''));
|
||||
|
||||
if (correctTagRegex.test(currentTitle) && !hasOtherStableTags) {
|
||||
console.log(`Title already has correct prefix only: ${currentTitle}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove all stable tags and add the correct one
|
||||
const cleanTitle = currentTitle.replace(/\[stable[\d.]*\]\s*/g, '').trim();
|
||||
const newTitle = `${prefix} ${cleanTitle}`;
|
||||
|
||||
console.log(`Updating title from: "${currentTitle}" to: "${newTitle}"`);
|
||||
|
||||
await github.rest.pulls.update({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.issue.number,
|
||||
title: newTitle,
|
||||
});
|
||||
+19
-125
@@ -1,67 +1,21 @@
|
||||
# SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-FileCopyrightText: 2011-2016 ownCloud contributors
|
||||
# SPDX-FileCopyrightText: 2010 ownCloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# the default generated dir + db file
|
||||
/data
|
||||
/config/config.php
|
||||
/config/*.config.php
|
||||
/config/mimetype*.json
|
||||
/config/mount.php
|
||||
/apps/inc.php
|
||||
/assets
|
||||
/.htaccess
|
||||
node_modules/
|
||||
/translationfiles
|
||||
/translationtool.phar
|
||||
data
|
||||
owncloud
|
||||
config/config.php
|
||||
config/mount.php
|
||||
apps/inc.php
|
||||
3rdparty
|
||||
|
||||
# ignore all apps except core ones
|
||||
/apps*/*
|
||||
!/apps/cloud_federation_api
|
||||
!/apps/comments
|
||||
!/apps/contactsinteraction
|
||||
!/apps/dashboard
|
||||
!/apps/dav
|
||||
!/apps/files
|
||||
!/apps/federation
|
||||
!/apps/federatedfilesharing
|
||||
!/apps/sharebymail
|
||||
!/apps/encryption
|
||||
!/apps/files_external
|
||||
!/apps/files_reminders
|
||||
!/apps/files_sharing
|
||||
!/apps/files_trashbin
|
||||
!/apps/files_versions
|
||||
!/apps/lookup_server_connector
|
||||
!/apps/user_ldap
|
||||
!/apps/oauth2
|
||||
!/apps/profile
|
||||
!/apps/provisioning_api
|
||||
!/apps/settings
|
||||
!/apps/systemtags
|
||||
!/apps/testing
|
||||
!/apps/admin_audit
|
||||
!/apps/updatenotification
|
||||
!/apps/theming
|
||||
!/apps/twofactor_backupcodes
|
||||
!/apps/user_status
|
||||
!/apps/weather_status
|
||||
!/apps/webhook_listeners
|
||||
!/apps/workflowengine
|
||||
/apps/files_external/3rdparty/irodsphp/PHPUnitTest
|
||||
/apps/files_external/3rdparty/irodsphp/web
|
||||
/apps/files_external/3rdparty/irodsphp/prods/test
|
||||
/apps/files_external/3rdparty/irodsphp/prods/tutorials
|
||||
/apps/files_external/3rdparty/irodsphp/prods/test*
|
||||
/apps/files_external/tests/config.*.php
|
||||
|
||||
# ignore themes except the example and the README
|
||||
/themes/*
|
||||
!/themes/example
|
||||
!/themes/README
|
||||
|
||||
# Love to people that develop the updater
|
||||
/updater
|
||||
apps/*
|
||||
!apps/files
|
||||
!apps/files_encryption
|
||||
!apps/files_external
|
||||
!apps/files_sharing
|
||||
!apps/files_trashbin
|
||||
!apps/files_versions
|
||||
!apps/user_ldap
|
||||
!apps/user_webdavauth
|
||||
|
||||
# just sane ignores
|
||||
.*.sw[po]
|
||||
@@ -78,8 +32,6 @@ CVS/*
|
||||
.svn/*
|
||||
RCS/*
|
||||
*.backup*
|
||||
.php_cs.cache
|
||||
.php-cs-fixer.cache
|
||||
|
||||
# kdevelop
|
||||
.kdev
|
||||
@@ -93,16 +45,11 @@ RCS/*
|
||||
.project
|
||||
.settings
|
||||
|
||||
# netbeans
|
||||
# netbeans
|
||||
nbproject
|
||||
|
||||
# phpStorm
|
||||
.idea
|
||||
*.iml
|
||||
|
||||
# vscode
|
||||
.vscode
|
||||
*.code-workspace
|
||||
|
||||
# geany
|
||||
*.geany
|
||||
@@ -113,10 +60,7 @@ nbproject
|
||||
|
||||
# vim ex mode
|
||||
.vimrc
|
||||
|
||||
# ack(-grep)
|
||||
.ackrc
|
||||
|
||||
|
||||
# Mac OS
|
||||
.DS_Store
|
||||
|
||||
@@ -124,58 +68,8 @@ nbproject
|
||||
.well-known
|
||||
/.buildpath
|
||||
|
||||
# Tests
|
||||
/tests/phpunit.xml
|
||||
|
||||
# nodejs
|
||||
/build/bin
|
||||
/build/lib/
|
||||
/build/integration/output/
|
||||
/build/integration/phpserver.log
|
||||
/npm-debug.log
|
||||
/PhantomJS_*
|
||||
|
||||
# puphpet
|
||||
puphpet
|
||||
|
||||
# vagrant
|
||||
.vagrant
|
||||
Vagrantfile
|
||||
|
||||
# Tests - auto-generated files
|
||||
/data-autotest
|
||||
/results.sarif
|
||||
/tests/.phpunit.cache
|
||||
/tests/.phpunit.result.cache
|
||||
#tests - autogenerated filed
|
||||
data-autotest
|
||||
/tests/coverage*
|
||||
/tests/css
|
||||
/tests/karma-coverage
|
||||
/tests/autoconfig*
|
||||
/tests/autotest*
|
||||
/tests/data/lorem-copy.txt
|
||||
/tests/data/testimage-copy.png
|
||||
/tests/ui-regression/out/
|
||||
/tests/ui-regression/node_modules/
|
||||
/tests/ui-regression/package-lock.json
|
||||
/config/config-autotest-backup.php
|
||||
/config/autoconfig.php
|
||||
clover.xml
|
||||
/coverage
|
||||
|
||||
# Tests - dependencies
|
||||
tests/acceptance/vendor/
|
||||
|
||||
composer.phar
|
||||
/lib/composer/bin
|
||||
/lib/composer/bamarni
|
||||
/vendor-bin/**/vendor
|
||||
|
||||
./.htaccess
|
||||
core/js/mimetypelist.js
|
||||
|
||||
# Tests - cypress
|
||||
cypress/downloads
|
||||
cypress/snapshots
|
||||
cypress/videos
|
||||
|
||||
/.direnv
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
[submodule "3rdparty"]
|
||||
path = 3rdparty
|
||||
url = https://github.com/nextcloud/3rdparty.git
|
||||
@@ -1,201 +1,36 @@
|
||||
<IfModule mod_headers.c>
|
||||
<IfModule mod_setenvif.c>
|
||||
<IfModule mod_fcgid.c>
|
||||
SetEnvIfNoCase ^Authorization$ "(.+)" XAUTHORIZATION=$1
|
||||
RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION
|
||||
</IfModule>
|
||||
<IfModule mod_proxy_fcgi.c>
|
||||
SetEnvIfNoCase Authorization "(.+)" HTTP_AUTHORIZATION=$1
|
||||
</IfModule>
|
||||
<IfModule mod_lsapi.c>
|
||||
SetEnvIfNoCase ^Authorization$ "(.+)" XAUTHORIZATION=$1
|
||||
RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_env.c>
|
||||
# Add security and privacy related headers
|
||||
# Avoid doubled headers by unsetting headers in "onsuccess" table,
|
||||
# then add headers to "always" table: https://github.com/nextcloud/server/pull/19002
|
||||
|
||||
<If "%{REQUEST_URI} =~ m#/login$#">
|
||||
# Only on the login page we need any Origin or Referer header set.
|
||||
Header onsuccess unset Referrer-Policy
|
||||
Header always set Referrer-Policy "same-origin"
|
||||
</If>
|
||||
<Else>
|
||||
Header onsuccess unset Referrer-Policy
|
||||
Header always set Referrer-Policy "no-referrer"
|
||||
</Else>
|
||||
|
||||
Header onsuccess unset X-Content-Type-Options
|
||||
Header always set X-Content-Type-Options "nosniff"
|
||||
|
||||
Header onsuccess unset X-Frame-Options
|
||||
Header always set X-Frame-Options "SAMEORIGIN"
|
||||
|
||||
Header onsuccess unset X-Permitted-Cross-Domain-Policies
|
||||
Header always set X-Permitted-Cross-Domain-Policies "none"
|
||||
|
||||
Header onsuccess unset X-Robots-Tag
|
||||
Header always set X-Robots-Tag "noindex, nofollow"
|
||||
|
||||
SetEnv modHeadersAvailable true
|
||||
</IfModule>
|
||||
|
||||
# Add cache control for static resources
|
||||
<FilesMatch "\.(css|js|mjs|svg|gif|png|jpg|webp|ico|wasm|tflite)$">
|
||||
<If "%{QUERY_STRING} =~ /(^|&)v=/">
|
||||
Header set Cache-Control "max-age=15778463, immutable"
|
||||
</If>
|
||||
<Else>
|
||||
Header set Cache-Control "max-age=15778463"
|
||||
</Else>
|
||||
</FilesMatch>
|
||||
|
||||
# Let browsers cache OTF and WOFF files for a week
|
||||
<FilesMatch "\.(otf|woff2?)$">
|
||||
Header set Cache-Control "max-age=604800"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_php.c>
|
||||
php_value default_charset 'UTF-8'
|
||||
php_value output_buffering 0
|
||||
<IfModule mod_env.c>
|
||||
SetEnv htaccessWorking true
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_mime.c>
|
||||
AddType image/svg+xml svg svgz
|
||||
AddType application/wasm wasm
|
||||
AddEncoding gzip svgz
|
||||
# Serve ESM javascript files (.mjs) with correct mime type
|
||||
AddType text/javascript js mjs
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_dir.c>
|
||||
DirectoryIndex index.php index.html
|
||||
</IfModule>
|
||||
|
||||
<IfModule pagespeed_module>
|
||||
ModPagespeed Off
|
||||
</IfModule>
|
||||
|
||||
#############
|
||||
#### Rewrites
|
||||
#############
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
|
||||
##
|
||||
## Rule: Workaround for WebDAV with apache+php-cgi
|
||||
##
|
||||
## Context:
|
||||
## - Sets the environment variable `HTTP_AUTHORIZATION` to the value of the `Authorization` request header
|
||||
## - Always executed before and along with other rules (no `L` used)
|
||||
## - XXX: *May* be replaced with an equivalent SetEnvIf in theory
|
||||
## - XXX: SetEnvIf approach is already in use above for mod_proxy_cgi / mod_lsapi / mod_fcgid
|
||||
##
|
||||
|
||||
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
##
|
||||
## Rule: Workaround for WebDAV with MS DavClnt
|
||||
##
|
||||
## Context:
|
||||
## - DavClnt attempts an OPTIONS request against `/` instead of the specified endpoint
|
||||
## - Redirects the client to the endpoint rather than the login page (which confuses DavClnt)
|
||||
##
|
||||
|
||||
RewriteCond %{HTTP_USER_AGENT} DavClnt
|
||||
RewriteRule ^$ /remote.php/webdav/ [L,R=302]
|
||||
|
||||
##
|
||||
## Rule: Map the RFC 8615 / RFC 6764 compliant well-known URI for CardDAV to our Remote DAV endpoint
|
||||
##
|
||||
|
||||
RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
|
||||
|
||||
##
|
||||
## Rule: Map the RFC 8615 / RFC 6764 compliant well-known URI for CalDAV to our Remote DAV endpoint
|
||||
##
|
||||
|
||||
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
|
||||
|
||||
##
|
||||
## Rule: Map /remote* --> /remote.php* including the query string
|
||||
##
|
||||
## Context:
|
||||
## - XXX: `QSA` seems unnecessary (no-op) here (query string is passed by default when the replacement URI doesn't contain a query string)
|
||||
## - XXX: Is this even used anymore? Seems a relic from <NC12
|
||||
##
|
||||
|
||||
RewriteRule ^remote/(.*) remote.php [QSA,L]
|
||||
|
||||
##
|
||||
## Rule: Prevent access to non-public files
|
||||
##
|
||||
|
||||
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
|
||||
|
||||
##
|
||||
## Rule: Maps most RFC 8615 compliant well-known URIs to our main frontend controller (/index.php) by default
|
||||
##
|
||||
## Context:
|
||||
## - Intentionally excludes URIs used for HTTPS certificate verifications
|
||||
## - RFC 8555 / ACME HTTP Challenges (acme-challenge)
|
||||
## - File-based Validations (pki-validation)
|
||||
## - XXX: `QSA` seems unnecessary (no-op) here (query string is passed by default when the replacement URI doesn't contain a query string)
|
||||
## - XXX: Sometimes we are using `/index.php` and other times `index.php` as our replacement URI; this may be incorrect
|
||||
##
|
||||
|
||||
RewriteRule ^\.well-known/(?!acme-challenge|pki-validation) /index.php [QSA,L]
|
||||
|
||||
##
|
||||
## Rule: Map the ocm-provider handling to our main frontend controller (/index.php)
|
||||
##
|
||||
## Context:
|
||||
## - XXX: `QSA` seems unnecessary (no-op) here (query string is passed by default when the replacement URI doesn't contain a query string)
|
||||
## - XXX: Sometimes we are using `/index.php` and other times `index.php` as our replacement URI; this may be incorrect
|
||||
##
|
||||
|
||||
RewriteRule ^ocm-provider/?$ index.php [QSA,L]
|
||||
|
||||
##
|
||||
## Rule: Prevent access to more non-public files
|
||||
##
|
||||
## Context:
|
||||
## - XXX It may make sense to merge some of these with the others (i.e. the ones that don't need to be last)
|
||||
##
|
||||
|
||||
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 mod_fcgid.c>
|
||||
<IfModule mod_setenvif.c>
|
||||
SetEnvIfNoCase Transfer-Encoding "chunked" proxy-sendcl=1
|
||||
<IfModule mod_headers.c>
|
||||
SetEnvIfNoCase ^Authorization$ "(.+)" XAUTHORIZATION=$1
|
||||
RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION
|
||||
</IfModule>
|
||||
|
||||
# Apache disabled the sending of the server-side content-length header
|
||||
# in their 2.4.59 patch updated which breaks some use-cases in Nextcloud.
|
||||
# Setting ap_trust_cgilike_cl allows to bring back the usual behaviour.
|
||||
# See https://bz.apache.org/bugzilla/show_bug.cgi?id=68973
|
||||
|
||||
<IfModule mod_env.c>
|
||||
SetEnv ap_trust_cgilike_cl
|
||||
</IfModule>
|
||||
|
||||
</IfModule>
|
||||
ErrorDocument 403 /core/templates/403.php
|
||||
ErrorDocument 404 /core/templates/404.php
|
||||
<IfModule mod_php5.c>
|
||||
php_value upload_max_filesize 513M
|
||||
php_value post_max_size 513M
|
||||
php_value memory_limit 512M
|
||||
<IfModule env_module>
|
||||
SetEnv htaccessWorking true
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
RewriteRule ^.well-known/host-meta /public.php?service=host-meta [QSA,L]
|
||||
RewriteRule ^.well-known/host-meta.json /public.php?service=host-meta-json [QSA,L]
|
||||
RewriteRule ^.well-known/carddav /remote.php/carddav/ [R]
|
||||
RewriteRule ^.well-known/caldav /remote.php/caldav/ [R]
|
||||
RewriteRule ^apps/calendar/caldav.php remote.php/caldav/ [QSA,L]
|
||||
RewriteRule ^apps/contacts/carddav.php remote.php/carddav/ [QSA,L]
|
||||
RewriteRule ^apps/([^/]*)/(.*\.(css|php))$ index.php?app=$1&getfile=$2 [QSA,L]
|
||||
RewriteRule ^remote/(.*) remote.php [QSA,L]
|
||||
</IfModule>
|
||||
<IfModule mod_mime.c>
|
||||
AddType image/svg+xml svg svgz
|
||||
AddEncoding gzip svgz
|
||||
</IfModule>
|
||||
AddDefaultCharset utf-8
|
||||
Options -Indexes
|
||||
|
||||
Generated
-52
@@ -1,52 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectCodeStyleSettingsManager">
|
||||
<option name="PER_PROJECT_SETTINGS">
|
||||
<value>
|
||||
<option name="RIGHT_MARGIN" value="80" />
|
||||
<PHPCodeStyleSettings>
|
||||
<option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
|
||||
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
|
||||
<option name="LOWER_CASE_NULL_CONST" value="true" />
|
||||
</PHPCodeStyleSettings>
|
||||
<XML>
|
||||
<option name="XML_KEEP_BLANK_LINES" value="1" />
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="CSS">
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="SPACE_BEFORE_METHOD_PARENTHESES" value="true" />
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="PHP">
|
||||
<option name="CLASS_BRACE_STYLE" value="1" />
|
||||
<option name="METHOD_BRACE_STYLE" value="1" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="XML">
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</value>
|
||||
</option>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
|
||||
Generated
-2
@@ -1,2 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2014 ownCloud, Inc.
|
||||
SPDX-License-Identifier: AGPL-3.0-only
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"esversion": 11,
|
||||
"camelcase": true,
|
||||
"eqeqeq": true,
|
||||
"immed": true,
|
||||
"latedef": false,
|
||||
"noarg": true,
|
||||
"nonbsp": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"trailing": true,
|
||||
"maxparams": 5,
|
||||
"curly": true,
|
||||
"jquery": true,
|
||||
"indent": 4,
|
||||
"browser": true,
|
||||
"laxbreak": true,
|
||||
"asi": true,
|
||||
"globals": {
|
||||
"console": true,
|
||||
"it": true,
|
||||
"xit": true,
|
||||
"expect": true,
|
||||
"describe": true,
|
||||
"beforeEach": true,
|
||||
"afterEach": true,
|
||||
"sinon": true,
|
||||
"fakeServer": true,
|
||||
"_": true,
|
||||
"OC": true,
|
||||
"OCA": true,
|
||||
"OCP": true,
|
||||
"t": true,
|
||||
"n": true,
|
||||
"escapeHTML": true,
|
||||
"Promise": true
|
||||
}
|
||||
}
|
||||
@@ -1,434 +0,0 @@
|
||||
Aamir Khan <ak4u2009@gmail.com>
|
||||
Aaron Reichman <areichman.kde@gmail.com>
|
||||
Adam Williamson <awilliam@redhat.com>
|
||||
Aditya Patawari <adimania@gmail.com>
|
||||
Administrator <Administrator@WINDOWS-2012>
|
||||
adrien <adrien.waksberg@believedigital.com>
|
||||
Aldo "xoen" Giambelluca <xoen@xoen.org>
|
||||
Alessandro Cosentino <cosenal@gmail.com>
|
||||
Alexander Bergolth <leo@strike.wu.ac.at> root <leo@strike.wu.ac.at>
|
||||
Alexander Bogdanov <syn@li.ru>
|
||||
Alexander Wigen <alex@wigen.net>
|
||||
Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
|
||||
Anders Nor Berle <anders@berle.cc>
|
||||
Andreas Fischer <bantu@owncloud.com>
|
||||
Andreas Schönebeck <aschoenebeck@web.de>
|
||||
Andreas Ergenzinger <andreas.ergenzinger@gmx.de> AndreasErgenzinger <andreas.ergenzinger@gmx.de>
|
||||
Andrew Brown <andrew@casabrown.com>
|
||||
André Gaul <gaul@web-yard.de>
|
||||
Arthur Schiwon <blizzz@arthur-schiwon.de> Arthur Schiwon <blizzz@owncloud.com>
|
||||
Arthur Schiwon <blizzz@arthur-schiwon.de> blizzz <blizzz@owncloud.com>
|
||||
Artur Duque de Souza <asouza@kde.org>
|
||||
Axel Roenn <axel@mpim-bonn.mpg.de>
|
||||
Bagera <victor@baquero-wihlborg.se>
|
||||
Bart Visscher <bartv@thisnet.nl> Bart Visscher <bart@thisnet.nl>
|
||||
Bart Visscher <bartv@thisnet.nl> Bart Visscher <github@thisnet.nl>
|
||||
Bartek Przybylski <bart.p.pl@gmail.com>
|
||||
Bastien Ho <bastienho@urbancube.fr>
|
||||
ben-denham <bend@catalyst.net.nz>
|
||||
Benjamin Diele <benjamin@diele.be>
|
||||
Benjamin Liles <benliles@arch.tamu.edu>
|
||||
Bernhard Posselt <dev@bernhard-posselt.com> Bernhard Posselt <nukeawhale@gmail.com>
|
||||
Bernhard Posselt <dev@bernhard-posselt.com> Bernhard Posselt <Raydiation@users.noreply.github.com>
|
||||
Bernhard Posselt <dev@bernhard-posselt.com> Bernhard Posselt <BernhardPosselt@users.noreply.github.com>
|
||||
Bernhard Reiter <ockham@raz.or.at>
|
||||
Birk Borkason <daniel.niccoli@gmail.com>
|
||||
Björn Schießle <bjoern@schiessle.org> Bjoern Schiessle <schiesbn@woody.(none)>
|
||||
Björn Schießle <bjoern@schiessle.org> Björn Schießle <schiessle@owncloud.com>
|
||||
Björn Schießle <bjoern@schiessle.org> Björn Schießle <schiesbn@potato.(none)>
|
||||
Björn Schießle <bjoern@schiessle.org> Björn Schiessle <schiessle@owncloud.com>
|
||||
Björn Schießle <bjoern@schiessle.org> Bjoern Schießle <schiessle@owncloud.com>
|
||||
Björn Schießle <bjoern@schiessle.org> Bjoern Schiessle <schiessle@owncloud.com>
|
||||
Björn Schießle <bjoern@schiessle.org> Björn Schießle <schiessle@owncloud.com>
|
||||
BlackEagle <ike.devolder@gmail.com>
|
||||
Boris Rybalkin <ribalkin@gmail.com>
|
||||
Borjan Tchakaloff <borjan@tchakaloff.fr>
|
||||
Brice Maron <brice@bmaron.net>
|
||||
brumsel <brumsel@losecatcher.de> brumsoel <brumsel@losecatcher.de>
|
||||
Byron Marohn <combustible@live.com> eMerzh <brice@bmaron.net>
|
||||
Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
|
||||
Carla Schroder <carla@owncloud.com>
|
||||
Carlos Cerrillo <ccerrillo@gmail.com>
|
||||
cbhp <cbhp@users.noreply.github.com>
|
||||
cbojar <chris@cbojar.net>
|
||||
Ceri Davies <ceri@submonkey.net>
|
||||
cetra3 <peter@parashift.com.au>
|
||||
Charles-Edouard Coste <contact@ccoste.fr>
|
||||
CharlyCoste <contact@ccoste.fr>
|
||||
chli1 <chli1@users.noreply.github.com>
|
||||
Chris Kankiewicz <Chris@ChrisKankiewicz.com>
|
||||
Chris LeBlanc <chris@leblaaanc.com>
|
||||
Chris Wilson <chris+github@qwirx.com>
|
||||
Christian Berendt <berendt@b1-systems.de>
|
||||
Christian Kampka <christian@kampka.net>
|
||||
Christian Koch <koch.chris@gmail.com>
|
||||
Christian Reiner <github@christian-reiner.info> Christian Reiner <arkascha@balder.site>
|
||||
Christoph Wurst <christoph@winzerhof-wurst.at> Christoph Wurst <ChristophWurst@users.noreply.github.com>
|
||||
Christoph Wurst <christoph@winzerhof-wurst.at> Christoph Wurst <christoph@owncloud.com>
|
||||
Christopher Bunn <b11.chris@gmail.com>
|
||||
Christopher Schäpers <kondou@ts.unde.re> Christopher <kondou@ts.unde.re>
|
||||
Christopher Schäpers <kondou@ts.unde.re> kondou <kondou@ts.unde.re>
|
||||
Christopher Schäpers <kondou@ts.unde.re> root <kondou@ts.unde.re>
|
||||
Christopher T. Johnson <ctjctj@gmail.com>
|
||||
Clark Tomlinson <fallen013@gmail.com>
|
||||
Cloud Dumper <clouddumper@gmail.com>
|
||||
cmeh <cmeh@users.noreply.github.com>
|
||||
Cornelius Schumacher <schumacher@kde.org>
|
||||
Craig Morrissey <craig@owncloud.com>
|
||||
Côme BERNIGAUD <come.bernigaud@laposte.net>
|
||||
dampfklon <me@dampfklon.de>
|
||||
Dan Bartram <daneybartram@gmail.com>
|
||||
Dan Callahan <dan.callahan@gmail.com>
|
||||
Dan Jones <dan@danneh.org>
|
||||
Daniel <daniel@mars.(none)>
|
||||
Daniel Hansson <enoch85@gmail.com>
|
||||
Daniel Kesselberg <mail@danielkesselberg.de> kesselb <mail@danielkesselberg.de>
|
||||
Daniel Köb <daniel.koeb@peony.at>
|
||||
Daniel Molkentin <daniel@molkentin.de>
|
||||
Daniele E. Domenichelli <daniele.domenichelli@gmail.com>
|
||||
David <davidventura>
|
||||
David Iwanowitsch <david+git@unclouded.de> David Iwanowitsch <diw@gmx.de>
|
||||
David Prévot <taffit@debian.org>
|
||||
David Reagan <reagand@lanecc.edu>
|
||||
davidak <davidak@gmx.de>
|
||||
davidgumberg <davidnoizgumberg@gmail.com>
|
||||
Dawid Opis <ncore@ncore.com.pl>
|
||||
Deepak Mittal <dpac.mittal2@gmail.com>
|
||||
DeLtAfOx <edo@ravers.it>
|
||||
denis-b <denis.bonnenfant@diderot.org>
|
||||
Der-Jan <de@r-jan.de>
|
||||
derkostka <sebastian.kostka@gmail.com>
|
||||
Diederik de Haas <diederik@cknow.org>
|
||||
Dominik Schmidt <dev@dominik-schmidt.de>
|
||||
Donald Buczek <buczek@molgen.mpg.de>
|
||||
Donquixote <marjunebatac@gmail.com> Donquixote <marjunebatac@gmailcom>
|
||||
Doug Neiner <doug@pixelgraphics.us>
|
||||
drarko <drarko@users.noreply.github.com>
|
||||
dratini0 <dratini0@gmail.com>
|
||||
Duane Johnson <duane.johnson@gmail.com>
|
||||
eduardo <eduardo@vnexu.net>
|
||||
elchi <niklas1b@yahoo.de>
|
||||
Elias Probst <mail@eliasprobst.eu>
|
||||
Florian <ente@baer.rwth-aachen.de> ente <ente@baer.rwth-aachen.de>
|
||||
Erik Sargent <esthepiking@gmail.com>
|
||||
Evgeni Golov <evgeni@golov.de>
|
||||
fabian <fabian@web2.0-apps.de>
|
||||
Fabian Henze <flyser42@gmx.de>
|
||||
Felix Böhm <felixboehm@gmx.de> felixboehm <felixboehm@gmx.de>
|
||||
Felix Eckhofer <felix@eckhofer.com>
|
||||
Felix Moeller <mail@felixmoeller.de>
|
||||
Felix Niklas <mrflix@gmail.com>
|
||||
Fernando Rodriguez Sela <frsela@tid.es>
|
||||
fibsifan <fi@volans.uberspace.de>
|
||||
Florian Hülsmann <fh@cbix.de>
|
||||
Florian Jacob <fjacob@lavabit.com>
|
||||
Florian Preinstorfer <nblock@archlinux.us>
|
||||
Florian Pritz <bluewind@xinu.at>
|
||||
Florian Scholz <FlorianScholz@bgstyle.de> Florian Scholz <work@bgstyle.de>
|
||||
Florian Vichot <florian.vichot@gmail.com>
|
||||
Florin Peter <github@florin-peter.de> Florin Peter <fp@datawerk.de>
|
||||
Florin Peter <github@florin-peter.de> FlorinPeter <github@florin-peter.de>
|
||||
Francesco Piraneo G. <fpiraneo@iface.ch>
|
||||
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@dev.(none)>
|
||||
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@devel.(none)>
|
||||
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@oc.(none)>
|
||||
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@owncloud.org>
|
||||
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <karlitschek@kde.org>
|
||||
François Kubler <francois@kubler.org>
|
||||
Frédéric Fortier <frederic.fortier@oronospolytechnique.com> Frédéric Fortier <frederic.fortier@polymtl.ca>
|
||||
Frederik Gladhorn <gladhorn@kde.org>
|
||||
Gadzy <dev@gadzy.fr>
|
||||
ganomi <ganomi@gmail.com>
|
||||
Gaël Beaudoin <gaboo@home.gaboo.org>
|
||||
geez0x1 <geez0x1@users.noreply.github.com>
|
||||
gekmihesg <markus@gekmihesg.de>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <dev@georgswebsite.de>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <developer@georgehrke.com>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <georg.stefan.germany@googlemail.com>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <ownclouddev@georgswebsite.de>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <devgeorg@ownCloud.com>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <georg@ownCloud.com>
|
||||
Georg Ehrke <oc.list@georgehrke.com> Georg Ehrke <georg@owncloud.com>
|
||||
Golnaz Nilieh <g382nilieh@gmail.com>
|
||||
Grundik <grundik@ololo.cc>
|
||||
Guillaume AMAT <guillaume.amat@informatique-libre.com>
|
||||
Hans Bakker <hansmbakker@gmail.com>
|
||||
helix84 <helix84@centrum.sk>
|
||||
Hendrik Langer <hendrik.langer@gmx.de>
|
||||
Henning Becker <h.becker@oedenstockach.de>
|
||||
Henning Oschwald <h.oschwald@gmx.de>
|
||||
Henrik Kjölhede <hkjolhede@gmail.com>
|
||||
herbrechtsmeier <stefan@herbrechtsmeier.net>
|
||||
hkjolhede <hkjolhede@gmail.com>
|
||||
IchEben <andreas@reichster.de>
|
||||
ideaship <ideaship@users.noreply.github.com>
|
||||
Ignacio Daniel Rostagno <ignaciorostagno@vijona.com.ar>
|
||||
infoneo <infoneo@yahoo.pl>
|
||||
Insanemal <insanemal@gmail.com>
|
||||
Tobias Perschon <tobias@perschon.at> Tobias Perschon <tofuSCHNITZEL@users.noreply.github.com>
|
||||
Tobias Ramforth <tobias@ramforth.com> Tobias Ramforth <tobias.ramforth@udo.edu>
|
||||
Tobias Ramforth <tobias@ramforth.com> irgsmirx <tobias.ramforth@udo.edu>
|
||||
Isaac Rosenberg <irosenb7@gmail.com>
|
||||
itheiss <ingo.theiss@i-matrixx.de>
|
||||
j-ed <juergen@eisfair.org>
|
||||
Jake Wilson <jakew@huebnerpetersen.com>
|
||||
Jakob Sack <mail@jakobsack.de> Jakob Sack <kde@jakobsack.de>
|
||||
jamesryanbell <james@james-bell.co.uk>
|
||||
Jamie McClelland <jm@mayfirst.org>
|
||||
Jan-Christoph Borchardt <hey@jancborchardt.net> Jan-Christoph Borchardt <jan@unhosted.org>
|
||||
Jan-Christoph Borchardt <hey@jancborchardt.net> Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>
|
||||
jbtbnl <jbtbnl@users.noreply.github.com>
|
||||
Jean-Louis Dupond <jean-louis@dupond.be>
|
||||
Jenkins for ownCloud <owncloud-bot@tmit.eu> Jenkins for ownCloud <thomas.mueller@tmit.eu>
|
||||
Jens-Christian Fischer <jens-christian.fischer@switch.ch>
|
||||
Jernej Virag <jernej.virag@gmail.com>
|
||||
Jesus Macias Portela <jesus.macias.portela@gmail.com>
|
||||
Jesús Macias <jmacias@solidgear.es> Jesus Macias <jmacias@full-on-net.com>
|
||||
jknockaert <jasper@knockaert.nl>
|
||||
Joan <aseques@gmail.com>
|
||||
Joar Wandborg <git@wandborg.com>
|
||||
Joas Schilling <coding@schilljs.com> Joas Schilling <213943+nickvergessen@users.noreply.github.com>
|
||||
Joas Schilling <coding@schilljs.com> Joas Schilling <nickvergessen@gmx.de>
|
||||
Joas Schilling <coding@schilljs.com> Joas Schilling <nickvergessen@owncloud.com>
|
||||
joel hansson <joel.hansson@gmail.com>
|
||||
Johan Björk <johanimon@gmail.com>
|
||||
Johannes Twittmann <github.com@deryo.de>
|
||||
Johannes Willnecker <johannes@willnecker.com>
|
||||
John Kristensen <John.Kristensen@dpipwe.tas.gov.au>
|
||||
Jonathan Riddell <jriddell@ubuntu.com>
|
||||
Jonny007-MKD <1-23-4-5@web.de>
|
||||
josh4trunks <joshruehlig@gmail.com>
|
||||
Joshua Medeiros <Jammerx2@gmail.com>
|
||||
Juan Carlos Cornejo <jc2@paintblack.com>
|
||||
Julian Müller <julian.mueller.ffb@kabelmail.de>
|
||||
Jörn Friedrich Dreyer <jfd@butonic.de> jfd <jfd@lance>
|
||||
Jörn Friedrich Dreyer <jfd@butonic.de> jfd <jfd@underverse>
|
||||
Kamil Domanski <kdomanski@kdemail.net>
|
||||
Kees Huiberts <snowy@derideal.com>
|
||||
Klaas Freitag <freitag@owncloud.com> Klaas Freitag <freitag@suse.de>
|
||||
Konstantin Popov <konstantin.popov@globalpointagency.comv> Konstantin.Popov <konstantin.popov@globalpointagency.comv>
|
||||
krzaczek <pawel@freshmind.pl>
|
||||
Kshitij Parajuli <kshitijparajuli@gmail.com>
|
||||
Kunal Ghosh <kunal.t2@gmail.com>
|
||||
Tobia De Koninck <tobia@ledfan.be> LEDfan <tobia@ledfan.be>
|
||||
Lennart Rosam <lennart.rosam@medien-systempartner.de>
|
||||
Sebastian Döll <sebastian.doell@libasys.de> libasys <sebastian.doell@libasys.de>
|
||||
Lode Hoste <zillode@zillode.be>
|
||||
lolozere <laurent@chedanne.pro>
|
||||
Louis Chemineau <louis@chmn.me> Louis Chemineau <6653109+artonge@users.noreply.github.com>
|
||||
Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
|
||||
Lukas Reschke <lukas@statuscode.ch> Lukas Reschke <lukas@owncloud.com>
|
||||
Lukas Reschke <lukas@statuscode.ch> Lukas Reschke <lukas@owncloud.org>
|
||||
Luke Policinski <lpolicinski@gmail.com>
|
||||
Lyonel Vincent <lyonel@ezix.org>
|
||||
macjohnny <estebanmarin@gmx.ch>
|
||||
maelzx <maelzx@gmail.com>
|
||||
marc0s <marcos@tenak.net>
|
||||
Marco B <beinbrech@solutica.de>
|
||||
Marco Michelino <michelinux@gmail.com>
|
||||
Markus Goetz <markus@woboq.com>
|
||||
Markus Kalkbrenner <markus.kalkbrenner@bio.logis.de>
|
||||
Martial Saunois <saunois.martial@gmail.com>
|
||||
Martin Mattel <martin.mattel@diemattels.at> Martin <martin.mattel@diemattels.at>
|
||||
Martin Mattel <martin.mattel@diemattels.at> root <martin.mattel@diemattels.at>
|
||||
Martin Grohmann <martin@medi-inf.org>
|
||||
# TODO: the same person
|
||||
Martin Konrad <info@martin-konrad.net>
|
||||
Martin Konrad <konrad@frib.msu.edu>
|
||||
Martin Sandsmark <martin.sandsmark@kde.org> Martin T. H. Sandsmark <sandsmark@samfundet.no>
|
||||
Marvin Thomas Rabe <mrabe@marvinrabe.de> Marvin Thomas Rabe <m.rabe@echtzeitraum.de>
|
||||
Masaki Kawabata Neto <masaki.kawabata@gmail.com> Masaki <masaki.kawabata@gmail.com>
|
||||
Mat Lipe <mat@lipeimagination.info>
|
||||
Matthew Caron <matt@mattcaron.net>
|
||||
Matthew Dawson <matthew@mjdsystems.ca>
|
||||
Matthias Rieber <matthias@zu-con.org>
|
||||
Maximilian Ruta <mr@xtain.net>
|
||||
mh <mh@immerda.ch>
|
||||
Michael Gapczynski <GapczynskiM@gmail.com> Michael Gapczynski <mtgap@owncloud.com>
|
||||
Michael Göhler <somebody.here@gmx.de>
|
||||
Michael Kent <mike@draftx.net>
|
||||
Michael Kuhn <suraia@ikkoku.de>
|
||||
Michael Monreal <michael.monreal@gmail.com>
|
||||
Michael Roitzsch <reactorcontrol@icloud.com>
|
||||
michag86 <micha_g@arcor.de>
|
||||
Michiel de Jong <michiel@unhosted.org> Michiel@unhosted <michiel@unhosted.org>
|
||||
Micke Nordin <kano@sunet.se> Mikael Nordin <mickenordin@users.noreply.github.com>
|
||||
Miguel Prokop <miguel.prokop@vtu.com>
|
||||
miicha <pfitzner@physik.hu-berlin.de>
|
||||
Miquel Rodríguez Telep / Michael Rodríguez-Torrent <miquel@designunbound.co.uk>
|
||||
Morris Jobke <hey@morrisjobke.de> Morris Jobke <morris.jobke@gmail.com>
|
||||
MTRichards <matt@owncloud.com>
|
||||
mvn23 <schopdiedwaas@gmail.com>
|
||||
Myles McNamara <myles@hostt.net> Myles McNamara <myles@smyl.es>
|
||||
NARUKAWA Hiroki <nhirokinet@nhiroki.net>
|
||||
Nathan Dauber <nathan@radialogica.com>
|
||||
Nazar Mokrynskyi <nazar@mokrynskyi.com>
|
||||
nhirokinet <nhirokinet@nhiroki.net>
|
||||
Nico Kaiser <nico.kaiser@boerse-go.de>
|
||||
Nicolai Ehemann <en@enlightened.de>
|
||||
Nicolas Stamm <nicolas.stamm@gmail.com>
|
||||
NIEK Antoine <antoineniek@gmail.com>
|
||||
Niklas Sombert <niklas1b@yahoo.de>
|
||||
Nils Jansen <nilsjansen@gmail.com>
|
||||
nishiki <nishiki@yaegashi.fr>
|
||||
Nmz <nemesiz@nmz.lt>
|
||||
Normal Ra <normalraw@gmail.com> Normal Ra <NormalRa@users.noreply.github.com>
|
||||
Oliver Gasser <oliver.gasser@gmail.com> Oliver Gasser <oliver@flowriver.net>
|
||||
Oliver Kohl D.Sc. <oliver@kohl.bz>
|
||||
Olivier Paroz <github@oparoz.com> Olivier Paroz <oparoz@users.noreply.github.com>
|
||||
Olivier Tétard <olivier.tetard@miskin.fr>
|
||||
Aaron Larisch <aaron.larisch@gmx.de> OpenLarry <aaron.larisch@gmx.de>
|
||||
opensaucesystems <ashley@opensaucesystems.com>
|
||||
Oskar Hollmann <oskarhollmann@gmail.com>
|
||||
Otto Sabart <ottosabart@seberm.com>
|
||||
Owen Winkler <a_github@midnightcircus.com> Owen Winkler <epithet@gmail.com>
|
||||
Owen Winkler <a_github@midnightcircus.com> ringmaster <epithet@gmail.com>
|
||||
Pascal de Bruijn <pmjdebruijn@pcode.nl>
|
||||
Patrick Paysant <ppaysant@linagora.com>
|
||||
Patrick Stricker <stricker@hera.dev.iks-hagen.de>
|
||||
Paul Brown <paul90brown@gmail.com>
|
||||
pdessauw <pdessauw@gmail.com>
|
||||
Pellaeon Lin <nfsmwlin@gmail.com>
|
||||
Pete McFarlane <peterjohnmcfarlane@gmail.com> petemcfarlane <peterjohnmcfarlane@gmail.com>
|
||||
Philipp Kapfer <philipp.kapfer@gmx.at>
|
||||
Philipp Knechtges <philipp-dev@knechtges.com>
|
||||
Philipp Roggan <philipp.roggan@newsletter4free.de>
|
||||
Philipp Schmitt <philipp@schmitt.co>
|
||||
Philippe Jung <phil.jung@free.fr>
|
||||
Philippe Kueck <pk@plusline.de>
|
||||
prcrst <prcrst@hush.com>
|
||||
pzy <pzy@d1sturbed.org>
|
||||
Qingping Hou <dave2008713@gmail.com>
|
||||
Raghu Nayyar <me@iraghu.com> Raghu Nayyar <raghu.nayyar.007@gmail.com>
|
||||
Raghu Nayyar <me@iraghu.com> raghunayyar <me@iraghu.com>
|
||||
Raimund Schlüßler <raimund.schluessler@googlemail.com>
|
||||
Ramiro Aparicio <rapariciog@gmail.com>
|
||||
Randolph Carter <RandolphCarter@fantasymail.de>
|
||||
RealRancor <Fisch.666@gmx.de>
|
||||
Remco Brenninkmeijer <requist1@starmail.nl>
|
||||
Riccardo Iaconelli <riccardo@kde.org>
|
||||
Richard Clarkson <robert@trash-mail.com>
|
||||
rnveach <rveach02@gmail.com>
|
||||
Robert Jäckel <rjaeckel@users.noreply.github.com>
|
||||
Robin Appelman <robin@icewind.nl> icewind1991 <icewind1991@gmail.com>
|
||||
Robin Appelman <robin@icewind.nl> icewind1991 <robin@icewind.nl>
|
||||
Robin Appelman <robin@icewind.nl> Robin <Robin Appelman icewind1991@gmail.com>
|
||||
Robin Appelman <robin@icewind.nl> Robin <robin@Amaya.(none)>
|
||||
Robin Appelman <robin@icewind.nl> Robin Appelman <icewind1991@gmail.com>
|
||||
Robin Appelman <robin@icewind.nl> Robin Appelman <icewind1991@gmail>
|
||||
Robin Appelman <robin@icewind.nl> Robin Appelman <icewind@owncloud.com>
|
||||
Robin McCorkell <robin@mccorkell.me.uk> Robin McCorkell <rmccorkell@karoshi.org.uk>
|
||||
Robin McCorkell <robin@mccorkell.me.uk> Robin McCorkell <rmccorkell@owncloud.com>
|
||||
Rodrigo Hjort <rodrigo.hjort@gmail.com>
|
||||
Roeland Jago Douma <roeland@famdouma.nl> Roeland Jago Douma <rullzer@owncloud.com>
|
||||
Roeland Jago Douma <roeland@famdouma.nl> Roeland Douma <rullzer@users.noreply.github.com>
|
||||
Roeland Jago Douma <roeland@famdouma.nl> Roeland Jago Douma <rullzer@users.noreply.github.com>
|
||||
Roger Szabo <roger.szabo@web.de> root <roger.szabo@web.de>
|
||||
rok <brejktru@gmail.com>
|
||||
Roland Hager <roland.hager@tu-berlin.de>
|
||||
Roland van Laar <roland@micite.net>
|
||||
rolandgeider <roland@geider.net>
|
||||
Roman Geber <rgeber@owncloudapps.com>
|
||||
root <root@asterisk03.ceschia.de>
|
||||
root <root@dev.(none)>
|
||||
root <root@oc.(none)>
|
||||
root <root@plug.(none)>
|
||||
Ross Nicoll <jrn@jrn.me.uk>
|
||||
runky <philipp.boersteken@googlemail.com>
|
||||
Sam Tuke <mail@samtuke.com> Sam Tuke <sam@donttravelempty.com>
|
||||
Sam Tuke <mail@samtuke.com> Sam Tuke <samtuke@jack-laptop.(none)>
|
||||
Sam Tuke <mail@samtuke.com> Sam Tuke <samtuke@owncloud.com>
|
||||
Sander <brantje@gmail.com>
|
||||
Sandro Knauß <bugs@sandroknauss.de> Sandro <hefee@taurin.(none)>
|
||||
Sascha Schmidt <realriot@realriot.de>
|
||||
Sascha Schneider <development@suntsu.org>
|
||||
Sascha Wiswedel <sascha.wiswedel@nextcloud.com> Sascha Wiswedel <wiswedel@users.noreply.github.com>
|
||||
scambra <sergio@entrecables.com>
|
||||
scolebrook <scolebrook@mac.com>
|
||||
Scott Arciszewski <scott@arciszewski.me>
|
||||
Scott Barnett <scott.n.barnett@gmail.com>
|
||||
Scott Shambarger <gitorious@shambarger.net>
|
||||
Scrutinizer Auto-Fixer <auto-fixer@scrutinizer-ci.com>
|
||||
Sean Comeau <sean@ftlnetworks.ca>
|
||||
Sean Leonard <meanderingcode@silverleafstudios.net>
|
||||
Sebastian Bolt <sebastian.bolt@gmx.de>
|
||||
Serge Martin <edb@sigluy.net>
|
||||
Sergei Shuykov <n1nj4p0w3r@gmail.com>
|
||||
Sergi Almacellas Abellana <sergi@koolpi.com>
|
||||
sherbrecher <oss@herbrecher.de>
|
||||
shkdee <louis.traynard@m4x.org>
|
||||
Simon Birnbach <simon@simon-birnbach.de>
|
||||
Simon Könnecke <simonkoennecke@gmail.com>
|
||||
Simon Whittaker <simon@swbh.net>
|
||||
Sjors van der Pluijm <sjors@desjors.nl> Sjors van der Pluijm <sjors@youngguns.nl>
|
||||
John Molakvoæ <skjnldsv@protonmail.com> John Molakvoæ <skjnldsv@users.noreply.github.com>
|
||||
John Molakvoæ <skjnldsv@protonmail.com> John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
|
||||
st3so <st3so@server.fake>
|
||||
Stefan <mu.stefan@googlemail.com>
|
||||
Stefan Göckeritz <admin@s-goecker.de>
|
||||
Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
|
||||
Stefan Rado <owncloud@sradonia.net>
|
||||
Stefan Seidel <android@stefanseidel.info>
|
||||
Steffen Lindner <mail@steffen-lindner.de> Steffen Lindner <gomez@flexiabel.de>
|
||||
Stephan Arts <stephan@xfce.org>
|
||||
Stephan Bergemann <st.bergemann@htw-berlin.de>
|
||||
Stephan Peijnik <speijnik@anexia-it.com>
|
||||
Stephane Martin <stef.martin@gmail.com> Stephane Martin <stephane.martin@vesperal.eu>
|
||||
Stephane V <stephane@vergeylen.eu>
|
||||
Stephen Rees-Carter <stephen@rees-carter.net>
|
||||
Steven <wokste@gmail.com>
|
||||
Steven <wokste@Komkommer.(none)>
|
||||
Steven <wwjd2@web.de>
|
||||
Sugaroverdose <n1nj4p0w3r@gmail.com>
|
||||
Susinthiran Sithamparanathan <chesusin@gmail.com>
|
||||
tbelau666 <thomas.belau@gmx.de>
|
||||
TheSFReader <TheSFReader@gmail.com>
|
||||
Thibaut GRIDEL <tgridel@free.fr>
|
||||
thomas <thomas@thomas-VirtualBox.(none)>
|
||||
Thomas Citharel <nextcloud@tcit.fr> Thomas Citharel <tcit@tcit.fr>
|
||||
Thomas Citharel <nextcloud@tcit.fr> Thomas Citharel <github@tcit.fr>
|
||||
Thomas Müller <thomas.mueller@tmit.eu> Thomas Mueller <thomas.mueller@tmit.eu>
|
||||
Thomas Müller <thomas.mueller@tmit.eu> Thomas Müller <DeepDiver1975@users.noreply.github.com>
|
||||
Thomas Olsen <tol@tanghus>
|
||||
Thomas Schmidt <tschmidt@suse.de>
|
||||
Thomas Tanghus <thomas@tanghus.net>
|
||||
Thomas Zander <zander@kde.org>
|
||||
tiezdne <oswald.84@t-online.de>
|
||||
Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
|
||||
Tobias Kaminsky <tobias@kaminsky.me> tobiasKaminsky <tobias@kaminsky.me>
|
||||
Tom Needham <tom@owncloud.com> Tom Needham <needham.thomas@gmail.com>
|
||||
Tom Needham <tom@owncloud.com> Tom Needham <tom@tre.tomneedham.com>
|
||||
Tom Needham <tom@owncloud.com> tomneedham <needham.thomas@gmail.com>
|
||||
Tom Needham <tom@owncloud.com> tomneedham <tom@owncloud.com>
|
||||
Tony Zelenoff <antonz@parallels.com>
|
||||
tsumi <mail@tsumi.it>
|
||||
twood8 <ted.wood@gtri.gatech.edu>
|
||||
Türker Sezer <turkersezer@tsdesign.info>
|
||||
unclejamal3000 <andreas.pramhaas@posteo.de>
|
||||
unknown <Alain@Alain-PC.(none)>
|
||||
unknown <pnd@.nist.gov>
|
||||
Valerio Ponte <valerio.ponte@gmail.com>
|
||||
Victor Dubiniuk <dubiniuk@owncloud.com> Victor Dubiniuk <victor.dubiniuk@gmail.com>
|
||||
Victor Dubiniuk <dubiniuk@owncloud.com> VicDeo <dubiniuk@owncloud.com>
|
||||
Victor Dubiniuk <dubiniuk@owncloud.com> VicDeo <victor.dubiniuk@gmail.com>
|
||||
Vincent Cloutier <vincent1cloutier@gmail.com>
|
||||
Vincent Petry <vincent@nextcloud.com> Vincent Petry <PVince81@yahoo.fr>
|
||||
Vincent Petry <vincent@nextcloud.com> Vincent Petry <vincent@vvortex.site>
|
||||
Vincent Petry <vincent@nextcloud.com> Vincent Petry <pvince81@owncloud.com>
|
||||
Vinicius Cubas Brand <vinicius@eita.org.br> Vinicius Cubas Brand <viniciuscb@gmail.com>
|
||||
Vitaly Kuznetsov <vitty@altlinux.ru>
|
||||
Vladimir Sapronov <vladimir.sapronov@gmail.com>
|
||||
Volkan Gezer <volkangezer@gmail.com> Volkan Gezer <wakeup@users.noreply.github.com>
|
||||
Volker E. <open@temporaer.net>
|
||||
voxsim <Simon Vocella>
|
||||
vsapronov <vladimir.sapronov@gmail.com>
|
||||
Vsevolod Kukol <v.kukol@rubologic.de>
|
||||
Weng Xuetian <wengxt@gmail.com>
|
||||
Wikinaut <mail@tgries.de>
|
||||
Willi Ballenthin <willi.ballenthin@gmail.com>
|
||||
windaishi <manuel.strider@web.de>
|
||||
Witali Rott <info@hlop.eu>
|
||||
Yann VERRY <yann@verry.org>
|
||||
yannickoo <github@yannickoo.de>
|
||||
zafi <zafirakis.daniel@gmail.com>
|
||||
zombiehugs <gerdsen@gmail.com>
|
||||
@@ -1,29 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Files removed at build time
|
||||
|
||||
# Global exclude
|
||||
.editorconfig
|
||||
.git
|
||||
.git-blame-ignore-revs
|
||||
.gitattributes
|
||||
.github
|
||||
.gitignore
|
||||
.gitmodules
|
||||
.idea
|
||||
.l10nignore
|
||||
.nextcloudignore
|
||||
.noopenapi
|
||||
.tx
|
||||
cypress
|
||||
tests
|
||||
|
||||
# Server specific
|
||||
/.devcontainer
|
||||
/__mocks__
|
||||
/__tests__
|
||||
/autotest*.sh
|
||||
/build
|
||||
/config/config.php
|
||||
/contribute
|
||||
/data
|
||||
@@ -1 +0,0 @@
|
||||
**/*.spec.js
|
||||
@@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
require_once './vendor-bin/cs-fixer/vendor/autoload.php';
|
||||
|
||||
use Nextcloud\CodingStandard\Config;
|
||||
use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
|
||||
|
||||
$config = new Config();
|
||||
$config
|
||||
->setParallelConfig(ParallelConfigFactory::detect())
|
||||
->getFinder()
|
||||
->in(__DIR__)
|
||||
->exclude([
|
||||
'3rdparty',
|
||||
'build/stubs',
|
||||
'composer',
|
||||
])
|
||||
;
|
||||
|
||||
|
||||
$ignoredEntries = shell_exec('git status --porcelain --ignored ' . escapeshellarg(__DIR__));
|
||||
$ignoredEntries = explode("\n", $ignoredEntries);
|
||||
$ignoredEntries = array_filter($ignoredEntries, static fn (string $line) => str_starts_with($line, '!! '));
|
||||
$ignoredEntries = array_map(static fn (string $line) => substr($line, 3), $ignoredEntries);
|
||||
$ignoredEntries = array_values($ignoredEntries);
|
||||
|
||||
foreach ($ignoredEntries as $ignoredEntry) {
|
||||
if (str_ends_with($ignoredEntry, '/')) {
|
||||
$config->getFinder()->exclude($ignoredEntry);
|
||||
} else {
|
||||
$config->getFinder()->notPath($ignoredEntry);
|
||||
}
|
||||
}
|
||||
|
||||
return $config;
|
||||
@@ -1,19 +0,0 @@
|
||||
# See https://pre-commit.com for more information
|
||||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.3.0
|
||||
hooks:
|
||||
- id: end-of-file-fixer
|
||||
- id: check-yaml
|
||||
- id: check-added-large-files
|
||||
- repo: https://github.com/nextcloud/pre-commit-php.git
|
||||
rev: 1.5.1
|
||||
hooks:
|
||||
- id: php-lint
|
||||
- id: php-cs-fixer
|
||||
files: \.(php)$
|
||||
exclude: ^(config|data|composer|lib\/composer)
|
||||
args: []
|
||||
-195
@@ -1,195 +0,0 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:admin_audit]
|
||||
file_filter = translationfiles/<lang>/admin_audit.po
|
||||
source_file = translationfiles/templates/admin_audit.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:cloud_federation_api]
|
||||
file_filter = translationfiles/<lang>/cloud_federation_api.po
|
||||
source_file = translationfiles/templates/cloud_federation_api.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:comments]
|
||||
file_filter = translationfiles/<lang>/comments.po
|
||||
source_file = translationfiles/templates/comments.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:contactsinteraction]
|
||||
file_filter = translationfiles/<lang>/contactsinteraction.po
|
||||
source_file = translationfiles/templates/contactsinteraction.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:core]
|
||||
file_filter = translationfiles/<lang>/core.po
|
||||
source_file = translationfiles/templates/core.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:dashboard-shipped-with-server]
|
||||
file_filter = translationfiles/<lang>/dashboard.po
|
||||
source_file = translationfiles/templates/dashboard.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:dav]
|
||||
file_filter = translationfiles/<lang>/dav.po
|
||||
source_file = translationfiles/templates/dav.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:federatedfilesharing]
|
||||
file_filter = translationfiles/<lang>/federatedfilesharing.po
|
||||
source_file = translationfiles/templates/federatedfilesharing.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:federation]
|
||||
file_filter = translationfiles/<lang>/federation.po
|
||||
source_file = translationfiles/templates/federation.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files]
|
||||
file_filter = translationfiles/<lang>/files.po
|
||||
source_file = translationfiles/templates/files.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files_encryption]
|
||||
file_filter = translationfiles/<lang>/encryption.po
|
||||
source_file = translationfiles/templates/encryption.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files_external]
|
||||
file_filter = translationfiles/<lang>/files_external.po
|
||||
source_file = translationfiles/templates/files_external.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files_reminders]
|
||||
file_filter = translationfiles/<lang>/files_reminders.po
|
||||
source_file = translationfiles/templates/files_reminders.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files_sharing]
|
||||
file_filter = translationfiles/<lang>/files_sharing.po
|
||||
source_file = translationfiles/templates/files_sharing.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files_trashbin]
|
||||
file_filter = translationfiles/<lang>/files_trashbin.po
|
||||
source_file = translationfiles/templates/files_trashbin.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:files_versions]
|
||||
file_filter = translationfiles/<lang>/files_versions.po
|
||||
source_file = translationfiles/templates/files_versions.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:lib]
|
||||
file_filter = translationfiles/<lang>/lib.po
|
||||
source_file = translationfiles/templates/lib.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:lookup_server_connector]
|
||||
file_filter = translationfiles/<lang>/lookup_server_connector.po
|
||||
source_file = translationfiles/templates/lookup_server_connector.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:oauth2]
|
||||
file_filter = translationfiles/<lang>/oauth2.po
|
||||
source_file = translationfiles/templates/oauth2.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:profile]
|
||||
file_filter = translationfiles/<lang>/profile.po
|
||||
source_file = translationfiles/templates/profile.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:provisioning_api]
|
||||
file_filter = translationfiles/<lang>/provisioning_api.po
|
||||
source_file = translationfiles/templates/provisioning_api.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:settings-1]
|
||||
file_filter = translationfiles/<lang>/settings.po
|
||||
source_file = translationfiles/templates/settings.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:sharebymail]
|
||||
file_filter = translationfiles/<lang>/sharebymail.po
|
||||
source_file = translationfiles/templates/sharebymail.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:systemtags]
|
||||
file_filter = translationfiles/<lang>/systemtags.po
|
||||
source_file = translationfiles/templates/systemtags.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:theming]
|
||||
file_filter = translationfiles/<lang>/theming.po
|
||||
source_file = translationfiles/templates/theming.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:twofactor_backupcodes]
|
||||
file_filter = translationfiles/<lang>/twofactor_backupcodes.po
|
||||
source_file = translationfiles/templates/twofactor_backupcodes.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:updatenotification]
|
||||
file_filter = translationfiles/<lang>/updatenotification.po
|
||||
source_file = translationfiles/templates/updatenotification.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:user_ldap]
|
||||
file_filter = translationfiles/<lang>/user_ldap.po
|
||||
source_file = translationfiles/templates/user_ldap.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:user_status]
|
||||
file_filter = translationfiles/<lang>/user_status.po
|
||||
source_file = translationfiles/templates/user_status.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:weather_status]
|
||||
file_filter = translationfiles/<lang>/weather_status.po
|
||||
source_file = translationfiles/templates/weather_status.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:webhook_listeners]
|
||||
file_filter = translationfiles/<lang>/webhook_listeners.po
|
||||
source_file = translationfiles/templates/webhook_listeners.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:workflowengine]
|
||||
file_filter = translationfiles/<lang>/workflowengine.po
|
||||
source_file = translationfiles/templates/workflowengine.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
@@ -1,9 +0,0 @@
|
||||
; SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
; SPDX-FileCopyrightText: 2014-2016 ownCloud, Inc.
|
||||
; SPDX-License-Identifier: AGPL-3.0-only
|
||||
;
|
||||
; NOTE: PHP caches this file for 300 seconds by default
|
||||
;
|
||||
always_populate_raw_post_data=-1
|
||||
default_charset='UTF-8'
|
||||
output_buffering=0
|
||||
-1
Submodule 3rdparty deleted from 8f97d8cef3
@@ -1,640 +1,31 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
# Authors
|
||||
|
||||
- AW-UC <git@a-wesemann.de>
|
||||
- Aaron Ball <nullspoon@oper.io>
|
||||
- Aaron Wood <aaronjwood@gmail.com>
|
||||
- Abijeet <abijeetpatro@gmail.com>
|
||||
- Adam Blakey <adam@blakey.family>
|
||||
- Adam Williamson <awilliam@redhat.com>
|
||||
- Administrator "Administrator@WINDOWS-2012"
|
||||
- Adrian Brzezinski <adrian.brzezinski@eo.pl>
|
||||
- Akhil <akhil.potukuchi@gmail.com>
|
||||
- Akhil <akhil@e.email>
|
||||
- Akhil Potukuchi <akhil.potukuchi@gmail.com>
|
||||
- Alan Meeson <alan@carefullycalculated.co.uk>
|
||||
- Aldo "xoen" Giambelluca <xoen@xoen.org>
|
||||
- Alecks Gates <alecks.g@gmail.com>
|
||||
- Alejandro Varela <epma01@gmail.com>
|
||||
- Alexander A. Klimov <grandmaster@al2klimov.de>
|
||||
- Alexandre Salomé <alexandre.salome@gmail.com>
|
||||
- Alex Harpin <development@landsofshadow.co.uk>
|
||||
- Alex Weirig <alex.weirig@technolink.lu>
|
||||
- Alexander Bergolth <leo@strike.wu.ac.at>
|
||||
- Alexander F <32201363+alx-tuilmenau@users.noreply.github.com>
|
||||
- Allan Nordhøy <epost@anotheragency.no>
|
||||
- Anderson Luiz Alves <alacn1@gmail.com>
|
||||
- Andreas Fischer <bantu@owncloud.com>
|
||||
- Andreas Pflug <dev@admin4.org>
|
||||
- Andrew Brown <andrew@casabrown.com>
|
||||
- Andrey Borysenko <andrey.borysenko@nextcloud.com>
|
||||
- André Gaul <gaul@web-yard.de>
|
||||
- Andy Xheli <axheli@axtsolutions.com>
|
||||
- Anna Larch <anna@nextcloud.com>
|
||||
- Anna Larch <anna.larch@gmx.net>
|
||||
- Anupam Kumar <kyteinsky@gmail.com>
|
||||
- ArcticFall <23174635+ArcticFall@users.noreply.github.com>
|
||||
- Ardinis <Ardinis@users.noreply.github.com>
|
||||
- Ari Selseng <ari@selseng.net>
|
||||
- Arne Hamann <kontakt+github@arne.email>
|
||||
- Arne Hamann <github@arne.email>
|
||||
- Artem Kochnev <MrJeos@gmail.com>
|
||||
- Artem Sidorenko <artem@posteo.de>
|
||||
- Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||
- Artur Neumann <artur@jankaritech.com>
|
||||
- Artur Neumann <info@individual-it.net>
|
||||
- Ashod Nakashian <ashod.nakashian@collabora.co.uk>
|
||||
- Asier Iturralde Sarasola <asier.iturralde@gmail.com>
|
||||
- Axel Helmert <axel.helmert@luka.de>
|
||||
- Azul <azul@riseup.net>
|
||||
- Bart Visscher <bartv@thisnet.nl>
|
||||
- Bartek Przybylski <bart.p.pl@gmail.com>
|
||||
- Bastien Durel <bastien@durel.org>
|
||||
- Bastien Ho <bastienho@urbancube.fr>
|
||||
- Benjamin Diele <benjamin@diele.be>
|
||||
- Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
|
||||
- Benjamin Liles <benliles@arch.tamu.edu>
|
||||
- Bennet Becker <bbecker@pks.mpg.de>
|
||||
- Bennet Becker <dev@bennet.cc>
|
||||
- Bernard Spil <Sp1l@users.noreply.github.com>
|
||||
- Bernd Rederlechner <Bernd.Rederlechner@t-systems.com>
|
||||
- Bernd Stellwag <burned@zerties.org>
|
||||
- Bernhard Ostertag <bernieo.code@gmx.de>
|
||||
- Bernhard Posselt <dev@bernhard-posselt.com>
|
||||
- Bernhard Reiter <ockham@raz.or.at>
|
||||
- Bill McGonigle <bill-github.com@bfccomputing.com>
|
||||
- Daniel Niccoli <daniel.niccoli@gmail.com>
|
||||
- Bjoern Schiessle <bjoern@schiessle.org>
|
||||
- Björn Schießle <bjoern@schiessle.org>
|
||||
- Bjørn Forsman <bjorn.forsman@gmail.com>
|
||||
- Blaok <i@blaok.me>
|
||||
- Boris Rybalkin <ribalkin@gmail.com>
|
||||
- Borjan Tchakaloff <borjan@tchakaloff.fr>
|
||||
- Brad Rubenstein <brad@wbr.tech>
|
||||
- Brandon Kirsch <brandonkirsch@github.com>
|
||||
- Branko Kokanovic <branko@kokanovic.org>
|
||||
- Brice Maron <brice@bmaron.net>
|
||||
- Byron Marohn <combustible@live.com>
|
||||
- CRA Yoshihito Nakatani <yoshihito.nakatani@craftsman-software.com>
|
||||
- Carl Csaposs <carl@csaposs.com>
|
||||
- Carl Schwan <carl@carlschwan.eu>
|
||||
- Carla Schroder <carla@owncloud.com>
|
||||
- Carlos Cerrillo <ccerrillo@gmail.com>
|
||||
- Carlos Ferreira <carlos@reendex.com>
|
||||
- Carsten Wiedmann <carsten_sttgt@gmx.de>
|
||||
- Chih-Hsuan Yen <yan12125@gmail.com>
|
||||
- Christian <16852529+cviereck@users.noreply.github.com>
|
||||
- Christian Berendt <berendt@b1-systems.de>
|
||||
- Christian Jürges <christian@eqipe.ch>
|
||||
- Christian Kampka <christian@kampka.net>
|
||||
- Christian Oliff <christianoliff@yahoo.com>
|
||||
- Christian Weiske <cweiske@cweiske.de>
|
||||
- Christoph Schaefer "christophł@wolkesicher.de"
|
||||
- Christoph Seitz <christoph.seitz@posteo.de>
|
||||
- Christoph Wickert <cwickert@suse.de>
|
||||
- Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
- Christopher Bartz <bartz@dkrz.de>
|
||||
- Christopher Ng <chrng8@gmail.com>
|
||||
- Christopher Schäpers <kondou@ts.unde.re>
|
||||
- Christopher T. Johnson <ctjctj@gmail.com>
|
||||
- Clark Tomlinson <fallen013@gmail.com>
|
||||
- Claas Augner <github@caugner.de>
|
||||
- Claus-Justus Heine <himself@claus-justus-heine.de>
|
||||
- Clement Wong <git@clement.hk>
|
||||
- Cornelius Kölbel <cornelius.koelbel@netknights.it>
|
||||
- Cthulhux <git@tuxproject.de>
|
||||
- Cyrille Bollu <cyrpub@bollu.be>
|
||||
- Cédric Neukom <github@webguy.ch>
|
||||
- Côme Chilliet <91878298+come-nc@users.noreply.github.com>
|
||||
- Côme Chilliet <come.chilliet@nextcloud.com>
|
||||
- Damjan Georgievski <gdamjan@gmail.com>
|
||||
- Dan Callahan <dan.callahan@gmail.com>
|
||||
- Daniel <mail@danielkesselberg.de>
|
||||
- Daniel Calviño Sánchez <danxuliu@gmail.com>
|
||||
- Daniel Hansson <daniel@techandme.se>
|
||||
- Daniel Jagszent <daniel@jagszent.de>
|
||||
- Daniel Kesselberg <mail@danielkesselberg.de>
|
||||
- Daniel Rudolf <github.com@daniel-rudolf.de>
|
||||
- Daniel Rudolf <nextcloud.com@daniel-rudolf.de>
|
||||
- Daniel Schneider <daniel@schneidoa.de>
|
||||
- Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de>
|
||||
- Dariusz Olszewski <starypatyk@users.noreply.github.com>
|
||||
- David <37280718+yeyulantu@users.noreply.github.com>
|
||||
- David Prévot <taffit@debian.org>
|
||||
- David Toledo <dtoledo@solidgear.es>
|
||||
- Denis Mosolov <denismosolov@gmail.com>
|
||||
- Derek <derek.kelly27@gmail.com>
|
||||
- Dominik Schmidt <dev@dominik-schmidt.de>
|
||||
- Donquixote <marjunebatac@gmail.com>
|
||||
- Dries Mys <dries.mys@my-dreams.be>
|
||||
- EWouters <6179932+EWouters@users.noreply.github.com>
|
||||
- Elijah Martin-Merrill <elijah@nyp-itsours.com>
|
||||
- Ember 'n0emis' Keske <git@n0emis.eu>
|
||||
- Eric Masseran <rico.masseran@gmail.com>
|
||||
- Erik van Velzen <erik@evanv.nl>
|
||||
- Evgeny Golyshev <eugulixes@gmail.com>
|
||||
- Ezhil Shanmugham <ezhil930@gmail.com>
|
||||
- Fabian Dreßler <nudelsalat@clouz.de>
|
||||
- Fabien Potencier <fabien@symfony.com>
|
||||
- Fabrizio Steiner <fabrizio.steiner@gmail.com>
|
||||
- Faraz Samapoor <f.samapoor@gmail.com>
|
||||
- Felix Epp <work@felixepp.de>
|
||||
- Felix Heidecke <felix@heidecke.me>
|
||||
- Felix Moeller <mail@felixmoeller.de>
|
||||
- Felix Nieuwenhuizen <felix@tdlrali.com>
|
||||
- Felix Nüsse <Felix.nuesse@t-online.de>
|
||||
- Felix Rupp <github@felixrupp.com>
|
||||
- Ferdinand Thiessen <opensource@fthiessen.de>
|
||||
- Ferdinand Thiessen <rpm@fthiessen.de>
|
||||
- Filis Futsarov <filisko@users.noreply.github.com>
|
||||
- Florent <florent@coppint.com>
|
||||
- Florian Schunk <florian.schunk@rwth-aachen.de>
|
||||
- Florin Peter <github@florin-peter.de>
|
||||
- Fon E. Noel NFEBE <opensource@nfebe.com>
|
||||
- Frank Isemann <frank@isemann.name>
|
||||
- Frank Karlitschek <frank@karlitschek.de>
|
||||
- François Freitag <mail@franek.fr>
|
||||
- François Kubler <francois@kubler.org>
|
||||
- François Ménabé <francois.menabe@gmail.com>
|
||||
- Frederic Werner <frederic-github@werner-net.work>
|
||||
- Frédéric Fortier <frederic.fortier@oronospolytechnique.com>
|
||||
- Gary Kim <gary@garykim.dev>
|
||||
- Georg Ehrke <oc.list@georgehrke.com>
|
||||
- Git'Fellow <12234510+solracsf@users.noreply.github.com>
|
||||
- Git'Fellow <carlos@reendex.com>
|
||||
- Glandos <bugs-github@antipoul.fr>
|
||||
- GrayFix <grayfix@gmail.com>
|
||||
- Greta Doci <gretadoci@gmail.com>
|
||||
- GretaD <gretadoci@gmail.com>
|
||||
- Grigorii K. Shartsev <me@shgk.me>
|
||||
- Guillaume COMPAGNON <gcompagnon@outlook.com>
|
||||
- Guillaume Colson <guillaume.colson@univ-lorraine.fr>
|
||||
- Guillaume Virlet <github@virlet.org>
|
||||
- Hasso Tepper <hasso@zone.ee>
|
||||
- Hemanth Kumar Veeranki <hems.india1997@gmail.com>
|
||||
- Hendrik Leppelsack <hendrik@leppelsack.de>
|
||||
- Hinrich Mahler <22366557+Bibo-Joshi@users.noreply.github.com>
|
||||
- Hinrich Mahler <nextcloud@mahlerhome.de>
|
||||
- Holger Hees <holger.hees@gmail.com>
|
||||
- HouraisanNEET <HouraisanNEET@users.noreply.github.com>
|
||||
- Ilja Neumann <ineumann@owncloud.com>
|
||||
- Ilya Apasov <apasov@users.noreply.github.com>
|
||||
- Immanuel Pasanec <immanuel.pasanec@compaso.de>
|
||||
- Individual IT Services <info@individual-it.net>
|
||||
- Informatyka Boguslawski sp. z o.o. sp.k., http://www.ib.pl/
|
||||
- Iscle <albertiscle9@gmail.com>
|
||||
- J0WI <J0WI@users.noreply.github.com>
|
||||
- Jaakko Salo <jaakkos@gmail.com>
|
||||
- Jacob Neplokh <me@jacobneplokh.com>
|
||||
- Jake Nabasny <jake@nabasny.com>
|
||||
- Jakob Sack <mail@jakobsack.de>
|
||||
- Jakub Onderka <ahoj@jakubonderka.cz>
|
||||
- James Guo <i@ze3kr.com>
|
||||
- James Letendre <James.Letendre@gmail.com>
|
||||
- Jan C. Borchardt <hey@jancborchardt.net>
|
||||
- Jan Messer <jan@mtec-studios.ch>
|
||||
- Jan-Christoph Borchardt <hey@jancborchardt.net>
|
||||
- Jan-Philipp Litza <jpl@plutex.de>
|
||||
- Jan-Philipp Litza <jplitza@users.noreply.github.com>
|
||||
- JanBartels <j.bartels@arcor.de>
|
||||
- Janis Köhr <janis.koehr@novatec-gmbh.de>
|
||||
- Janis Köhr <janiskoehr@icloud.com>
|
||||
- Jared Boone <jared.boone@gmail.com>
|
||||
- Jarkko Lehtoranta <devel@jlranta.com>
|
||||
- Jasper Weyne <jasperweyne@gmail.com>
|
||||
- Jean-Louis Dupond <jean-louis@dupond.be>
|
||||
- Jens-Christian Fischer <jens-christian.fischer@switch.ch>
|
||||
- Jesús Macias <jmacias@solidgear.es>
|
||||
- Joachim Bauch <bauch@struktur.de>
|
||||
- Joachim Sokolowski <github@sokolowski.org>
|
||||
- Joas Schilling <coding@schilljs.com>
|
||||
- Joel S <joel.devbox@protonmail.com>
|
||||
- Johan Björk <johanimon@gmail.com>
|
||||
- Johannes Ernst <jernst@indiecomputing.com>
|
||||
- Johannes Leuker <j.leuker@hosting.de>
|
||||
- Johannes Merkel <mail@johannesgge.de>
|
||||
- Johannes Riedel <joeried@users.noreply.github.com>
|
||||
- Johannes Riedel <johannes@johannes-riedel.de>
|
||||
- Johannes Schlichenmaier <johannes@schlichenmaier.info>
|
||||
- Johannes Willnecker <johannes@willnecker.com>
|
||||
- John Molakvoæ <skjnldsv@protonmail.com>
|
||||
- Jonas <jonas@freesources.org>
|
||||
- Jonas Heinrich <heinrich@synyx.de>
|
||||
- Jonas Meurer <jonas@freesources.org>
|
||||
- Jonas Rittershofer <jotoeri@users.noreply.github.com>
|
||||
- Jonny007-MKD <1-23-4-5@web.de>
|
||||
- Jos Poortvliet <jos@opensuse.org>
|
||||
- Jose Quinteiro <github@quinteiro.org>
|
||||
- Josh Richards <josh.t.richards@gmail.com>
|
||||
- Joshua Trees <me@jtrees.io>
|
||||
- Juan Pablo Villafáñez <jvillafanez@solidgear.es>
|
||||
- Julien Lutran <julien.lutran@corp.ovh.com>
|
||||
- Julien Veyssier <eneiluj@posteo.net>
|
||||
- Julien Veyssier <julien-nc@posteo.net>
|
||||
- Julius Haertl <jus@bitgrid.net>
|
||||
- Julius Härtl <jus@bitgrid.net>
|
||||
- Jérôme Herbinet <33763786+Jerome-Herbinet@users.noreply.github.com>
|
||||
- Jörn Friedrich Dreyer <jfd@butonic.de>
|
||||
- KB7777 <k.burkowski@gmail.com>
|
||||
- Kamil Domanski <kdomanski@kdemail.net>
|
||||
- Kareem <yemkareems@gmail.com>
|
||||
- Karel Hink <info@karelhink.cz>
|
||||
- Kate Döen <kate.doeen@nextcloud.com>
|
||||
- Kawohl <john@owncloud.com>
|
||||
- Kenneth Newwood <kenneth@newwood.name>
|
||||
- Kevin Lanni <therealklanni@gmail.com>
|
||||
- Kevin Ndung'u <kevgathuku@gmail.com>
|
||||
- Kevin Niehage <k.niehage@syseleven.de>
|
||||
- Kim Brose <kim.brose@rwth-aachen.de>
|
||||
- Kirill Popov <kirill.s.popov@gmail.com>
|
||||
- Klaas Freitag <freitag@owncloud.com>
|
||||
- Knut Ahlers <knut@ahlers.me>
|
||||
- Ko- <k.stoffelen@cs.ru.nl>
|
||||
- Konrad Abicht <hi@inspirito.de>
|
||||
- Konrad Bucheli <kb@open.ch>
|
||||
- Kristof Provost <github@sigsegv.be>
|
||||
- Kyle Fazzari <kyrofa@ubuntu.com>
|
||||
- Lars <winnetou+github@catolic.de>
|
||||
- Lars Knickrehm <mail@lars-sh.de>
|
||||
- Laurens Post <Crote@users.noreply.github.com>
|
||||
- Laurens Post <lkpost@scept.re>
|
||||
- Lauris Binde <laurisb@users.noreply.github.com>
|
||||
- Lee Garrett <lgarrett@rocketjump.eu>
|
||||
- Lennart Rosam <hello@takuto.de>
|
||||
- Lennart Rosam <lennart.rosam@medien-systempartner.de>
|
||||
- Leon Klingele <git@leonklingele.de>
|
||||
- Leon Klingele <leon@struktur.de>
|
||||
- Liam Dennehy <liam@wiemax.net>
|
||||
- Liam JACK <liamjack@users.noreply.github.com>
|
||||
- Lionel Elie Mamane <lionel@mamane.lu>
|
||||
- Loki3000 <github@labcms.ru>
|
||||
- Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
|
||||
- Lorenzo Tanganelli <35271287+tanganellilore@users.noreply.github.com>
|
||||
- Louis <6653109+artonge@users.noreply.github.com>
|
||||
- Louis Chemineau <louis@chmn.me>
|
||||
- Loïc Hermann <loic.hermann@sciam.fr>
|
||||
- Lucas Azevedo <lhs_azevedo@hotmail.com>
|
||||
- Luka Trovic <luka@nextcloud.com>
|
||||
- Lukas Reschke <lukas@statuscode.ch>
|
||||
- Lukas Stabe <lukas@stabe.de>
|
||||
- Luke Policinski <lpolicinski@gmail.com>
|
||||
- Magnus Walbeck <mw@mwalbeck.org>
|
||||
- Maksim Sukharev <antreesy.web@gmail.com>
|
||||
- Marc Hefter <marchefter@gmail.com>
|
||||
- Marc Hefter <marchefter@march42.net>
|
||||
- Marcel Klehr <mklehr@gmx.net>
|
||||
- Marcel Müller <marcel-mueller@gmx.de>
|
||||
- Marcel Müller <marcel.mueller@nextcloud.com>
|
||||
- Marcel Waldvogel <marcel.waldvogel@uni-konstanz.de>
|
||||
- Marco Ambrosini <marcoambrosini@pm.me>
|
||||
- Marco Ziech <marco@ziech.net>
|
||||
- Marin Treselj <marin@pixelipo.com>
|
||||
- Mario Danic <mario@lovelyhq.com>
|
||||
- Mario Kolling <mario.kolling@serpro.gov.br>
|
||||
- Marius Blüm <marius@lineone.io>
|
||||
- Marius David Wieschollek <git.public@mdns.eu>
|
||||
- Markus Goetz <markus@woboq.com>
|
||||
- Markus Staab <markus.staab@redaxo.de>
|
||||
- Markus Zeller <git@markuszeller.com>
|
||||
- MartB <mart.b@outlook.de>
|
||||
- Martin Brugnara <martin@0x6d62.eu>
|
||||
- Martin Konrad <info@martin-konrad.net>
|
||||
- Martin Konrad <konrad@frib.msu.edu>
|
||||
- Martin Mattel <martin.mattel@diemattels.at>
|
||||
- Marvin Thomas Rabe <mrabe@marvinrabe.de>
|
||||
- Masaki Kawabata Neto <masaki.kawabata@gmail.com>
|
||||
- MasterOfDeath <rinat.gumirov@mail.ru>
|
||||
- Matthew Setter <matthew@matthewsetter.com>
|
||||
- Matthieu Gallien <matthieu.gallien@nextcloud.com>
|
||||
- Mattia Narducci <mattianarducci1@gmail.com>
|
||||
- Max <max@nextcloud.com>
|
||||
- Max Kovalenko <mxss1998@yandex.ru>
|
||||
- Max Kunzelmann <maxdev@posteo.de>
|
||||
- Maxence Lange <maxence@artificial-owl.com>
|
||||
- Maxence Lange <maxence@nextcloud.com>
|
||||
- Maxence Lange <maxence@pontapreta.net>
|
||||
- Maxime Besson <maxime.besson@worteks.com>
|
||||
- Maximilian Martin <maximilian_martin@gmx.de>
|
||||
- Maxopoly <max@dermax.org>
|
||||
- MichaIng <28480705+MichaIng@users.noreply.github.com>
|
||||
- MichaIng <micha@dietpi.com>
|
||||
- Michael Gapczynski <GapczynskiM@gmail.com>
|
||||
- Michael Göhler <somebody.here@gmx.de>
|
||||
- Michael Jobst <mjobst+github@tecratech.de>
|
||||
- Michael Jobst <mjobst@necls.com>
|
||||
- Michael Kuhn <github@ikkoku.de>
|
||||
- Michael Kuhn <michael@ikkoku.de>
|
||||
- Michael Letzgus <www@chronos.michael-letzgus.de>
|
||||
- Michael Roitzsch <reactorcontrol@icloud.com>
|
||||
- Michael Weimann <mail@michael-weimann.eu>
|
||||
- Michael Zamot <michael@zamot.io>
|
||||
- Michał Węgrzynek <michal.wegrzynek@malloc.com.pl>
|
||||
- Michiel de Jong <michiel@unhosted.org>
|
||||
- Micke Nordin <kano@sunet.se>
|
||||
- Mickey Knox <mickey@netfreaks.org>
|
||||
- Miguel Prokop <miguel.prokop@vtu.com>
|
||||
- Mikael Hammarin <mikael@try2.se>
|
||||
- Mikael Saarinen <mikaels@iki.fi>
|
||||
- Mikhail Sazanov <m@sazanof.ru>
|
||||
- Mitar <mitar.git@tnode.com>
|
||||
- Mohammed Abdellatif <m.latief@gmail.com>
|
||||
- Morris Jobke <hey@morrisjobke.de>
|
||||
- Mátyás Jani <jzombi@gmail.com>
|
||||
- nacho <nacho@ownyourbits.com>
|
||||
- Naoto Kobayashi <naoto.kobayashi4c@gmail.com>
|
||||
- Nazar Mokrynskyi <nazar@mokrynskyi.com>
|
||||
- Nick Sweeting <git@sweeting.me>
|
||||
- Nicolai Ehemann <en@enlightened.de>
|
||||
- Nicolas Grekas <nicolas.grekas@gmail.com>
|
||||
- Nicolas SIMIDE <2083596+dems54@users.noreply.github.com>
|
||||
- Nils <git@to.nilsschnabel.de>
|
||||
- Nils Wittenbrink <nilswittenbrink@web.de>
|
||||
- Nina Pypchenko <22447785+nina-py@users.noreply.github.com>
|
||||
- Nmz <nemesiz@nmz.lt>
|
||||
- NoSleep82 <52562874+NoSleep82@users.noreply.github.com>
|
||||
- Noveen Sachdeva <noveen.sachdeva@research.iiit.ac.in>
|
||||
- Ole Ostergaard <ole.c.ostergaard@gmail.com>
|
||||
- Ole Ostergaard <ole.ostergaard@knime.com>
|
||||
- Oliver Kohl D.Sc. <oliver@kohl.bz>
|
||||
- Oliver Wegner <void1976@gmail.com>
|
||||
- Olivier Paroz <github@oparoz.com>
|
||||
- Olivier Paroz <owncloud@interfasys.ch>
|
||||
- Orzu Ionut <orzu.ionut@gmail.com>
|
||||
- Owen Winkler <a_github@midnightcircus.com>
|
||||
- Pascal de Bruijn <pmjdebruijn@pcode.nl>
|
||||
- Patrick Paysant <patrick.paysant@linagora.com>
|
||||
- Patrik Kernstock <info@pkern.at>
|
||||
- Pauli Järvinen <pauli.jarvinen@gmail.com>
|
||||
- Pavel Krasikov <klonishe@gmail.com>
|
||||
- Pawel Boguslawski <pawel.boguslawski@ib.pl>
|
||||
- Pellaeon Lin <nfsmwlin@gmail.com>
|
||||
- Peter Kubica <peter@kubica.ch>
|
||||
- Petre T <petre.tudor@dorkfarm.com>
|
||||
- Phil Davis <phil.davis@inf.org>
|
||||
- Philip Gatzka <philip.gatzka@mailbox.org>
|
||||
- Philipp Kapfer <philipp.kapfer@gmx.at>
|
||||
- Philipp Schaffrath <github@philipp.schaffrath.email>
|
||||
- Philipp Staiger <philipp@staiger.it>
|
||||
- Philippe Jung <phil.jung@free.fr>
|
||||
- Pierre Ozoux <pierre@ozoux.net>
|
||||
- Pierre Rudloff <contact@rudloff.pro>
|
||||
- Piotr Filiciak <piotr@filiciak.pl>
|
||||
- Piotr M <mrow4a@yahoo.com>
|
||||
- Piotr Mrowczynski <mrow4a@yahoo.com>
|
||||
- Piotr Mrowczynski <piotr@owncloud.com>
|
||||
- Piotr Mrówczyński <mrow4a@yahoo.com>
|
||||
- Pytal <24800714+Pytal@users.noreply.github.com>
|
||||
- Qingping Hou <dave2008713@gmail.com>
|
||||
- Raghu Nayyar <hey@raghunayyar.com>
|
||||
- Ralph Krimmel <rkrimme1@gwdg.de>
|
||||
- Ramiro Aparicio <rapariciog@gmail.com>
|
||||
- Randolph Carter <RandolphCarter@fantasymail.de>
|
||||
- Rayn0r <andrew@ilpss8.myfirewall.org>
|
||||
- RealRancor <Fisch.666@gmx.de>
|
||||
- RealRancor <fisch.666@gmx.de>
|
||||
- Rello <Rello@users.noreply.github.com>
|
||||
- Remco Brenninkmeijer <requist1@starmail.nl>
|
||||
- Retidurc Silvernight <retidurc@silvernight.social>
|
||||
- Richard Steinmetz <richard@steinmetz.cloud>
|
||||
- Richard de Boer <github@tubul.net>
|
||||
- Rid <rid@cylo.io>
|
||||
- Rinat Gumirov <rinat.gumirov@mail.ru>
|
||||
- Robert Dailey <rcdailey@gmail.com>
|
||||
- Robin Appelman <robin@icewind.nl>
|
||||
- Robin McCorkell <robin@mccorkell.me.uk>
|
||||
- Robin Müller <coder-hugo@users.noreply.github.com>
|
||||
- Roeland Jago Douma <roeland@famdouma.nl>
|
||||
- Roger Szabo <roger.szabo@web.de>
|
||||
- Roland Tapken <roland@bitarbeiter.net>
|
||||
- Romain Rivière <lecoyote@lecoyote.org>
|
||||
- Roman Kreisel <mail@romankreisel.de>
|
||||
- Ross Nicoll <jrn@jrn.me.uk>
|
||||
- Rsplwe <i@rsplwe.com>
|
||||
- Ruben Homs <ruben@homs.codes>
|
||||
- RussellAult <RussellAult@users.noreply.github.com>
|
||||
- Rémy Jacquin <remy@remyj.fr>
|
||||
- S. Cat <33800996+sparrowjack63@users.noreply.github.com>
|
||||
- SA <stephen@mthosting.net>
|
||||
- Sascha Sambale <mastixmc@gmail.com>
|
||||
- Sam Bull <aa6bs0@sambull.org>
|
||||
- Sam Tuke <mail@samtuke.com>
|
||||
- Sam Tuke <samtuke@owncloud.com>
|
||||
- Samuel <faust64@gmail.com>
|
||||
- Samuel CHEMLA <chemla.samuel@gmail.com>
|
||||
- Sander Ruitenbeek <s.ruitenbeek@getgoing.nl>
|
||||
- Sander Ruitenbeek <sander@grids.be>
|
||||
- Sandro Lutz <sandro.lutz@temparus.ch>
|
||||
- Sanpi <sanpi@homecomputing.fr>
|
||||
- Sascha Wiswedel <sascha.wiswedel@nextcloud.com>
|
||||
- Scott Dutton <exussum12@users.noreply.github.com>
|
||||
- Scott Dutton <scott@exussum.co.uk>
|
||||
- Scott Shambarger <devel@shambarger.net>
|
||||
- Sean Comeau <sean@ftlnetworks.ca>
|
||||
- Sean Molenaar <sean@seanmolenaar.eu>
|
||||
- Sebastian Döll <sebastian.doell@libasys.de>
|
||||
- Sebastian Steinmetz <462714+steiny2k@users.noreply.github.com>
|
||||
- Sebastian Steinmetz <me@sebastiansteinmetz.ch>
|
||||
- Sebastian Wessalowski <sebastian@wessalowski.org>
|
||||
- Semih Serhat Karakaya <karakayasemi@itu.edu.tr>
|
||||
- Senorsen <senorsen.zhang@gmail.com>
|
||||
- Serge Martin <edb@sigluy.net>
|
||||
- Sergej Nikolaev <kinolaev@gmail.com>
|
||||
- Sergej Pupykin <pupykin.s@gmail.com>
|
||||
- Sergey Shliakhov <husband.sergey@gmail.com>
|
||||
- Sergio Bertolin <sbertolin@solidgear.es>
|
||||
- Sergio Bertolín <sbertolin@solidgear.es>
|
||||
- Serhii Shliakhov <shlyakhov.up@gmail.com>
|
||||
- Sijmen Schoon <me@sijmenschoon.nl>
|
||||
- Simon Könnecke <simonkoennecke@gmail.com>
|
||||
- Simon L <szaimen@e.mail.de>
|
||||
- Simon Leiner <simon@leiner.me>
|
||||
- Simon Spannagel <simonspa@kth.se>
|
||||
- Simounet <contact@simounet.net>
|
||||
- Sjors van der Pluijm <sjors@desjors.nl>
|
||||
- Stanimir Bozhilov <stanimir.bozhilov.1998@gmail.com>
|
||||
- Stanimir Bozhilov <stanimir@audriga.com>
|
||||
- Stefan <Stefan.Schilling@EXXETA.com>
|
||||
- Stefan Rado <owncloud@sradonia.net>
|
||||
- Stefan Schneider <stefan.schneider@squareweave.com.au>
|
||||
- Stefan Weiberg <sweiberg@suse.com>
|
||||
- Stefan Weil <sw@weilnetz.de>
|
||||
- Steffen Lindner <mail@steffen-lindner.de>
|
||||
- Stephan Müller <mail@stephanmueller.eu>
|
||||
- Stephan Orbaugh <stephan.orbaugh@nextcloud.com>
|
||||
- Stephan Peijnik <speijnik@anexia-it.com>
|
||||
- Stephen Cuppett <steve@cuppett.com>
|
||||
- Steven Bühner <buehner@me.com>
|
||||
- Sujith H <sharidasan@owncloud.com>
|
||||
- Sujith Haridasan <Sujith_Haridasan@mentor.com>
|
||||
- Sujith Haridasan <sujith.h@gmail.com>
|
||||
- Sven Strickroth <email@cs-ware.de>
|
||||
- Sylvain <git@sylvain.dev>
|
||||
- Sylvia van Os <sylvia@hackerchick.me>
|
||||
- Tekhnee <info@tekhnee.org>
|
||||
- Temtaime <temtaime@gmail.com>
|
||||
- Thibaut GRIDEL <tgridel@free.fr>
|
||||
- Thomas Citharel <nextcloud@tcit.fr>
|
||||
- Thomas Ebert <thomas.ebert@usability.de>
|
||||
- Thomas Müller <thomas.mueller@tmit.eu>
|
||||
- Thomas Pulzer <t.pulzer@kniel.de>
|
||||
- Thomas Tanghus <thomas@tanghus.net>
|
||||
- Tiago Flores <tiago.flores@yahoo.com.br>
|
||||
- Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
|
||||
- Tim Dettrick <t.dettrick@uq.edu.au>
|
||||
- Tim Obert <tobert@w-commerce.de>
|
||||
- Tim Terhorst <mynamewastaken+gitlab@gmail.com>
|
||||
- TimObert <tobert@w-commerce.de>
|
||||
- Timo Förster <tfoerster@webfoersterei.de>
|
||||
- Tobia De Koninck <LEDfan@users.noreply.github.com>
|
||||
- Tobia De Koninck <tobia@ledfan.be>
|
||||
- Tobias Assmann <tobias.assmann@ecsec.de>
|
||||
- Tobias Kaminsky <tobias@kaminsky.me>
|
||||
- Tobias Perschon <tobias@perschon.at>
|
||||
- Tom Grant <TomG736@users.noreply.github.com>
|
||||
- Tom Needham <tom@owncloud.com>
|
||||
- Tomasz Grobelny <tomasz@grobelny.net>
|
||||
- Tomasz Paluszkiewicz <tomasz.paluszkiewicz@gmail.com>
|
||||
- Tor Lillqvist <tml@collabora.com>
|
||||
- UmbrellaCodr <umbrella@biohazard.cc>
|
||||
- Unknown <anpz.asutp@gmail.com>
|
||||
- Unpublished <unpublished@gmx.net>
|
||||
- Valdnet <47037905+Valdnet@users.noreply.github.com>
|
||||
- Vanessa Pertsch <vanessa.pertsch@nextcloud.com>
|
||||
- Varun Patil <radialapps@gmail.com>
|
||||
- Varun Patil <varunpatil@ucla.edu>
|
||||
- Victor Dubiniuk <dubiniuk@owncloud.com>
|
||||
- Viktor Szépe <viktor@szepe.net>
|
||||
- Vincent Chan <plus.vincchan@gmail.com>
|
||||
- Vincent Petry <pvince81@owncloud.com>
|
||||
- Vincent Petry <vincent@nextcloud.com>
|
||||
- Vincent Van Houtte <vvh@aplusv.be>
|
||||
- Vinicius Cubas Brand <vinicius@eita.org.br>
|
||||
- Vitor Mattos <vitor@php.rio>
|
||||
- Vlastimil Pecinka <pecinka@email.cz>
|
||||
- Volkan Gezer <volkangezer@gmail.com>
|
||||
- Volker <skydiablo@gmx.net>
|
||||
- William <william.hak57@gmail.com>
|
||||
- William Pain <pain.william@gmail.com>
|
||||
- Xheni Myrtaj <myrtajxheni@gmail.com>
|
||||
- Xheni Myrtaj <xheni@protonmail.com>
|
||||
- Xuanwo <xuanwo@yunify.com>
|
||||
- ZitronePlus <tobiasscharf92@gmail.com>
|
||||
- acsfer <12234510+acsfer@users.noreply.github.com>
|
||||
- acsfer <carlos@reendex.com>
|
||||
- adrien <adrien.waksberg@believedigital.com>
|
||||
- alanmeeson <alan@carefullycalculated.co.uk>
|
||||
- aler9 <46489434+aler9@users.noreply.github.com>
|
||||
- alexweirig <alex.weirig@technolink.lu>
|
||||
- b108@volgograd "b108@volgograd"
|
||||
- bbx-github <53237674+bbx-github@users.noreply.github.com>
|
||||
- bladewing <lukas@ifflaender-family.de>
|
||||
- bline <scottbeck@gmail.com>
|
||||
- blizzz <blizzz@arthur-schiwon.de>
|
||||
- brad2014 <brad2014@users.noreply.github.com>
|
||||
- brumsel <brumsel@losecatcher.de>
|
||||
- cahogan <caitlin.hogan@swiftsolar.com>
|
||||
- call-me-matt <nextcloud@matthiasheinisch.de>
|
||||
- castillo92 <37965565+castillo92@users.noreply.github.com>
|
||||
- cetra3 <peter@parashift.com.au>
|
||||
- cmeh <cmeh@users.noreply.github.com>
|
||||
- comradekingu <epost@anotheragency.no>
|
||||
- dartcafe <github@dartcafe.de>
|
||||
- davidgumberg <davidnoizgumberg@gmail.com>
|
||||
- davitol <dtoledo@solidgear.es>
|
||||
- dems54 <2083596+dems54@users.noreply.github.com>
|
||||
- duritong <peter.meier+github@immerda.ch>
|
||||
- eduardo <eduardo@vnexu.net>
|
||||
- eleith <online+github@eleith.com>
|
||||
- enoch <lanxenet@hotmail.com>
|
||||
- essys <essys@users.noreply.github.com>
|
||||
- exner104 <59639860+exner104@users.noreply.github.com>
|
||||
- fabian <fabian@web2.0-apps.de>
|
||||
- felixboehm <felix@webhippie.de>
|
||||
- fenn-cs <fenn25.fn@gmail.com>
|
||||
- fnuesse <felix.nuesse@t-online.de>
|
||||
- fnuesse <fnuesse@techfak.uni-bielefeld.de>
|
||||
- greta <gretadoci@gmail.com>
|
||||
- Hector Valcarcel <hmvalcarcel@gmail.com>
|
||||
- helix84 <helix84@centrum.sk>
|
||||
- hkjolhede <hkjolhede@gmail.com>
|
||||
- hoellen <dev@hoellen.eu>
|
||||
- hosting.de, Johannes Leuker <developers@hosting.de>
|
||||
- howardZa <33491519+howardZa@users.noreply.github.com>
|
||||
- ideaship <ideaship@users.noreply.github.com>
|
||||
- j-ed <juergen@eisfair.org>
|
||||
- j3l11234 <297259024@qq.com>
|
||||
- jaltek <jaltek@mailbox.org>
|
||||
- jknockaert <jasper@knockaert.nl>
|
||||
- jld3103 <jld3103yt@gmail.com>
|
||||
- josh4trunks <joshruehlig@gmail.com>
|
||||
- julia.kirschenheuter <julia.kirschenheuter@nextcloud.com>
|
||||
- karakayasemi <karakayasemi@itu.edu.tr>
|
||||
- kevin147147 <kevintamool@gmail.com>
|
||||
- korelstar <korelstar@users.noreply.github.com>
|
||||
- leith abdulla <online-nextcloud@eleith.com>
|
||||
- lui87kw <lukas.ifflaender@uni-wuerzburg.de>
|
||||
- luz paz <luzpaz@github.com>
|
||||
- luz paz <luzpaz@pm.me>
|
||||
- lynn-stephenson <lynn.stephenson@protonmail.com>
|
||||
- macjohnny <estebanmarin@gmx.ch>
|
||||
- marco44 <cousinmarc@gmail.com>
|
||||
- martin.mattel@diemattels.at <martin.mattel@diemattels.at>
|
||||
- martink-p <47943787+martink-p@users.noreply.github.com>
|
||||
- matt <34400929+call-me-matt@users.noreply.github.com>
|
||||
- medcloud <42641918+medcloud@users.noreply.github.com>
|
||||
- michaelletzgus <michaelletzgus@users.noreply.github.com>
|
||||
- michag86 <micha_g@arcor.de>
|
||||
- michag86 <michag86@arcor.de>
|
||||
- mmccarn <mmccarn-github@mmsionline.us>
|
||||
- nhirokinet <nhirokinet@nhiroki.net>
|
||||
- nik gaffney <nik@fo.am>
|
||||
- nishiki <nishiki@yaegashi.fr>
|
||||
- noiob <8197071+noiob@users.noreply.github.com>
|
||||
- noveens <noveen.sachdeva@research.iiit.ac.in>
|
||||
- npmbuildbot[bot] "npmbuildbot[bot]@users.noreply.github.com"
|
||||
- onehappycat <one.happy.cat@gmx.com>
|
||||
- phisch <git@philippschaffrath.de>
|
||||
- pjft <pjft@users.noreply.github.com>
|
||||
- plumbeo <plumbeo@users.noreply.github.com>
|
||||
- rakekniven <2069590+rakekniven@users.noreply.github.com>
|
||||
- rakekniven <mark.ziegler@rakekniven.de>
|
||||
- raul <raul@nextcloud.com>
|
||||
- robottod <83244577+robottod@users.noreply.github.com>
|
||||
- root "root@oc.(none)"
|
||||
- root <root@localhost.localdomain>
|
||||
- rubo77 <github@r.z11.de>
|
||||
- sammo2828 <sammo2828@gmail.com>
|
||||
- scambra <sergio@entrecables.com>
|
||||
- scolebrook <scolebrook@mac.com>
|
||||
- shkdee <louis.traynard@m4x.org>
|
||||
- simonspa <1677436+simonspa@users.noreply.github.com>
|
||||
- smichel17 <git@smichel.me>
|
||||
- sodimel <corentin@244466666.xyz>
|
||||
- ste101 <stephan_bauer@gmx.de>
|
||||
- sualko <klaus@jsxc.org>
|
||||
- szaimen <szaimen@e.mail.de>
|
||||
- tbartenstein <tbartenstein@users.noreply.github.com>
|
||||
- tbelau666 <thomas.belau@gmx.de>
|
||||
- TechnicalSuwako <suwako@076.moe>
|
||||
- tgrant <tom.grant760@gmail.com>
|
||||
- timm2k <timm2k@gmx.de>
|
||||
- tux-rampage <tux-rampage@users.noreply.github.com>
|
||||
- v1r0x <vinzenz.rosenkranz@gmail.com>
|
||||
- voxsim "Simon Vocella"
|
||||
- waleczny <michal@walczak.xyz>
|
||||
- zorn-v <zorn7@yandex.ru>
|
||||
- zulan <git@zulan.net>
|
||||
- Łukasz Buśko <busko.lukasz@pm.me>
|
||||
- Nextcloud GmbH
|
||||
- ownCloud GmbH
|
||||
- ownCloud, Inc.
|
||||
ownCloud is written by:
|
||||
Frank Karlitschek
|
||||
Robin Appelman
|
||||
Jakob Sack
|
||||
Jan-Christoph Borchardt
|
||||
Michael Gapczynski
|
||||
Arthur Schiwon
|
||||
Bart Visscher
|
||||
Georg Ehrke
|
||||
Brice Maron
|
||||
Tom Needham
|
||||
Marvin Thomas Rabe
|
||||
Florian Pritz
|
||||
Bartek Przybylski
|
||||
Thomas Müller
|
||||
Klaas Freitag
|
||||
Sam Tuke
|
||||
Simon Birnbach
|
||||
Lukas Reschke
|
||||
Christian Reiner
|
||||
Daniel Molkentin
|
||||
…
|
||||
|
||||
With help from many libraries and frameworks including:
|
||||
Open Collaboration Services
|
||||
SabreDAV
|
||||
jQuery
|
||||
…
|
||||
|
||||
"Lock” symbol from thenounproject.com collection
|
||||
"Clock” symbol by Brandon Hopkins, from thenounproject.com collection
|
||||
@@ -1,8 +0,0 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
Changelog
|
||||
=========
|
||||
|
||||
The change log is at [https://nextcloud.com/changelog/](https://nextcloud.com/changelog/).
|
||||
@@ -1,13 +0,0 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
In the Nextcloud community, participants from all over the world come together to create Free Software for a free internet. This is made possible by the support, hard work and enthusiasm of thousands of people, including those who create and use Nextcloud software.
|
||||
|
||||
Our code of conduct offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
|
||||
|
||||
The Code of Conduct is shared by all contributors and users who engage with the Nextcloud team and its community services. It presents a summary of the shared values and “common sense” thinking in our community.
|
||||
|
||||
You can find our full code of conduct on our website: https://nextcloud.com/code-of-conduct/
|
||||
|
||||
Please, keep our CoC in mind when you contribute! That way, everyone can be a part of our community in a productive, positive, creative and fun way.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user