Passed
Push — master ( 688e8e...3bbfcd )
by Hannes
01:46
created

Version::getVersion()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * This file is part of byrokrat\giroapp.
4
 *
5
 * byrokrat\giroapp is free software: you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License as published
7
 * by the Free Software Foundation, either version 3 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * byrokrat\giroapp is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with byrokrat\giroapp. If not, see <http://www.gnu.org/licenses/>.
17
 *
18
 * Copyright 2016-20 Hannes Forsgård
19
 */
20
21
declare(strict_types = 1);
22
23
namespace byrokrat\giroapp;
24
25
final class Version
26
{
27
    private const VERSION_FILE = __DIR__ . '/../VERSION';
28
29
    private static string $version;
30
31
    public static function getVersion(): string
32
    {
33
        if (!isset(self::$version)) {
34
            self::$version = self::readVersion();
35
        }
36
37
        return self::$version;
38
    }
39
40
    public static function getSemverVersion(): string
41
    {
42
        $version = self::getVersion();
43
44
        // drop -X-XXXXXXX from version if present
45
        if (preg_match('/^(.*)\-\d+\-[0-9a-z]+$/', $version, $matches)) {
46
            return $matches[1];
47
        }
48
49
        return $version;
50
    }
51
52
    private static function readVersion(): string
53
    {
54
        if (is_readable(self::VERSION_FILE)) {
55
            return trim((string)file_get_contents(self::VERSION_FILE));
56
        }
57
58
        return 'dev-master';
59
    }
60
}
61