Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Deprecation below 7.2.5 #2707

Merged
merged 103 commits into from
Aug 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
11ec7da
3.163.2 release
aws-sdk-php-automation Nov 20, 2020
6272b96
Merge https://github.com/aws/aws-sdk-php
SamRemis Mar 11, 2021
db54a69
Merge remote-tracking branch 'upstream/master'
SamRemis Jun 30, 2021
40a0c8a
Revert "IMDS dualstack support (#2277)"
SamRemis Aug 3, 2021
fc2854e
Merge remote-tracking branch 'upstream/master'
SamRemis Aug 4, 2021
c538c98
merge
SamRemis Aug 6, 2021
530dea0
merge
SamRemis Aug 10, 2021
056bd46
Merge remote-tracking branch 'upstream/master'
SamRemis Sep 3, 2021
ed9796c
Merge remote-tracking branch 'upstream/master'
SamRemis Sep 3, 2021
e818536
Merge remote-tracking branch 'upstream/master'
SamRemis Sep 8, 2021
e29a218
Merge remote-tracking branch 'upstream/master'
SamRemis Sep 28, 2021
5319955
merge
SamRemis Oct 12, 2021
d36bb84
merge
SamRemis Oct 21, 2021
930ff7e
merge
SamRemis Oct 26, 2021
c40f9a8
Merge remote-tracking branch 'upstream/master'
SamRemis Nov 5, 2021
dfdac4e
Merge remote-tracking branch 'upstream/master'
SamRemis Nov 10, 2021
1d52190
Merge remote-tracking branch 'upstream/master'
SamRemis Nov 16, 2021
02c9847
Merge remote-tracking branch 'upstream/master'
SamRemis Dec 2, 2021
c13eb8e
Merge remote-tracking branch 'upstream/master'
SamRemis Dec 9, 2021
cdf6b29
merge
SamRemis Dec 15, 2021
754f1a2
merge
SamRemis Jan 25, 2022
928722f
merge
SamRemis Jan 28, 2022
b4ea7d8
merge
SamRemis Feb 4, 2022
08dfebf
Revert "Enhancement: S3 StreamWrapper error handling (#2372)"
SamRemis Feb 4, 2022
99dbfd4
Merge remote-tracking branch 'upstream/master'
SamRemis Feb 9, 2022
0b6a346
catching up
SamRemis Feb 9, 2022
b91798d
catchup 2
SamRemis Feb 9, 2022
1b7d3a9
fix
SamRemis Feb 9, 2022
effc86c
add changelog
SamRemis Feb 9, 2022
211eaaa
Merge remote-tracking branch 'upstream/master'
SamRemis Feb 10, 2022
4955db2
merge
SamRemis Feb 18, 2022
b6ef7a9
merge
SamRemis Feb 24, 2022
eeca3e8
merge
SamRemis Feb 28, 2022
17b5fcb
merge
SamRemis Mar 21, 2022
f9abc3a
Merge remote-tracking branch 'upstream/master'
SamRemis Mar 30, 2022
bbdcf16
Merge remote-tracking branch 'upstream/master'
aws-sdk-php-automation Jun 17, 2022
d1c75dc
Merge remote-tracking branch 'upstream/master'
aws-sdk-php-automation Jun 23, 2022
cc91889
merge
aws-sdk-php-automation Jun 30, 2022
4e5b79e
Merge remote-tracking branch 'upstream/master'
aws-sdk-php-automation Jul 14, 2022
6f22eca
Merge remote-tracking branch 'upstream/master'
Sep 6, 2022
3e3418f
Merge remote-tracking branch 'upstream/master'
Sep 27, 2022
de1fb72
Update StreamWrapperTest.php
Sep 27, 2022
cbaa4e7
Merge remote-tracking branch 'upstream/master'
Oct 18, 2022
fb7aed9
Merge remote-tracking branch 'upstream/master'
Oct 19, 2022
55d098f
Merge remote-tracking branch 'upstream/master'
Oct 19, 2022
444c21f
Merge remote-tracking branch 'upstream/master'
Oct 20, 2022
1a5a364
Merge remote-tracking branch 'upstream/master'
Nov 14, 2022
5648ddf
Merge remote-tracking branch 'upstream/master'
Dec 19, 2022
ea37aa7
Merge remote-tracking branch 'upstream/master'
Dec 21, 2022
5a9631a
rollback
Dec 22, 2022
e0685c1
Revert "bugfix: add MD5 header for PutObject and UploadPart by defaul…
Dec 22, 2022
cd85c7f
Merge remote-tracking branch 'upstream/master'
Dec 27, 2022
c2cbe50
Merge remote-tracking branch 'upstream/master'
Jan 5, 2023
5b76cff
Merge remote-tracking branch 'upstream/master'
Jan 10, 2023
78f97a9
Merge remote-tracking branch 'upstream/master'
Jan 18, 2023
f073509
merge
Jan 25, 2023
1ed73fd
Merge remote-tracking branch 'upstream/master'
Feb 3, 2023
e23d611
merge
Feb 21, 2023
44c74e5
Merge remote-tracking branch 'upstream/master'
Mar 29, 2023
c682258
initial commit
Mar 29, 2023
00a6297
Revert "initial commit"
Mar 29, 2023
1e5788c
Revert "Revert "initial commit""
Mar 29, 2023
3d9831d
Merge remote-tracking branch 'upstream/master'
Apr 20, 2023
6cce217
Merge remote-tracking branch 'upstream/master'
May 10, 2023
3482ffb
Merge remote-tracking branch 'upstream/master'
May 11, 2023
d5e6b64
Merge remote-tracking branch 'upstream/master'
May 18, 2023
798d4ed
Merge remote-tracking branch 'upstream/master'
May 23, 2023
3788522
update
May 23, 2023
e367214
Merge remote-tracking branch 'upstream/master'
May 31, 2023
ea937ae
Merge remote-tracking branch 'upstream/master'
Jun 1, 2023
154a134
Merge remote-tracking branch 'upstream/master'
Jun 8, 2023
e2282c9
Initial commit
Jun 8, 2023
8a86f0b
Merge branch 'master' into deprecation-below-7.2.5
Jun 8, 2023
fc5034e
Update enhancement-php-version-bump.json
Jun 8, 2023
dbc9c80
Update tests.yml
Jun 8, 2023
2403f9a
Update tests.yml
Jun 8, 2023
971166a
Add return types
Jun 8, 2023
6b4516c
Fix @covers delcarations
Jun 8, 2023
358989d
remove suppress_php_deprecation_warning
Jun 8, 2023
2a6abe3
add return types
Jun 8, 2023
4233e1e
add return types
Jun 8, 2023
1556f93
Update StreamWrapper.php
Jun 8, 2023
fed3d09
syntax fix
Jun 9, 2023
25ec03b
covers annotation updates
Jun 9, 2023
3af7861
update guzzle calls to use utils::queue
Jun 9, 2023
5614815
Merge remote-tracking branch 'upstream/master' into deprecation-below…
Jun 9, 2023
1b9afc8
remove model changes
Jun 9, 2023
7ae640d
Delete dualstack_endpoints.json
Jun 9, 2023
55c4995
remove lower guzzle versions
Jun 9, 2023
568b562
Add back in lower supported versions
Jul 31, 2023
a6923d0
Add 7.2 test
Jul 31, 2023
716efb5
Shorten return types
Jul 31, 2023
1e912e0
Merge remote-tracking branch 'upstream/master' into deprecation-below…
Aug 9, 2023
0cdad55
Update MiddlewareTest.php
Aug 9, 2023
e6d4106
update tests
Aug 9, 2023
a33f08e
Update MiddlewareTest.php
Aug 9, 2023
ef6e889
Update composer.json
Aug 9, 2023
8ed4979
Update composer.json
Aug 9, 2023
6a7b109
update packager to use -W flag
Aug 9, 2023
24811e6
Update nextrelease to use feature for major version bump
Aug 9, 2023
a611b99
Merge remote-tracking branch 'upstream/master' into deprecation-below…
Aug 10, 2023
c151413
Update S3Client.php
Aug 10, 2023
40f069b
updates based on feedback, also maple
Aug 14, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changes/nextrelease/enhancement-php-version-bump.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[
{
"type": "feature",
"category": "",
"description": "This version ends support for PHP versions below 7.2.5"
}
]
14 changes: 4 additions & 10 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
strategy:
#for each of the following versions of PHP, with and without --prefer-lowest
matrix:
php-versions: ['5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2']
php-versions: ['7.2.5', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2']
composer-options: ['', '--prefer-lowest']
#set the name for each job
name: PHP ${{ matrix.php-versions }} ${{ matrix.composer-options }}
Expand All @@ -43,12 +43,6 @@ jobs:
- name: Validate composer.json and composer.lock
run: composer validate

#remove incompatible xdebug file if it exists
- if: ${{ matrix.php-versions == '5.5' }}
name: PHP 5.5
run: |
sudo rm -f /etc/php5/cli/conf.d/20-xdebug.ini

#get dependencies
- name: Install dependencies
run: composer update ${{ matrix.composer-options }} --no-interaction --prefer-source
Expand All @@ -68,7 +62,7 @@ jobs:
run: make test

#static analysis
- if: ${{ matrix.php-versions >= '7.1' && matrix.php-versions < '8.0' && matrix.composer-options == '' }}
- if: ${{ matrix.php-versions < '8.0' && matrix.composer-options == '' }}
name: Static analysis
run: |
composer require --dev nette/neon "^3.0"
Expand All @@ -79,11 +73,11 @@ jobs:
- if: ${{ matrix.composer-options == '' }}
name: Package generation
run: |
composer require guzzlehttp/psr7 "^1.9.1"
composer require guzzlehttp/psr7 "^1.9.1" -W
composer update
make package

#generate code coverage
- if: ${{ (matrix.php-versions == '7.1' || matrix.php-versions == '8.0') && matrix.composer-options == '' }}
- if: ${{ (matrix.php-versions == '7.2.5' || matrix.php-versions == '8.0') && matrix.composer-options == '' }}
name: Code coverage
run: bash <(curl -s https://codecov.io/bash)
4 changes: 2 additions & 2 deletions build/packager.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
$autoloaderContents = [
'Aws/functions.php',
'GuzzleHttp/functions_include.php',
'GuzzleHttp/Psr7/functions_include.php',
'GuzzleHttp/Promise/functions_include.php',
'GuzzleHttp/Psr7/Utils.php',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not necessary to include these two utils files.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GrahamCampbell,

Happy to revert this if you wanted to give the PR another once-over.

Copy link
Contributor

@GrahamCampbell GrahamCampbell Aug 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not a bug, just unnecessary to include these classes explicitly, since they already get autoloaded like the others. The original code was only necessary to include functions - functions cannot (currently) be autoloaded.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll keep that in mind and will probably add something to our backlog for this. If you notice anything else, definitely let us know.

'GuzzleHttp/Promise/Utils.php',
'JmesPath/JmesPath.php',
];

Expand Down
15 changes: 13 additions & 2 deletions build/test-phar.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@

// React autoloader
$checks = [
'GuzzleHttp\\Psr7\\stream_for',
'GuzzleHttp\\Promise\\inspect',
'JmesPath\\search',
'Aws\\dir_iterator',
];
Expand All @@ -33,4 +31,17 @@
}
}

