Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

13589 Target PHP 7.4, support PHP 8.1 #14

Merged
merged 5 commits into from
Mar 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
204 changes: 179 additions & 25 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,180 @@
version: 2.0
# PHPUnit Composer min/max test.
# TODO: Make our own orb out of this.

version: 2.1
orbs:
php: circleci/[email protected]

commands:
update-packages:
description: |
Update your composer packages with automated caching and best practices applied.
parameters:
app-dir:
default: ~/project
description: Path to the directory containing your composer.json file. Not needed if composer.json lives in the root.
type: string
cache-files-dir:
default: /home/circleci/.composer/cache/files
description: Absolute path to the file cache folder. This should be inline with "composer global config cache-files-dir --absolute".
type: string
cache-key:
default: composer.lock
description: If this file is updated a new cache bucket will be created. Recommended to use composer.lock. Use composer.json when composer.lock is absent.
type: string
cache-version:
default: v1
description: Change the default cache version if you need to clear the cache for any reason.
type: string
install-flags:
default: --no-interaction --prefer-dist
description: |
By default, packages will be installed with "composer install --no-interaction --prefer-dist", use this to override the standard install flags.
type: string
vendor-dir:
default: vendor
description: Relative path to the vendor folder. Relative to "app-dir". This should be inline with "composer config vendor-dir".
type: string
with-cache:
default: true
description: Enable automatic caching of your dependencies for increased speed.
type: boolean
steps:
- when:
condition: << parameters.with-cache >>
steps:
- restore_cache:
keys:
- composer-deps-<<parameters.cache-version>>-{{ checksum "<<parameters.app-dir>>/<<parameters.cache-key>>" }}
- run:
command: |
if [ ! -f "composer.json" ] && [ ! -f "composer.lock" ]; then
echo
echo "---"
echo "Unable to find your composer.json and composer.lock files. Did you forget to set the app-dir parameter?"
echo "---"
echo
echo "Current directory: $(pwd)"
echo
echo
echo "List directory: "
echo
ls
exit 1
fi
name: Verify composer.json and/or composer.lock exist
working_directory: <<parameters.app-dir>>
- run:
command: composer update <<parameters.install-flags>>
name: Updating Composer Packages
working_directory: <<parameters.app-dir>>
- when:
condition: << parameters.with-cache >>
steps:
- save_cache:
key: composer-deps-<<parameters.cache-version>>-{{ checksum "<<parameters.app-dir>>/<<parameters.cache-key>>" }}
paths:
- <<parameters.app-dir>>/<<parameters.vendor-dir>>
- <<parameters.cache-files-dir>>
install-xdebug:
steps:
- run:
name: Install XDebug
command: sudo -E install-php-extensions xdebug && sudo -E docker-php-ext-enable xdebug

install-cc-test-reporter:
# TODO: Parameterize location.
steps:
- run:
name: Install Codeclimate test reporter
command: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter

run-phpunit-tests:
description: |
Run PHPUnit tests.
parameters:
app-dir:
default: ~/project
description: Path to the directory containing your composer.json file. Not needed if composer.json lives in the root.
type: string
install-flags:
default: ""
description: Arguments to `composer update`.
type: string
test-command:
default: test
description: The name of the script within your composer.json which will run your tests.
type: string
report-to-codeclimate:
type: boolean
default: false
description: Report coverage info to Codeclimate.
steps:
- checkout
- update-packages:
app-dir: <<parameters.app-dir>>
cache-key: composer.json
install-flags: <<parameters.install-flags>>
- when:
condition: <<parameters.report-to-codeclimate>>
steps:
- install-xdebug
- install-cc-test-reporter
- run: |
./cc-test-reporter before-build
XDEBUG_MODE=coverage composer <<parameters.test-command>> -- --coverage-clover clover.xml
./cc-test-reporter after-build --coverage-input-type clover --exit-code $?
- when:
condition:
not: <<parameters.report-to-codeclimate>>
steps:
- run: |
XDEBUG_MODE=off composer <<parameters.test-command>>

jobs:
build:
environment:
CC_TEST_REPORTER_ID: d20339bfed51b1e242630efbe3f2745337794f7a856f610aad4d21897c5e0309
docker:
- image: circleci/php:7-cli-node-browsers-legacy
working_directory: ~/repo
steps:
- checkout
- run:
name: Setup dependencies
command: |
sudo composer self-update
composer install -n --prefer-dist
- run:
name: Setup Code Climate test-reporter
command: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter
- run:
name: Run tests
command: |
./cc-test-reporter before-build
vendor/bin/phpunit --testsuite all --coverage-clover clover.xml
./cc-test-reporter after-build --coverage-input-type clover --exit-code $?
matrix-conditions:
environment:
CC_TEST_REPORTER_ID: d20339bfed51b1e242630efbe3f2745337794f7a856f610aad4d21897c5e0309
description: Run tests for matrix
executor:
name: php/default
tag: << parameters.version >>
parameters:
version:
default: "7.4"
description: The `cimg/php` Docker image version tag.
type: string
install-flags:
default: ""
description: Arguments to `composer update`.
type: string
steps:
- when:
condition:
and:
- equal: [ "8.1", <<parameters.version>> ]
- equal: [ "", <<parameters.install-flags>> ]
steps:
- run-phpunit-tests:
report-to-codeclimate: true
install-flags: << parameters.install-flags >>
- when:
condition:
not:
and:
- equal: [ "8.1", <<parameters.version>> ]
- equal: [ "", <<parameters.install-flags>> ]
steps:
- run-phpunit-tests:
install-flags: << parameters.install-flags >>

