@actions/cache: convert to an ESM module (#2275)
* `@actions/cache`: convert to an ESM module * Update the fixture to ESM syntax * Update the cache workflows * Bump `@actions/glob` to `0.6.1` * Fix awaiting in the cache unit tests * Fix a type issues in contracts * Export the `DownloadOptions`/`UploadOptions` like before * More cache test fixes * Make the cache units tests better * Add some more logging * Add retries to restore-cache.mjs
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
name: 'Set env variables'
|
||||
description: 'Sets certain env variables so that e2e restore and save cache can be tested in a shell'
|
||||
runs:
|
||||
using: 'node12'
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
+4
-3
@@ -1,8 +1,9 @@
|
||||
// Certain env variables are not set by default in a shell context and are only available in a node context from a running action
|
||||
// In order to be able to restore and save cache e2e in a shell when running CI tests, we need these env variables set
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
const filePath = process.env[`GITHUB_ENV`]
|
||||
import fs from 'fs'
|
||||
import os from 'os'
|
||||
|
||||
const filePath = process.env['GITHUB_ENV']
|
||||
fs.appendFileSync(filePath, `ACTIONS_CACHE_SERVICE_V2=true${os.EOL}`, {
|
||||
encoding: 'utf8'
|
||||
})
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env node
|
||||
// Helper script to restore cache for e2e testing
|
||||
import * as cache from '../lib/cache.js'
|
||||
|
||||
const [prefix, runId, useAzureSdk] = process.argv.slice(2)
|
||||
|
||||
if (!prefix || !runId) {
|
||||
console.error('Usage: restore-cache.mjs <prefix> <runId> [useAzureSdk]')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const key = `test-${prefix}-${runId}`
|
||||
const paths = ['test-cache', '~/test-cache']
|
||||
const options = {useAzureSdk: useAzureSdk !== 'false'}
|
||||
|
||||
console.log(`Restoring cache with key: ${key}`)
|
||||
console.log(`Paths: ${paths.join(', ')}`)
|
||||
console.log(`Using Azure SDK: ${options.useAzureSdk}`)
|
||||
|
||||
const maxRetries = 3
|
||||
const retryDelayMs = 5000
|
||||
|
||||
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
||||
try {
|
||||
console.log(`Attempt ${attempt} of ${maxRetries}`)
|
||||
const restoredKey = await cache.restoreCache(paths, key, [], options)
|
||||
|
||||
if (restoredKey) {
|
||||
console.log(`Cache restored with key: ${restoredKey}`)
|
||||
process.exit(0)
|
||||
} else {
|
||||
console.log('Cache not found on this attempt')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error on attempt ${attempt}:`, error.message)
|
||||
}
|
||||
|
||||
if (attempt < maxRetries) {
|
||||
console.log(`Waiting ${retryDelayMs / 1000}s before retry...`)
|
||||
await new Promise(resolve => setTimeout(resolve, retryDelayMs))
|
||||
}
|
||||
}
|
||||
|
||||
console.error(`Failed to restore cache after ${maxRetries} attempts`)
|
||||
process.exit(1)
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env node
|
||||
// Helper script to save cache for e2e testing
|
||||
import * as cache from '../lib/cache.js'
|
||||
|
||||
const [prefix, runId] = process.argv.slice(2)
|
||||
|
||||
if (!prefix || !runId) {
|
||||
console.error('Usage: save-cache.mjs <prefix> <runId>')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const key = `test-${prefix}-${runId}`
|
||||
const paths = ['test-cache', '~/test-cache']
|
||||
|
||||
console.log(`Saving cache with key: ${key}`)
|
||||
console.log(`Paths: ${paths.join(', ')}`)
|
||||
|
||||
try {
|
||||
const cacheId = await cache.saveCache(paths, key)
|
||||
console.log(`Cache saved with ID: ${cacheId}`)
|
||||
} catch (error) {
|
||||
console.error('Error saving cache:', error)
|
||||
process.exit(1)
|
||||
}
|
||||
Reference in New Issue
Block a user