Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 1 addition & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macOS-latest]
php-version: ['8.2', '8.3', '8.4']
php-version: ['8.4', '8.5']
dependencies: ['lowest', 'highest']
name: 'PHPUnit'
steps:
Expand All @@ -34,5 +34,3 @@ jobs:
uses: innmind/github-workflows/.github/workflows/psalm-matrix.yml@main
cs:
uses: innmind/github-workflows/.github/workflows/cs.yml@main
with:
php-version: '8.2'
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## [Unreleased]

### Changed

- Requires PHP `8.4`
- Requires `innmind/foundation:~2.1`

## 4.2.0 - 2025-02-09

### Added
Expand Down
14 changes: 5 additions & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,8 @@
"issues": "http://github.com/Innmind/LabStation/issues"
},
"require": {
"php": "~8.2",
"innmind/url": "~4.0",
"innmind/cli": "~3.4",
"innmind/operating-system": "~5.0",
"innmind/json": "^1.1",
"innmind/immutable": "~5.2",
"innmind/mantle": "~2.0"
"php": "~8.4",
"innmind/foundation": "~2.1"
},
"autoload": {
"psr-4": {
Expand All @@ -36,9 +31,10 @@
},
"require-dev": {
"phpunit/phpunit": "~10.2",
"innmind/static-analysis": "^1.2.1",
"innmind/static-analysis": "~1.3",
"innmind/black-box": "~6.5",
"innmind/coding-standard": "~2.0"
"innmind/coding-standard": "~2.0",
"innmind/file-watch": "^6.0.1"
},
"bin": ["lab-station"]
}
7 changes: 5 additions & 2 deletions src/Activities.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

use Innmind\CLI\Console;
use Innmind\OperatingSystem\OperatingSystem;
use Innmind\TimeContinuum\Earth\Period\Millisecond;
use Innmind\Time\Period;
use Innmind\Immutable\Set;

final class Activities
Expand Down Expand Up @@ -46,7 +46,10 @@ public function __invoke(
// exit this method periodically to allow the source to be restarted in
// order to check if any agent crashed in order to restart it.
if (\count($this->activities) === 0) {
$os->process()->halt(Millisecond::of(500));
$_ = $os
->process()
->halt(Period::millisecond(500))
->unwrap();
}

while ($activity = \array_shift($this->activities)) {
Expand Down
12 changes: 7 additions & 5 deletions src/Command/Work.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
};
use Innmind\CLI\{
Command,
Command\Usage,
Console,
};
use Innmind\Immutable\{
Attempt,
Str,
Set,
};
Expand All @@ -26,7 +28,7 @@ public function __construct(Monitor $monitor)
}

#[\Override]
public function __invoke(Console $console): Console
public function __invoke(Console $console): Attempt
{
$triggers = $console
->options()
Expand All @@ -44,21 +46,21 @@ public function __invoke(Console $console): Console
static fn() => Triggers::cases(),
);

return ($this->monitor)($console, Set::of(...$triggers));
return Attempt::result(($this->monitor)($console, Set::of(...$triggers)));
}

/**
* @psalm-pure
*/
#[\Override]
public function usage(): string
public function usage(): Usage
{
return <<<USAGE
return Usage::parse(<<<USAGE
work --silent --keep-output --triggers=

The triggers option can contain a comma separated list of values.

Triggers can contain : cs, composer, docker, psalm and tests
USAGE;
USAGE);
}
}
2 changes: 1 addition & 1 deletion src/Iteration.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ public function end(Console $console): Console
}

// clear terminal
return $console->output(Str::of("\033[2J\033[H"));
return $console->output(Str::of("\033[2J\033[H"))->unwrap();
}
}
21 changes: 11 additions & 10 deletions src/Monitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

