public function CircleV2::getAdditionalDeployFormElements in Build Hooks 3.x
Same name and namespace in other branches
- 8.2 modules/build_hooks_circleci/src/Plugin/FrontendEnvironment/CircleV2.php \Drupal\build_hooks_circleci\Plugin\FrontendEnvironment\CircleV2::getAdditionalDeployFormElements()
Allows the plugin to add elements to the deployment form.
Parameters
\Drupal\Core\Form\FormStateInterface $form_state: The current form state.
Return value
array A form array to add to the deployment form.
Overrides FrontendEnvironmentInterface::getAdditionalDeployFormElements
File
- modules/
build_hooks_circleci/ src/ Plugin/ FrontendEnvironment/ CircleV2.php, line 290
Class
- CircleV2
- Defines a circle v2 environment.
Namespace
Drupal\build_hooks_circleci\Plugin\FrontendEnvironmentCode
public function getAdditionalDeployFormElements(FormStateInterface $form_state) {
try {
$response = $this->httpClient
->request('GET', sprintf('https://circleci.com/api/v2/project/gh/%s/pipeline/mine?branch=%s', $this->configuration['project'], $this->configuration['reference']), [
'auth' => [
$this->configuration['token'],
'',
],
]);
} catch (GuzzleException $e) {
return [
'error' => [
'#markup' => $this
->t('Could not get list of recent builds'),
],
];
}
$body = Json::decode($response
->getBody());
$build['builds'] = [
'#type' => 'table',
'#attributes' => [
'id' => 'ajax-replace-table',
],
'#header' => [
$this
->t('Created'),
$this
->t('Updated'),
$this
->t('Status'),
$this
->t('Link'),
],
'#empty' => $this
->t('No recent builds for reference %reference', [
'%reference' => $this->configuration['reference'],
]),
'#caption' => $this
->t('Last 5 builds'),
];
foreach (array_slice(array_filter($body['items'], function (array $item) {
return ($item['vcs']['branch'] ?? FALSE) === $this->configuration['reference'];
}), 0, 5) as $item) {
try {
$workflow_response = $this->httpClient
->request('GET', 'https://circleci.com/api/v2/pipeline/' . $item['id'] . '/workflow', [
'auth' => [
$this->configuration['token'],
'',
],
]);
$workflows = Json::decode($workflow_response
->getBody());
} catch (GuzzleException $e) {
$build['builds']['#rows'][] = [
$this->formatter
->format(\DateTime::createFromFormat(\DateTime::RFC3339_EXTENDED, $item['created_at'])
->getTimestamp(), 'medium'),
$this->formatter
->format(\DateTime::createFromFormat(\DateTime::RFC3339_EXTENDED, $item['updated_at'])
->getTimestamp(), 'medium'),
$this
->t('Could not get workflows'),
'-',
];
continue;
}
$worflow = reset($workflows['items']);
$build['builds']['#rows'][] = [
$this->formatter
->format(\DateTime::createFromFormat(\DateTime::RFC3339_EXTENDED, $item['created_at'])
->getTimestamp(), 'medium'),
$this->formatter
->format(\DateTime::createFromFormat(\DateTime::RFC3339_EXTENDED, $item['updated_at'])
->getTimestamp(), 'medium'),
Unicode::ucfirst($worflow['status']),
[
'data' => [
'#type' => 'link',
'#url' => Url::fromUri(sprintf('https://app.circleci.com/pipelines/github/%s/%d/workflows/%s', $this->configuration['project'], $item['number'], $worflow['id'])),
'#title' => $this
->t('View'),
],
],
];
}
$build['refresher'] = [
'#type' => 'button',
'#ajax' => [
'callback' => [
self::class,
'refresh',
],
'wrapper' => 'ajax-replace-table',
'effect' => 'fade',
'progress' => [
'type' => 'throbber',
'message' => $this
->t('Refreshing status...'),
],
],
'#value' => $this
->t('Refresh'),
];
return $build;
}