Skip to content

Commit

Permalink
Rename list to all, implement data objects
Browse files Browse the repository at this point in the history
  • Loading branch information
bastien-phi committed Jan 2, 2025
1 parent 367c542 commit dcb9032
Show file tree
Hide file tree
Showing 12 changed files with 13,203 additions and 11 deletions.
12,939 changes: 12,939 additions & 0 deletions api-docs/v1.47.yaml

Large diffs are not rendered by default.

12 changes: 11 additions & 1 deletion phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@ parameters:
count: 1
path: src/Drivers/SocketDockerDriver.php

-
message: "#^Offset 1 does not exist on array\\{0\\?\\: string, 1\\?\\: string, 2\\?\\: string\\}\\.$#"
count: 1
path: src/Model/Response.php

-
message: "#^Offset 2 does not exist on array\\{0\\?\\: string, 1\\?\\: string, 2\\?\\: string\\}\\.$#"
count: 1
path: src/Model/Response.php

-
message: "#^Parameter \\#1 \\$handle of function curl_getinfo expects CurlHandle, resource given\\.$#"
count: 2
Expand All @@ -46,7 +56,7 @@ parameters:
path: src/Model/StreamResponse.php

-
message: "#^Property Soyhuce\\\\Docker\\\\Model\\\\StreamResponse\\:\\:\\$curlHandle \\(resource\\) does not accept CurlHandle\\.$#"
message: "#^Property Soyhuce\\\\Docker\\\\Model\\\\StreamResponse\\:\\:\\$curlHandle \\(resource\\) does not accept \\(CurlHandle\\|false\\)\\.$#"
count: 1
path: src/Model/StreamResponse.php

Expand Down
22 changes: 22 additions & 0 deletions src/Data/Container/EndpointIpamConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php declare(strict_types=1);

namespace Soyhuce\Docker\Data\Container;

use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;

class EndpointIpamConfig extends Data
{
/**
* @param array<int, string> $linkLocalIPs
*/
public function __construct(
#[MapInputName('IPv4Address')]
public string $iPv4Address,
#[MapInputName('IPv6Address')]
public string $iPv6Address,
#[MapInputName('LinkLocalIPs')]
public array $linkLocalIPs,
) {
}
}
47 changes: 47 additions & 0 deletions src/Data/Container/EndpointSettings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php declare(strict_types=1);

namespace Soyhuce\Docker\Data\Container;

use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;

class EndpointSettings extends Data
{
/**
* @param array<int, string>|null $links
* @param array<int, string> $aliases
* @param array<string, string>|null $driverOpts
* @param array<int, string>|null $dnsNames
*/
public function __construct(
#[MapInputName('IPAMConfig')]
public ?EndpointIpamConfig $ipamConfig,
#[MapInputName('Links')]
public ?array $links,
#[MapInputName('MacAddress')]
public string $macAddress,
#[MapInputName('Aliases')]
public ?array $aliases,
#[MapInputName('NetworkID')]
public string $networkId,
#[MapInputName('EndpointID')]
public string $endpointId,
#[MapInputName('Gateway')]
public string $gateway,
#[MapInputName('IPAddress')]
public string $ipAddress,
#[MapInputName('IPPrefixLen')]
public int $ipPrefixLen,
#[MapInputName('IPv6Gateway')]
public string $iPv6Gateway,
#[MapInputName('GlobalIPv6Address')]
public string $globalIPv6Address,
#[MapInputName('GlobalIPv6PrefixLen')]
public int $globalIPv6PrefixLen,
#[MapInputName('DNSNames')]
public ?array $dnsNames,
#[MapInputName('DriverOpts')]
public ?array $driverOpts = null,
) {
}
}
20 changes: 20 additions & 0 deletions src/Data/Container/HostConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php declare(strict_types=1);

namespace Soyhuce\Docker\Data\Container;

use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;

class HostConfig extends Data
{
/**
* @param array<string, string> $annotations
*/
public function __construct(
#[MapInputName('NetworkMode')]
public string $networkMode,
#[MapInputName('Annotations')]
public ?array $annotations = null,
) {
}
}
18 changes: 18 additions & 0 deletions src/Data/Container/NetworkSettings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php declare(strict_types=1);

namespace Soyhuce\Docker\Data\Container;

use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;

class NetworkSettings extends Data
{
/**
* @param array<string, EndpointSettings> $networks
*/
public function __construct(
#[MapInputName('Networks')]
public array $networks,
) {
}
}
21 changes: 21 additions & 0 deletions src/Data/Container/Port.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php declare(strict_types=1);

namespace Soyhuce\Docker\Data\Container;

use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;

