ContainerLinuxReleasesBridge.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. class ContainerLinuxReleasesBridge extends BridgeAbstract {
  3. const MAINTAINER = 'captn3m0';
  4. const NAME = 'Core OS Container Linux Releases Bridge';
  5. const URI = 'https://coreos.com/releases/';
  6. const DESCRIPTION = 'Returns the releases notes for Container Linux';
  7. const STABLE = 'stable';
  8. const BETA = 'beta';
  9. const ALPHA = 'alpha';
  10. const PARAMETERS = [
  11. [
  12. 'channel' => [
  13. 'name' => 'Release Channel',
  14. 'type' => 'list',
  15. 'required' => true,
  16. 'defaultValue' => self::STABLE,
  17. 'values' => [
  18. 'Stable' => self::STABLE,
  19. 'Beta' => self::BETA,
  20. 'Alpha' => self::ALPHA,
  21. ],
  22. ]
  23. ]
  24. ];
  25. private function getReleaseFeed($jsonUrl) {
  26. $json = getContents($jsonUrl)
  27. or returnServerError('Could not request Core OS Website.');
  28. return json_decode($json, true);
  29. }
  30. public function collectData() {
  31. $data = $this->getReleaseFeed($this->getJsonUri());
  32. foreach ($data as $releaseVersion => $release) {
  33. $item = [];
  34. $item['uri'] = "https://coreos.com/releases/#$releaseVersion";
  35. $item['title'] = $releaseVersion;
  36. $content = $release['release_notes'];
  37. $content .= <<<EOT
  38. Major Software:
  39. * Kernel: {$release['major_software']['kernel'][0]}
  40. * Docker: {$release['major_software']['docker'][0]}
  41. * etcd: {$release['major_software']['etcd'][0]}
  42. EOT;
  43. $item['timestamp'] = strtotime($release['release_date']);
  44. // Based on https://gist.github.com/jbroadway/2836900
  45. // Links
  46. $regex = '/\[([^\[]+)\]\(([^\)]+)\)/';
  47. $replacement = '<a href=\'\2\'>\1</a>';
  48. $item['content'] = preg_replace($regex, $replacement, $content);
  49. // Headings
  50. $regex = '/^(.*)\:\s?$/m';
  51. $replacement = '<h3>\1</h3>';
  52. $item['content'] = preg_replace($regex, $replacement, $item['content']);
  53. // Lists
  54. $regex = '/\n\s*[\*|\-](.*)/';
  55. $item['content'] = preg_replace_callback ($regex, function($regs) {
  56. $item = $regs[1];
  57. return sprintf ('<ul><li>%s</li></ul>', trim ($item));
  58. }, $item['content']);
  59. $this->items[] = $item;
  60. }
  61. }
  62. private function getJsonUri() {
  63. $channel = $this->getInput('channel');
  64. return "https://coreos.com/releases/releases-$channel.json";
  65. }
  66. public function getURI() {
  67. return self::URI;
  68. }
  69. public function getName(){
  70. if(!is_null($this->getInput('channel'))) {
  71. return 'Container Linux Releases: ' . $this->getInput('channel') . ' Channel';
  72. }
  73. return parent::getName();
  74. }
  75. }