fetchReleases method
Fetch GitHub releases for a repository.
GET /repos/{owner}/{repo}/releases
Returns a list of release objects, each containing tag_name, name,
body (release notes), published_at, prerelease, etc.
Returns an empty list on failure.
Implementation
Future<List<Map<String, dynamic>>> fetchReleases(
String owner,
String repo, {
int perPage = 100,
}) async {
final cacheKey = 'github_releases_${owner}_$repo';
final cached = await _cache.get(cacheKey);
if (cached != null) {
final entries = cached['entries'] as List<dynamic>? ?? [];
return entries.cast<Map<String, dynamic>>();
}
try {
Logger.debug('Fetching releases for $owner/$repo');
final response = await _http.get(
'$_apiBase/repos/$owner/$repo/releases?per_page=$perPage',
);
if (!response.isSuccess) {
Logger.warn(
'Failed to fetch releases for $owner/$repo: '
'HTTP ${response.statusCode}',
);
return [];
}
final releases = response.jsonList
.map((e) => e as Map<String, dynamic>)
.toList();
await _cache.set(
cacheKey,
{'entries': releases},
CacheManager.changelogTtl,
);
return releases;
} catch (e, stack) {
Logger.error('Error fetching releases for $owner/$repo', e, stack);
return [];
}
}