$classMethodChecks = [
'GuzzleHttp\\Promise\\Utils' => 'inspect',
'GuzzleHttp\\Psr7\\Utils' => 'streamFor',
];

foreach ($classMethodChecks as $class => $method) {
if (!method_exists($class, $method)
) {
echo $class . '::' . $method . ' not found';
exit(1);
}
}

echo 'Version=' . Aws\Sdk::VERSION;
8 changes: 4 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,24 @@
"issues": "https://github.com/aws/aws-sdk-php/issues"
},
"require": {
"php": ">=5.5",
"php": ">=7.2.5",
"guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
"guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
"guzzlehttp/promises": "^1.4.0",
"guzzlehttp/promises": "^1.4.0 || ^2.0",
"mtdowling/jmespath.php": "^2.6",
"ext-pcre": "*",
"ext-json": "*",
"ext-simplexml": "*",
"aws/aws-crt-php": "^1.0.4",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"require-dev": {
"composer/composer" : "^1.10.22",
"ext-openssl": "*",
"ext-dom": "*",
"ext-pcntl": "*",
"ext-sockets": "*",
"phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5",
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
"behat/behat": "~3.0",
"doctrine/cache": "~1.4",
"aws/aws-php-sns-message-validator": "~1.0",
Expand Down
4 changes: 0 additions & 4 deletions src/AwsClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,6 @@ public function __construct(array $args)
$this->addRecursionDetection();
$this->addRequestBuilder();

if (!$config['suppress_php_deprecation_warning']) {
$this->emitDeprecationWarning();
}

if (isset($args['with_resolved'])) {
$args['with_resolved']($config);
}
Expand Down
22 changes: 0 additions & 22 deletions src/ClientResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -280,13 +280,6 @@ class ClientResolver
'doc' => 'Set to false to disable checking for shared aws config files usually located in \'~/.aws/config\' and \'~/.aws/credentials\'. This will be ignored if you set the \'profile\' setting.',
'default' => true,
],
'suppress_php_deprecation_warning' => [
'type' => 'value',
'valid' => ['bool'],
'doc' => 'Set to false to disable the deprecation warning of PHP versions 7.2.4 and below',
'default' => false,
'fn' => [__CLASS__, '_apply_suppress_php_deprecation_warning']
],
];

