4 function error($text) {
9 function output($text) {
13 function getJSON($url) {
15 curl_setopt_array($ch, [
17 CURLOPT_RETURNTRANSFER => 1,
18 CURLOPT_HTTPHEADER => [
19 'User-Agent: ssddanbrown',
22 $data = curl_exec($ch);
24 $err = curl_error($ch);
26 if (!empty($err)) error($err);
28 return json_decode($data, true);
31 // Check a milestone is provided
32 if (count($argv) < 2) {
33 error("Milestone ID required");
36 // Get milestone info from GitHub
37 $milestoneID = intval($argv[1]);
38 $issueURL = 'https://api.github.com/repos/BookStackApp/BookStack/issues?milestone='. $milestoneID .'&state=all';
39 $issues = getJSON($issueURL);
41 // Get BookStack version and check if a feature or minor release
42 $milestone = $issues[0]['milestone'];
44 preg_match('/v[0-9.]{5,7}/', $milestone['title'], $versionMatch);
45 $version = $versionMatch[0];
46 $splitVersion = explode('.', $version);
47 $isFeature = intval(array_pop($splitVersion)) === 0;
50 output("# BookStack Beta {$version}\n");
52 // Output header text and links
54 $urlVersion = implode('0', $splitVersion);
55 output("- [Update instructions](https://www.bookstackapp.com/docs/admin/updates)");
56 output("- [Update details on blog](https://www.bookstackapp.com/blog/beta-release-{$urlVersion}/)");
57 output("\n### Full List of Changes\n");
59 output("\nThis release contains the following fixes and changes:\n");
63 foreach ($issues as $issue) {
65 $output .= trim($issue['title'], '.') . '.';
66 if (isset($issue['pull_request']) && $issue['user']['login'] !== 'ssddanbrown') {
67 $output .= " Thanks to [@{$issue['user']['login']}]({$issue['html_url']}).";
69 $output .= " ([#{$issue['number']}]({$issue['html_url']}))";