diff --git a/.editorconfig b/.editorconfig index 37eca51..c48539a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,6 +7,10 @@ root = true [*] end_of_line = lf insert_final_newline = true +trim_trailing_whitespace = true charset = utf-8 indent_style = space +indent_size = 4 + +[*.{yml,yaml}] indent_size = 2 diff --git a/.gitattributes b/.gitattributes index af30937..f01e22c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,12 @@ -dist/** -diff linguist-generated=true +/.editorconfig export-ignore +/.gitattributes export-ignore +/.github/ export-ignore +/.gitignore export-ignore +/CHANGELOG.md export-ignore +/CODE_OF_CONDUCT.md export-ignore +/composer.json export-ignore +/composer.lock export-ignore +/CONTRIBUTING.md export-ignore +/SECURITY.md export-ignore +/subdirectory/ export-ignore +/tests/ export-ignore diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 8e7d8bb..28ba294 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -1,29 +1,31 @@ -name: "CI" +# GitHub Actions Documentation: https://docs.github.com/en/actions -on: - pull_request: - push: - branches: - - "v[0-9]+" +name: "build" -jobs: +on: ["pull_request", "push"] - # Make sure build/ci work properly. - build: - name: "Build" +jobs: + test: + name: "Expect Tests" runs-on: "ubuntu-latest" steps: - - uses: "actions/checkout@v2" - - uses: "shivammathur/setup-php@v2" + - name: "Checkout repository" + uses: "actions/checkout@v2" + - name: "Install expect" + run: | + sudo apt-get update + sudo apt-get -y install expect + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" with: php-version: "latest" - - run: "npm install" - - run: "npm run all" - - uses: "codecov/codecov-action@v1" + tools: "composer:v2" + coverage: "none" + - name: "Run expect tests" + run: "composer test" - # Make sure the action works on a clean machine without building. - test: - name: "Test" + run: + name: "Run Action" runs-on: "${{ matrix.operating-system }}" strategy: matrix: @@ -35,14 +37,31 @@ jobs: - "highest" - "locked" composer-options: - - "--working-dir subdirectory" + - "--ignore-platform-reqs" + - "" + working-directory: + - "subdirectory" + - "" + ignore-cache: + - "yes" + - "" + custom-cache-key: + - "my-super-custom-cache-key" - "" steps: - - uses: "actions/checkout@v2" - - uses: "shivammathur/setup-php@v2" + - name: "Checkout repository" + uses: "actions/checkout@v2" + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" with: php-version: "latest" - - uses: ./ + tools: "composer:v2" + coverage: "none" + - name: "Run composer-install action" + uses: ./ with: dependency-versions: "${{ matrix.dependency-versions }}" composer-options: "${{ matrix.composer-options }}" + working-directory: "${{ matrix.working-directory }}" + ignore-cache: "${{ matrix.ignore-cache }}" + custom-cache-key: "${{ matrix.custom-cache-key }}" diff --git a/.gitignore b/.gitignore index b7bcb29..23bd630 100644 --- a/.gitignore +++ b/.gitignore @@ -1,101 +1,2 @@ -# Dependency directory -node_modules - -# Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# next.js build output -.next - -# nuxt.js build output -.nuxt - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# OS metadata -.DS_Store -Thumbs.db - -# Ignore built ts files -__tests__/runner/* -lib/**/* - -vendor/ +**/vendor/ +/tests/expect/**.txt diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9f6d9bb..b39ae47 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,17 +68,32 @@ When you do begin working on your feature, here are some guidelines to consider: ## Running Tests -The following must pass before we will accept a pull request. If this does not -pass, it will result in a complete build failure. Before you can run this, be -sure to `npm install`. +This project includes a suite of tests located in `tests/expect/`. +These tests use the [Expect](https://en.wikipedia.org/wiki/Expect) tool to +automate CLI interactions. The tests will run automatically as part of +continuous integration, or you may run them locally with: -To run all the tests and coding standards checks, execute the following from the -command line, while in the project root directory: +``` +composer test +``` + +To run the tests, you must have an up-to-date version of coreutils (8.30 or +later). + +To generate a new test: ``` -npm run all +cd tests/expect/ +autoexpect ../../bin/path-to-script-to-test.sh ``` +`autoexpect` will save the test to `script.exp`. Rename it with a more +descriptive name, and run it to ensure it does what you expect: `./script.exp`. +You may need to edit the test file or add to it, according to your needs. + +When done, `cd ../..` and run `composer test`. +Your new test should run along with the other tests. + [github]: https://github.com/ramsey/composer-install [issues]: https://github.com/ramsey/composer-install/issues [pull requests]: https://github.com/ramsey/composer-install/pulls diff --git a/README.md b/README.md index ebe73ee..e467e89 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ the [Setup PHP](https://github.com/shivammathur/setup-php) action as a step. ```yaml - uses: "shivammathur/setup-php@v2" with: - php-version: "8.0" -- uses: "ramsey/composer-install@v1" + php-version: "latest" +- uses: "ramsey/composer-install@v2" ``` :bulb: There is no need to set up a separate caching step since ramsey/composer-install @@ -61,12 +61,12 @@ Valid values are: (equivalent to running `composer update`) * `lowest`: installs the lowest versions of Composer dependencies (equivalent - to running `composer update --prefer-lowest`) + to running `composer update --prefer-lowest --prefer-stable`) For example: ```yaml -- uses: "ramsey/composer-install@v1" +- uses: "ramsey/composer-install@v2" with: dependency-versions: "lowest" ``` @@ -80,33 +80,72 @@ options, you may use the `composer-options` input parameter. For example: ```yaml -- uses: "ramsey/composer-install@v1" +- uses: "ramsey/composer-install@v2" with: - composer-options: "--ignore-platform-reqs --working-dir=backend" + composer-options: "--ignore-platform-reqs --optimize-autoloader" ``` -### Alternate `composer.json` Locations +#### working-directory -If `composer.json` is not located in your repository root, or if you have -multiple `composer.json` files located in various parts of your project, you may -specify the `--working-dir` option as part of `composer-options`. You may use -this step as many times as needed, if you have multiple `composer.json` files. +The `working-directory` input parameter allows you to specify a different +location for your `composer.json` file. For example, if your `composer.json` is +located in `packages/acme-foo/`, use `working-directory` to tell +ramsey/composer-install where to run things. + +```yaml +- uses: "ramsey/composer-install@v2" + with: + working-directory: "packages/acme-foo" +``` + +You may use this step as many times as needed, if you have multiple +`composer.json` files. For example: ```yaml # Install dependencies using composer.json in the root. -- uses: "ramsey/composer-install@v1" +- uses: "ramsey/composer-install@v2" # Install dependencies using composer.json in src/Component/Config/ -- uses: "ramsey/composer-install@v1" +- uses: "ramsey/composer-install@v2" with: - composer-options: "--working-dir=src/Component/Config" + working-directory: "src/Component/Config" # Install dependencies using composer.json in src/Component/Validator/ -- uses: "ramsey/composer-install@v1" +- uses: "ramsey/composer-install@v2" + with: + working-directory: "src/Component/Validator" +``` + +#### ignore-cache + +If you have jobs for which you wish to completely ignore the caching step, you +may use the `ignore-cache` input parameter. When present, ramsey/composer-install +will neither read from nor write to the cache. + +Values of `'yes'`, `true`, or `1` will tell the action to ignore the cache. For +any other value, the action will use the default behavior, which is to read from +and store to the cache. + +```yaml +- uses: "ramsey/composer-install@v2" + with: + ignore-cache: "yes" +``` + +#### custom-cache-key + +There may be times you wish to specify your own cache key. You may do so with +the `custom-cache-key` input parameter. When provided, ramsey/composer-install +will not use the auto-generated cache key, so if your `composer.json` or +`composer.lock` files change, you'll need to update the custom cache key if you +wish to update the cache. + +```yaml +- uses: "ramsey/composer-install@v2" with: - composer-options: "--working-dir=src/Component/Validator" + custom-cache-key: "my-custom-cache-key" ``` ### Matrix Example @@ -122,14 +161,14 @@ Here's an example of how you might use the `dependency-versions` and strategy: matrix: php: - - "7.3" - "7.4" - "8.0" + - "8.1" dependencies: - "lowest" - "highest" include: - - php-version: "8.1" + - php-version: "8.2" composer-options: "--ignore-platform-reqs" steps: @@ -137,7 +176,7 @@ steps: - uses: "shivammathur/setup-php@v2" with: php-version: "${{ matrix.php }}" - - uses: "ramsey/composer-install@v1" + - uses: "ramsey/composer-install@v2" with: dependency-versions: "${{ matrix.dependencies }}" composer-options: "${{ matrix.composer-options }}" diff --git a/action.yml b/action.yml index 6e01a1e..f419ebe 100644 --- a/action.yml +++ b/action.yml @@ -11,20 +11,71 @@ branding: inputs: dependency-versions: description: >- - The version of dependencies to prefer (lowest, highest, or locked). + The version of dependencies to prefer (`lowest`, `highest`, or `locked`). required: true default: "locked" composer-options: description: >- - Additional options to pass to Composer (e.g. --ignore-platform-reqs). + Additional options to pass to Composer (e.g. `--ignore-platform-reqs`). required: false working-directory: description: >- - Where the composer.json is located + The directory where composer.json is located, if it is not in the repository root. + required: false + ignore-cache: + description: >- + Whether to ignore the cache. Values accepted: `'yes'`, `true`, `1`. + required: false + custom-cache-key: + description: >- + A custom cache key to use instead of an auto-generated cache key. required: false runs: - using: "node12" - main: "dist/main/index.js" - post: "dist/post/index.js" - post-if: "success()" + using: "composite" + steps: + - name: "Determine PHP version" + id: "php-version" + shell: "bash" + run: "${GITHUB_ACTION_PATH}/bin/php_version.sh" + + - name: "Determine whether we should ignore caching" + id: "should-cache" + shell: "bash" + run: "${GITHUB_ACTION_PATH}/bin/should_cache.sh \"${{ inputs.ignore-cache }}\"" + + - name: "Determine Composer cache directory" + id: "composer-cache" + if: steps.should-cache.outputs.do-cache == 1 + shell: "bash" + run: "${GITHUB_ACTION_PATH}/bin/composer_cache_dir.sh" + + - name: "Determine cache key" + id: "cache-key" + if: steps.should-cache.outputs.do-cache == 1 + shell: "bash" + run: | + ${GITHUB_ACTION_PATH}/bin/cache_key.sh \ + "${{ runner.os }}" \ + "${{ steps.php-version.outputs.php }}" \ + "${{ inputs.dependency-versions }}" \ + "${{ inputs.composer-options }}" \ + "${{ hashFiles('**/composer.json', '**/composer.lock') }}" \ + "${{ inputs.custom-cache-key }}" + + - name: "Cache Composer dependencies" + if: steps.should-cache.outputs.do-cache == 1 + uses: "actions/cache@v2" + with: + path: "${{ steps.composer-cache.outputs.directory }}" + key: "${{ steps.cache-key.outputs.key }}" + restore-keys: | + ${{ env.CACHE_RESTORE_KEY }} + + - name: "Install Composer dependencies" + shell: "bash" + run: | + ${GITHUB_ACTION_PATH}/bin/composer_install.sh \ + "${{ inputs.dependency-versions }}" \ + "${{ inputs.composer-options }}" \ + "${{ inputs.working-directory }}" diff --git a/bin/cache_key.sh b/bin/cache_key.sh new file mode 100755 index 0000000..b0eadac --- /dev/null +++ b/bin/cache_key.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +runner_os="${1}" +php_version="${2}" +dependency_versions="${3}" +composer_options="${4}" +files_hash="${5}" +custom_cache_key="${6}" + +key=() +restore_key=() + +function join_by { + local d=${1-} f=${2-} + if shift 2; then + printf %s "$f" "${@/#/$d}" + fi +} + +if [ -n "${custom_cache_key}" ]; then + key+=("${custom_cache_key}") +else + key+=("${runner_os}" "php" "${php_version}" "composer") + restore_key=("$(join_by - ${key[@]/#/})-" "${restore_key[@]}") + + key+=("${dependency_versions}") + restore_key=("$(join_by - ${key[@]/#/})-" "${restore_key[@]}") + + key+=("${composer_options}") + restore_key=("$(join_by - ${key[@]/#/})-" "${restore_key[@]}") + + key+=("${files_hash}") +fi + +# Remove duplicates. +uniq_restore_key=($(tr ' ' '\n' <<<"${restore_key[@]}" | awk '!u[$0]++' | tr '\n' ' ')) + +cache_key="$(join_by - ${key[@]/#/})" +cache_restore_key="$(join_by $'\n' ${uniq_restore_key[@]/#/})" + +echo "::notice title=Primary Cache Key::Cache primary key is '${cache_key}'" +echo "::notice title=Restore Cache Keys::Cache restore keys are '$(join_by ', ' ${uniq_restore_key[@]/#/})'" + +echo "::set-output name=key::${cache_key}" + +# Use an environment variable to capture the multiline restore key. +# See: https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions#multiline-strings +echo "CACHE_RESTORE_KEY<> "$GITHUB_ENV" +echo "${cache_restore_key}" >> "$GITHUB_ENV" +echo "EOF" >> "$GITHUB_ENV" diff --git a/bin/composer_cache_dir.sh b/bin/composer_cache_dir.sh new file mode 100755 index 0000000..2101bff --- /dev/null +++ b/bin/composer_cache_dir.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +cache_dir="$(composer config cache-dir)" + +echo "::notice title=Composer Cache::Composer cache directory found at '${cache_dir}'" +echo "::set-output name=directory::${cache_dir}" diff --git a/bin/composer_install.sh b/bin/composer_install.sh new file mode 100755 index 0000000..9d13607 --- /dev/null +++ b/bin/composer_install.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +dependency_versions="${1:-locked}" +additional_composer_options="${2}" +working_directory="${3}" + +composer_command="update" +composer_options=( + "--no-interaction" + "--no-progress" + "--ansi" +) + +case "${dependency_versions}" in + locked) composer_command="install" ;; + lowest) composer_options+=("--prefer-lowest" "--prefer-stable") ;; + highest) ;; +esac + +IFS=' ' +additional_options=("${additional_composer_options}") +for option in "${additional_options[@]}"; do + composer_options+=("${option}") +done + +if [ -n "${working_directory}" ]; then + composer_options+=("--working-dir") + composer_options+=("${working_directory}") +fi + +echo "::notice title=Composer::Using the following Composer command: 'composer ${composer_command} ${composer_options[*]}'" +composer "${composer_command}" ${composer_options[*]} diff --git a/bin/php_version.sh b/bin/php_version.sh new file mode 100755 index 0000000..37efe10 --- /dev/null +++ b/bin/php_version.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +php_version=$(php -r 'echo phpversion();') + +echo "::notice title=PHP Version::PHP version is '${php_version}'" +echo "::set-output name=php::${php_version}" diff --git a/bin/should_cache.sh b/bin/should_cache.sh new file mode 100755 index 0000000..a33f3f7 --- /dev/null +++ b/bin/should_cache.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +ignore_cache="${1}" +should_cache=1 +will_cache="will cache" + +case "${ignore_cache}" in + 1) should_cache=0 ;; + yes) should_cache=0 ;; + true) should_cache=0 ;; +esac + +if [ $should_cache -eq 0 ]; then + will_cache="will NOT cache" +fi + +echo "::notice title=Should We Cache?::We ${will_cache} the dependencies because ignore-cache is set to '${ignore_cache}'" +echo "::set-output name=do-cache::${should_cache}" diff --git a/composer.json b/composer.json index dac3757..79246e3 100644 --- a/composer.json +++ b/composer.json @@ -1,15 +1,18 @@ { - "name": "ramsey/composer-install", - "description": "A GitHub Action to install and cache Composer dependencies.", - "license": "MIT", - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com" + "name": "ramsey/composer-install-test", + "description": "This tests Composer installation using this GitHub Action.", + "license": "MIT", + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com" + } + ], + "require": {}, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "scripts": { + "test": "./tests/bash-test.sh tests/tests.sh" } - ], - "require": {}, - "require-dev": { - "phpunit/phpunit": "^9.3" - } } diff --git a/composer.lock b/composer.lock index b0a403a..20408c3 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": "40a90af98e69fc56405674b2281745ce", + "content-hash": "6b2027ef4662bc7512d84ff1f6226925", "packages": [], "packages-dev": [ { diff --git a/subdirectory/composer.json b/subdirectory/composer.json index 0f418f3..8685f53 100644 --- a/subdirectory/composer.json +++ b/subdirectory/composer.json @@ -1,14 +1,14 @@ { - "name": "ramsey/composer-install", - "description": "A GitHub Action to install and cache Composer dependencies.", - "license": "MIT", - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com" + "name": "ramsey/composer-install-subdirectory-test", + "description": "This tests installation using working-directory with this GitHub Action.", + "license": "MIT", + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com" + } + ], + "require": { + "symfony/console": "^6.0" } - ], - "require-dev": { - "phpspec/phpspec": "^7.0" - } } diff --git a/subdirectory/composer.lock b/subdirectory/composer.lock index 0e396fc..c1d2bbf 100644 --- a/subdirectory/composer.lock +++ b/subdirectory/composer.lock @@ -4,450 +4,31 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "76c3726d400467d213941315b561c735", - "packages": [], - "packages-dev": [ + "content-hash": "3cf52742530c60277dd438164085d489", + "packages": [ { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" - }, - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpspec/php-diff", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/phpspec/php-diff.git", - "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", - "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", - "shasum": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Diff": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Chris Boulton", - "homepage": "http://github.com/chrisboulton" - } - ], - "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", - "support": { - "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" - }, - "time": "2020-09-18T13:47:07+00:00" - }, - { - "name": "phpspec/phpspec", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/phpspec.git", - "reference": "26e814250e76711235a30b6f1a7695181934f230" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/phpspec/zipball/26e814250e76711235a30b6f1a7695181934f230", - "reference": "26e814250e76711235a30b6f1a7695181934f230", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "ext-tokenizer": "*", - "php": "^7.3 || 8.0.*", - "phpspec/php-diff": "^1.0.0", - "phpspec/prophecy": "^1.9", - "sebastian/exporter": "^3.0 || ^4.0", - "symfony/console": "^3.4 || ^4.4 || ^5.0", - "symfony/event-dispatcher": "^3.4 || ^4.4 || ^5.0", - "symfony/finder": "^3.4 || ^4.4 || ^5.0", - "symfony/process": "^3.4 || ^4.4 || ^5.0", - "symfony/yaml": "^3.4 || ^4.4 || ^5.0" - }, - "conflict": { - "sebastian/comparator": "<1.2.4" - }, - "require-dev": { - "behat/behat": "^3.3", - "phpunit/phpunit": "^8.0 || ^9.0", - "symfony/filesystem": "^3.4 || ^4.0 || ^5.0" - }, - "suggest": { - "phpspec/nyan-formatters": "Adds Nyan formatters" - }, - "bin": [ - "bin/phpspec" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "PhpSpec": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "homepage": "http://marcelloduarte.net/" - }, - { - "name": "Ciaran McNulty", - "homepage": "https://ciaranmcnulty.com/" - } - ], - "description": "Specification-oriented BDD framework for PHP 7.1+", - "homepage": "http://phpspec.net/", - "keywords": [ - "BDD", - "SpecBDD", - "TDD", - "spec", - "specification", - "testing", - "tests" - ], - "support": { - "issues": "https://github.com/phpspec/phpspec/issues", - "source": "https://github.com/phpspec/phpspec/tree/7.0.1" - }, - "time": "2020-12-29T14:51:04+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.12.2", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "dev-master": "2.0.x-dev" } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.2" - }, - "time": "2020-12-19T10:15:11+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" }, - "type": "library", "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -467,851 +48,69 @@ "homepage": "https://github.com/php-fig/container", "keywords": [ "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "symfony/console", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "d6d0cc30d8c0fda4e7b213c20509b0159a8f4556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d6d0cc30d8c0fda4e7b213c20509b0159a8f4556", - "reference": "d6d0cc30d8c0fda4e7b213c20509b0159a8f4556", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.2.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-23T10:08:49+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d08d6ec121a425897951900ab692b612a61d6240" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240", - "reference": "d08d6ec121a425897951900ab692b612a61d6240", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-18T17:12:37+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "0d639a0943822626290d169965804f79400e6a04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04", - "reference": "0d639a0943822626290d169965804f79400e6a04", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-15T18:55:04+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2021-01-07T16:49:33+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", + "name": "symfony/console", + "version": "v6.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" + "url": "https://github.com/symfony/console.git", + "reference": "fafd9802d386bf1c267e0249ddb7ceb14dcfdad4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", + "url": "https://api.github.com/repos/symfony/console/zipball/fafd9802d386bf1c267e0249ddb7ceb14dcfdad4", + "reference": "fafd9802d386bf1c267e0249ddb7ceb14dcfdad4", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { - "ext-intl": "For best performance" + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "Symfony\\Component\\Console\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1320,26 +119,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "cli", + "command line", + "console", + "terminal" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" + "source": "https://github.com/symfony/console/tree/v6.0.1" }, "funding": [ { @@ -1355,32 +152,32 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-12-09T12:47:37+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { - "ext-intl": "For best performance" + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1389,13 +186,10 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Symfony\\Polyfill\\Ctype\\": "" }, "files": [ "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1404,26 +198,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "intl", - "normalizer", + "ctype", "polyfill", - "portable", - "shim" + "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { @@ -1439,32 +231,32 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1473,7 +265,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, "files": [ "bootstrap.php" @@ -1493,17 +285,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "grapheme", + "intl", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, "funding": [ { @@ -1519,29 +312,32 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.22.1", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { "php": ">=7.1" }, + "suggest": { + "ext-intl": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1550,7 +346,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" @@ -1573,16 +369,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" }, "funding": [ { @@ -1598,29 +396,32 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.22.1", + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { "php": ">=7.1" }, + "suggest": { + "ext-mbstring": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1629,13 +430,10 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1643,10 +441,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -1656,78 +450,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-01-07T16:49:33+00:00" - }, - { - "name": "symfony/process", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.2.4" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -1743,25 +476,28 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.2.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "reference": "36715ebf9fb9db73db0cb24263c79077c6fe8603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/36715ebf9fb9db73db0cb24263c79077c6fe8603", + "reference": "36715ebf9fb9db73db0cb24263c79077c6fe8603", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" + "php": ">=8.0.2", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" @@ -1769,7 +505,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -1806,7 +542,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" + "source": "https://github.com/symfony/service-contracts/tree/v3.0.0" }, "funding": [ { @@ -1822,35 +558,37 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-11-04T17:53:12+00:00" }, { "name": "symfony/string", - "version": "v5.2.4", + "version": "v6.0.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4e78d7d47061fa183639927ec40d607973699609" + "reference": "0cfed595758ec6e0a25591bdc8ca733c1896af32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", - "reference": "4e78d7d47061fa183639927ec40d607973699609", + "url": "https://api.github.com/repos/symfony/string/zipball/0cfed595758ec6e0a25591bdc8ca733c1896af32", + "reference": "0cfed595758ec6e0a25591bdc8ca733c1896af32", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -1889,82 +627,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-16T10:20:28+00:00" - }, - { - "name": "symfony/yaml", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7d6ae0cce3c33965af681a4355f1c4de326ed277" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7d6ae0cce3c33965af681a4355f1c4de326ed277", - "reference": "7d6ae0cce3c33965af681a4355f1c4de326ed277", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.4" + "source": "https://github.com/symfony/string/tree/v6.0.1" }, "funding": [ { @@ -1980,62 +643,10 @@ "type": "tidelift" } ], - "time": "2021-02-22T15:48:39+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" - }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-12-08T15:13:44+00:00" } ], + "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], @@ -2043,5 +654,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/tests/bash-test.sh b/tests/bash-test.sh new file mode 100755 index 0000000..09dfedc --- /dev/null +++ b/tests/bash-test.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash +# +# bash-test - Simple test runner for Bash +# https://github.com/campanda/bash-test +# +# Copyright (c) 2017 Campanda GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +function parse_opt { + case $1 in + h) + display_help + exit 0 + ;; + v) + echo "$version" + exit 0 + ;; + \?) + echo -e "Invalid option: -$OPTARG\n" + display_help + exit 1 + ;; + esac +} + +function display_help { + echo -e "Usage: bash-test file1 file2...\n" + echo -e "Options:\n" + echo -e "\t-h\tShows this help" + echo -e "\t-v\tShows version\n" +} + +function check_input_files { + for file in "$@"; do + test -f "$file" || { display_error_message "$file"; exit 1; } + done +} + +function display_header { + echo -e "\033[34mbash-test $version by Campanda GmbH and contributors.\033[0m\n" +} + +function display_error_message { + echo -e "\033[31mERROR:\033[0m Invalid input file -> \033[33m$1\033[0m\n" +} + +function get_loaded_tests { + declare -F | cut -d' ' -f3 | grep "^test_" +} + +function run_test { + ((amount_of_tests++)) + + $1 + result=$? + + [ $result -ne 0 ] && ((failed_tests++)) + display_test_result $result "$1" +} + +function display_test_result { + [ "$1" -eq 0 ] && echo -e " \033[32m✓ $2\033[0m" || echo -e " \033[31m✗ $2\033[0m" +} + +function get_loaded_data_providers { + (set -o posix ; set) | grep "^data_provider_for" | cut -d'=' -f1 +} + +function display_summary { + if [ "$failed_tests" -gt 0 ]; then + echo -e "\033[30;41m $failed_tests of $amount_of_tests tests failed.\033[0m" + else + echo -e "\033[30;42m $amount_of_tests tests completed.\033[0m" + fi +} + +version="v0.3.0" +amount_of_tests=0 +failed_tests=0 + +while getopts ":hv" opt; do + parse_opt "$opt" +done + +check_input_files "$@" + +time { + display_header + + original_path=$PATH + + for test_file in "$@"; do + # shellcheck source=/dev/null + source "$test_file" + basename "$test_file" + + if [ -n "$SOURCE" ]; then + add_to_path="$(dirname "$test_file")/$SOURCE" + PATH=$add_to_path:$original_path + fi + + if [[ "$(type -t before)" == "function" ]]; then + before + fi + + test_names=$(get_loaded_tests) + + for test_name in $test_names; do + run_test "$test_name" + done + + for data_provider in $(get_loaded_data_providers); do + test_name=${data_provider#data_provider_for} + + while read -r args; do + run_test "$test_name $args" + done < "${!data_provider}" + unset -v "$data_provider" + done + + if [[ "$(type -t after)" == "function" ]]; then + after + fi + + PATH=$original_path + unset -f $test_names + unset -v SOURCE + + echo "" + done + + display_summary +} + +exit $failed_tests diff --git a/tests/expect/cache_key_01.exp b/tests/expect/cache_key_01.exp new file mode 100755 index 0000000..68bf6c0 --- /dev/null +++ b/tests/expect/cache_key_01.exp @@ -0,0 +1,29 @@ +#!/usr/bin/env -S expect -f + +set gitHubEnvFile cache_key_01.txt +file delete $gitHubEnvFile +set ::env(GITHUB_ENV) $gitHubEnvFile + +set timeout -1 +spawn ../../bin/cache_key.sh +match_max 100000 + +expect -exact "::notice title=Primary Cache Key::Cache primary key is 'php-composer'" +expect -exact "::notice title=Restore Cache Keys::Cache restore keys are 'php-composer-'" +expect -exact "::set-output name=key::php-composer" +expect eof + +set fp [open $gitHubEnvFile r] +set fileData [read $fp] +close $fp + +set expectedValue "CACHE_RESTORE_KEY</dev/null 2>&1 && pwd )" + +test_output="$(mktemp)" + +# Create arguments based on the expect filenames, so that we can have +# a nicer display of test names printed to the screen. +args="" +for f in "${__DIR__}/expect/"*.exp; do + args+="$(basename -s .exp $f)" + args+=$'\n' +done + +# Remove the trailing newline character. +args=$(echo "${args}" | perl -pe 'chomp if eof') + +# Store the arguments to a temporary data provider file for bash-test to use. +data_provider_for_test_expect="$(mktemp)" +echo "${args}" >> "${data_provider_for_test_expect}" + +cd "${__DIR__}/expect" || exit 1 + +_test_expect() { + "./${1}.exp" 2> /dev/null 1> "${test_output}" + result=$? + + if (( result != 0 )); then + echo + echo + echo -e "\033[1;37;41m[FAILURE] Output for failed test ${1}:\033[0m" + echo + cat "${test_output}" + echo + fi + + test $result -eq 0 +}