gdscript/php/sdkBuilder.php (66 lines of code) (raw):
<?php
$sdkFolder = "sdk";
$sdkPrefix = "GdSdk ";
// Function to execute command and check for errors
$execAndCheck = function($cmd) {
$output = [];
$returnVar = 0;
exec($cmd, $output, $returnVar);
if ($returnVar !== 0) {
echo "Error executing command: $cmd\n";
echo "Return code: $returnVar\n";
echo "Output: " . implode("\n", $output) . "\n";
exit(1); // Exit with error code
}
return $output;
};
if (!file_exists($sdkFolder)) {
mkdir($sdkFolder, 0777, true);
}
// Fetch all existing tags
$tags = $execAndCheck("git ls-remote --tags https://github.com/godotengine/godot 2>&1");
$existingTags = [];
$tagRegex = "/^.*?refs\/tags\/(.+?)-stable$/";
foreach ($tags as $tag) {
preg_match($tagRegex, $tag, $matched);
$tag = $matched[1] ?? '';
if (str_starts_with($tag, "4.")) {
$existingTags[] = $tag;
}
}
// Fetch all existing SDKs
$existingSdks = [];
$sdkRegex = "/^$sdkPrefix(.+?).7z$/";
foreach (scandir($sdkFolder) as $sdk) {
if (is_file("$sdkFolder/$sdk") && preg_match($sdkRegex, $sdk, $matched)) {
$existingSdks[] = $matched[1];
}
}
$toFetch = [];
foreach ($existingTags as $tag) {
if (!in_array($tag, $existingSdks)) {
$toFetch[] = $tag;
}
}
$processSdk = function($tag) use ($execAndCheck) {
$downloadTag = strtolower($tag);
if ($downloadTag != "master") {
$downloadTag = "$downloadTag-stable";
}
$execAndCheck("rm -R godot-master || true");
$execAndCheck("wget https://github.com/godotengine/godot/archive/$downloadTag.tar.gz");
#exec("wget https://github.com/godotengine/godot/archive/refs/tags/$downloadTag.tar.gz"); # is it similar to the previous line?
$execAndCheck("tar -xf $downloadTag.tar.gz");
if ($downloadTag != "master") {
$execAndCheck("mv godot-$downloadTag godot-master || true");
}
$execAndCheck("rm -R classesGd || true");
$execAndCheck("mkdir classesGd || true");
$execAndCheck("php classParser.php");
$execAndCheck("php operandParser.php");
$execAndCheck("php annotationParser.php");
$execAndCheck("mv 'classesGd' 'sdk/$tag'");
};
$execAndCheck("rm -R $sdkFolder || true");
$execAndCheck("mkdir $sdkFolder || true");
// Download and build sdks for newly released tags
foreach ($toFetch as $tag) {
$processSdk($tag);
}
$processSdk("Master");
$execAndCheck("tar -caf gdscriptsdk.tar.xz -C $sdkFolder ."); # good compression
# upload to https://jetbrains.team/p/net/packages/files/gdscriptsdk