diff --git a/composer.json b/composer.json index 494992e..d596722 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "todaydesign/craft-static-dusk", "description": "Static site builder for Craft and AWS Code Pipelines", "type": "craft-plugin", - "version": "1.1.0", + "version": "1.2.0", "keywords": [ "craft", "cms", @@ -22,7 +22,7 @@ } ], "require": { - "craftcms/cms": "^3.0.0-RC1" + "craftcms/cms": ">=3.0.0-RC1" }, "autoload": { "psr-4": { diff --git a/src/CraftStaticDusk.php b/src/CraftStaticDusk.php index 07dcbd2..f0ca7b0 100644 --- a/src/CraftStaticDusk.php +++ b/src/CraftStaticDusk.php @@ -16,6 +16,7 @@ use Craft; use craft\base\Plugin; +use craft\base\Model; use craft\services\Plugins; use craft\events\PluginEvent; use craft\web\UrlManager; @@ -63,7 +64,7 @@ class CraftStaticDusk extends Plugin * * @var string */ - public $schemaVersion = '1.0.1'; + public string $schemaVersion = '1.2.0'; // Public Methods // ========================================================================= @@ -174,7 +175,7 @@ function (PluginEvent $event) { * * @return \craft\base\Model|null */ - protected function createSettingsModel() + protected function createSettingsModel(): ?Model { return new Settings(); } @@ -194,4 +195,5 @@ protected function settingsHtml(): string ] ); } + } diff --git a/src/managers/StaticBuildManager.php b/src/managers/StaticBuildManager.php index 89929d2..194edf5 100644 --- a/src/managers/StaticBuildManager.php +++ b/src/managers/StaticBuildManager.php @@ -17,44 +17,46 @@ public function getScheduledBuilds($site) { $settings = CraftStaticDusk::$plugin->getSettings(); - $payload = [ - 'secret' => Craft::parseEnv($settings->webHookSecret), - 'repo' => Craft::parseEnv($settings->gitRepo), - 'ref' => Craft::parseEnv($settings->gitRef), - 'envName' => Craft::parseEnv($settings->environmentName), - 'site' => $site - ]; - - $response = null; - $curl = curl_init(); - curl_setopt_array($curl, array( - CURLOPT_URL => Craft::parseEnv($settings->webHookUrl) . '/scheduled', + if (Craft::parseEnv($settings->webHookType) === 'GH') { + $payload = [ + 'secret' => Craft::parseEnv($settings->webHookSecret), + 'repo' => Craft::parseEnv($settings->gitRepo), + 'ref' => Craft::parseEnv($settings->gitRef), + 'envName' => Craft::parseEnv($settings->environmentName), + 'site' => $site + ]; + + $response = null; + $curl = curl_init(); + curl_setopt_array($curl, array( + CURLOPT_URL => Craft::parseEnv($settings->webHookUrl) . '/scheduled', // CURLOPT_URL => "http://host.docker.internal:3000/static-build/scheduled", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_CUSTOMREQUEST => "GET", - CURLOPT_POSTFIELDS => json_encode((object)$payload), - CURLOPT_VERBOSE => TRUE, - )); + CURLOPT_RETURNTRANSFER => true, + CURLOPT_CUSTOMREQUEST => "GET", + CURLOPT_POSTFIELDS => json_encode((object)$payload), + CURLOPT_VERBOSE => TRUE, + )); - $response = curl_exec($curl); + $response = curl_exec($curl); - if ($response === false) { - return []; - } + if ($response === false) { + return []; + } - $response = json_decode($response); + $response = json_decode($response); - curl_close($curl); + curl_close($curl); - if (property_exists($response, "responseObject")) { + if ($response !== null && property_exists($response, "responseObject")) { - // Convert unix milliseconds to seconds - $data = array_map(function ($build) { - $build->LaunchTime = $build->LaunchTime / 1000; - return $build; - }, $response->responseObject); + // Convert unix milliseconds to seconds + $data = array_map(function ($build) { + $build->LaunchTime = $build->LaunchTime / 1000; + return $build; + }, $response->responseObject); - return $response->responseObject; + return $response->responseObject; + } } return []; @@ -69,38 +71,41 @@ public function getScheduledBuilds($site) public function getBuildHistory($site) { $settings = CraftStaticDusk::$plugin->getSettings(); - $ref = str_replace("refs/heads/", "", Craft::parseEnv($settings->gitRef)); - - $payload = [ - 'secret' => Craft::parseEnv($settings->webHookSecret), - 'repo' => Craft::parseEnv($settings->gitRepo), - 'ref' => $ref, - 'site' => $site - ]; - - $response = null; - $curl = curl_init(); - curl_setopt_array($curl, array( - CURLOPT_URL => Craft::parseEnv($settings->webHookUrl) . '/history', + + if (Craft::parseEnv($settings->webHookType) === 'GH') { + $ref = str_replace("refs/heads/", "", Craft::parseEnv($settings->gitRef)); + + $payload = [ + 'secret' => Craft::parseEnv($settings->webHookSecret), + 'repo' => Craft::parseEnv($settings->gitRepo), + 'ref' => $ref, + 'site' => $site + ]; + + $response = null; + $curl = curl_init(); + curl_setopt_array($curl, array( + CURLOPT_URL => Craft::parseEnv($settings->webHookUrl) . '/history', // CURLOPT_URL => "http://host.docker.internal:3000/static-build/history", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_CUSTOMREQUEST => "GET", - CURLOPT_POSTFIELDS => json_encode((object)$payload), - CURLOPT_VERBOSE => TRUE, - )); + CURLOPT_RETURNTRANSFER => true, + CURLOPT_CUSTOMREQUEST => "GET", + CURLOPT_POSTFIELDS => json_encode((object)$payload), + CURLOPT_VERBOSE => TRUE, + )); - $response = curl_exec($curl); + $response = curl_exec($curl); - if ($response === false) { - return []; - } + if ($response === false) { + return []; + } - $response = json_decode($response); + $response = json_decode($response); - curl_close($curl); + curl_close($curl); - if (property_exists($response, "responseObject")) { - return $response->responseObject; + if ($response !== null && property_exists($response, "responseObject")) { + return $response->responseObject; + } } return []; diff --git a/src/models/BuildSettings.php b/src/models/BuildSettings.php index 8e1e5da..7fd69a1 100644 --- a/src/models/BuildSettings.php +++ b/src/models/BuildSettings.php @@ -52,7 +52,7 @@ class BuildSettings extends Model * * @return array */ - public function rules() + public function rules(): array { return [ ['someAttribute', 'string'], diff --git a/src/models/Settings.php b/src/models/Settings.php index 0632fa1..bc79431 100644 --- a/src/models/Settings.php +++ b/src/models/Settings.php @@ -61,7 +61,7 @@ class Settings extends Model * * @return array */ - public function rules() + public function rules(): array { return [ ['someAttribute', 'string'], diff --git a/src/templates/index.twig b/src/templates/index.twig index 6ea8cf1..bb73ab5 100644 --- a/src/templates/index.twig +++ b/src/templates/index.twig @@ -36,8 +36,8 @@ {% set siteIds = siteIds ?? craft.app.sites.getEditableSiteIds() %} {% if selectedSiteId is not defined %} - {% if craft.request.getQuery('site') %} - {% set selectedSiteId = craft.request.getQuery('site') %} + {% if craft.app.request.getQueryParam('site') is numeric %} + {% set selectedSiteId = craft.app.request.getQueryParam('site') %} {% else %} {% set selectedSiteId = siteIds|first %} {% endif %} @@ -52,6 +52,7 @@ {% set buildHistory = craft.craftStaticDusk.getBuildHistory(site.handle) %} {% set isMissingEnvVariables = craft.craftStaticDusk.isMissingEnvVariables() %} +{% set isGhWebhook = craft.craftStaticDusk.isGhWebhook() %} {# Content that should appear in the page header #} {% set extraPageHeaderHtml %} @@ -67,7 +68,7 @@