GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

GitRelease   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 13
eloc 49
c 3
b 0
f 0
dl 0
loc 86
ccs 48
cts 48
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A askKind() 0 28 5
A __invoke() 0 31 5
A askMessage() 0 10 2
1
<?php
2
declare(strict_types = 1);
3
4
namespace Innmind\LabStation\Trigger;
5
6
use Innmind\LabStation\{
7
    Trigger,
8
    Activity,
9
    Activity\Type,
10
    Exception\DontRelease,
11
};
12
use Innmind\CLI\{
13
    Environment,
14
    Question\Question,
15
    Question\ChoiceQuestion,
16
};
17
use Innmind\Git\{
18
    Git,
19
    Message,
20
    Exception\DomainException,
21
};
22
use Innmind\GitRelease\{
23
    Version,
24
    SignedRelease,
25
    LatestVersion,
26
};
27
use Innmind\Immutable\{
28
    Map,
29
    Str,
30
};
31
32
final class GitRelease implements Trigger
33
{
34
    private $git;
35
    private $release;
36
    private $latestVersion;
37
38 20
    public function __construct(Git $git, SignedRelease $release, LatestVersion $latestVersion)
39
    {
40 20
        $this->git = $git;
41 20
        $this->release = $release;
42 20
        $this->latestVersion = $latestVersion;
43 20
    }
44
45 16
    public function __invoke(Activity $activity, Environment $env): void
46
    {
47 16
        if (!$activity->is(Type::gitBranchChanged())) {
48 2
            return;
49
        }
50
51 14
        if ($activity->data()['branch'] !== 'master') {
52 2
            return;
53
        }
54
55 12
        $repository = $this->git->repository($env->workingDirectory());
56 12
        $version = ($this->latestVersion)($repository);
57
58 12
        $env->output()->write(Str::of("Current release: $version\n"));
59
60
        try {
61 12
            $newVersion = $this->askKind($env, $version);
62 4
        } catch (DontRelease $e) {
63 4
            return;
64
        }
65
66 8
        $env->output()->write(Str::of("Next release: $newVersion\n"));
67
68
        try {
69 8
            $message = $this->askMessage($env);
70 2
        } catch (DontRelease $e) {
71 2
            return;
72
        }
73
74 6
        ($this->release)($repository, $newVersion, $message);
75 6
        $env->output()->write(Str::of("Version released!\n"));
76 6
    }
77
78 12
    private function askKind(Environment $env, Version $version): Version
79
    {
80 12
        $ask = new ChoiceQuestion(
81 12
            'Kind of release:',
82 12
            Map::of('scalar', 'scalar')
83 12
                (1, 'major')
84 12
                (2, 'minor')
85 12
                (3, 'bugfix')
86 12
                (4, 'none')
87
        );
88 12
        $response = $ask($env->input(), $env->output());
89
90 12
        if ($response->empty()) {
91 2
            throw new DontRelease;
92
        }
93
94 10
        switch ($response->current()) {
95 10
            case 'major':
96 4
                return $version->increaseMajor();
97
98 6
            case 'minor':
99 2
                return $version->increaseMinor();
100
101 4
            case 'bugfix':
102 2
                return $version->increaseBugfix();
103
        }
104
105 2
        throw new DontRelease;
106
    }
107
108 8
    private function askMessage(Environment $env): Message
109
    {
110 8
        $message = (new Question('message:'))($env->input(), $env->output());
111
112
        try {
113 8
            return new Message((string) $message);
114 2
        } catch (DomainException $e) {
115 2
            $env->error()->write(Str::of("Invalid message\n"));
116
117 2
            throw new DontRelease;
118
        }
119
    }
120
}
121