diff --git a/test/smoke/src/main.ts b/test/smoke/src/main.ts index 0b9336e8d98..2b8fe48e500 100644 --- a/test/smoke/src/main.ts +++ b/test/smoke/src/main.ts @@ -280,8 +280,9 @@ async function ensureStableCode(): Promise { let lastProgressMessage: string | undefined = undefined; let lastProgressReportedAt = 0; - const stableCodeExecutable = await measureAndLog(vscodetest.download({ - cachePath: path.join(os.tmpdir(), 'vscode-test'), + const stableCodeDestination = path.join(testDataPath, 's'); + const stableCodeExecutable = await retry(() => measureAndLog(vscodetest.download({ + cachePath: stableCodeDestination, version: previousVersion.version, extractSync: true, reporter: { @@ -301,7 +302,15 @@ async function ensureStableCode(): Promise { }, error: error => logger.log(`download stable code error: ${error}`) } - }), 'download stable code', logger); + }), 'download stable code', logger), 1000, 3, () => new Promise((resolve, reject) => { + rimraf(stableCodeDestination, { maxBusyTries: 10 }, error => { + if (error) { + reject(error); + } else { + resolve(); + } + }); + })); if (process.platform === 'darwin') { // Visual Studio Code.app/Contents/MacOS/Electron diff --git a/test/smoke/src/utils.ts b/test/smoke/src/utils.ts index d8114603aac..7f16a1ed38c 100644 --- a/test/smoke/src/utils.ts +++ b/test/smoke/src/utils.ts @@ -141,11 +141,19 @@ export interface ITask { (): T; } -export async function retry(task: ITask>, delay: number, retries: number): Promise { +export async function retry(task: ITask>, delay: number, retries: number, onBeforeRetry?: () => Promise): Promise { let lastError: Error | undefined; for (let i = 0; i < retries; i++) { try { + if (i > 0 && typeof onBeforeRetry === 'function') { + try { + await onBeforeRetry(); + } catch (error) { + console.warn(`onBeforeRetry failed with: ${error}`); + } + } + return await task(); } catch (error) { lastError = error;