Hello community, here is the log from the commit of package platformsh-cli for openSUSE:Factory checked in at 2020-07-24 09:58:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/platformsh-cli (Old) and /work/SRC/openSUSE:Factory/.platformsh-cli.new.3592 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "platformsh-cli" Fri Jul 24 09:58:16 2020 rev:102 rq:822144 version:3.59.1 Changes: -------- --- /work/SRC/openSUSE:Factory/platformsh-cli/platformsh-cli.changes 2020-06-23 21:06:25.662197586 +0200 +++ /work/SRC/openSUSE:Factory/.platformsh-cli.new.3592/platformsh-cli.changes 2020-07-24 09:59:45.685632153 +0200 @@ -1,0 +2,28 @@ +Tue Jul 21 19:13:36 UTC 2020 - [email protected] + +- Update to version 3.59.1: + * Release v3.59.1 + * Fix error (undefined index) when selecting some projects + * Remove GH issue number from manifest.json + * Release v3.59.0 + * Revert "Installer: remove unnecessary mbstring check" + * Clarify API token login vs environment variables in README + * Support new user invitations + * Clean up temporary file in self:build command + * Remove some unused variables/code + * Avoid hardcoding the token URL in the auth:api-token-login command + * Installer: Create a .zshrc file if it doesn't already exist, on ZSH (#956) + * Release v3.58.0 + * Support prompting for re-authentication in the login command + * Add results per page (--count/-c option) to the self:stats command + * Fix method name in sorting regions + * Sort regions by domain independently of suffix + * Move SSH hostname to the session-specific configuration + * Decrease condescension level + * Sort regions + * Release v3.57.6 + * Update dependencies (symfony 3.4.37 -> 3.4.42) + * Remove session:switch command suggestion when not relevant in the login command + * Login help clarifications + +------------------------------------------------------------------- Old: ---- platformsh-cli-3.57.5.tar.xz New: ---- platformsh-cli-3.59.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ platformsh-cli.spec ++++++ --- /var/tmp/diff_new_pack.orwszJ/_old 2020-07-24 09:59:47.669634001 +0200 +++ /var/tmp/diff_new_pack.orwszJ/_new 2020-07-24 09:59:47.673634004 +0200 @@ -17,7 +17,7 @@ Name: platformsh-cli -Version: 3.57.5 +Version: 3.59.1 Release: 0 Summary: Tool for managing Platform.sh services from the command line # See licenses.txt for dependency licenses. ++++++ _service ++++++ --- /var/tmp/diff_new_pack.orwszJ/_old 2020-07-24 09:59:47.701634030 +0200 +++ /var/tmp/diff_new_pack.orwszJ/_new 2020-07-24 09:59:47.701634030 +0200 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="disabled"> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> - <param name="revision">refs/tags/v3.57.5</param> + <param name="revision">refs/tags/v3.59.1</param> <param name="url">git://github.com/platformsh/platformsh-cli.git</param> <param name="scm">git</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.orwszJ/_old 2020-07-24 09:59:47.721634048 +0200 +++ /var/tmp/diff_new_pack.orwszJ/_new 2020-07-24 09:59:47.721634048 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/platformsh/platformsh-cli.git</param> - <param name="changesrevision">8552ed3f17f28ef6504c599d4df707e7d294044e</param> + <param name="changesrevision">3854cfd67303add357cece3c5f330ac9e443bf33</param> </service> </servicedata> ++++++ licenses.txt ++++++ --- /var/tmp/diff_new_pack.orwszJ/_old 2020-07-24 09:59:47.757634082 +0200 +++ /var/tmp/diff_new_pack.orwszJ/_new 2020-07-24 09:59:47.757634082 +0200 @@ -5,7 +5,7 @@ Name Version License cocur/slugify v2.5 MIT -composer/ca-bundle 1.2.6 MIT +composer/ca-bundle 1.2.7 MIT doctrine/cache v1.6.2 MIT firebase/php-jwt v2.2.0 BSD-3-Clause guzzlehttp/cache-subscriber 0.2.0 MIT @@ -16,20 +16,20 @@ padraic/phar-updater v1.0.6 BSD-3-Clause paragonie/random_compat v2.0.18 MIT pjcdawkins/guzzle-oauth2-plugin v2.3.1 MIT -platformsh/client v0.33.0 MIT +platformsh/client v0.35.2 MIT platformsh/console-form v0.0.24 MIT psr/container 1.0.0 MIT -psr/log 1.1.2 MIT -react/promise v2.7.1 MIT +psr/log 1.1.3 MIT +react/promise v2.8.0 MIT stecman/symfony-console-completion 0.10.1 MIT -symfony/config v3.4.37 MIT -symfony/console v3.4.37 MIT -symfony/debug v3.4.37 MIT -symfony/dependency-injection v3.4.37 MIT -symfony/event-dispatcher v3.4.37 MIT -symfony/filesystem v3.4.37 MIT -symfony/finder v3.4.37 MIT -symfony/polyfill-ctype v1.13.1 MIT -symfony/polyfill-mbstring v1.13.1 MIT -symfony/process v3.4.37 MIT -symfony/yaml v3.4.37 MIT +symfony/config v3.4.42 MIT +symfony/console v3.4.42 MIT +symfony/debug v3.4.42 MIT +symfony/dependency-injection v3.4.42 MIT +symfony/event-dispatcher v3.4.42 MIT +symfony/filesystem v3.4.42 MIT +symfony/finder v3.4.42 MIT +symfony/polyfill-ctype v1.17.1 MIT +symfony/polyfill-mbstring v1.17.1 MIT +symfony/process v3.4.42 MIT +symfony/yaml v3.4.42 MIT ++++++ platformsh-cli-3.57.5.tar.xz -> platformsh-cli-3.59.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/README.md new/platformsh-cli-3.59.1/README.md --- old/platformsh-cli-3.57.5/README.md 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/README.md 2020-07-21 15:02:11.000000000 +0200 @@ -18,7 +18,7 @@ ## Installation -Simply use this command: +Run this command to install the CLI: curl -sS https://platform.sh/cli/installer | php @@ -54,18 +54,15 @@ There are two ways to authenticate: -1. `platform login` (AKA `platform auth:browser-login`): this opens a temporary - local server and a browser, allowing you to log in to Platform.sh via the - normal login form, including via third-party providers like Bitbucket, GitHub - and Google. - -2. [API tokens](https://docs.platform.sh/gettingstarted/cli/api-tokens.html): - these allow non-interactive authentication. To use an API token, you can run - the `platform auth:api-token-login` command. Alternatively you can supply the - API token in an environment variable named `PLATFORMSH_CLI_TOKEN`. +1. The recommended way is `platform login`, which lets you log in via a web browser, including via third-party providers such as Google, GitHub and Bitbucket. - *_Warning_*: An API token can act as the account that created it, with no - restrictions. Use a separate machine account to limit the token's access. +2. If using a browser is not possible, use an [API token](https://docs.platform.sh/gettingstarted/cli/api-tokens.html). + + An interactive command is available for this: `platform auth:api-token-login` + + For non-interactive uses such as scripts or CI systems, set the API token in an environment variable named `PLATFORMSH_CLI_TOKEN`. This can be insecure if not handled properly, although it is appropriate for systems such as CircleCI, Jenkins and GitLab. + + *_Warning_*: An API token can act as the account that created it, with no restrictions. Use a separate machine account to limit the token's access. ### Commands diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/composer.json new/platformsh-cli-3.59.1/composer.json --- old/platformsh-cli-3.57.5/composer.json 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/composer.json 2020-07-21 15:02:11.000000000 +0200 @@ -8,7 +8,7 @@ "guzzlehttp/guzzle": "^5.3", "guzzlehttp/ringphp": "^1.1", "platformsh/console-form": ">=0.0.24 <2.0", - "platformsh/client": ">=0.33.0 <2.0", + "platformsh/client": ">=0.35.2 <2.0", "symfony/console": "^3.0 >=3.2", "symfony/yaml": "^3.0 || ^2.6", "symfony/finder": "^3.0", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/composer.lock new/platformsh-cli-3.59.1/composer.lock --- old/platformsh-cli-3.57.5/composer.lock 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/composer.lock 2020-07-21 15:02:11.000000000 +0200 @@ -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": "b5d3ce4e6a73d8adc7bf5699e8f3e7f2", + "content-hash": "34395bedceaf33b0af253532c389a178", "packages": [ { "name": "cocur/slugify", @@ -72,16 +72,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.2.6", + "version": "1.2.7", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "47fe531de31fca4a1b997f87308e7d7804348f7e" + "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/47fe531de31fca4a1b997f87308e7d7804348f7e", - "reference": "47fe531de31fca4a1b997f87308e7d7804348f7e", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd", + "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd", "shasum": "" }, "require": { @@ -124,7 +124,7 @@ "ssl", "tls" ], - "time": "2020-01-13T10:02:55+00:00" + "time": "2020-04-08T08:27:21+00:00" }, { "name": "doctrine/cache", @@ -665,16 +665,16 @@ }, { "name": "platformsh/client", - "version": "v0.33.0", + "version": "v0.35.2", "source": { "type": "git", "url": "https://github.com/platformsh/platformsh-client-php.git", - "reference": "0b5efe375fcb1f5c23491b07b879dbab507109d9" + "reference": "ce7f949dc6788ee90b8172d991845a5a66788531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/platformsh/platformsh-client-php/zipball/0b5efe375fcb1f5c23491b07b879dbab507109d9", - "reference": "0b5efe375fcb1f5c23491b07b879dbab507109d9", + "url": "https://api.github.com/repos/platformsh/platformsh-client-php/zipball/ce7f949dc6788ee90b8172d991845a5a66788531", + "reference": "ce7f949dc6788ee90b8172d991845a5a66788531", "shasum": "" }, "require": { @@ -704,7 +704,7 @@ } ], "description": "Platform.sh API client", - "time": "2020-05-27T21:11:24+00:00" + "time": "2020-07-21T07:54:05+00:00" }, { "name": "platformsh/console-form", @@ -796,16 +796,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -839,27 +839,27 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { "name": "react/promise", - "version": "v2.7.1", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", - "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -885,7 +885,7 @@ "promise", "promises" ], - "time": "2019-01-07T21:25:54+00:00" + "time": "2020-05-12T15:16:56+00:00" }, { "name": "stecman/symfony-console-completion", @@ -934,16 +934,16 @@ }, { "name": "symfony/config", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6abc18b2a97f63508d23929bbb2ae65aaa07bace" + "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6abc18b2a97f63508d23929bbb2ae65aaa07bace", - "reference": "6abc18b2a97f63508d23929bbb2ae65aaa07bace", + "url": "https://api.github.com/repos/symfony/config/zipball/cd61db31cbd19cbe4ba9f6968f13c9076e1372ab", + "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab", "shasum": "" }, "require": { @@ -994,20 +994,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:05:51+00:00" + "time": "2020-05-22T10:56:48+00:00" }, { "name": "symfony/console", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12" + "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12", - "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12", + "url": "https://api.github.com/repos/symfony/console/zipball/bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", + "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", "shasum": "" }, "require": { @@ -1066,20 +1066,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-01-10T07:52:48+00:00" + "time": "2020-05-30T18:58:05+00:00" }, { "name": "symfony/debug", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8" + "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/70dd18e93bb8bdf3c4db7fde832619fef9828cf8", - "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8", + "url": "https://api.github.com/repos/symfony/debug/zipball/518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", + "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", "shasum": "" }, "require": { @@ -1122,20 +1122,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-01-08T16:36:15+00:00" + "time": "2020-05-22T18:25:20+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc" + "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/22000f10c9e1cfef051e8b4de46815b41a0223fc", - "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e39380b7104b0ec538a075ae919f00c7e5267bac", + "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac", "shasum": "" }, "require": { @@ -1193,20 +1193,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2020-01-08T11:20:51+00:00" + "time": "2020-05-30T21:06:01+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8" + "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/79ede8f2836e5ec910ebb325bde40f987244baa8", - "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081", + "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081", "shasum": "" }, "require": { @@ -1256,20 +1256,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:05:51+00:00" + "time": "2020-05-05T15:06:23+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628" + "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0a0d3b4bda11aa3a0464531c40e681e184e75628", - "reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10", + "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10", "shasum": "" }, "require": { @@ -1306,20 +1306,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-01-17T08:50:08+00:00" + "time": "2020-05-30T17:48:24+00:00" }, { "name": "symfony/finder", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a90a9d3b9f458a5cdeabfa4090b20c000ca3962f" + "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a90a9d3b9f458a5cdeabfa4090b20c000ca3962f", - "reference": "a90a9d3b9f458a5cdeabfa4090b20c000ca3962f", + "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200", + "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200", "shasum": "" }, "require": { @@ -1355,20 +1355,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-01-01T11:03:25+00:00" + "time": "2020-02-14T07:34:21+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", "shasum": "" }, "require": { @@ -1380,7 +1380,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1413,20 +1417,20 @@ "polyfill", "portable" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "reference": "7110338d81ce1cbc3e273136e4574663627037a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7", "shasum": "" }, "require": { @@ -1438,7 +1442,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1472,20 +1480,20 @@ "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { "name": "symfony/process", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a" + "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5b9d2bcffe4678911a4c941c00b7c161252cf09a", - "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a", + "url": "https://api.github.com/repos/symfony/process/zipball/8a895f0c92a7c4b10db95139bcff71bdf66d4d21", + "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21", "shasum": "" }, "require": { @@ -1521,20 +1529,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-01-01T11:03:25+00:00" + "time": "2020-05-23T17:05:51+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "aa46bc2233097d5212332c907f9911533acfbf80" + "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/aa46bc2233097d5212332c907f9911533acfbf80", - "reference": "aa46bc2233097d5212332c907f9911533acfbf80", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", + "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", "shasum": "" }, "require": { @@ -1580,37 +1588,35 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2020-01-13T08:00:59+00:00" + "time": "2020-05-11T07:51:54+00:00" } ], "packages-dev": [ { "name": "bamarni/composer-bin-plugin", - "version": "v1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/bamarni/composer-bin-plugin.git", - "reference": "67f9d314dc7ecf7245b8637906e151ccc62b8d24" + "reference": "9329fb0fbe29e0e1b2db8f4639a193e4f5406225" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/67f9d314dc7ecf7245b8637906e151ccc62b8d24", - "reference": "67f9d314dc7ecf7245b8637906e151ccc62b8d24", + "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/9329fb0fbe29e0e1b2db8f4639a193e4f5406225", + "reference": "9329fb0fbe29e0e1b2db8f4639a193e4f5406225", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0" + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { - "composer/composer": "dev-master", + "composer/composer": "^1.0 || ^2.0", "symfony/console": "^2.5 || ^3.0 || ^4.0" }, "type": "composer-plugin", "extra": { - "class": "Bamarni\\Composer\\Bin\\Plugin", - "branch-alias": { - "dev-master": "1.1-dev" - } + "class": "Bamarni\\Composer\\Bin\\Plugin" }, "autoload": { "psr-4": { @@ -1621,7 +1627,16 @@ "license": [ "MIT" ], - "time": "2019-03-17T12:38:04+00:00" + "description": "No conflicts for your bin dependencies", + "keywords": [ + "composer", + "conflict", + "dependency", + "executable", + "isolation", + "tool" + ], + "time": "2020-05-03T08:27:20+00:00" }, { "name": "consolidation/annotated-command", @@ -1968,16 +1983,16 @@ }, { "name": "drush/drush", - "version": "8.3.2", + "version": "8.3.5", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "60306a27347f6c69517dc2d91bb2fd5d1a41abec" + "reference": "24e317b182155c9cd551e772b45ebce1fe7a2b17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/60306a27347f6c69517dc2d91bb2fd5d1a41abec", - "reference": "60306a27347f6c69517dc2d91bb2fd5d1a41abec", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/24e317b182155c9cd551e772b45ebce1fe7a2b17", + "reference": "24e317b182155c9cd551e772b45ebce1fe7a2b17", "shasum": "" }, "require": { @@ -1987,11 +2002,12 @@ "php": ">=5.4.5", "psr/log": "~1.0", "psy/psysh": "~0.6", - "symfony/console": "~2.7|^3", - "symfony/event-dispatcher": "~2.7|^3", - "symfony/finder": "~2.7|^3", - "symfony/var-dumper": "~2.7|^3", - "symfony/yaml": "~2.3|^3", + "symfony/console": "~2.7|^3|^4.4", + "symfony/event-dispatcher": "~2.7|^3|^4.4", + "symfony/finder": "~2.7|^3|^4.4", + "symfony/process": "~2.7|^3|^4.4", + "symfony/var-dumper": "~2.7|^3|^4.4|^5", + "symfony/yaml": "~2.3|^3|^4.4", "webflo/drupal-finder": "^1.1.0", "webmozart/path-util": "~2" }, @@ -2077,97 +2093,7 @@ ], "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.", "homepage": "http://www.drush.org", - "time": "2019-11-26T22:34:50+00:00" - }, - { - "name": "jakub-onderka/php-console-color", - "version": "v0.2", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "[email protected]" - } - ], - "abandoned": "php-parallel-lint/php-console-color", - "time": "2018-09-29T17:23:10+00:00" - }, - { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.4", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2", - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "[email protected]", - "homepage": "http://www.acci.cz/" - } - ], - "description": "Highlight PHP code in terminal", - "abandoned": "php-parallel-lint/php-console-highlighter", - "time": "2018-09-29T18:48:56+00:00" + "time": "2020-05-30T01:54:49+00:00" }, { "name": "nikic/php-parser", @@ -2423,16 +2349,16 @@ }, { "name": "phpspec/prophecy", - "version": "v1.10.2", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { @@ -2482,7 +2408,7 @@ "spy", "stub" ], - "time": "2020-01-20T15:57:02+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2863,32 +2789,30 @@ }, { "name": "psy/psysh", - "version": "v0.9.12", + "version": "v0.10.4", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "90da7f37568aee36b116a030c5f99c915267edd4" + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4", - "reference": "90da7f37568aee36b116a030c5f99c915267edd4", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", "shasum": "" }, "require": { "dnoegel/php-xdg-base-dir": "0.1.*", "ext-json": "*", "ext-tokenizer": "*", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0" + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "~2.15|~3.16", - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" + "hoa/console": "3.17.*" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", @@ -2903,7 +2827,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.9.x-dev" + "dev-master": "0.10.x-dev" } }, "autoload": { @@ -2933,7 +2857,7 @@ "interactive", "shell" ], - "time": "2019-12-06T14:19:43+00:00" + "time": "2020-05-03T19:32:03+00:00" }, { "name": "sebastian/comparator", @@ -3309,16 +3233,16 @@ }, { "name": "symfony/var-dumper", - "version": "v3.4.37", + "version": "v3.4.42", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "51ecb139114c38080801145a212f10210ea99ea3" + "reference": "7a947d1b5e81583759a3a927f1761b95bddc5f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/51ecb139114c38080801145a212f10210ea99ea3", - "reference": "51ecb139114c38080801145a212f10210ea99ea3", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7a947d1b5e81583759a3a927f1761b95bddc5f1b", + "reference": "7a947d1b5e81583759a3a927f1761b95bddc5f1b", "shasum": "" }, "require": { @@ -3374,7 +3298,7 @@ "debug", "dump" ], - "time": "2020-01-01T11:03:25+00:00" + "time": "2020-05-23T12:00:17+00:00" }, { "name": "webflo/drupal-finder", @@ -3418,16 +3342,16 @@ }, { "name": "webmozart/assert", - "version": "1.6.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" + "reference": "9dc4f203e36f2b486149058bade43c851dd97451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", + "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451", "shasum": "" }, "require": { @@ -3435,7 +3359,8 @@ "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "vimeo/psalm": "<3.6.0" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" @@ -3462,7 +3387,7 @@ "check", "validate" ], - "time": "2019-11-24T13:36:37+00:00" + "time": "2020-06-16T10:16:42+00:00" }, { "name": "webmozart/path-util", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/config.yaml new/platformsh-cli-3.59.1/config.yaml --- old/platformsh-cli-3.57.5/config.yaml 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/config.yaml 2020-07-21 15:02:11.000000000 +0200 @@ -149,6 +149,9 @@ # Overridden by {application.env_prefix}AUTO_LOAD_SSH_CERT env var auto_load_ssh_cert: false + # Whether the API supports project invitations. + invitations: true + # How the CLI detects and configures Git repositories as projects. detection: git_remote_name: 'platform' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/dist/installer.php new/platformsh-cli-3.59.1/dist/installer.php --- old/platformsh-cli-3.57.5/dist/installer.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/dist/installer.php 2020-07-21 15:02:11.000000000 +0200 @@ -120,6 +120,8 @@ ); $required_extensions = [ + // Either mbstring or iconv is required by Symfony Console (even though this is not enforced in its composer.json). + 'mbstring', 'openssl', 'pcre', ]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/dist/manifest.json new/platformsh-cli-3.59.1/dist/manifest.json --- old/platformsh-cli-3.57.5/dist/manifest.json 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/dist/manifest.json 2020-07-21 15:02:11.000000000 +0200 @@ -17,10 +17,10 @@ }, { "name": "platform.phar", - "sha1": "5d8b57fc687a2df41ff14b688a22bd9aa4502349", - "sha256": "df6d8baf36d6229b12cdb93f57f49c719554fbed36b2b0266b4af6e9f9ba1f2b", - "url": "https://github.com/platformsh/platformsh-cli/releases/download/v3.57.5/platform.phar", - "version": "3.57.5", + "sha1": "be6d7919c5a776dbcbdc7887c47d27651f5f49f3", + "sha256": "cd367d27beb28c7ee9852c5fbe5ae808f1dbff448d1ff8fed7ceab9a792b6839", + "url": "https://github.com/platformsh/platformsh-cli/releases/download/v3.59.1/platform.phar", + "version": "3.59.1", "php": { "min": "5.5.9" }, @@ -274,6 +274,16 @@ "notes": "New features:\n\n* Improve SSH key commands\n - Provide a choice and a more meaningful key name when generating a key in the\n `ssh-key:add` command.\n - Clarify the account that an SSH key is going to be added to.\n - Append the `.pub` extension automatically.\n - Show the local path (if present) in the `ssh-key:list` (`ssh-keys`) command.\n - Ensure session-based SSH configuration is up to date, when running any SSH command.\n* Automatically select an SSH key from `~/.ssh` corresponding to the user\n account when there are multiple identities available, and specify it in SSH\n commands.\n* Provide an interactive choice in the `integration:update` command when no\n integration ID is specified.\n* Add a `session:switch` command (beta), which helps change the session when\n managing multiple accounts. When there is more than one session present,\n information (session ID and logged-in user email) is displayed in various\n relevant commands.\n\nOther changes:\n\n* Fix irrelevant 403 errors when the user does not have access to the current\n project, but they specified another project in the command line anyway.\n* Include only one session's SSH certificate configuration.\n* Fix use of certifier URL configuration.\n* Remove the command `auth:password-login`, which no longer works.", "show from": "3.56.0", "hide from": "3.57.0" + }, + { + "notes": "* Support prompting for re-authentication in the login command.\n The command `platform login --force` (or `-f`) will now ask the\n authentication server to prompt the user to log in again, even if they\n already had a session in that browser. This is helpful for refreshing\n authentication status (e.g. to re-verify 2FA), or for logging in as another\n account.\n* The region list in the `platform create` command is now sorted\n alphabetically (with the subdomain and suffix sorted separately).\n* Add `--count` (`-c`) option to the `self:stats` command to modify the results per page.\n* Move the SSH hostname to the session-specific SSH configuration. This means\n less rewriting needed for the global `~/.ssh/config` file when changing CLI\n configuration.", + "show from": "3.57.0", + "hide from": "3.58.0" + }, + { + "notes": "* Support new user invitations\n* Installer improvements:\n - Create a .zshrc file if it doesn't already exist, on ZSH.\n - Require the mbstring extension.", + "show from": "3.58.0", + "hide from": "3.59.0" } ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/resources/oauth-listener/index.php new/platformsh-cli-3.59.1/resources/oauth-listener/index.php --- old/platformsh-cli-3.57.5/resources/oauth-listener/index.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/resources/oauth-listener/index.php 2020-07-21 15:02:11.000000000 +0200 @@ -11,6 +11,7 @@ private $localUrl; private $response; private $codeChallenge; + private $prompt; public function __construct() { $required = [ @@ -19,6 +20,7 @@ 'CLI_OAUTH_CLIENT_ID', 'CLI_OAUTH_FILE', 'CLI_OAUTH_CODE_CHALLENGE', + 'CLI_OAUTH_PROMPT' ]; if ($missing = array_diff($required, array_keys($_ENV))) { throw new \RuntimeException('Invalid environment, missing: ' . implode(', ', $missing)); @@ -27,6 +29,7 @@ $this->authUrl = $_ENV['CLI_OAUTH_AUTH_URL']; $this->clientId = $_ENV['CLI_OAUTH_CLIENT_ID']; $this->file = $_ENV['CLI_OAUTH_FILE']; + $this->prompt = $_ENV['CLI_OAUTH_PROMPT']; $this->codeChallenge = $_ENV['CLI_OAUTH_CODE_CHALLENGE']; $this->localUrl = $localUrl = 'http://127.0.0.1:' . $_SERVER['SERVER_PORT']; $this->response = new Response(); @@ -41,6 +44,7 @@ 'redirect_uri' => $this->localUrl, 'state' => $this->state, 'client_id' => $this->clientId, + 'prompt' => $this->prompt, 'response_type' => 'code', 'code_challenge' => $this->codeChallenge, 'code_challenge_method' => 'S256', @@ -83,7 +87,8 @@ // Respond after an OAuth2 error. if (isset($_GET['error'])) { $message = isset($_GET['error_description']) ? $_GET['error_description'] : null; - $this->reportError($message, $_GET['error']); + $hint = isset($_GET['error_hint']) ? $_GET['error_hint'] : null; + $this->reportError($message, $_GET['error'], $hint); return; } @@ -123,10 +128,11 @@ } /** - * @param string $message The error message. - * @param string|null $error An OAuth2 error type. + * @param string $message The error message. + * @param string|null $error An OAuth2 error type. + * @param string|null $hint An OAuth2 error hint. */ - private function reportError($message = null, $error = null) + private function reportError($message = null, $error = null, $hint = null) { $this->response->headers['Status'] = 401; $this->response->content = '<h1 class="error">Error</h1>'; @@ -136,8 +142,11 @@ if (isset($message)) { $this->response->content .= '<p class="error">' . htmlspecialchars($message) . '</p>'; } - if ($message || $error) { - $response = ['error' => $error, 'error_description' => $message]; + if (isset($hint)) { + $this->response->content .= '<p class="error">' . htmlspecialchars($hint) . '</p>'; + } + if ($message || $error || $hint) { + $response = ['error' => $error, 'error_description' => $message, 'error_hint' => $hint]; if (!$this->sendToTerminal($response)) { $this->response->content .= '<p class="error">Additionally: failed to send error message back to terminal</p>'; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/App/AppListCommand.php new/platformsh-cli-3.59.1/src/Command/App/AppListCommand.php --- old/platformsh-cli-3.57.5/src/Command/App/AppListCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/App/AppListCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -63,7 +63,6 @@ foreach ($localApps as $localApp) { if ($localApp->getName() === $appName) { return $localApp->getRoot(); - break; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Auth/ApiTokenLoginCommand.php new/platformsh-cli-3.59.1/src/Command/Auth/ApiTokenLoginCommand.php --- old/platformsh-cli-3.57.5/src/Command/Auth/ApiTokenLoginCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Auth/ApiTokenLoginCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -44,16 +44,15 @@ } if (!$input->isInteractive()) { $this->stdErr->writeln('Non-interactive use of this command is not supported.'); - $this->stdErr->writeln("\n" . $this->getApiTokenHelp('comment')); + $this->stdErr->writeln("\n" . $this->getNonInteractiveAuthHelp('comment')); return 1; } $tokenClient = new Client($this->api()->getGuzzleOptions()); - $tokenUrl = Url::fromString($this->config()->get('api.accounts_api_url')) - ->combine('/oauth2/token') - ->__toString(); + $clientId = $this->config()->get('api.oauth2_client_id'); + $tokenUrl = $this->config()->get('api.oauth2_token_url'); - $validator = function ($apiToken) use ($tokenClient, $tokenUrl) { + $validator = function ($apiToken) use ($tokenClient, $clientId, $tokenUrl) { $apiToken = trim($apiToken); if (!strlen($apiToken)) { throw new \RuntimeException('The token cannot be empty'); @@ -61,7 +60,7 @@ try { $token = (new ApiToken($tokenClient, [ - 'client_id' => $this->config()->get('api.oauth2_client_id'), + 'client_id' => $clientId, 'token_url' => $tokenUrl, 'auth_location' => 'headers', 'api_token' => $apiToken, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Auth/BrowserLoginCommand.php new/platformsh-cli-3.59.1/src/Command/Auth/BrowserLoginCommand.php --- old/platformsh-cli-3.57.5/src/Command/Auth/BrowserLoginCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Auth/BrowserLoginCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -32,9 +32,13 @@ ->addOption('force', 'f', InputOption::VALUE_NONE, 'Log in again, even if already logged in'); Url::configureInput($this->getDefinition()); - $help = 'Use this command to log in to the ' . $applicationName . ' using a browser.' - . "\n\n" . $this->getApiTokenHelp(); - $this->setHelp($help); + $executable = $this->config()->get('application.executable'); + $help = 'Use this command to log in to the ' . $applicationName . ' using a web browser.' + . "\n\nIt launches a temporary local website which redirects you to log in if necessary, and then captures the resulting authorization code." + . "\n\nYour system's default browser will be used. You can override this using the <info>--browser</info> option." + . "\n\nAlternatively, to log in using an API token (without a browser), run: <info>$executable auth:api-token-login</info>" + . "\n\n" . $this->getNonInteractiveAuthHelp(); + $this->setHelp(\wordwrap($help, 80)); } protected function execute(InputInterface $input, OutputInterface $output) @@ -44,8 +48,8 @@ return 1; } if (!$input->isInteractive()) { - $this->stdErr->writeln('Non-interactive login is not supported.'); - $this->stdErr->writeln("\n" . $this->getApiTokenHelp('comment')); + $this->stdErr->writeln('Non-interactive use of this command is not supported.'); + $this->stdErr->writeln("\n" . $this->getNonInteractiveAuthHelp('comment')); return 1; } if ($this->config()->getSessionId() !== 'default' || count($this->api()->listSessionIds()) > 1) { @@ -140,6 +144,7 @@ 'CLI_OAUTH_CODE_CHALLENGE' => $this->convertVerifierToChallenge($codeVerifier), 'CLI_OAUTH_AUTH_URL' => $this->config()->get('api.oauth2_auth_url'), 'CLI_OAUTH_CLIENT_ID' => $this->config()->get('api.oauth2_client_id'), + 'CLI_OAUTH_PROMPT' => $input->getOption('force') ? 'consent select_account' : 'consent', 'CLI_OAUTH_FILE' => $responseFile, ] + $this->getParentEnv()); $process->setTimeout(null); @@ -174,7 +179,6 @@ $this->stdErr->writeln('<options=bold>Help:</>'); $this->stdErr->writeln(' Leave this command running during login.'); $this->stdErr->writeln(' If you need to quit, use Ctrl+C.'); - $this->stdErr->writeln("\n" . preg_replace('/^/m', ' ', $this->getApiTokenHelp())); $this->stdErr->writeln(''); // Wait for the file to be filled with an OAuth2 authorization code. @@ -211,7 +215,11 @@ $this->stdErr->writeln('Failed to get an authorization code.'); $this->stdErr->writeln(''); if (!empty($response['error']) && !empty($response['error_description'])) { - $this->stdErr->writeln(sprintf('%s (<error>%s</error>)', $response['error_description'], $response['error'])); + $this->stdErr->writeln(' OAuth 2.0 error: <error>' . $response['error'] . '</error>'); + $this->stdErr->writeln(' Description: ' . $response['error_description']); + if (!empty($response['error_hint'])) { + $this->stdErr->writeln(' Hint: ' . $response['error_hint']); + } $this->stdErr->writeln(''); } elseif (!empty($response['error_description'])) { $this->stdErr->writeln($response['error_description']); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Auth/PasswordLoginCommand.php new/platformsh-cli-3.59.1/src/Command/Auth/PasswordLoginCommand.php --- old/platformsh-cli-3.57.5/src/Command/Auth/PasswordLoginCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Auth/PasswordLoginCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -32,7 +32,7 @@ . $accountsUrl . '/user/password</info>' . "\n\nAlternatively, to log in to the CLI with a browser, run:\n <info>" . $executable . ' auth:browser-login</info>' - . "\n\n" . $this->getApiTokenHelp(); + . "\n\n" . $this->getNonInteractiveAuthHelp(); $this->setHelp($help); } @@ -43,8 +43,8 @@ return 1; } if (!$input->isInteractive()) { - $this->stdErr->writeln('Non-interactive login is not supported.'); - $this->stdErr->writeln("\n" . $this->getApiTokenHelp('comment')); + $this->stdErr->writeln('Non-interactive use of this command is not supported.'); + $this->stdErr->writeln("\n" . $this->getNonInteractiveAuthHelp('comment')); return 1; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/CommandBase.php new/platformsh-cli-3.59.1/src/Command/CommandBase.php --- old/platformsh-cli-3.57.5/src/Command/CommandBase.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/CommandBase.php 2020-07-21 15:02:11.000000000 +0200 @@ -381,7 +381,9 @@ if ($this->output && $this->input && $this->input->isInteractive()) { if ($this->config()->getSessionId() !== 'default' || count($this->api()->listSessionIds()) > 1) { $this->stdErr->writeln(sprintf('The current session ID is: <info>%s</info>', $this->config()->getSessionId())); - $this->stdErr->writeln(sprintf('To switch sessions, run: <info>%s session:switch</info>', $this->config()->get('application.executable'))); + if (!$this->config()->isSessionIdFromEnv()) { + $this->stdErr->writeln(sprintf('To switch sessions, run: <info>%s session:switch</info>', $this->config()->get('application.executable'))); + } $this->stdErr->writeln(''); } @@ -1560,17 +1562,17 @@ } /** - * Get help on how to use API tokens. + * Get help on how to use API tokens non-interactively. * * @param string $tag * * @return string */ - protected function getApiTokenHelp($tag = 'info') + protected function getNonInteractiveAuthHelp($tag = 'info') { - $executable = $this->config()->get('application.executable'); + $prefix = $this->config()->get('application.env_prefix'); - return "To log in using an API token, run: <$tag>$executable auth:api-token-login</$tag>"; + return "To authenticate non-interactively, configure an API token using the <$tag>${prefix}TOKEN</$tag> environment variable."; } /** @@ -1633,7 +1635,6 @@ // Generate a new certificate from the certifier API. /** @var \Platformsh\Cli\SshCert\Certifier $certifier */ $certifier = $this->getService('certifier'); - $sshCert = null; if ($certifier->isAutoLoadEnabled()) { $this->stdErr->writeln(''); $this->stdErr->writeln('Generating SSH certificate...'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Environment/EnvironmentDeleteCommand.php new/platformsh-cli-3.59.1/src/Command/Environment/EnvironmentDeleteCommand.php --- old/platformsh-cli-3.57.5/src/Command/Environment/EnvironmentDeleteCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Environment/EnvironmentDeleteCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -139,7 +139,7 @@ // Find a list of branches merged on the remote. $git->fetch($remoteName); $mergedBranches = $git->getMergedBranches($remoteName . '/' . $base, true); - $mergedBranches = array_filter($mergedBranches, function ($mergedBranch) use ($remoteName, $base) { + $mergedBranches = array_filter($mergedBranches, function ($mergedBranch) use ($remoteName) { return strpos($mergedBranch, $remoteName) === 0; }); $stripLength = strlen($remoteName . '/'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Project/ProjectCreateCommand.php new/platformsh-cli-3.59.1/src/Command/Project/ProjectCreateCommand.php --- old/platformsh-cli-3.57.5/src/Command/Project/ProjectCreateCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Project/ProjectCreateCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -274,6 +274,7 @@ $regions[$region->id] = $region->label; } } + \uksort($regions, [$this->api(), 'compareDomains']); } else { $regions = (array) $this->config()->get('service.available_regions'); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Self/SelfBuildCommand.php new/platformsh-cli-3.59.1/src/Command/Self/SelfBuildCommand.php --- old/platformsh-cli-3.57.5/src/Command/Self/SelfBuildCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Self/SelfBuildCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -130,9 +130,9 @@ $originalConfig = json_decode(file_get_contents(CLI_ROOT . '/box.json'), true); $boxConfig = array_merge($originalConfig, $boxConfig); $boxConfig['base-path'] = CLI_ROOT; - $filename = tempnam(sys_get_temp_dir(), 'cli-box-'); - file_put_contents($filename, json_encode($boxConfig)); - $boxArgs[] = '--config=' . $filename; + $tmpJson = tempnam(sys_get_temp_dir(), 'cli-box-'); + file_put_contents($tmpJson, json_encode($boxConfig)); + $boxArgs[] = '--config=' . $tmpJson; } $this->stdErr->writeln('Building Phar package using Box'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Self/SelfInstallCommand.php new/platformsh-cli-3.59.1/src/Command/Self/SelfInstallCommand.php --- old/platformsh-cli-3.57.5/src/Command/Self/SelfInstallCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Self/SelfInstallCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -384,6 +384,7 @@ return getenv($envPrefix . 'APP_DIR') . '/.environment'; } + // Default to Bash filenames. $candidates = [ '.bashrc', '.bash_profile', @@ -397,10 +398,12 @@ ]; } + // Use .zshrc on ZSH. if ($shellType === 'zsh' || (empty($shellType) && getenv('ZSH'))) { - array_unshift($candidates, '.zshrc'); + $candidates = ['.zshrc']; } + // Pick the first of the candidate files that already exists. $homeDir = $this->config()->getHomeDirectory(); foreach ($candidates as $candidate) { if (file_exists($homeDir . DIRECTORY_SEPARATOR . $candidate)) { @@ -410,10 +413,13 @@ } } - // If none of the files exist (yet), and we are on Bash, and the home - // directory is writable, then use ~/.bashrc or ~/.bash_profile on - // OS X. - if (is_writable($homeDir) && $shellType === 'bash') { + if (!is_writable($homeDir)) { + return false; + } + + // If none of the files exist (yet), and the home directory is writable, + // then create a new file based on the shell type. + if ($shellType === 'bash') { if (OsUtil::isOsX()) { $this->debug('OS X: defaulting to ~/.bash_profile'); @@ -422,6 +428,10 @@ $this->debug('Defaulting to ~/.bashrc'); return $homeDir . DIRECTORY_SEPARATOR . '.bashrc'; + } elseif ($shellType === 'zsh') { + $this->debug('Defaulting to ~/.zshrc'); + + return $homeDir . DIRECTORY_SEPARATOR . '.zshrc'; } return false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/Self/SelfStatsCommand.php new/platformsh-cli-3.59.1/src/Command/Self/SelfStatsCommand.php --- old/platformsh-cli-3.57.5/src/Command/Self/SelfStatsCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/Self/SelfStatsCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -18,7 +18,8 @@ $this ->setName('self:stats') ->setDescription('View stats on GitHub package downloads') - ->addOption('page', 'p', InputOption::VALUE_REQUIRED, 'Page number', 1); + ->addOption('page', 'p', InputOption::VALUE_REQUIRED, 'Page number', 1) + ->addOption('count', 'c', InputOption::VALUE_REQUIRED, 'Results per page (max: 100)', 20); Table::configureInput($this->getDefinition()); PropertyFormatter::configureInput($this->getDefinition()); } @@ -39,7 +40,7 @@ ], 'query' => [ 'page' => (int) $input->getOption('page'), - 'per_page' => 20, + 'per_page' => (int) $input->getOption('count'), ], ])->json(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/User/UserAddCommand.php new/platformsh-cli-3.59.1/src/Command/User/UserAddCommand.php --- old/platformsh-cli-3.57.5/src/Command/User/UserAddCommand.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Command/User/UserAddCommand.php 2020-07-21 15:02:11.000000000 +0200 @@ -3,6 +3,8 @@ use Platformsh\Cli\Command\CommandBase; use Platformsh\Client\Model\EnvironmentAccess; +use Platformsh\Client\Model\Invitation\AlreadyInvitedException; +use Platformsh\Client\Model\Invitation\Environment; use Platformsh\Client\Model\ProjectAccess; use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Helper\ProgressBar; @@ -251,20 +253,37 @@ // Ask for confirmation. if ($existingProjectAccess) { if (!$questionHelper->confirm('Are you sure you want to make these change(s)?')) { - return 1; } } else { $this->stdErr->writeln('<comment>Adding users can result in additional charges.</comment>'); $this->stdErr->writeln(''); if (!$questionHelper->confirm('Are you sure you want to add this user?')) { - return 1; } } + $this->stdErr->writeln(''); + + // If the user does not already exist on the project, then use the Invitations API. + if (!$existingProjectAccess && $this->config()->getWithDefault('api.invitations', false)) { + $this->stdErr->writeln('Inviting the user to the project...'); + $environments = []; + foreach ($desiredEnvironmentRoles as $id => $role) { + $environments[] = new Environment($id, $role); + } + try { + $project->inviteUserByEmail($email, $desiredProjectRole, $environments); + $this->stdErr->writeln(''); + $this->stdErr->writeln(sprintf('An invitation has been sent to <info>%s</info>', $email)); + } catch (AlreadyInvitedException $e) { + $this->stdErr->writeln(''); + $this->stdErr->writeln(sprintf('An invitation has already been sent to <info>%s</info>', $e->getEmail())); + } + + return 0; + } - // Make the required modifications on the project level: add the user, - // change their role, or do nothing. + // Make the desired changes at the project level. if (!$existingProjectAccess) { $this->stdErr->writeln("Adding the user to the project"); $result = $project->addUser($email, $desiredProjectRole); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Service/Api.php new/platformsh-cli-3.59.1/src/Service/Api.php --- old/platformsh-cli-3.57.5/src/Service/Api.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Service/Api.php 2020-07-21 15:02:11.000000000 +0200 @@ -247,6 +247,7 @@ private function getConnectorOptions() { $connectorOptions = []; $connectorOptions['accounts'] = rtrim($this->config->get('api.accounts_api_url'), '/') . '/'; + $connectorOptions['api_url'] = $this->config->getWithDefault('api.base_url', ''); $connectorOptions['certifier_url'] = $this->config->get('api.certifier_url'); $connectorOptions['verify'] = !$this->config->get('api.skip_ssl'); $connectorOptions['debug'] = $this->config->get('api.debug') ? STDERR : false; @@ -324,7 +325,7 @@ * @return AccessToken|null */ private function tokenFromSession(SessionInterface $session) { - if (!$accessToken = $session->get('accessToken')) { + if (!$session->get('accessToken')) { return null; } $map = [ @@ -531,8 +532,12 @@ $this->cache->save($cacheKey, $cachedProjects, $this->config->get('api.projects_ttl')); } else { $guzzleClient = $this->getHttpClient(); + $apiUrl = $this->config->getWithDefault('api.base_url', ''); foreach ((array) $cached as $id => $data) { $projects[$id] = new Project($data, $data['_endpoint'], $guzzleClient); + if ($apiUrl) { + $projects[$id]->setApiUrl($apiUrl); + } } } @@ -580,6 +585,10 @@ $baseUrl = $cached['_endpoint']; unset($cached['_endpoint']); $project = new Project($cached, $baseUrl, $guzzleClient); + $apiUrl = $this->config->getWithDefault('api.base_url', ''); + if ($apiUrl) { + $project->setApiUrl($apiUrl); + } } return $project; @@ -1128,4 +1137,22 @@ } } } + + /** + * Compares domains as a sorting function. Used to sort region IDs. + * + * @param string $regionA + * @param string $regionB + * + * @return int + */ + public function compareDomains($regionA, $regionB) + { + if (strpos($regionA, '.') && strpos($regionB, '.')) { + $partsA = explode('.', $regionA, 2); + $partsB = explode('.', $regionB, 2); + return (\strnatcasecmp($partsA[1], $partsB[1]) * 10) + \strnatcasecmp($partsA[0], $partsB[0]); + } + return \strnatcasecmp($regionA, $regionB); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Service/SshConfig.php new/platformsh-cli-3.59.1/src/Service/SshConfig.php --- old/platformsh-cli-3.57.5/src/Service/SshConfig.php 2020-06-22 08:30:26.000000000 +0200 +++ new/platformsh-cli-3.59.1/src/Service/SshConfig.php 2020-07-21 15:02:11.000000000 +0200 @@ -81,7 +81,8 @@ '# This file is included from your SSH config file (~/.ssh/config).', '# In turn, it includes the configuration for the currently active CLI session.', '# It is updated automatically when certain CLI commands are run.', - 'Include ' . $sessionSpecificFilename, + 'Host ' . $this->config->get('api.ssh_domain_wildcard'), + ' Include ' . $sessionSpecificFilename, ] ); @@ -136,8 +137,7 @@ { $filename = $this->getUserSshConfigFilename(); - $suggestedConfig = 'Host ' . $this->config->get('api.ssh_domain_wildcard') . PHP_EOL - . ' Include ' . $this->getCliSshDir() . DIRECTORY_SEPARATOR . '*.config'; + $suggestedConfig = 'Include ' . $this->getCliSshDir() . DIRECTORY_SEPARATOR . '*.config'; $manualMessage = 'To configure SSH manually, add the following lines to: <comment>' . $filename . '</comment>' . "\n" . $suggestedConfig; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/platformsh-cli-3.57.5/tests/Service/ApiTest.php new/platformsh-cli-3.59.1/tests/Service/ApiTest.php --- old/platformsh-cli-3.57.5/tests/Service/ApiTest.php 1970-01-01 01:00:00.000000000 +0100 +++ new/platformsh-cli-3.59.1/tests/Service/ApiTest.php 2020-07-21 15:02:11.000000000 +0200 @@ -0,0 +1,37 @@ +<?php + +namespace Platformsh\Cli\Tests\Service; + +use Platformsh\Cli\Service\Api; + +class ApiTest extends \PHPUnit_Framework_TestCase +{ + public function testCompareDomains() { + $api = new Api(); + $arr = [ + 'region-1.fxample.com', + 'region-4.example.com', + 'region-1.example.com', + 'region-3.example.com', + 'a', + 'example.com', + 'Region-2.example.com', + 'region-10.example.com', + 'region-2.fxample.com', + 'region.example.com', + ]; + \usort($arr, [$api, 'compareDomains']); + $this->assertEquals([ + 'a', + 'example.com', + 'region.example.com', + 'region-1.example.com', + 'Region-2.example.com', + 'region-3.example.com', + 'region-4.example.com', + 'region-10.example.com', + 'region-1.fxample.com', + 'region-2.fxample.com', + ], $arr); + } +} ++++++ platformsh-cli-vendor.tar.xz ++++++ ++++ 10696 lines of diff (skipped)