/**
Expand Down Expand Up @@ -1026,21 +1019,6 @@ public static function _apply_idempotency_auto_fill(
}
}

public static function _apply_suppress_php_deprecation_warning($suppressWarning, array &$args) {
if ($suppressWarning) {
$args['suppress_php_deprecation_warning'] = true;
} elseif (!empty($_ENV["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"])) {
$args['suppress_php_deprecation_warning'] =
$_ENV["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"];
} elseif (!empty($_SERVER["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"])) {
$args['suppress_php_deprecation_warning'] =
$_SERVER["AWS_SUPPRESS_PHP_DEPRECATION_WARNING"];
} elseif (!empty(getenv("AWS_SUPPRESS_PHP_DEPRECATION_WARNING"))) {
$args['suppress_php_deprecation_warning']
= getenv("AWS_SUPPRESS_PHP_DEPRECATION_WARNING");
}
}

public static function _default_endpoint_provider(array $args)
{
$service = isset($args['api']) ? $args['api'] : null;
Expand Down
2 changes: 1 addition & 1 deletion src/CommandPool.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public function __construct(
/**
* @return PromiseInterface
*/
public function promise()
public function promise(): PromiseInterface
{
return $this->each->promise();
}
Expand Down
8 changes: 4 additions & 4 deletions src/Crypto/AesDecryptingStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public function getCurrentIv()
return $this->cipherMethod->getCurrentIv();
}