use Innmind\CLI\Console;
use Innmind\OperatingSystem\OperatingSystem;
use Innmind\Mantle\Forerunner;
use Innmind\Async\Scheduler;
use Innmind\Immutable\{
Set,
Sequence,
Expand Down Expand Up @@ -40,7 +40,7 @@ public function __construct(
public function __invoke(Console $console, Set $triggers): Console
{
$project = $console->workingDirectory();
$run = Forerunner::of($this->os);
$scheduler = Scheduler::of($this->os);
$activities = Activities::new(
$this->trigger,
$this->iteration,
Expand All @@ -49,14 +49,15 @@ public function __invoke(Console $console, Set $triggers): Console
/** @var array{Console, boolean} */
$carry = [$console, false];

[$console] = $run(
$carry,
new Monitor\Loop(
$this->agents,
$activities,
$project,
),
);
[$console] = $scheduler
->sink($carry)
->with(
new Monitor\Loop(
$this->agents,
$activities,
$project,
),
);

return $console;
}
Expand Down
26 changes: 11 additions & 15 deletions src/Monitor/Loop.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
Agent,
Activities,
};
use Innmind\Mantle\{
Source\Continuation,
Task,
};
use Innmind\Async\Scope\Continuation;
use Innmind\CLI\Console;
use Innmind\OperatingSystem\OperatingSystem;
use Innmind\Url\Path;
Expand Down Expand Up @@ -41,27 +38,26 @@ public function __construct(

/**
* @param array{Console, boolean} $carry
* @param Continuation<array{Console, boolean}, ?Agent> $continuation
* @param Sequence<?Agent> $crashed
* @param Continuation<array{Console, boolean}> $continuation
*
* @return Continuation<array{Console, boolean}, ?Agent>
* @return Continuation<array{Console, boolean}>
*/
public function __invoke(
array $carry,
OperatingSystem $os,
Continuation $continuation,
Sequence $crashed,
): Continuation {
[$console, $started] = $carry;

if (!$started) {
return $continuation
->launch($this->agents->map($this->buildTask(...)))
->schedule($this->agents->map($this->buildTask(...)))
->carryWith([$console, true]);
}

$continuation = $continuation->launch(
$crashed
$continuation = $continuation->schedule(
$continuation
->results() // crashed agents
->keep(Instance::of(Agent::class))
->map($this->buildTask(...)),
);
Expand All @@ -75,14 +71,14 @@ public function __invoke(
}

/**
* @return Task<?Agent>
* @return callable(OperatingSystem): ?Agent
*/
private function buildTask(Agent $agent): Task
private function buildTask(Agent $agent): callable
{
return Task::of(fn($os) => $agent(
return fn(OperatingSystem $os) => $agent(
$os,
$this->project,
$this->activities,
));
);
}
}
15 changes: 9 additions & 6 deletions src/Trigger/BlackBox.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ private function attempt(Console $console, OperatingSystem $os): Console
return $os
->filesystem()
->mount($console->workingDirectory())
->unwrap()
->get(Name::of('blackbox.php'))
->match(
fn() => $this->run($console, $os),
Expand Down Expand Up @@ -79,13 +80,14 @@ private function run(Console $console, OperatingSystem $os): Console
->withArgument('blackbox.php')
->withWorkingDirectory($console->workingDirectory())
->withEnvironments($variables),
);
)
->unwrap();
$console = $process
->output()
->reduce(
$console,
static fn(Console $console, $line) => $console->output($line),
);
->map(static fn($chunk) => $chunk->data())
->sink($console)
->attempt(static fn(Console $console, $line) => $console->output($line))
->unwrap();
$successful = $process->wait()->match(
static fn() => true,
static fn() => false,
Expand All @@ -110,7 +112,8 @@ private function run(Console $console, OperatingSystem $os): Console
},
),
)
->wait()
->either()
->flatMap(static fn($process) => $process->wait())
->match(
static fn() => $console,
static fn() => $console,
Expand Down
19 changes: 12 additions & 7 deletions src/Trigger/CodingStandard.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ public function __invoke(

private function attempt(Console $console, OperatingSystem $os): Console
{
$directory = $os->filesystem()->mount($console->workingDirectory());
$directory = $os
->filesystem()
->mount($console->workingDirectory())
->unwrap();

return $directory
->get(Name::of('.php_cs.dist'))
Expand Down Expand Up @@ -91,13 +94,14 @@ private function run(
$process = $os
->control()
->processes()
->execute($command);
->execute($command)
->unwrap();
$console = $process
->output()
->reduce(
$console,
static fn(Console $console, $line) => $console->output($line),
);
->map(static fn($chunk) => $chunk->data())
->sink($console)
->attempt(static fn(Console $console, $line) => $console->output($line))
->unwrap();
$successful = $process->wait()->match(
static fn() => true,
static fn() => false,
Expand All @@ -122,7 +126,8 @@ private function run(
},
),
)
->wait()
->either()
->flatMap(static fn($process) => $process->wait())
->match(
static fn() => $console,
static fn() => $console,
Expand Down
17 changes: 10 additions & 7 deletions src/Trigger/ComposerUpdate.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,11 @@ public function __invoke(

private function ask(Console $console, OperatingSystem $os): Console
{
$ask = new Question('Update dependencies? [Y/n]');
[$response, $console] = $ask($console);
$ask = Question::of('Update dependencies? [Y/n]');
[$response, $console] = $ask($console)->unwrap();

return $response
->maybe()
->filter(static fn($response) => match ($response->toString()) {
'y', '' => true,
default => false,
Expand Down Expand Up @@ -72,11 +73,13 @@ private function run(Console $console, OperatingSystem $os): Console
->withWorkingDirectory($console->workingDirectory())
->withEnvironments($variables),
)
->unwrap()
->output()
->reduce(
$console,
static fn(Console $console, $line) => $console->output($line),
)
->output(Str::of("Dependencies updated!\n"));
->map(static fn($chunk) => $chunk->data())
->sink($console)
->attempt(static fn(Console $console, $line) => $console->output($line))
->unwrap()
->output(Str::of("Dependencies updated!\n"))
->unwrap();
}
}
7 changes: 5 additions & 2 deletions src/Trigger/DockerCompose.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ private function attempt(Console $console, OperatingSystem $os): Console
return $os
->filesystem()
->mount($console->workingDirectory())
->unwrap()
->get(Name::of('docker-compose.yml'))
->match(
fn() => $this->run($console, $os),
Expand All @@ -66,11 +67,13 @@ private function run(Console $console, OperatingSystem $os): Console
->withWorkingDirectory($console->workingDirectory())
->withEnvironments($variables),
)
->wait()
->either()
->flatMap(static fn($process) => $process->wait())
->match(
static fn() => $console,
static fn() => $console
->error(Str::of("Failed to start docker\n")),
->error(Str::of("Failed to start docker\n"))
->unwrap(),
);
}
}
Loading