mirror of
https://github.com/imranismail/setup-kustomize.git
synced 2026-05-17 10:15:23 +00:00
Cache by requested version name
This commit is contained in:
@@ -17,18 +17,24 @@ describe('installer tests', () => {
|
||||
beforeAll(async () => {
|
||||
await io.rmRF(toolDir)
|
||||
await io.rmRF(tempDir)
|
||||
}, 100000)
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await io.rmRF(toolDir)
|
||||
await io.rmRF(tempDir)
|
||||
}, 100000)
|
||||
it('Acquires the max satisfying version range', async () => {
|
||||
await installer.getKustomize('~> 3.0')
|
||||
const kustomizeDir = path.join(toolDir, 'kustomize', '~> 3.0', os.arch())
|
||||
expect(fs.existsSync(`${kustomizeDir}.complete`)).toBe(true)
|
||||
|
||||
it('Acquires the latest kustomize version 3.x successfully', () => {
|
||||
expect(async () => await installer.getKustomize('3.x')).not.toThrow()
|
||||
}, 100000)
|
||||
if (IS_WINDOWS) {
|
||||
expect(fs.existsSync(path.join(kustomizeDir, 'kustomize.exe'))).toBe(true)
|
||||
} else {
|
||||
expect(fs.existsSync(path.join(kustomizeDir, 'kustomize'))).toBe(true)
|
||||
expect(() =>
|
||||
fs.accessSync(path.join(kustomizeDir, 'kustomize'), fs.constants.X_OK)
|
||||
).not.toThrow()
|
||||
}
|
||||
})
|
||||
|
||||
it('Acquires kustomize version 3.2.0 successfully', async () => {
|
||||
it('Acquires kustomize version 3.2.0', async () => {
|
||||
await installer.getKustomize('3.2.0')
|
||||
const kustomizeDir = path.join(toolDir, 'kustomize', '3.2.0', os.arch())
|
||||
|
||||
@@ -42,9 +48,9 @@ describe('installer tests', () => {
|
||||
fs.accessSync(path.join(kustomizeDir, 'kustomize'), fs.constants.X_OK)
|
||||
).not.toThrow()
|
||||
}
|
||||
}, 100000)
|
||||
})
|
||||
|
||||
it('Acquires kustomize version 3.2.1 successfully', async () => {
|
||||
it('Acquires kustomize version 3.2.1', async () => {
|
||||
await installer.getKustomize('3.2.1')
|
||||
const kustomizeDir = path.join(toolDir, 'kustomize', '3.2.1', os.arch())
|
||||
|
||||
@@ -58,9 +64,9 @@ describe('installer tests', () => {
|
||||
fs.accessSync(path.join(kustomizeDir, 'kustomize'), fs.constants.X_OK)
|
||||
).not.toThrow()
|
||||
}
|
||||
}, 100000)
|
||||
})
|
||||
|
||||
it('Acquires kustomize version 3.3.0 successfully', async () => {
|
||||
it('Acquires kustomize version 3.3.0', async () => {
|
||||
await installer.getKustomize('3.3.0')
|
||||
const kustomizeDir = path.join(toolDir, 'kustomize', '3.3.0', os.arch())
|
||||
|
||||
@@ -74,7 +80,7 @@ describe('installer tests', () => {
|
||||
fs.accessSync(path.join(kustomizeDir, 'kustomize'), fs.constants.X_OK)
|
||||
).not.toThrow()
|
||||
}
|
||||
}, 100000)
|
||||
})
|
||||
|
||||
it('Throws if no location contains correct kustomize version', async () => {
|
||||
let thrown = false
|
||||
|
||||
@@ -4,8 +4,9 @@ module.exports = {
|
||||
testEnvironment: 'node',
|
||||
testMatch: ['**/*.test.ts'],
|
||||
testRunner: 'jest-circus/runner',
|
||||
testTimeout: 60000,
|
||||
transform: {
|
||||
'^.+\\.ts$': 'ts-jest'
|
||||
},
|
||||
verbose: true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,26 +28,31 @@ if (!tempDirectory) {
|
||||
tempDirectory = path.join(baseLocation, 'actions', 'temp')
|
||||
}
|
||||
|
||||
export async function getKustomize(versionSpec: string): Promise<void> {
|
||||
let toolPath = cache.find('kustomize', versionSpec)
|
||||
export async function getKustomize(targetVersion: string): Promise<void> {
|
||||
if (!semver.validRange(targetVersion))
|
||||
throw new Error(`invalid semver requested: ${targetVersion}`)
|
||||
|
||||
if (!toolPath) {
|
||||
const version = await getMaxSatisfyingVersion(versionSpec)
|
||||
toolPath = await acquireVersion(version)
|
||||
let kustomizePath = cache.find('kustomize', targetVersion)
|
||||
|
||||
if (!kustomizePath) {
|
||||
const version = await getMaxSatisfyingVersion(targetVersion)
|
||||
kustomizePath = await acquireVersion(version)
|
||||
}
|
||||
|
||||
return core.addPath(toolPath)
|
||||
return core.addPath(kustomizePath)
|
||||
}
|
||||
|
||||
interface Version {
|
||||
name: string
|
||||
resolved: string
|
||||
target: string
|
||||
url: string
|
||||
}
|
||||
|
||||
async function getMaxSatisfyingVersion(versionSpec: string): Promise<Version> {
|
||||
const versionRange = semver.validRange(versionSpec)
|
||||
const downloadUrls: Map<string, string> = new Map()
|
||||
const versions: string[] = []
|
||||
async function getMaxSatisfyingVersion(
|
||||
targetVersion: string
|
||||
): Promise<Version> {
|
||||
const version = {target: targetVersion}
|
||||
const availableVersions: Map<string, string> = new Map()
|
||||
|
||||
for await (const response of octokit.paginate.iterator(
|
||||
octokit.repos.listReleases,
|
||||
@@ -68,24 +73,26 @@ async function getMaxSatisfyingVersion(versionSpec: string): Promise<Version> {
|
||||
const version = (versionRegex.exec(release.name) || []).shift()
|
||||
|
||||
if (version != null) {
|
||||
downloadUrls.set(version, matchingAsset.browser_download_url)
|
||||
versions.push(version)
|
||||
availableVersions.set(version, matchingAsset.browser_download_url)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const versionToDownload = semver.maxSatisfying(versions, versionRange)
|
||||
const resolved = semver.maxSatisfying(
|
||||
[...availableVersions.keys()],
|
||||
version.target
|
||||
)
|
||||
|
||||
if (!versionToDownload) {
|
||||
if (!resolved) {
|
||||
throw new Error(
|
||||
`Unable to find Kustomize version '${versionSpec}' for platform '${platform}' and architecture ${arch}.`
|
||||
`Unable to find Kustomize version '${version.target}' for platform '${platform}' and architecture ${arch}.`
|
||||
)
|
||||
}
|
||||
|
||||
const downloadUrl = downloadUrls.get(versionToDownload) as string
|
||||
const url = availableVersions.get(resolved) as string
|
||||
|
||||
return {name: versionToDownload, url: downloadUrl}
|
||||
return {...version, resolved, url}
|
||||
}
|
||||
|
||||
async function acquireVersion(version: Version): Promise<string> {
|
||||
@@ -97,7 +104,7 @@ async function acquireVersion(version: Version): Promise<string> {
|
||||
toolPath = await cache.downloadTool(version.url)
|
||||
} catch (err) {
|
||||
core.debug(err)
|
||||
throw new Error(`Failed to download version ${version.name}: ${err}`)
|
||||
throw new Error(`Failed to download version ${version.target}: ${err}`)
|
||||
}
|
||||
|
||||
if (version.url.endsWith('.tar.gz')) {
|
||||
@@ -112,5 +119,5 @@ async function acquireVersion(version: Version): Promise<string> {
|
||||
break
|
||||
}
|
||||
|
||||
return await cache.cacheFile(toolPath, toolFilename, toolName, version.name)
|
||||
return await cache.cacheFile(toolPath, toolFilename, toolName, version.target)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user