Skip to content

Commit de9aaf3

Browse files
authored
Merge pull request #663 from keboola/odin-AJDA-2028-c
[internal-api-php-client] update lib standards
2 parents 016b06c + 616b96a commit de9aaf3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1068
-190
lines changed

composer.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@
4444
"require-dev": {
4545
"infection/infection": "^0.27",
4646
"keboola/coding-standard": ">=14.0",
47-
"phpstan/phpstan": "^1.0",
48-
"phpstan/phpstan-phpunit": "^1.3",
49-
"phpstan/phpstan-symfony": "^1.4",
47+
"phpstan/phpstan": "^2.1",
48+
"phpstan/phpstan-phpunit": "^2.0",
49+
"phpstan/phpstan-symfony": "^2.0",
5050
"phpunit/phpunit": "^9.5",
5151
"sempro/phpunit-pretty-print": "^1.4",
52-
"symfony/dotenv": "^6.3"
52+
"symfony/dotenv": "^6.3|^7.0"
5353
},
5454
"scripts": {
5555
"pre-autoload-dump": "Aws\\Script\\Composer\\Composer::removeUnusedServices",

provisioning/local/.terraform.lock.hcl

Lines changed: 79 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provisioning/local/azure.tf

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,19 @@ resource "azuread_application" "job_queue_internal_api_php_client" {
2424
}
2525

2626
resource "azuread_service_principal" "job_queue_internal_api_php_client" {
27-
application_id = azuread_application.job_queue_internal_api_php_client.application_id
27+
client_id = azuread_application.job_queue_internal_api_php_client.client_id
2828
owners = [data.azuread_client_config.current.object_id]
2929
}
3030

31+
resource "time_rotating" "job_queue_internal_api_php_client" {
32+
rotation_days = 30
33+
}
34+
3135
resource "azuread_service_principal_password" "job_queue_internal_api_php_client" {
3236
service_principal_id = azuread_service_principal.job_queue_internal_api_php_client.id
37+
rotate_when_changed = {
38+
rotation = time_rotating.job_queue_internal_api_php_client.id
39+
}
3340
}
3441

3542
// resource group
@@ -40,7 +47,7 @@ resource "azurerm_resource_group" "job_queue_internal_api_php_client" {
4047

4148
resource "azurerm_role_assignment" "job_queue_daemon" {
4249
scope = azurerm_resource_group.job_queue_internal_api_php_client.id
43-
principal_id = azuread_service_principal.job_queue_internal_api_php_client.id
50+
principal_id = azuread_service_principal.job_queue_internal_api_php_client.object_id
4451
role_definition_name = "Contributor"
4552
}
4653

@@ -54,7 +61,7 @@ resource "azurerm_key_vault" "job_queue_internal_api_php_client" {
5461

5562
access_policy {
5663
tenant_id = data.azurerm_client_config.current.tenant_id
57-
object_id = azuread_service_principal.job_queue_internal_api_php_client.id
64+
object_id = azuread_service_principal.job_queue_internal_api_php_client.object_id
5865

5966
key_permissions = [
6067
"Decrypt",
@@ -78,7 +85,7 @@ output "azure_tenant_id" {
7885
}
7986

8087
output "azure_application_id" {
81-
value = azuread_application.job_queue_internal_api_php_client.application_id
88+
value = azuread_application.job_queue_internal_api_php_client.client_id
8289
}
8390

8491
output "azure_application_secret" {

provisioning/local/main.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,22 @@ terraform {
1010
required_providers {
1111
aws = {
1212
source = "hashicorp/aws"
13-
version = "~> 5.9"
13+
version = "~> 6.11"
1414
}
1515

1616
azurerm = {
1717
source = "hashicorp/azurerm"
18-
version = "~> 4.17.0"
18+
version = "~> 4.42"
1919
}
2020

2121
azuread = {
2222
source = "hashicorp/azuread"
23-
version = "~> 2.40.0"
23+
version = "~> 3.5"
2424
}
2525

2626
google = {
2727
source = "hashicorp/google"
28-
version = "~> 4.81.0"
28+
version = "~> 7.4"
2929
}
3030
}
3131

src/Client.php

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ public function __construct(
6363
$options,
6464
);
6565
if (!empty($options['backoffMaxTries'])) {
66-
$options['backoffMaxTries'] = intval($options['backoffMaxTries']);
66+
assert(is_scalar($options['backoffMaxTries']));
67+
$options['backoffMaxTries'] = intval((string) $options['backoffMaxTries']);
6768
} else {
6869
$options['backoffMaxTries'] = self::DEFAULT_BACKOFF_RETRIES;
6970
}
@@ -125,6 +126,7 @@ private function validateConfiguration(
125126
$messages = '';
126127
/** @var ConstraintViolationInterface $error */
127128
foreach ($errors as $error) {
129+
// @phpstan-ignore-next-line
128130
$messages .= 'Value "' . $error->getInvalidValue() . '" is invalid: ' . $error->getMessage() . "\n";
129131
}
130132
throw new ClientException('Invalid parameters when creating client: ' . $messages);
@@ -162,7 +164,10 @@ public function createJobsBatch(array $jobs): array
162164
}
163165
$result = $this->sendRequest($request);
164166

165-
return array_map(fn(array $jobData) => $this->existingJobFactory->loadFromExistingJobData($jobData), $result);
167+
return array_map(function ($jobData) {
168+
assert(is_array($jobData));
169+
return $this->existingJobFactory->loadFromExistingJobData($jobData);
170+
}, $result);
166171
}
167172

168173
/**
@@ -364,7 +369,9 @@ public function getJobsDurationSum(string $projectId): int
364369

365370
$request = new Request('GET', 'stats/projects/' . $projectId);
366371
$response = $this->sendRequest($request);
367-
return $response['stats']['durationSum'];
372+
assert(isset($response['stats']) && is_array($response['stats']));
373+
assert(is_scalar($response['stats']['durationSum']));
374+
return (int) $response['stats']['durationSum'];
368375
}
369376

370377
/**
@@ -503,18 +510,19 @@ function (array $group): array {
503510
/** @return TJob[] */
504511
private function mapJobsFromSearchResponse(array $responseBody): array
505512
{
506-
return array_map(
507-
fn(array $jobData) => $this->existingJobFactory->loadFromElasticJobData($jobData),
508-
$responseBody,
509-
);
513+
return array_map(function ($jobData) {
514+
assert(is_array($jobData));
515+
return $this->existingJobFactory->loadFromElasticJobData($jobData);
516+
}, $responseBody);
510517
}
511518

512519
/**
513520
* @return array<TJob>
514521
*/
515522
private function mapJobsFromResponse(array $responseBody): array
516523
{
517-
$jobs = array_map(function (array $jobData) {
524+
$jobs = array_map(function ($jobData) {
525+
assert(is_array($jobData));
518526
try {
519527
return $this->existingJobFactory->loadFromExistingJobData($jobData);
520528
} catch (Throwable $e) {
@@ -573,10 +581,12 @@ private function initClient(
573581
$handlerStack = HandlerStack::create();
574582
}
575583
// Set exponential backoff
584+
assert(is_int($options['backoffMaxTries']));
576585
$handlerStack->push(Middleware::retry($this->createDefaultDecider($options['backoffMaxTries'])));
577586
// Set handler to set default headers
578587
$handlerStack->push(Middleware::mapRequest(
579588
function (RequestInterface $request) use ($internalToken, $storageToken, $applicationToken, $options) {
589+
assert(is_string($options['userAgent']));
580590
$request = $request->withHeader('User-Agent', $options['userAgent'])
581591
->withHeader('Content-type', 'application/json');
582592
if ($internalToken !== null) {
@@ -641,7 +651,7 @@ private function decodeRequestBody(ResponseInterface $response): array
641651

642652
private function throwExceptionByStringCode(array $body, Throwable $previous): void
643653
{
644-
if (empty($body['context']['stringCode'])) {
654+
if (!isset($body['context']) || !is_array($body['context']) || empty($body['context']['stringCode'])) {
645655
return;
646656
}
647657

src/ExistingJobFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ public function __construct(
2525
public function loadFromExistingJobData(array $data): JobInterface
2626
{
2727
$data = $this->validateJobData($data, FullJobDefinition::class);
28-
28+
// @phpstan-ignore-next-line
2929
return new Job($this->objectEncryptor, $this->storageClientFactory, $data);
3030
}
3131

3232
public function loadFromElasticJobData(array $data): JobInterface
3333
{
3434
$data = $this->validateJobData($data, ElasticJobDefinition::class);
35-
35+
assert(isset($data['id']) && isset($data['mode']) && isset($data['isFinished']));
3636
return new Job($this->objectEncryptor, $this->storageClientFactory, $data);
3737
}
3838
}

src/ExistingPlainJobFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ class ExistingPlainJobFactory extends JobFactory implements ExistingJobFactoryIn
1717
public function loadFromExistingJobData(array $data): PlainJobInterface
1818
{
1919
$data = $this->validateJobData($data, FullJobDefinition::class);
20+
assert(isset($data['id']) && isset($data['mode']) && isset($data['isFinished']));
2021
return new PlainJob($data);
2122
}
2223

2324
public function loadFromElasticJobData(array $data): PlainJobInterface
2425
{
2526
$data = $this->validateJobData($data, ElasticJobDefinition::class);
27+
assert(isset($data['id']) && isset($data['mode']) && isset($data['isFinished']));
2628
return new PlainJob($data);
2729
}
2830
}

0 commit comments

Comments
 (0)