class Port extends Data
{
public function __construct(
#[MapInputName('PrivatePort')]
public int $privatePort,
#[MapInputName('Type')]
public string $type,
#[MapInputName('IP')]
public ?string $ip = null,
#[MapInputName('PublicPort')]
public ?int $publicPort = null,
) {
}
}
53 changes: 53 additions & 0 deletions src/Data/ContainerItem.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php declare(strict_types=1);

namespace Soyhuce\Docker\Data;

use Carbon\Carbon;
use Soyhuce\Docker\Data\Container\HostConfig;
use Soyhuce\Docker\Data\Container\NetworkSettings;
use Soyhuce\Docker\Data\Container\Port;
use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Casts\DateTimeInterfaceCast;
use Spatie\LaravelData\Data;

class ContainerItem extends Data
{
/**
* @param array<int, string> $names
* @param array<int, Port> $ports
* @param array<string, string> $labels
*/
public function __construct(
#[MapInputName('Id')]
public string $id,
#[MapInputName('Names')]
public array $names,
#[MapInputName('Image')]
public string $image,
#[MapInputName('ImageID')]
public string $imageId,
#[MapInputName('Command')]
public string $command,
#[MapInputName('Created')]
#[WithCast(DateTimeInterfaceCast::class, format: 'U')]
public Carbon $created,
#[MapInputName('Ports')]
public array $ports,
#[MapInputName('Labels')]
public array $labels,
#[MapInputName('State')]
public string $state,
#[MapInputName('Status')]
public string $status,
#[MapInputName('HostConfig')]
public HostConfig $hostConfig,
#[MapInputName('NetworkSettings')]
public NetworkSettings $networkSettings,
#[MapInputName('SizeRw')]
public ?int $sizeRw = null,
#[MapInputName('SizeRootFs')]
public ?int $sizeRootFs = null,
) {
}
}
23 changes: 14 additions & 9 deletions src/Services/DockerContainerService.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,24 @@

namespace Soyhuce\Docker\Services;

use Illuminate\Support\Collection;
use Soyhuce\Docker\Data\ContainerCreateItem;
use Soyhuce\Docker\Data\ContainerItem;

class DockerContainerService extends DockerService
{
/**
* @return Collection<int, ContainerItem>
*/
public function all(): Collection
{
$response = $this->driver()
->asGet()
->send('/containers/json');

return new Collection(array_map(static fn ($item) => ContainerItem::from($item), $response));
}

public function create(string $imageName, string $containerName, array $options = []): ContainerCreateItem
{
$response = $this->driver()
Expand Down Expand Up @@ -65,13 +79,4 @@ public function delete(string $containerId): bool

return true;
}

public function list(): array
{
$response = $this->driver()
->asGet()
->send("/containers/json");

return $response;
}
}
2 changes: 1 addition & 1 deletion src/Services/DockerImageService.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
class DockerImageService extends DockerService
{
/**
* @return \Illuminate\Support\Collection<int, \Soyhuce\Docker\Data\ImageItem>
* @return Collection<int, ImageItem>
*/
public function all(): Collection
{
Expand Down
10 changes: 10 additions & 0 deletions tests/Unit/DockerContainerServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Test\Unit;

use Illuminate\Support\Facades\Http;
use Soyhuce\Docker\Data\ContainerCreateItem;
use Soyhuce\Docker\Services\DockerContainerService;

Expand Down Expand Up @@ -46,3 +47,12 @@

expect($response)->toBeTrue();
});

test('containers are retrieved', function (): void {
Http::fakeSequence()
->pushFile(__DIR__ . '/stubs/containers.json');

$response = app(DockerContainerService::class)->all();

expect($response)->toHaveCount(1);
});
47 changes: 47 additions & 0 deletions tests/Unit/stubs/containers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
[
{
"Id": "02d3890e4d4e81fbc61df0ab93bc051bc75bffd22abd453c892f5ceddbc6e327",
"Names": [
"\/determined_liskov"
],
"Image": "nginx:latest",
"ImageID": "sha256:66f8bdd3810c96dc5c28aec39583af731b34a2cd99471530f53c8794ed5b423e",
"Command": "\/docker-entrypoint.sh bash",
"Created": 1735820912,
"Ports": [
{
"PrivatePort": 80,
"Type": "tcp"
}
],
"Labels": {
"maintainer": "NGINX Docker Maintainers <[email protected]>"
},
"State": "running",
"Status": "Up 6 minutes",
"HostConfig": {
"NetworkMode": "bridge"
},
"NetworkSettings": {
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null,
"NetworkID": "cfe869b1021192c126f4e70daa8780f9ae96b42d330526825272db81d3518564",
"EndpointID": "65f52c483eb083a277d943222f7a362ea004ca1581c31a329dcada9fd513646a",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DNSNames": null
}
}
},
"Mounts": []
}
]

0 comments on commit dcb9032

Please sign in to comment.