workflows:
all-tests:
jobs:
- matrix-conditions:
matrix:
parameters:
version: ["7.4", "8.0", "8.1"]
install-flags: ["", "--prefer-lowest"]
2 changes: 1 addition & 1 deletion .codeclimate.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: 2
version: "2"
plugins:
phpcodesniffer:
enabled: true
Expand Down
14 changes: 14 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# This is the top-most .editorconfig file; do not search in parent directories.
root = true

# All files.
[*]
end_of_line = LF
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[composer.{json,lock}]
indent_size = 4
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea
.phpunit.result.cache
vendor
composer.lock
39 changes: 29 additions & 10 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,40 @@
{
"name": "getdkan/contracts",
"description": "A set of interfaces.",
"license": "GPL-3.0-only",
"type": "library",
"authors": [
{
"name": "fmizzell",
"email": "[email protected]"
}
],
"require": {
"php": ">=7.4 <9.0"
},
"require-dev": {
"phpunit/phpunit": "^9.6",
"rector/rector": "^0.15.17",
"squizlabs/php_codesniffer": "^3.7"
},
"autoload": {
"psr-4": {
"Contracts\\": "src/",
"Contracts\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"ContractsTest\\": "test/"
}
},
"require-dev": {
"phpunit/phpunit": "~7.5.0"
"config": {
"sort-packages": true
},
"license": "GPL-3.0-only",
"authors": [
{
"name": "fmizzell",
"email": "[email protected]"
}
]
"scripts": {
"phpcbf": "./vendor/bin/phpcbf",
"phpcs": "./vendor/bin/phpcs",
"rector": "./vendor/bin/rector process",
"rector-dry-run": "./vendor/bin/rector process --dry-run",
"test": "./vendor/bin/phpunit --testsuite all"
}
}
14 changes: 14 additions & 0 deletions phpcs.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="getdkan">

<arg name="extensions" value="inc,install,module,php,profile,test,theme,yml"/>
<description>PHP CodeSniffer configuration for GetDKAN.</description>

<file>src</file>
<file>test</file>
<file>rector.php</file>

<rule ref="PSR1"/>
<rule ref="PSR2"/>

</ruleset>
22 changes: 9 additions & 13 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.3/phpunit.xsd"
verbose="false">

<?xml version="1.0"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" verbose="false">
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">src</directory>
</include>
</coverage>
<testsuites>
<testsuite name="all">
<directory suffix="Test.php" phpVersion="7.2" phpVersionOperator=">=">test</directory>
<directory suffix="Test.php">test</directory>
</testsuite>
</testsuites>

<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>

</phpunit>
26 changes: 26 additions & 0 deletions rector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

/**
* Generic PHP 7.4 update.
*/

declare(strict_types=1);

use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Php73\Rector\FuncCall\JsonThrowOnErrorRector;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/src',
__DIR__ . '/test',
]);

$rectorConfig->sets([
LevelSetList::UP_TO_PHP_74,
]);

$rectorConfig->skip([
JsonThrowOnErrorRector::class,
]);
};
2 changes: 1 addition & 1 deletion src/Mock/IdGenerator/Sequential.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

class Sequential implements IdGeneratorInterface
{
private $id = 0;
private int $id = 0;
public function generate()
{
$this->id++;
Expand Down
12 changes: 5 additions & 7 deletions src/Mock/Storage/JsonObjectMemory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ class JsonObjectMemory extends Memory implements
OffsetterInterface,
LimiterInterface
{
private $offset = 0;
private $limit = 0;
private int $offset = 0;
private int $limit = 0;

private $sorts = [
private array $sorts = [
'ascend' => [],
'descend' => [],
];

private $conditions = [];
private array $conditions = [];

public function retrieveAll(): array
{
Expand Down Expand Up @@ -85,9 +85,7 @@ private function applyFilters(array $results)

foreach ($this->sorts as $type => $properties) {
foreach ($properties as $property) {
usort($results, function ($a, $b) use ($property) {
return $this->compare($a, $b, $property);
});
usort($results, fn($a, $b) => $this->compare($a, $b, $property));

if ($type == 'descend') {
$results = array_reverse($results);
Expand Down
Loading