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