Skip to content

Commit f557089

Browse files
committed
Improve error output and CI integration
1 parent 836e27a commit f557089

File tree

8 files changed

+63
-27
lines changed

8 files changed

+63
-27
lines changed

Diff for: bin/openapi-client-generator.source

+23-15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use ApiClients\Tools\OpenApiClientGenerator\Configuration;
55
use ApiClients\Tools\OpenApiClientGenerator\Generator;
6+
use ApiClients\Tools\OpenApiClientGenerator\Output\Error;
67
use EventSauce\ObjectHydrator\ObjectMapperUsingReflection;
78
use Symfony\Component\Yaml\Yaml;
89

@@ -14,20 +15,27 @@ use Symfony\Component\Yaml\Yaml;
1415
})();
1516

1617
(function(string $configuration): void {
17-
/**
18-
* Create and boot up the application
19-
*/
20-
exit((function (string $configurationFile): int {
21-
$configuration = (new ObjectMapperUsingReflection())->hydrateObject(Configuration::class, Yaml::parseFile($configurationFile));
22-
(new Generator(
23-
$configuration,
24-
dirname($configurationFile) . DIRECTORY_SEPARATOR,
25-
))->generate(
26-
$configuration->namespace->source . '\\',
27-
$configuration->namespace->test . '\\',
28-
dirname($configurationFile) . DIRECTORY_SEPARATOR,
29-
);
18+
$exitCode = 1;
19+
try {
20+
/**
21+
* Create and boot up the application
22+
*/
23+
$exitCode = (function (string $configurationFile): int {
24+
$configuration = (new ObjectMapperUsingReflection())->hydrateObject(Configuration::class, Yaml::parseFile($configurationFile));
25+
(new Generator(
26+
$configuration,
27+
dirname($configurationFile) . DIRECTORY_SEPARATOR,
28+
))->generate(
29+
$configuration->namespace->source . '\\',
30+
$configuration->namespace->test . '\\',
31+
dirname($configurationFile) . DIRECTORY_SEPARATOR,
32+
);
3033

31-
return 0;
32-
})($configuration));
34+
return 0;
35+
})($configuration);
36+
} catch (Throwable $throwable) {
37+
Error::display($throwable);
38+
} finally {
39+
exit ($exitCode);
40+
}
3341
})($argv[1]);

Diff for: src/Generator.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use ApiClients\Tools\OpenApiClientGenerator\Representation\Path;
2727
use ApiClients\Tools\OpenApiClientGenerator\State\File as StateFile;
2828
use ApiClients\Tools\OpenApiClientGenerator\State\Files;
29-
use ApiClients\Tools\OpenApiClientGenerator\StatusOutput\Step;
29+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\Step;
3030
use cebe\openapi\Reader;
3131
use cebe\openapi\spec\OpenApi;
3232
use EventSauce\ObjectHydrator\ObjectMapperUsingReflection;
@@ -76,15 +76,15 @@
7676
private State $state;
7777
private string $currentSpecHash;
7878

79-
private StatusOutput $statusOutput;
79+
private Output\Status $statusOutput;
8080

8181
public function __construct(
8282
private Configuration $configuration,
8383
string $configurationLocation,
8484
) {
8585
$this->forceGeneration = is_string(getenv('FORCE_GENERATION')) && strlen(getenv('FORCE_GENERATION')) > 0;
8686

87-
$this->statusOutput = new StatusOutput(
87+
$this->statusOutput = new Output\Status(
8888
! (new CiDetector())->isCiDetected(),
8989
new Step('hash_current_spec', 'Hashing current spec', false),
9090
new Step('loading_state', 'Loading state', false),

Diff for: src/Output/Error.php

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace ApiClients\Tools\OpenApiClientGenerator\Output;
6+
7+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\ANSI;
8+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\Simple;
9+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\Step;
10+
use OndraM\CiDetector\CiDetector;
11+
use function Termwind\render;
12+
13+
final readonly class Error
14+
{
15+
public static function display(\Throwable $throwable)
16+
{
17+
render('<div>
18+
<div class="px-1 bg-red-600">ERROR</div>
19+
<em class="ml-1">
20+
' . $throwable->getMessage() . '
21+
</em>
22+
</div>');
23+
24+
if ((new CiDetector())->detect()->getCiName() === CiDetector::CI_GITHUB_ACTIONS) {
25+
file_put_contents(getenv('GITHUB_STEP_SUMMARY'), "### ⚠️ Error ⚠️\n```" . $throwable->getMessage() . "```\n", FILE_APPEND);
26+
}
27+
}
28+
}

Diff for: src/StatusOutput.php renamed to src/Output/Status.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
declare(strict_types=1);
44

5-
namespace ApiClients\Tools\OpenApiClientGenerator;
5+
namespace ApiClients\Tools\OpenApiClientGenerator\Output;
66

7-
use ApiClients\Tools\OpenApiClientGenerator\StatusOutput\ANSI;
8-
use ApiClients\Tools\OpenApiClientGenerator\StatusOutput\Simple;
9-
use ApiClients\Tools\OpenApiClientGenerator\StatusOutput\Step;
7+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\ANSI;
8+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\Simple;
9+
use ApiClients\Tools\OpenApiClientGenerator\Output\Status\Step;
1010

11-
final readonly class StatusOutput
11+
final readonly class Status
1212
{
1313
private ANSI|Simple $output;
1414

Diff for: src/StatusOutput/ANSI.php renamed to src/Output/Status/ANSI.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace ApiClients\Tools\OpenApiClientGenerator\StatusOutput;
5+
namespace ApiClients\Tools\OpenApiClientGenerator\Output\Status;
66

77
use Symfony\Component\Console\Output\ConsoleOutput;
88

Diff for: src/StatusOutput/OverWritingOutPut.php renamed to src/Output/Status/OverWritingOutPut.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace ApiClients\Tools\OpenApiClientGenerator\StatusOutput;
5+
namespace ApiClients\Tools\OpenApiClientGenerator\Output\Status;
66

77
use Symfony\Component\Console\Formatter\OutputFormatterInterface;
88
use Symfony\Component\Console\Output\OutputInterface;

Diff for: src/StatusOutput/Simple.php renamed to src/Output/Status/Simple.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace ApiClients\Tools\OpenApiClientGenerator\StatusOutput;
5+
namespace ApiClients\Tools\OpenApiClientGenerator\Output\Status;
66

77
use function array_combine;
88
use function array_map;

Diff for: src/StatusOutput/Step.php renamed to src/Output/Status/Step.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace ApiClients\Tools\OpenApiClientGenerator\StatusOutput;
5+
namespace ApiClients\Tools\OpenApiClientGenerator\Output\Status;
66

77
final readonly class Step
88
{

0 commit comments

Comments
 (0)