Validate contents of VERSION file

This commit is contained in:
Lucas Bickel 2018-01-19 20:56:44 +01:00
parent dbf0a7be85
commit bdc1a6e6a5
2 changed files with 46 additions and 15 deletions

View File

@ -2,6 +2,7 @@
use Composer\Semver\Comparator;
use Composer\Semver\Semver;
use Composer\Semver\VersionParser;
/**
* This file does the following things:
@ -13,9 +14,25 @@ use Composer\Semver\Semver;
* 4. Returns the current version, as HTML (stored in pair of invisible div tags)
*/
class Airtime_View_Helper_VersionNotify extends Zend_View_Helper_Abstract {
public function versionNotify()
{
/**
* @var VersionParser
*/
private $versionParser;
public function __construct() {
$this->versionParser = new VersionParser();
}
/**
* Prepare data for update notifier widget
*
* Grabs the version from the VERSION file created by build.sh and compares
* it against the versions available from github using the semver code from
* the composer project.
*/
public function versionNotify() {
$config = Config::getConfig();
// retrieve and validate current and latest versions,
@ -24,15 +41,9 @@ class Airtime_View_Helper_VersionNotify extends Zend_View_Helper_Abstract {
$link = Application_Model_Preference::GetLatestLink();
$isGitRelease = preg_match('/^[[:alnum:]]{7,}$/i', $current) === 1;
$currentParts = array();
if (!$isGitRelease) {
$currentParts = preg_split("/(\.|-)/", $current);
}
if (count($currentParts) < 3) {
$currentParts = array(0, 0, 0, 0);
}
$currentParts = $this->normalizeVersion($current, $isGitRelease);
$isPreRelease = $isGitRelease || array_key_exists(4, $currentParts);
// we are always interested in a major when we pre-release, hence the isPreRelease part
$majorCandidates = SemVer::satisfiedBy($latest, sprintf('>=%1$s-stable', $currentParts[0] + ($isPreRelease ? 0 : 1)));
$minorCandidates = SemVer::satisfiedBy($latest, sprintf('~%1$s.%2$s', $currentParts[0], $currentParts[1] + 1));
@ -78,4 +89,23 @@ class Airtime_View_Helper_VersionNotify extends Zend_View_Helper_Abstract {
. "<div id='version-icon' class='" . $class . "'></div>";
return $result;
}
private function normalizeVersion($version, $isGit) {
try {
$this->versionParser->normalize($version);
} catch(UnexpectedValueException $e) {
// recover by assuming an unknown version
$version= '0.0.0';
}
$parts = array();
if (!$isGit) {
$parts = preg_split("/(\.|-)/", $version);
}
if (count($parts) < 3) {
$parts = array(0, 0, 0);
}
return $parts;
}
}

View File

@ -17,11 +17,12 @@ if [ "${git_build}" = "y" ]; then
echo ${git_version} > VERSION
else
# if no file was in tarball we create one letting the user know
# travis should release tarballs with a pre-written VERSION file
# at some stage
# if you run in to this you should grab an enriched tarball built
# by travis. It already contains the VERSION file and also bundles
# all the PHP you vendors files making the install much faster on
# your part.
if [ ! -f VERSION ]; then
folder_name=$(basename `pwd`)
echo "tarball install from folder ${folder_name}" > VERSION
echo "could not detect version for VERSION file" > VERSION
fi
fi