public function getSize()
public function getSize(): ?int
{
$plainTextSize = $this->stream->getSize();

Expand All @@ -80,12 +80,12 @@ public function getSize()
return $plainTextSize;
}

public function isWritable()
public function isWritable(): bool
{
return false;
}

public function read($length)
public function read($length): string
{
if ($length > strlen($this->buffer)) {
$this->buffer .= $this->decryptBlock(
Expand All @@ -101,7 +101,7 @@ public function read($length)
return $data ? $data : '';
}

public function seek($offset, $whence = SEEK_SET)
public function seek($offset, $whence = SEEK_SET): void
{
if ($offset === 0 && $whence === SEEK_SET) {
$this->buffer = '';
Expand Down
8 changes: 4 additions & 4 deletions src/Crypto/AesEncryptingStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public function getCurrentIv()
return $this->cipherMethod->getCurrentIv();
}

public function getSize()
public function getSize(): ?int
{
$plainTextSize = $this->stream->getSize();

Expand All @@ -79,12 +79,12 @@ public function getSize()
return $plainTextSize;
}

public function isWritable()
public function isWritable(): bool
{
return false;
}

public function read($length)
public function read($length): string
{
if ($length > strlen($this->buffer)) {
$this->buffer .= $this->encryptBlock(
Expand All @@ -99,7 +99,7 @@ public function read($length)
return $data ? $data : '';
}

public function seek($offset, $whence = SEEK_SET)
public function seek($offset, $whence = SEEK_SET): void
{
if ($whence === SEEK_CUR) {
$offset = $this->tell() + $offset;
Expand Down
2 changes: 1 addition & 1 deletion src/Crypto/AesGcmDecryptingStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public function createStream()
}
}

public function isWritable()
public function isWritable(): bool
{
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion src/Crypto/AesGcmEncryptingStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public function getTag()
return $this->tag;
}

public function isWritable()
public function isWritable(): bool
{
return false;
}
Expand Down
14 changes: 7 additions & 7 deletions src/HashingStream.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function __construct(
$this->callback = $onComplete;
}

public function read($length)
public function read($length): string
{
$data = $this->stream->read($length);
$this->hash->update($data);
Expand All @@ -50,14 +50,14 @@ public function read($length)
return $data;
}

public function seek($offset, $whence = SEEK_SET)
public function seek($offset, $whence = SEEK_SET): void
{
if ($offset === 0) {
$this->hash->reset();
return $this->stream->seek($offset);
// Seeking arbitrarily is not supported.
if ($offset !== 0) {
return;
}

// Seeking arbitrarily is not supported.
return false;
$this->hash->reset();
$this->stream->seek($offset);
}
}
6 changes: 2 additions & 4 deletions src/Multipart/AbstractUploadManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public function upload()
*
* @return PromiseInterface
*/
public function promise()
public function promise(): PromiseInterface
{
if ($this->promise) {
return $this->promise;
Expand Down Expand Up @@ -218,10 +218,8 @@ abstract protected function getCompleteParams();
/**
* Based on the config and service-specific workflow info, creates a
* `Promise` for an `UploadState` object.
*
* @return PromiseInterface A `Promise` that resolves to an `UploadState`.
*/
private function determineState()
private function determineState(): UploadState
{
// If the state was provided via config, then just use it.
if ($this->config['state'] instanceof UploadState) {
Expand Down
3 changes: 1 addition & 2 deletions src/Rds/AuthTokenGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ public function createToken($endpoint, $region, $username, $lifetime = 15)
{
if (!is_numeric($lifetime) || $lifetime > 15 || $lifetime <= 0) {
throw new \InvalidArgumentException(
"Lifetime must be a positive number less than or equal to 15, was {$lifetime}",
null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this fix doesn't seem related to the PHP upgrade

"Lifetime must be a positive number less than or equal to 15, was {$lifetime}"
);
}

Expand Down
2 changes: 1 addition & 1 deletion src/S3/BatchDelete.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public static function fromIterator(
/**
* @return PromiseInterface
*/
public function promise()
public function promise(): PromiseInterface
{
if (!$this->cachedPromise) {
$this->cachedPromise = $this->createPromise();
Expand Down
2 changes: 1 addition & 1 deletion src/S3/BucketEndpointArnMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ private function generateAccessPointHost(
}

$host = "{$accesspointName}-" . $arn->getAccountId();

$useFips = $this->config['use_fips_endpoint']->isUseFipsEndpoint();
stobrien89 marked this conversation as resolved.
Show resolved Hide resolved
$fipsString = $useFips ? "-fips" : "";

Expand Down
3 changes: 2 additions & 1 deletion src/S3/ObjectCopier.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Aws\Result;
use Aws\S3\Exception\S3Exception;
use GuzzleHttp\Promise\Coroutine;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Promise\PromisorInterface;
use InvalidArgumentException;

Expand Down Expand Up @@ -79,7 +80,7 @@ public function __construct(
*
* @return Coroutine
*/
public function promise()
public function promise(): PromiseInterface
{
return Coroutine::of(function () {
$headObjectCommand = $this->client->getCommand(
Expand Down
2 changes: 1 addition & 1 deletion src/S3/ObjectUploader.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public function __construct(
/**
* @return PromiseInterface
*/
public function promise()
public function promise(): PromiseInterface
{
/** @var int $mup_threshold */
$mup_threshold = $this->options['mup_threshold'];
Expand Down
2 changes: 1 addition & 1 deletion src/S3/S3Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,7 @@ private function processEndpointV2Model()
private function addBuiltIns($args)
{
if ($args['region'] !== 'us-east-1') {
return false;
return;
}
$key = 'AWS::S3::UseGlobalEndpoint';
$result = $args['s3_us_east_1_regional_endpoint'] instanceof \Closure ?
Expand Down
5 changes: 3 additions & 2 deletions src/S3/StreamWrapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -569,9 +569,10 @@ public function rename($path_from, $path_to)
);
// Delete the original object
$this->getClient()->deleteObject([
'Bucket' => $partsFrom['Bucket'],
'Key' => $partsFrom['Key']
'Bucket' => $partsFrom['Bucket'],
stobrien89 marked this conversation as resolved.
Show resolved Hide resolved
'Key' => $partsFrom['Key'],
] + $options);

return true;
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/S3/Transfer.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public function __construct(
*
* @return PromiseInterface
*/
public function promise()
public function promise(): PromiseInterface
{
// If the promise has been created, just return it.
if (!$this->promise) {
Expand Down
Loading