File: //usr/local/wp/vendor/behat/gherkin/bin/update_cucumber
#!/usr/bin/env php
<?php
if (PHP_VERSION_ID < 70400) {
echo "Updater requires PHP 7.4";
exit(1);
}
$composerFile = __DIR__ . '/../composer.json';
$composerConfig = file_get_contents($composerFile);
foreach (json_decode($composerConfig, true, 512, JSON_THROW_ON_ERROR)['repositories'] as $repository)
{
if ($repository['type'] !== 'package') {
continue;
}
if ($repository['package']['name'] == 'cucumber/cucumber') {
$oldTag = preg_replace('/^dev-gherkin-/', '', $repository['package']['version']);
$oldHash = $repository['package']['source']['reference'];
break;
}
}
if (!isset($oldHash)) {
echo "ERROR: Could not parse the composer configuration\n";
exit(1);
}
echo "Latest local hash is {$oldHash} (tagged {$oldTag})\n";
if(!preg_match(
'/^(?<hash>[0-9a-z]+)\s+\S+\\/v(?<tag>[0-9.]+)/',
shell_exec('git ls-remote --tags https://github.com/cucumber/cucumber.git | grep cucumber-gherkin | sort --version-sort -k2 | tail -n 1'),
$matches
)) {
echo "ERROR: Could not parse the repository tags\n";
exit(1);
}
['hash' => $newHash, 'tag' => $newTag] = $matches;
echo "Latest remote hash is {$newHash} (tagged {$newTag})\n";
if ($matches['hash'] == $oldHash) {
echo "Hashes match, nothing to do\n";
exit(0);
}
$newJson = str_replace(
[$oldHash, 'dev-gherkin-'.$oldTag],
[$newHash, 'dev-gherkin-'.$newTag],
$composerConfig
);
file_put_contents($composerFile, $newJson);
echo "Updated composer config:\n$newJson";
echo "::set-output name=cucumber_version::$newTag\n";