1 import { get } from "http";
2 import { Octokit } from "octokit";
4 interface GithubRelease {
9 // NOTE: The primary rate limit for unauthenticated requests is 60 requests per hour.
10 export const SDK_REPOSITORY_URL = "https://github.com/raspberrypi/pico-sdk.git";
11 export const NINJA_REPOSITORY_URL = "https://github.com/ninja-build/ninja.git";
12 export const CMAKE_REPOSITORY_URL = "https://github.com/Kitware/CMake.git";
13 export const PYENV_REPOSITORY_URL = "https://github.com/pyenv/pyenv.git";
15 export async function getSDKReleases(): Promise<GithubRelease[]> {
16 const octokit = new Octokit();
18 const response = await octokit.request("GET /repos/{owner}/{repo}/releases", {
22 // eslint-disable-next-line @typescript-eslint/naming-convention
23 "X-GitHub-Api-Version": "2022-11-28",
27 if (response.status !== 200) {
28 return new Promise<Array<{ tagName: string }>>(resolve => {
29 get("http://localhost:8080/releases/pico-sdk", response => {
32 // Append data as it arrives
33 response.on("data", chunk => {
37 response.on("end", () => {
38 const releases: Array<{ tag_name: string }> = JSON.parse(
40 ) as Array<{ tag_name: string }>;
44 .flatMap(release => ({
45 tagName: release.tag_name,
47 .filter(release => release !== null) as Array<{ tagName: string }>
55 .flatMap(release => ({
56 tagName: release.tag_name,
58 .filter(release => release !== null) as GithubRelease[];
61 export async function getNinjaReleases(): Promise<Array<{ tagName: string }>> {
62 const octokit = new Octokit();
64 const response = await octokit.request("GET /repos/{owner}/{repo}/releases", {
68 // eslint-disable-next-line @typescript-eslint/naming-convention
69 "X-GitHub-Api-Version": "2022-11-28",
73 if (response.status !== 200) {
74 return new Promise<Array<{ tagName: string }>>(resolve => {
75 get("http://localhost:8080/releases/Ninja", response => {
78 // Append data as it arrives
79 response.on("data", chunk => {
83 response.on("end", () => {
84 const releases: Array<{ tag_name: string }> = JSON.parse(
86 ) as Array<{ tag_name: string }>;
90 .flatMap(release => ({
91 tagName: release.tag_name,
93 .filter(release => release !== null) as Array<{ tagName: string }>
103 .flatMap(release => ({
104 tagName: release.tag_name,
106 .filter(release => release !== null) as Array<{ tagName: string }>
110 export async function getCmakeReleases(): Promise<Array<{ tagName: string }>> {
111 const octokit = new Octokit();
113 const response = await octokit.request("GET /repos/{owner}/{repo}/releases", {
117 // eslint-disable-next-line @typescript-eslint/naming-convention
118 "X-GitHub-Api-Version": "2022-11-28",
122 if (response.status !== 200) {
123 return new Promise<Array<{ tagName: string }>>(resolve => {
124 get("http://localhost:8080/releases/CMake", response => {
127 // Append data as it arrives
128 response.on("data", chunk => {
132 response.on("end", () => {
133 const releases: Array<{ tag_name: string }> = JSON.parse(
135 ) as Array<{ tag_name: string }>;
139 .flatMap(release => ({
140 tagName: release.tag_name,
142 .filter(release => release !== null) as Array<{ tagName: string }>
152 .flatMap(release => ({
153 tagName: release.tag_name,
155 .filter(release => release !== null) as Array<{ tagName: string }>