Add manifest validation and improve error handling

This commit is contained in:
Priyagupta108 2025-04-23 16:43:13 +05:30
parent dca8468d37
commit 8aa1ce84b3
2 changed files with 60 additions and 2 deletions

25
dist/setup/index.js vendored
View File

@ -93423,10 +93423,33 @@ function extractGoArchive(archivePath) {
}); });
} }
exports.extractGoArchive = extractGoArchive; exports.extractGoArchive = extractGoArchive;
function isIToolRelease(obj) {
return (typeof obj === 'object' &&
obj !== null &&
typeof obj.version === 'string' &&
typeof obj.stable === 'boolean' &&
Array.isArray(obj.files) &&
obj.files.every((file) => typeof file.filename === 'string' &&
typeof file.platform === 'string' &&
typeof file.arch === 'string' &&
typeof file.download_url === 'string'));
}
function getManifest(auth) { function getManifest(auth) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
return yield getManifestFromRepo(auth); const manifest = yield getManifestFromRepo(auth);
if (Array.isArray(manifest) &&
manifest.length &&
manifest.every(isIToolRelease)) {
return manifest;
}
let errorMessage = 'An unexpected error occurred while fetching the manifest.';
if (typeof manifest === 'object' &&
manifest !== null &&
'message' in manifest) {
errorMessage = manifest.message;
}
throw new Error(errorMessage);
} }
catch (err) { catch (err) {
core.debug('Fetching the manifest via the API failed.'); core.debug('Fetching the manifest via the API failed.');

View File

@ -275,11 +275,46 @@ export async function extractGoArchive(archivePath: string): Promise<string> {
return extPath; return extPath;
} }
function isIToolRelease(obj: any): obj is tc.IToolRelease {
return (
typeof obj === 'object' &&
obj !== null &&
typeof obj.version === 'string' &&
typeof obj.stable === 'boolean' &&
Array.isArray(obj.files) &&
obj.files.every(
(file: any) =>
typeof file.filename === 'string' &&
typeof file.platform === 'string' &&
typeof file.arch === 'string' &&
typeof file.download_url === 'string'
)
);
}
export async function getManifest( export async function getManifest(
auth: string | undefined auth: string | undefined
): Promise<tc.IToolRelease[]> { ): Promise<tc.IToolRelease[]> {
try { try {
return await getManifestFromRepo(auth); const manifest = await getManifestFromRepo(auth);
if (
Array.isArray(manifest) &&
manifest.length &&
manifest.every(isIToolRelease)
) {
return manifest;
}
let errorMessage =
'An unexpected error occurred while fetching the manifest.';
if (
typeof manifest === 'object' &&
manifest !== null &&
'message' in manifest
) {
errorMessage = (manifest as {message: string}).message;
}
throw new Error(errorMessage);
} catch (err) { } catch (err) {
core.debug('Fetching the manifest via the API failed.'); core.debug('Fetching the manifest via the API failed.');
if (err instanceof Error) { if (err instanceof Error) {