-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck.sh
executable file
·88 lines (72 loc) · 1.92 KB
/
check.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env php
<?php
//----------
function usage()
{
$script = basename(__FILE__);
echo <<<EOT
${script}
Checks for the necessary dependencies on your system.
It is up to you to get them installed. :-)
Usage:
./${script}
EOT;
exit(0);
}
if (isset($argv[1]) && $argv[1] == '-h') {
usage();
}
//----------
// main()
$apps = array(
'php' => '7.3',
'composer' => '1.0',
'ruby' => '2.4',
'node' => '10.16',
'npm' => '6.0',
);
foreach ($apps as $executable => $versionNumber) {
if ($path = which($executable)) {
$fullVersion = getFullVersion($executable);
echo "## Found {$executable} at `{$path}`." . PHP_EOL;
if ($shortVersion = extractVersionNumber($fullVersion)) {
if(version_compare($shortVersion, $versionNumber, '>=')) {
echo "\tYour version `{$shortVersion}` is greater than the required version `{$versionNumber}`." . PHP_EOL;
} else {
echo "!!\tYour version `{$shortVersion}` DOES NOT meet the required version `{$versionNumber}`!" . PHP_EOL;
}
} else {
echo "\tRequired version is: {$versionNumber}. You have version: {$fullVersion}." . PHP_EOL;
}
} else {
echo "!! {$executable} not found! Version required is `{$version}`." . PHP_EOL;
}
}
//----------
function which($executable) {
$output = array();
$exitcode = 0;
$lastline = exec("which {$executable}", $output, $exitcode);
if ($exitcode == 0) {
return trim($lastline);
} else {
return false;
}
}
//----------
function getFullVersion($executable) {
$version = array();
exec("$executable --version", $version);
return trim(implode(PHP_EOL . "\t", $version));
}
//----------
function extractVersionNumber($fullVersion) {
// Ref: https://github.com/mojombo/semver/issues/32
$pattern = '/((\d+)\.(\d+)\.(\d+))(?:-([\dA-Za-z\-]+(?:\.[\dA-Za-z\-]+)*))?(?:\+([\dA-Za-z\-]+(?:\.[\dA-Za-z\-]+)*))?/';
$matches = array();
if (preg_match($pattern, $fullVersion, $matches)) {
return $matches[1];
} else {
return false;
}
}