diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml
new file mode 100644
index 000000000..4f40268c6
--- /dev/null
+++ b/.github/workflows/static-analysis.yml
@@ -0,0 +1,26 @@
+name: Static analysis
+
+on: [pull_request]
+
+jobs:
+ static-psalm-analysis:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ ocp-version: [ 'dev-master' ]
+ name: Nextcloud ${{ matrix.ocp-version }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@master
+ - name: Set up php
+ uses: shivammathur/setup-php@master
+ with:
+ php-version: 7.4
+ tools: composer:v1
+ coverage: none
+ - name: Install dependencies
+ run: composer i
+ - name: Install dependencies
+ run: composer require --dev christophwurst/nextcloud:${{ matrix.ocp-version }}
+ - name: Run coding standards check
+ run: composer run psalm
diff --git a/composer.json b/composer.json
index 223d7d598..67a266fff 100644
--- a/composer.json
+++ b/composer.json
@@ -2,21 +2,24 @@
"name": "nextcloud/notifications",
"description": "notifications",
"license": "AGPL",
- "require": {},
+ "require": {
+ },
"require-dev": {
"phpunit/phpunit": "^8.5",
- "nextcloud/coding-standard": "^0.3.0"
+ "nextcloud/coding-standard": "^0.3.0",
+ "psalm/phar": "^4.3"
},
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true,
"platform": {
- "php": "7.2"
+ "php": "7.3"
}
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -not -path './build/*' -print0 | xargs -0 -n1 php -l",
"cs:check": "php-cs-fixer fix --dry-run --diff",
- "cs:fix": "php-cs-fixer fix"
+ "cs:fix": "php-cs-fixer fix",
+ "psalm": "psalm.phar"
}
}
diff --git a/composer.lock b/composer.lock
index ca4aa00b2..5508f6dbb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ff852300cf09d0acae1f3c2866605367",
+ "content-hash": "e3537c3628e10b6e06c2bb95b2d2786f",
"packages": [],
"packages-dev": [
{
@@ -1317,6 +1317,37 @@
],
"time": "2020-12-01T04:53:52+00:00"
},
+ {
+ "name": "psalm/phar",
+ "version": "4.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psalm/phar.git",
+ "reference": "f61d8f0eaaf5f7c26f1269ddeaf1fbe29dff1bee"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psalm/phar/zipball/f61d8f0eaaf5f7c26f1269ddeaf1fbe29dff1bee",
+ "reference": "f61d8f0eaaf5f7c26f1269ddeaf1fbe29dff1bee",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "vimeo/psalm": "*"
+ },
+ "bin": [
+ "psalm.phar"
+ ],
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Composer-based Psalm Phar",
+ "time": "2020-12-03T21:44:12+00:00"
+ },
{
"name": "psr/container",
"version": "1.0.0",
diff --git a/psalm.xml b/psalm.xml
new file mode 100644
index 000000000..8f37a4d7d
--- /dev/null
+++ b/psalm.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml
new file mode 100644
index 000000000..0453e0c5c
--- /dev/null
+++ b/tests/psalm-baseline.xml
@@ -0,0 +1,92 @@
+
+
+
+
+ IProvider
+ IProvider
+
+
+
+
+ null
+ null
+ null
+ null
+
+
+
+
+ null
+ null
+ null
+ null
+ null
+ null
+ null
+ null
+
+
+
+
+ IProvider
+ IToken
+ IToken
+ IToken
+ IToken
+ InvalidTokenException
+ InvalidTokenException
+ Manager
+
+
+ $this->tokenProvider
+ $this->tokenProvider
+ IProvider
+ Manager
+
+
+
+
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+ Type
+
+
+
+
+ $e
+ $e
+ ClientException
+ IProvider
+ InvalidTokenException
+ Key
+ Key
+ Manager
+ ServerException
+
+
+ $this->keyManager
+ $this->keyManager
+ $this->tokenProvider
+ IProvider
+ Manager
+
+
+