Skip to content

Commit 927b4c7

Browse files
committed
Add default responses when rate limit has been hit, or use latest cached version
This allows the extension to still function after the rate limit has been hit Signed-off-by: William Vinnicombe <[email protected]>
1 parent 1dea76e commit 927b4c7

File tree

2 files changed

+185
-3
lines changed

2 files changed

+185
-3
lines changed

src/utils/githubApiCache.mts

Lines changed: 177 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ExtensionContext, Memento } from "vscode";
2-
import type { GithubReleaseResponse, GithubRepository } from "./githubREST.mjs";
2+
import { type GithubReleaseResponse, GithubRepository } from "./githubREST.mjs";
33
import Logger from "../logger.mjs";
44

55
/**
@@ -25,6 +25,167 @@ export interface GithubApiCacheEntry {
2525
etag: string;
2626
}
2727

28+
29+
function defaultCacheOfRepository(
30+
repository: GithubRepository,
31+
dataType: GithubApiCacheEntryDataType
32+
): GithubApiCacheEntry {
33+
let ret: GithubApiCacheEntry = {
34+
repository: repository,
35+
dataType: dataType,
36+
data: [],
37+
etag: "",
38+
}
39+
switch (repository) {
40+
case GithubRepository.picoSDK:
41+
if (dataType === GithubApiCacheEntryDataType.releases) {
42+
ret.data = ["1.5.1"];
43+
}
44+
break;
45+
case GithubRepository.cmake:
46+
if (dataType === GithubApiCacheEntryDataType.releases) {
47+
ret.data = ["v3.28.0-rc6"];
48+
} else {
49+
ret.data = {
50+
assets: [
51+
{
52+
id: 138286891,
53+
name: 'cmake-3.28.0-rc6-linux-aarch64.tar.gz',
54+
browser_download_url: 'https://github.com/Kitware/CMake/releases/download/v3.28.0-rc6/cmake-3.28.0-rc6-linux-aarch64.tar.gz'
55+
},
56+
{
57+
id: 138286897,
58+
name: 'cmake-3.28.0-rc6-linux-x86_64.tar.gz',
59+
browser_download_url: 'https://github.com/Kitware/CMake/releases/download/v3.28.0-rc6/cmake-3.28.0-rc6-linux-x86_64.tar.gz'
60+
},
61+
{
62+
id: 138286905,
63+
name: 'cmake-3.28.0-rc6-macos-universal.tar.gz',
64+
browser_download_url: 'https://github.com/Kitware/CMake/releases/download/v3.28.0-rc6/cmake-3.28.0-rc6-macos-universal.tar.gz'
65+
},
66+
{
67+
id: 138286932,
68+
name: 'cmake-3.28.0-rc6-windows-arm64.zip',
69+
browser_download_url: 'https://github.com/Kitware/CMake/releases/download/v3.28.0-rc6/cmake-3.28.0-rc6-windows-arm64.zip'
70+
},
71+
{
72+
id: 138286937,
73+
name: 'cmake-3.28.0-rc6-windows-x86_64.zip',
74+
browser_download_url: 'https://github.com/Kitware/CMake/releases/download/v3.28.0-rc6/cmake-3.28.0-rc6-windows-x86_64.zip'
75+
},
76+
],
77+
assetsUrl: 'https://api.github.com/repos/Kitware/CMake/releases/132188415/assets',
78+
} as GithubReleaseResponse
79+
}
80+
break;
81+
case GithubRepository.ninja:
82+
if (dataType === GithubApiCacheEntryDataType.releases) {
83+
ret.data = ["v1.12.1"];
84+
} else {
85+
ret.data = {
86+
assets: [
87+
{
88+
id: 167333823,
89+
name: 'ninja-linux-aarch64.zip',
90+
browser_download_url: 'https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux-aarch64.zip'
91+
},
92+
{
93+
id: 167333509,
94+
name: 'ninja-linux.zip',
95+
browser_download_url: 'https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip'
96+
},
97+
{
98+
id: 167333196,
99+
name: 'ninja-mac.zip',
100+
browser_download_url: 'https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-mac.zip'
101+
},
102+
{
103+
id: 167333379,
104+
name: 'ninja-win.zip',
105+
browser_download_url: 'https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-win.zip'
106+
},
107+
{
108+
id: 167333478,
109+
name: 'ninja-winarm64.zip',
110+
browser_download_url: 'https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-winarm64.zip'
111+
}
112+
],
113+
assetsUrl: 'https://api.github.com/repos/ninja-build/ninja/releases/155357494/assets'
114+
} as GithubReleaseResponse
115+
}
116+
break;
117+
case GithubRepository.tools:
118+
if (dataType === GithubApiCacheEntryDataType.releases) {
119+
ret.data = [];
120+
} else {
121+
ret.data = {
122+
assets: [
123+
{
124+
id: 141973997,
125+
name: 'openocd-0.12.0-x64-win.zip',
126+
browser_download_url: 'https://github.com/will-v-pi/pico-sdk-tools/releases/download/v1.5.1-alpha-1/openocd-0.12.0-x64-win.zip'
127+
},
128+
{
129+
id: 141974002,
130+
name: 'pico-sdk-tools-1.5.1-x64-win.zip',
131+
browser_download_url: 'https://github.com/will-v-pi/pico-sdk-tools/releases/download/v1.5.1-alpha-1/pico-sdk-tools-1.5.1-x64-win.zip'
132+
},
133+
{
134+
id: 141974003,
135+
name: 'picotool-1.1.2-x64-win.zip',
136+
browser_download_url: 'https://github.com/will-v-pi/pico-sdk-tools/releases/download/v1.5.1-alpha-1/picotool-1.1.2-x64-win.zip'
137+
}
138+
],
139+
assetsUrl: 'https://api.github.com/repos/will-v-pi/pico-sdk-tools/releases/134896110/assets'
140+
} as GithubReleaseResponse
141+
}
142+
break;
143+
case GithubRepository.openocd:
144+
if (dataType === GithubApiCacheEntryDataType.releases) {
145+
ret.data = [];
146+
} else {
147+
ret.data = {
148+
assets: [
149+
{
150+
id: 124558743,
151+
name: 'xpack-openocd-0.12.0-2-darwin-arm64.tar.gz',
152+
browser_download_url: 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.12.0-2/xpack-openocd-0.12.0-2-darwin-arm64.tar.gz'
153+
},
154+
{
155+
id: 124558736,
156+
name: 'xpack-openocd-0.12.0-2-darwin-x64.tar.gz',
157+
browser_download_url: 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.12.0-2/xpack-openocd-0.12.0-2-darwin-x64.tar.gz'
158+
},
159+
{
160+
id: 124558733,
161+
name: 'xpack-openocd-0.12.0-2-linux-arm.tar.gz',
162+
browser_download_url: 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.12.0-2/xpack-openocd-0.12.0-2-linux-arm.tar.gz'
163+
},
164+
{
165+
id: 124558729,
166+
name: 'xpack-openocd-0.12.0-2-linux-arm64.tar.gz',
167+
browser_download_url: 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.12.0-2/xpack-openocd-0.12.0-2-linux-arm64.tar.gz'
168+
},
169+
{
170+
id: 124558723,
171+
name: 'xpack-openocd-0.12.0-2-linux-x64.tar.gz',
172+
browser_download_url: 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.12.0-2/xpack-openocd-0.12.0-2-linux-x64.tar.gz'
173+
},
174+
{
175+
id: 124558714,
176+
name: 'xpack-openocd-0.12.0-2-win32-x64.zip',
177+
browser_download_url: 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.12.0-2/xpack-openocd-0.12.0-2-win32-x64.zip'
178+
}
179+
],
180+
assetsUrl: 'https://api.github.com/repos/xpack-dev-tools/openocd-xpack/releases/119866462/assets'
181+
} as GithubReleaseResponse
182+
}
183+
break;
184+
}
185+
186+
return ret;
187+
}
188+
28189
/**
29190
* A simple cache for Github API responses to avoid hittign the rate limit,
30191
* and to avoid putting unnecessary load on the Github servers.
@@ -118,6 +279,21 @@ export default class GithubApiCache {
118279
return response?.etag;
119280
}
120281

282+
public async getDefaultResponse(
283+
repository: GithubRepository,
284+
dataType: GithubApiCacheEntryDataType
285+
): Promise<GithubApiCacheEntry | undefined> {
286+
const lastEtag = await GithubApiCache.getInstance().getLastEtag(
287+
repository,
288+
dataType
289+
);
290+
if (lastEtag) {
291+
return this.globalState.get(`githubApiCache-${repository}-${dataType}`);
292+
} else {
293+
return defaultCacheOfRepository(repository, dataType);
294+
}
295+
}
296+
121297
/**
122298
* Clears the github api cache.
123299
*/

src/utils/githubREST.mts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,10 @@ async function getReleases(repository: GithubRepository): Promise<string[]> {
202202
} catch (error) {
203203
Logger.log("Error fetching", repoNameOfRepository(repository), "releases");
204204

205-
return [];
205+
return (await GithubApiCache.getInstance().getDefaultResponse(
206+
repository,
207+
GithubApiCacheEntryDataType.releases
208+
))?.data as string[];
206209
}
207210
}
208211

@@ -281,6 +284,9 @@ export async function getGithubReleaseByTag(
281284
} catch (error) {
282285
Logger.log("Error fetching", repoNameOfRepository(repository), "releases");
283286

284-
return;
287+
return (await GithubApiCache.getInstance().getDefaultResponse(
288+
repository,
289+
GithubApiCacheEntryDataType.tag
290+
))?.data as GithubReleaseResponse;
285291
}
286292
}

0 commit comments

Comments
 (0)