From d14839675354c38a6da5d6a50aac18cbf8755827 Mon Sep 17 00:00:00 2001
From: mahabaleshwars <147705296+mahabaleshwars@users.noreply.github.com>
Date: Wed, 25 Sep 2024 14:32:22 +0530
Subject: [PATCH] final test commit

---
 __tests__/install-python.test.ts | 20 +++++++++-
 dist/setup/index.js              | 63 ++++++++++++------------------
 src/install-python.ts            | 67 +++++++++++++-------------------
 3 files changed, 72 insertions(+), 78 deletions(-)

diff --git a/__tests__/install-python.test.ts b/__tests__/install-python.test.ts
index 8763aed5..70a109ac 100644
--- a/__tests__/install-python.test.ts
+++ b/__tests__/install-python.test.ts
@@ -9,7 +9,25 @@ import * as tc from '@actions/tool-cache';
 jest.mock('@actions/http-client');
 jest.mock('@actions/tool-cache');
 
-const mockManifest = [{version: '3.12.0'}];
+const mockManifest = [
+  {
+    version: '3.9.0',
+    stable: true,
+    release_url: 'https://example.com/release-url',
+    files: [
+      {
+        filename: 'python-3.9.0-macosx10.9.pkg',
+        arch: 'x64',
+        platform: 'darwin',
+        download_url: 'https://example.com/download-url'
+      }
+    ]
+  }
+];
+
+beforeEach(() => {
+  jest.resetAllMocks();
+});
 
 describe('getManifest', () => {
   it('should return manifest from repo', async () => {
diff --git a/dist/setup/index.js b/dist/setup/index.js
index bf91b555..4ec6e453 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -91637,7 +91637,6 @@ function findReleaseFromManifest(semanticVersionSpec, architecture, manifest) {
     return __awaiter(this, void 0, void 0, function* () {
         if (!manifest) {
             manifest = yield getManifest();
-            core.info('manifest :>> ' + JSON.stringify(manifest));
         }
         const foundRelease = yield tc.findFromManifest(semanticVersionSpec, false, manifest, architecture);
         core.info(`Found release: ${JSON.stringify(foundRelease)}`);
@@ -91648,28 +91647,14 @@ exports.findReleaseFromManifest = findReleaseFromManifest;
 function getManifest() {
     return __awaiter(this, void 0, void 0, function* () {
         try {
-            //const manifestFromRepo = await getManifestFromRepo();
-            const manifestFromRepo = {
-                sha: '5418fd77743bd877e972056787b3ee67a5725566',
-                node_id: 'MDQ6QmxvYjI1MDA3NzkzMzo1NDE4ZmQ3Nzc0M2JkODc3ZTk3MjA1Njc4N2IzZWU2N2E1NzI1NTY2',
-                size: 296984,
-                url: 'https://api.github.com/repos/actions/python-versions/git/blobs/5418fd77743bd877e972056787b3ee67a5725566',
-                content: 'fasfWfasdkjnflaknc@fakjsdhfjlakjlkfj',
-                encoding: 'base64'
-            };
+            const manifestFromRepo = yield getManifestFromRepo();
             core.info('Successfully fetched the manifest from the repo.');
             core.info(`Manifest from repo: ${JSON.stringify(manifestFromRepo)}`);
-            if (!Array.isArray(manifestFromRepo) ||
-                !manifestFromRepo.every(isValidManifestEntry)) {
-                throw new Error('Invalid response');
-            }
+            validateManifest(manifestFromRepo);
             return manifestFromRepo;
         }
         catch (err) {
-            core.info('Fetching the manifest via the API failed.');
-            if (err instanceof Error) {
-                core.info(err.message);
-            }
+            logError('Fetching the manifest via the API failed.', err);
         }
         try {
             const manifestFromURL = yield getManifestFromURL();
@@ -91678,16 +91663,18 @@ function getManifest() {
             return manifestFromURL;
         }
         catch (err) {
-            core.info('Fetching the manifest from the URL failed.');
-            if (err instanceof Error) {
-                core.info(err.message);
-            }
+            logError('Fetching the manifest via the URL failed.', err);
             // Rethrow the error or return a default value
             throw new Error('Failed to fetch the manifest from both the repo and the URL.');
         }
     });
 }
 exports.getManifest = getManifest;
+function validateManifest(manifest) {
+    if (!Array.isArray(manifest) || !manifest.every(isValidManifestEntry)) {
+        throw new Error('Invalid manifest response');
+    }
+}
 function isValidManifestEntry(entry) {
     return (typeof entry.version === 'string' &&
         typeof entry.stable === 'boolean' &&
@@ -91735,34 +91722,29 @@ function installPython(workingDirectory) {
                 }
             }
         };
-        if (utils_1.IS_WINDOWS) {
-            yield exec.exec('powershell', ['./setup.ps1'], options);
-        }
-        else {
-            yield exec.exec('bash', ['./setup.sh'], options);
-        }
+        const script = utils_1.IS_WINDOWS ? 'powershell ./setup.ps1' : 'bash ./setup.sh';
+        yield exec.exec(script, [], options);
     });
 }
 function installCpythonFromRelease(release) {
     return __awaiter(this, void 0, void 0, function* () {
         const downloadUrl = release.files[0].download_url;
         core.info(`Download from "${downloadUrl}"`);
-        let pythonPath = '';
         try {
             const fileName = (0, utils_1.getDownloadFileName)(downloadUrl);
-            pythonPath = yield tc.downloadTool(downloadUrl, fileName, AUTH);
+            const pythonPath = yield tc.downloadTool(downloadUrl, fileName, AUTH);
             core.info('Extract downloaded archive');
-            let pythonExtractedFolder;
-            if (utils_1.IS_WINDOWS) {
-                pythonExtractedFolder = yield tc.extractZip(pythonPath);
-            }
-            else {
-                pythonExtractedFolder = yield tc.extractTar(pythonPath);
-            }
+            const pythonExtractedFolder = utils_1.IS_WINDOWS
+                ? yield tc.extractZip(pythonPath)
+                : yield tc.extractTar(pythonPath);
             core.info('Execute installation script');
             yield installPython(pythonExtractedFolder);
         }
         catch (err) {
+            handleDownloadError(err);
+            throw err;
+        }
+        function handleDownloadError(err) {
             if (err instanceof tc.HTTPError) {
                 // Rate limit?
                 if (err.httpStatusCode === 403 || err.httpStatusCode === 429) {
@@ -91775,11 +91757,16 @@ function installCpythonFromRelease(release) {
                     core.debug(err.stack);
                 }
             }
-            throw err;
         }
     });
 }
 exports.installCpythonFromRelease = installCpythonFromRelease;
+function logError(message, err) {
+    core.info(message);
+    if (err instanceof Error) {
+        core.info(err.message);
+    }
+}
 
 
 /***/ }),
diff --git a/src/install-python.ts b/src/install-python.ts
index 43d7c664..ff8493dd 100644
--- a/src/install-python.ts
+++ b/src/install-python.ts
@@ -20,7 +20,6 @@ export async function findReleaseFromManifest(
 ): Promise<tc.IToolRelease | undefined> {
   if (!manifest) {
     manifest = await getManifest();
-    core.info('manifest :>> ' + JSON.stringify(manifest));
   }
 
   const foundRelease = await tc.findFromManifest(
@@ -35,30 +34,13 @@ export async function findReleaseFromManifest(
 
 export async function getManifest(): Promise<tc.IToolRelease[]> {
   try {
-    //const manifestFromRepo = await getManifestFromRepo();
-    const manifestFromRepo = {
-      sha: '5418fd77743bd877e972056787b3ee67a5725566',
-      node_id:
-        'MDQ6QmxvYjI1MDA3NzkzMzo1NDE4ZmQ3Nzc0M2JkODc3ZTk3MjA1Njc4N2IzZWU2N2E1NzI1NTY2',
-      size: 296984,
-      url: 'https://api.github.com/repos/actions/python-versions/git/blobs/5418fd77743bd877e972056787b3ee67a5725566',
-      content: 'fasfWfasdkjnflaknc@fakjsdhfjlakjlkfj',
-      encoding: 'base64'
-    };
+    const manifestFromRepo = await getManifestFromRepo();
     core.info('Successfully fetched the manifest from the repo.');
     core.info(`Manifest from repo: ${JSON.stringify(manifestFromRepo)}`);
-    if (
-      !Array.isArray(manifestFromRepo) ||
-      !manifestFromRepo.every(isValidManifestEntry)
-    ) {
-      throw new Error('Invalid response');
-    }
+    validateManifest(manifestFromRepo);
     return manifestFromRepo;
   } catch (err) {
-    core.info('Fetching the manifest via the API failed.');
-    if (err instanceof Error) {
-      core.info(err.message);
-    }
+    logError('Fetching the manifest via the API failed.', err);
   }
   try {
     const manifestFromURL = await getManifestFromURL();
@@ -66,10 +48,7 @@ export async function getManifest(): Promise<tc.IToolRelease[]> {
     core.info(`Manifest from URL: ${JSON.stringify(manifestFromURL)}`);
     return manifestFromURL;
   } catch (err) {
-    core.info('Fetching the manifest from the URL failed.');
-    if (err instanceof Error) {
-      core.info(err.message);
-    }
+    logError('Fetching the manifest via the URL failed.', err);
     // Rethrow the error or return a default value
     throw new Error(
       'Failed to fetch the manifest from both the repo and the URL.'
@@ -77,6 +56,12 @@ export async function getManifest(): Promise<tc.IToolRelease[]> {
   }
 }
 
+function validateManifest(manifest: any): void {
+  if (!Array.isArray(manifest) || !manifest.every(isValidManifestEntry)) {
+    throw new Error('Invalid manifest response');
+  }
+}
+
 function isValidManifestEntry(entry: any): boolean {
   return (
     typeof entry.version === 'string' &&
@@ -139,32 +124,30 @@ async function installPython(workingDirectory: string) {
     }
   };
 
-  if (IS_WINDOWS) {
-    await exec.exec('powershell', ['./setup.ps1'], options);
-  } else {
-    await exec.exec('bash', ['./setup.sh'], options);
-  }
+  const script = IS_WINDOWS ? 'powershell ./setup.ps1' : 'bash ./setup.sh';
+  await exec.exec(script, [], options);
 }
 
 export async function installCpythonFromRelease(release: tc.IToolRelease) {
   const downloadUrl = release.files[0].download_url;
 
   core.info(`Download from "${downloadUrl}"`);
-  let pythonPath = '';
   try {
     const fileName = getDownloadFileName(downloadUrl);
-    pythonPath = await tc.downloadTool(downloadUrl, fileName, AUTH);
+    const pythonPath = await tc.downloadTool(downloadUrl, fileName, AUTH);
     core.info('Extract downloaded archive');
-    let pythonExtractedFolder;
-    if (IS_WINDOWS) {
-      pythonExtractedFolder = await tc.extractZip(pythonPath);
-    } else {
-      pythonExtractedFolder = await tc.extractTar(pythonPath);
-    }
+    const pythonExtractedFolder = IS_WINDOWS
+      ? await tc.extractZip(pythonPath)
+      : await tc.extractTar(pythonPath);
 
     core.info('Execute installation script');
     await installPython(pythonExtractedFolder);
   } catch (err) {
+    handleDownloadError(err);
+    throw err;
+  }
+
+  function handleDownloadError(err: any): void {
     if (err instanceof tc.HTTPError) {
       // Rate limit?
       if (err.httpStatusCode === 403 || err.httpStatusCode === 429) {
@@ -178,6 +161,12 @@ export async function installCpythonFromRelease(release: tc.IToolRelease) {
         core.debug(err.stack);
       }
     }
-    throw err;
+  }
+}
+
+function logError(message: string, err: any): void {
+  core.info(message);
+  if (err instanceof Error) {
+    core.info(err.message);
   }
 }