Add a check if translations are ready

[MAILPOET-3807]
This commit is contained in:
Pavel Dohnal
2021-11-09 09:56:02 +01:00
committed by Veljko V
parent eda7a74f25
commit 652fa9ce80
2 changed files with 59 additions and 4 deletions

View File

@ -769,12 +769,29 @@ class RoboFile extends \Robo\Tasks {
$this->say('Translations ' . $result['data']);
}
/**
* This is part of release publish script. It checks if translations are ready at Wordpress.com translations system
* @param string $version
*/
public function translationsCheckLanguagePacks($version) {
$translations = new \MailPoetTasks\Release\TranslationsController();
$result = $translations->checkIfTranslationsAreReady($version);
if (!$result['success']) {
$this->yell('Translations are not ready yet on WordPress.com. ' . $result['data'], 40, 'red');
exit(1);
}
$this->say('Translations check passed');
}
public function releasePublish($version = null) {
$version = $this->releaseVersionGetPrepared($version);
return $this->collectionBuilder()
->addCode(function () use ($version) {
return $this->releaseCheckPullRequest($version);
})
->addCode(function () use ($version) {
return $this->translationsCheckLanguagePacks($version);
})
->addCode(function () {
return $this->releaseDownloadZip();
})

View File

@ -3,16 +3,17 @@
namespace MailPoetTasks\Release;
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
class TranslationsController {
private const API_IMPORT_BASE_URI = 'https://translate.wordpress.com/api/import-transifex/';
private const API_CHECK_BASE_URI = 'https://translate.wordpress.com/api/translations-updates/mailpoet/';
public function importTransifex(string $version, $project = 'mailpoet'): array {
public function importTransifex(string $version, string $project = 'mailpoet'): array {
$httpClient = new Client([
'base_uri' => self::API_IMPORT_BASE_URI . $project . '/',
]);
$response = $httpClient->post($version);
$response->getStatusCode();
if ($response->getStatusCode() !== 200) {
return [
'success' => false,
@ -29,7 +30,44 @@ class TranslationsController {
return $result;
}
public function checkIfTranslationsAreReady(string $version): bool {
return true;
public function checkIfTranslationsAreReady(string $version, string $project = 'mailpoet'): array {
$httpClient = new Client();
$payload = [
'locales' => ['de_DE_formal', 'fr_FR'],
'plugins' => [],
];
$payload['plugins'][$project] = ['version' => $version];
$response = $httpClient->post(self::API_CHECK_BASE_URI, [RequestOptions::JSON => $payload]);
if ($response->getStatusCode() !== 200) {
return [
'success' => false,
'data' => 'Failed downloading response, status code: ' . $response->getStatusCode(),
];
}
$result = json_decode($response->getBody()->getContents(), true);
if (!is_array($result) || !isset($result['success']) || !isset($result['data']) || !isset($result['data'][$project])) {
return [
'success' => false,
'data' => 'Failed preparing translations - malformed response: ' . $response->getBody()->getContents(),
];
}
$data = $result['data'][$project];
$locales = [];
foreach ($data as $languageResponse) {
$locales[$languageResponse['wp_locale']] = $languageResponse['wp_locale'];
}
if (isset($locales['de_DE_formal']) && isset($locales['fr_FR'])) {
return [
'success' => true,
'data' => '',
];
} else {
return [
'success' => false,
'data' => '',
];
}
}
}