• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tempestphp / tempest-framework / 14161923512

30 Mar 2025 01:41PM UTC coverage: 80.964% (+0.2%) from 80.716%
14161923512

push

github

web-flow
ci: prevent coveralls failures from failing tests (#1104)

11058 of 13658 relevant lines covered (80.96%)

100.68 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.67
/src/Tempest/Router/src/Static/StaticCleanCommand.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Tempest\Router\Static;
6

7
use FilesystemIterator;
8
use RecursiveDirectoryIterator;
9
use RecursiveIteratorIterator;
10
use SplFileInfo;
11
use Tempest\Console\ConsoleCommand;
12
use Tempest\Console\HasConsole;
13
use Tempest\Console\Middleware\CautionMiddleware;
14
use Tempest\Console\Middleware\ForceMiddleware;
15
use Tempest\Core\Kernel;
16
use Tempest\EventBus\EventBus;
17

18
final readonly class StaticCleanCommand
19
{
20
    use HasConsole;
21

22
    public function __construct(
1✔
23
        private Kernel $kernel,
24
        private EventBus $eventBus,
25
    ) {}
1✔
26

27
    #[ConsoleCommand(
1✔
28
        name: 'static:clean',
29
        description: 'Removes statically generated pages',
30
        middleware: [ForceMiddleware::class, CautionMiddleware::class],
31
    )]
32
    public function __invoke(): void
33
    {
34
        $this->console->header('Cleaning static pages');
1✔
35

36
        $directoryIterator = new RecursiveDirectoryIterator($this->kernel->root . '/public');
1✔
37
        $directoryIterator->setFlags(FilesystemIterator::SKIP_DOTS);
1✔
38

39
        $removed = 0;
1✔
40

41
        $this->eventBus->listen(StaticPageRemoved::class, function (StaticPageRemoved $event) use (&$removed): void {
1✔
42
            $removed++;
1✔
43
            $this->keyValue("<style='fg-gray'>{$event->path}</style>", "<style='fg-green'>REMOVED</style>");
1✔
44
        });
1✔
45

46
        $this->removeFiles($directoryIterator);
1✔
47
        $this->removeEmptyDirectories($directoryIterator);
1✔
48

49
        $this->keyValue('Static pages removed', "<style='fg-green'>{$removed}</style>");
1✔
50
    }
51

52
    private function removeFiles(RecursiveDirectoryIterator $directoryIterator): void
1✔
53
    {
54
        /** @var SplFileInfo[] $files */
55
        $files = [];
1✔
56

57
        /** @var SplFileInfo $file */
58
        foreach (new RecursiveIteratorIterator($directoryIterator) as $file) {
1✔
59
            if ($file->getExtension() === 'html') {
1✔
60
                $files[] = $file;
1✔
61
            }
62
        }
63

64
        foreach ($files as $file) {
1✔
65
            unlink($file->getPathname());
1✔
66

67
            $pathName = str_replace('\\', '/', $file->getPathname());
1✔
68

69
            $this->eventBus->dispatch(new StaticPageRemoved($pathName));
1✔
70
        }
71
    }
72

73
    private function removeEmptyDirectories(RecursiveDirectoryIterator $directoryIterator): void
1✔
74
    {
75
        /** @var SplFileInfo $file */
76
        foreach (new RecursiveIteratorIterator($directoryIterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {
1✔
77
            if (! $file->isDir()) {
1✔
78
                continue;
1✔
79
            }
80

81
            if (count(glob($file->getPathname() . '/*')) > 0) {
1✔
82
                continue;
×
83
            }
84

85
            rmdir($file->getPathname());
1✔
86
        }
87
    }
88
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc