瀏覽代碼

Adds Container Linux releases RSS Feed (#718)

* Adds Container Linux releases RSS Feed
Nemo 6 年之前
父節點
當前提交
9fa74a36c6
共有 1 個文件被更改,包括 76 次插入0 次删除
  1. 76 0
      bridges/ContainerLinuxReleasesBridge.php

+ 76 - 0
bridges/ContainerLinuxReleasesBridge.php

@@ -0,0 +1,76 @@
+<?php
+class ContainerLinuxReleasesBridge extends BridgeAbstract {
+
+	const MAINTAINER = 'capt3m0';
+	const NAME = 'Core OS Container Linux Releases Bridge';
+	const URI = 'https://coreos.com/releases/';
+	const DESCRIPTION = 'Returns the releases notes for Container Linux';
+
+	const STABLE = 'stable';
+	const BETA = 'beta';
+	const ALPHA = 'alpha';
+
+	const PARAMETERS = [
+		[
+			'channel' => [
+				'name' => 'Release Channel',
+				'type' => 'list',
+				'required' => true,
+				'defaultValue' => self::STABLE,
+				'values' => [
+					'Stable' => self::STABLE,
+					'Beta' => self::BETA,
+					'Alpha' => self::ALPHA,
+				],
+			]
+		]
+	];
+
+	public function getReleaseFeed($jsonUrl) {
+		$json = getContents($jsonUrl)
+			or returnServerError('Could not request Core OS Website.');
+		return json_decode($json, true);
+	}
+
+	public function collectData() {
+		$data = $this->getReleaseFeed($this->getJsonUri());
+
+		foreach ($data as $releaseVersion => $release) {
+			$item = [];
+
+			$item['uri'] = "https://coreos.com/releases/#$releaseVersion";
+			$item['title'] = $releaseVersion;
+			$item['content'] = nl2br($release['release_notes']);
+
+			$item['content'] .= <<<EOT
+<br/>
+Major Software:
+<br/>
+- Kernel: {$release['major_software']['kernel'][0]}<br/>
+- Docker: {$release['major_software']['docker'][0]}<br/>
+- etcd: {$release['major_software']['etcd'][0]}<br/>
+EOT;
+			$item['timestamp'] = strtotime($release['release_date']);
+
+			$this->items[] = $item;
+		}
+	}
+
+	private function getJsonUri() {
+		$channel = $this->getInput('channel');
+
+		return "https://coreos.com/releases/releases-$channel.json";
+	}
+
+	public function getURI() {
+		return self::URI;
+	}
+
+	public function getName(){
+		if(!is_null($this->getInput('channel'))) {
+			return 'Container Linux Releases: ' . $this->getInput('channel') . ' Channel';
+		}
+
+		return parent::getName();
+	}
+}