mirror of
https://github.com/hashicorp/setup-terraform.git
synced 2025-12-15 16:12:35 +00:00
Allow to specify range specification instead of fixed version (#38)
That allows to install for example the latest bug-fix version of terraform 1.12.* even if 1.13 is already installed. Co-authored-by: Matthew Sanabria <24284972+sudomateo@users.noreply.github.com>
This commit is contained in:
parent
e255dfd077
commit
af8505ef0a
5 changed files with 348 additions and 51 deletions
|
|
@ -68,11 +68,11 @@ describe('Setup Terraform', () => {
|
|||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
await setup();
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
|
|
@ -110,7 +110,8 @@ describe('Setup Terraform', () => {
|
|||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
await setup();
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
|
|
@ -152,7 +153,8 @@ describe('Setup Terraform', () => {
|
|||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
await setup();
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.10.0');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
|
|
@ -163,6 +165,259 @@ describe('Setup Terraform', () => {
|
|||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('gets latest version matching specification adds token and hostname on linux, amd64', async () => {
|
||||
const version = '<0.10.0';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
const credentialsToken = 'asdfjkl';
|
||||
|
||||
core.getInput = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce(version)
|
||||
.mockReturnValueOnce(credentialsHostname)
|
||||
.mockReturnValueOnce(credentialsToken);
|
||||
|
||||
tc.downloadTool = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file.zip');
|
||||
|
||||
tc.extractZip = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file');
|
||||
|
||||
os.platform = jest
|
||||
.fn()
|
||||
.mockReturnValue('linux');
|
||||
|
||||
os.arch = jest
|
||||
.fn()
|
||||
.mockReturnValue('amd64');
|
||||
|
||||
nock('https://releases.hashicorp.com')
|
||||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('gets latest version matching tilde range patch', async () => {
|
||||
const version = '~0.1.0';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
const credentialsToken = 'asdfjkl';
|
||||
|
||||
core.getInput = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce(version)
|
||||
.mockReturnValueOnce(credentialsHostname)
|
||||
.mockReturnValueOnce(credentialsToken);
|
||||
|
||||
tc.downloadTool = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file.zip');
|
||||
|
||||
tc.extractZip = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file');
|
||||
|
||||
os.platform = jest
|
||||
.fn()
|
||||
.mockReturnValue('linux');
|
||||
|
||||
os.arch = jest
|
||||
.fn()
|
||||
.mockReturnValue('amd64');
|
||||
|
||||
nock('https://releases.hashicorp.com')
|
||||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('gets latest version matching tilde range minor', async () => {
|
||||
const version = '~0.1';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
const credentialsToken = 'asdfjkl';
|
||||
|
||||
core.getInput = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce(version)
|
||||
.mockReturnValueOnce(credentialsHostname)
|
||||
.mockReturnValueOnce(credentialsToken);
|
||||
|
||||
tc.downloadTool = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file.zip');
|
||||
|
||||
tc.extractZip = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file');
|
||||
|
||||
os.platform = jest
|
||||
.fn()
|
||||
.mockReturnValue('linux');
|
||||
|
||||
os.arch = jest
|
||||
.fn()
|
||||
.mockReturnValue('amd64');
|
||||
|
||||
nock('https://releases.hashicorp.com')
|
||||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('gets latest version matching tilde range minor', async () => {
|
||||
const version = '~0';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
const credentialsToken = 'asdfjkl';
|
||||
|
||||
core.getInput = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce(version)
|
||||
.mockReturnValueOnce(credentialsHostname)
|
||||
.mockReturnValueOnce(credentialsToken);
|
||||
|
||||
tc.downloadTool = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file.zip');
|
||||
|
||||
tc.extractZip = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file');
|
||||
|
||||
os.platform = jest
|
||||
.fn()
|
||||
.mockReturnValue('linux');
|
||||
|
||||
os.arch = jest
|
||||
.fn()
|
||||
.mockReturnValue('amd64');
|
||||
|
||||
nock('https://releases.hashicorp.com')
|
||||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.10.0');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('gets latest version matching .X range ', async () => {
|
||||
const version = '0.1.x';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
const credentialsToken = 'asdfjkl';
|
||||
|
||||
core.getInput = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce(version)
|
||||
.mockReturnValueOnce(credentialsHostname)
|
||||
.mockReturnValueOnce(credentialsToken);
|
||||
|
||||
tc.downloadTool = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file.zip');
|
||||
|
||||
tc.extractZip = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file');
|
||||
|
||||
os.platform = jest
|
||||
.fn()
|
||||
.mockReturnValue('linux');
|
||||
|
||||
os.arch = jest
|
||||
.fn()
|
||||
.mockReturnValue('amd64');
|
||||
|
||||
nock('https://releases.hashicorp.com')
|
||||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('gets latest version matching - range ', async () => {
|
||||
const version = '0.1.0 - 0.1.1';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
const credentialsToken = 'asdfjkl';
|
||||
|
||||
core.getInput = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce(version)
|
||||
.mockReturnValueOnce(credentialsHostname)
|
||||
.mockReturnValueOnce(credentialsToken);
|
||||
|
||||
tc.downloadTool = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file.zip');
|
||||
|
||||
tc.extractZip = jest
|
||||
.fn()
|
||||
.mockReturnValueOnce('file');
|
||||
|
||||
os.platform = jest
|
||||
.fn()
|
||||
.mockReturnValue('linux');
|
||||
|
||||
os.arch = jest
|
||||
.fn()
|
||||
.mockReturnValue('amd64');
|
||||
|
||||
nock('https://releases.hashicorp.com')
|
||||
.get('/terraform/index.json')
|
||||
.reply(200, json);
|
||||
|
||||
const versionObj = await setup();
|
||||
expect(versionObj.version).toEqual('0.1.1');
|
||||
|
||||
// downloaded CLI has been added to path
|
||||
expect(core.addPath).toHaveBeenCalled();
|
||||
// expect credentials are in ${HOME}.terraformrc
|
||||
const creds = await fs.readFile(`${process.env.HOME}/.terraformrc`, { encoding: 'utf8' });
|
||||
expect(creds.indexOf(credentialsHostname)).toBeGreaterThan(-1);
|
||||
expect(creds.indexOf(credentialsToken)).toBeGreaterThan(-1);
|
||||
});
|
||||
|
||||
test('fails when metadata cannot be downloaded', async () => {
|
||||
const version = 'latest';
|
||||
const credentialsHostname = 'app.terraform.io';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue