diff --git a/.circleci/config.yml b/.circleci/config.yml index 60cec86..eb107a4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,26 +1,180 @@ -version: 2.0 -jobs: - build: - environment: - CC_TEST_REPORTER_ID: 2678f0cf84e1bf8b9f0868c9cf8e88c9475fe87d4f1b3cec796eba8a3838eaef - docker: - - image: circleci/php:7-cli-node-browsers-legacy - working_directory: ~/repo +# PHPUnit Composer min/max test. +# TODO: Make our own orb out of this. + +version: 2.1 +orbs: + php: circleci/php@1.1.0 + +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: - - checkout + - when: + condition: << parameters.with-cache >> + steps: + - restore_cache: + keys: + - composer-deps-<>-{{ checksum "<>/<>" }} - run: - name: Setup dependencies command: | - sudo composer self-update - composer install -n --prefer-dist + 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: <> + - run: + command: composer update <> + name: Updating Composer Packages + working_directory: <> + - when: + condition: << parameters.with-cache >> + steps: + - save_cache: + key: composer-deps-<>-{{ checksum "<>/<>" }} + paths: + - <>/<> + - <> + 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: Setup Code Climate tests-reporter + 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: - 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 $? + + 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: <> + cache-key: composer.json + install-flags: <> + - when: + condition: <> + steps: + - install-xdebug + - install-cc-test-reporter + - run: | + ./cc-test-reporter before-build + XDEBUG_MODE=coverage composer <> -- --coverage-clover clover.xml + ./cc-test-reporter after-build --coverage-input-type clover --exit-code $? + - when: + condition: + not: <> + steps: + - run: | + XDEBUG_MODE=off composer <> + +jobs: + matrix-conditions: + environment: + CC_TEST_REPORTER_ID: 28eb57ab63aa0163f21d341acfc023bb4ea9e49b8db17ba440e99c9a16007700 + 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", <> ] + - equal: [ "", <> ] + steps: + - run-phpunit-tests: + report-to-codeclimate: true + install-flags: << parameters.install-flags >> + - when: + condition: + not: + and: + - equal: [ "8.1", <> ] + - equal: [ "", <> ] + 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"] diff --git a/.gitignore b/.gitignore index a75dba1..ec3b68d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /vendor/ composer.lock .idea +.ddev \ No newline at end of file diff --git a/composer.json b/composer.json index c947759..b997bec 100644 --- a/composer.json +++ b/composer.json @@ -1,14 +1,8 @@ { "name": "getdkan/json-schema-provider", "description": "A simple class that validates and provides JSON schemas.", - "type": "library", - "autoload": { - "psr-4": { - "JsonSchemaProvider\\": "src/", - "JsonSchemaProviderTest\\": "test/" - } - }, "license": "GPL-3.0-only", + "type": "library", "authors": [ { "name": "fmizzell", @@ -16,10 +10,29 @@ } ], "require": { - "justinrainbow/json-schema": "^5.2", - "getdkan/contracts": "^1.0.0" + "getdkan/contracts": "^1.0.0", + "justinrainbow/json-schema": "^5.2.11" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": ">=7.5 <8.5 || >8.5.14 <10", + "rector/rector": "^0.15.17", + "squizlabs/php_codesniffer": "^3.7" + }, + "autoload": { + "psr-4": { + "JsonSchemaProvider\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "JsonSchemaProviderTest\\": "test/" + } + }, + "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" } } diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 0000000..45200cd --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,14 @@ + + + + + PHP CodeSniffer configuration for GetDKAN. + + src + test + rector.php + + + + + diff --git a/rector.php b/rector.php new file mode 100644 index 0000000..ef87dbc --- /dev/null +++ b/rector.php @@ -0,0 +1,17 @@ +paths([ + __DIR__ . '/src', + __DIR__ . '/test', + ]); + + $rectorConfig->sets([ + LevelSetList::UP_TO_PHP_74, + ]); +};