Skip to content

Commit f8bf9ca

Browse files
fix(home): handle GitHub API failures gracefully in releases/changelogs (#3291)
Wrap GitHub API calls in try/catch and return empty array on failure. Prevents 422 errors when rate-limited or repos are unreachable.
1 parent cf58689 commit f8bf9ca

1 file changed

Lines changed: 35 additions & 27 deletions

File tree

modules/home/services/home.service.js

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,40 +32,48 @@ const page = async (name) => {
3232
* @return {Promise} All versions
3333
*/
3434
const releases = async () => {
35-
const requests = config.repos.map((item) =>
36-
axios.get(`https://api.github.com/repos/${item.owner}/${item.repo}/releases`, {
37-
headers: item.token ? { Authorization: `token ${item.token}` } : {},
38-
}),
39-
);
40-
let results = await axios.all(requests);
41-
results = results.map((result, i) => ({
42-
title: config.repos[i].title,
43-
list: result.data.map((release) => ({
44-
name: release.name,
45-
prerelease: release.prerelease,
46-
published_at: release.published_at,
47-
})),
48-
}));
49-
return Promise.resolve(results);
35+
try {
36+
const requests = config.repos.map((item) =>
37+
axios.get(`https://api.github.com/repos/${item.owner}/${item.repo}/releases`, {
38+
headers: item.token ? { Authorization: `token ${item.token}` } : {},
39+
}),
40+
);
41+
let results = await axios.all(requests);
42+
results = results.map((result, i) => ({
43+
title: config.repos[i].title,
44+
list: result.data.map((release) => ({
45+
name: release.name,
46+
prerelease: release.prerelease,
47+
published_at: release.published_at,
48+
})),
49+
}));
50+
return results;
51+
} catch (_err) {
52+
return [];
53+
}
5054
};
5155

5256
/**
5357
* @desc Function to get all changelogs
5458
* @return {Promise} All changelogs
5559
*/
5660
const changelogs = async () => {
57-
const repos = _.filter(config.repos, (repo) => repo.changelog);
58-
const requests = repos.map((item) =>
59-
axios.get(`https://api.github.com/repos/${item.owner}/${item.repo}/contents/${item.changelog}`, {
60-
headers: item.token ? { Authorization: `token ${item.token}` } : {},
61-
}),
62-
);
63-
let results = await axios.all(requests);
64-
results = results.map((result, i) => ({
65-
title: config.repos[i].title,
66-
markdown: Base64.decode(result.data.content),
67-
}));
68-
return Promise.resolve(results);
61+
try {
62+
const repos = _.filter(config.repos, (repo) => repo.changelog);
63+
const requests = repos.map((item) =>
64+
axios.get(`https://api.github.com/repos/${item.owner}/${item.repo}/contents/${item.changelog}`, {
65+
headers: item.token ? { Authorization: `token ${item.token}` } : {},
66+
}),
67+
);
68+
let results = await axios.all(requests);
69+
results = results.map((result, i) => ({
70+
title: repos[i].title,
71+
markdown: Base64.decode(result.data.content),
72+
}));
73+
return results;
74+
} catch (_err) {
75+
return [];
76+
}
6977
};
7078

7179
/**

0 commit comments

Comments
 (0)