Skip to content

Commit

Permalink
feat(terraform-provider): Add secondary release repo (#6513)
Browse files Browse the repository at this point in the history
Co-authored-by: Jamie Magee <jamie.magee@gmail.com>
  • Loading branch information
secustor and JamieMagee committed Jun 22, 2020
1 parent 97665c4 commit 1a066c6
Show file tree
Hide file tree
Showing 4 changed files with 318 additions and 53 deletions.
@@ -0,0 +1,103 @@
{
"terraform-provider-google-beta": {
"name": "terraform-provider-google-beta",
"versions": {
"1.19.0": {
"name": "terraform-provider-google-beta",
"version": "1.19.0",
"shasums": "terraform-provider-google-beta_1.19.0_SHA256SUMS",
"shasums_signature": "terraform-provider-google-beta_1.19.0_SHA256SUMS.sig",
"builds": [
{
"name": "terraform-provider-google-beta",
"version": "1.19.0",
"os": "darwin",
"arch": "amd64",
"filename": "terraform-provider-google-beta_1.19.0_darwin_amd64.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.19.0/terraform-provider-google-beta_1.19.0_darwin_amd64.zip"
},
{
"name": "terraform-provider-google-beta",
"version": "1.19.0",
"os": "freebsd",
"arch": "386",
"filename": "terraform-provider-google-beta_1.19.0_freebsd_386.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.19.0/terraform-provider-google-beta_1.19.0_freebsd_386.zip"
},
{
"name": "terraform-provider-google-beta",
"version": "1.19.0",
"os": "freebsd",
"arch": "amd64",
"filename": "terraform-provider-google-beta_1.19.0_freebsd_amd64.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.19.0/terraform-provider-google-beta_1.19.0_freebsd_amd64.zip"
}
]
},
"1.20.0": {
"name": "terraform-provider-google-beta",
"version": "1.20.0",
"shasums": "terraform-provider-google-beta_1.20.0_SHA256SUMS",
"shasums_signature": "terraform-provider-google-beta_1.20.0_SHA256SUMS.sig",
"builds": [
{
"name": "terraform-provider-google-beta",
"version": "1.20.0",
"os": "openbsd",
"arch": "386",
"filename": "terraform-provider-google-beta_1.20.0_openbsd_386.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_openbsd_386.zip"
},
{
"name": "terraform-provider-google-beta",
"version": "1.20.0",
"os": "openbsd",
"arch": "amd64",
"filename": "terraform-provider-google-beta_1.20.0_openbsd_amd64.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_openbsd_amd64.zip"
},
{
"name": "terraform-provider-google-beta",
"version": "1.20.0",
"os": "solaris",
"arch": "amd64",
"filename": "terraform-provider-google-beta_1.20.0_solaris_amd64.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_solaris_amd64.zip"
}
]
},
"2.0.0": {
"name": "terraform-provider-google-beta",
"version": "2.0.0",
"shasums": "terraform-provider-google-beta_2.0.0_SHA256SUMS",
"shasums_signature": "terraform-provider-google-beta_2.0.0_SHA256SUMS.sig",
"builds": [
{
"name": "terraform-provider-google-beta",
"version": "2.0.0",
"os": "darwin",
"arch": "amd64",
"filename": "terraform-provider-google-beta_2.0.0_darwin_amd64.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/2.0.0/terraform-provider-google-beta_2.0.0_darwin_amd64.zip"
},
{
"name": "terraform-provider-google-beta",
"version": "2.0.0",
"os": "freebsd",
"arch": "386",
"filename": "terraform-provider-google-beta_2.0.0_freebsd_386.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/2.0.0/terraform-provider-google-beta_2.0.0_freebsd_386.zip"
},
{
"name": "terraform-provider-google-beta",
"version": "2.0.0",
"os": "freebsd",
"arch": "amd64",
"filename": "terraform-provider-google-beta_2.0.0_freebsd_amd64.zip",
"url": "https://releases.hashicorp.com/terraform-provider-google-beta/2.0.0/terraform-provider-google-beta_2.0.0_freebsd_amd64.zip"
}
]
}
}
}
}
75 changes: 75 additions & 0 deletions lib/datasource/terraform-provider/__snapshots__/index.spec.ts.snap
@@ -1,5 +1,48 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`datasource/terraform getReleases processes data with alternative backend 1`] = `
Object {
"name": "hashicorp/google-beta",
"releases": Array [
Object {
"version": "1.19.0",
},
Object {
"version": "1.20.0",
},
Object {
"version": "2.0.0",
},
],
"versions": Object {},
}
`;

exports[`datasource/terraform getReleases processes data with alternative backend 2`] = `
Array [
Object {
"headers": Object {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"host": "registry.terraform.io",
"user-agent": "https://github.com/renovatebot/renovate",
},
"method": "GET",
"url": "https://registry.terraform.io/v1/providers/hashicorp/google-beta",
},
Object {
"headers": Object {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"host": "releases.hashicorp.com",
"user-agent": "https://github.com/renovatebot/renovate",
},
"method": "GET",
"url": "https://releases.hashicorp.com/index.json",
},
]
`;

exports[`datasource/terraform getReleases processes real data 1`] = `
Object {
"homepage": "https://registry.terraform.io/providers/hashicorp/azurerm",
Expand Down Expand Up @@ -233,6 +276,16 @@ Array [
"method": "GET",
"url": "https://registry.terraform.io/v1/providers/hashicorp/azurerm",
},
Object {
"headers": Object {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"host": "releases.hashicorp.com",
"user-agent": "https://github.com/renovatebot/renovate",
},
"method": "GET",
"url": "https://releases.hashicorp.com/index.json",
},
]
`;

Expand All @@ -248,6 +301,16 @@ Array [
"method": "GET",
"url": "https://registry.terraform.io/v1/providers/hashicorp/azurerm",
},
Object {
"headers": Object {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"host": "releases.hashicorp.com",
"user-agent": "https://github.com/renovatebot/renovate",
},
"method": "GET",
"url": "https://releases.hashicorp.com/index.json",
},
]
`;

Expand All @@ -263,5 +326,17 @@ Array [
"method": "GET",
"url": "https://registry.terraform.io/v1/providers/hashicorp/azurerm",
},
Object {
"headers": Object {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"host": "releases.hashicorp.com",
"user-agent": "https://github.com/renovatebot/renovate",
},
"method": "GET",
"url": "https://releases.hashicorp.com/index.json",
},
]
`;

exports[`datasource/terraform getReleases simulate failing secondary release source 1`] = `null`;
58 changes: 52 additions & 6 deletions lib/datasource/terraform-provider/index.spec.ts
@@ -1,13 +1,17 @@
import fs from 'fs';
import { getPkgReleases } from '..';
import * as httpMock from '../../../test/httpMock';
import { id as datasource } from '.';
import { id as datasource, defaultRegistryUrls } from '.';

const consulData: any = fs.readFileSync(
'lib/datasource/terraform-provider/__fixtures__/azurerm-provider.json'
);
const hashicorpReleases: any = fs.readFileSync(
'lib/datasource/terraform-provider/__fixtures__/releaseBackendIndex.json'
);

const baseUrl = 'https://registry.terraform.io/';
const primaryUrl = defaultRegistryUrls[0];
const secondaryUrl = defaultRegistryUrls[1];

describe('datasource/terraform', () => {
describe('getReleases', () => {
Expand All @@ -22,9 +26,10 @@ describe('datasource/terraform', () => {

it('returns null for empty result', async () => {
httpMock
.scope(baseUrl)
.scope(primaryUrl)
.get('/v1/providers/hashicorp/azurerm')
.reply(200, {});
httpMock.scope(secondaryUrl).get('/index.json').reply(200, {});
expect(
await getPkgReleases({
datasource,
Expand All @@ -34,7 +39,11 @@ describe('datasource/terraform', () => {
expect(httpMock.getTrace()).toMatchSnapshot();
});
it('returns null for 404', async () => {
httpMock.scope(baseUrl).get('/v1/providers/hashicorp/azurerm').reply(404);
httpMock
.scope(primaryUrl)
.get('/v1/providers/hashicorp/azurerm')
.reply(404);
httpMock.scope(secondaryUrl).get('/index.json').reply(404);
expect(
await getPkgReleases({
datasource,
Expand All @@ -45,9 +54,10 @@ describe('datasource/terraform', () => {
});
it('returns null for unknown error', async () => {
httpMock
.scope(baseUrl)
.scope(primaryUrl)
.get('/v1/providers/hashicorp/azurerm')
.replyWithError('');
httpMock.scope(secondaryUrl).get('/index.json').replyWithError('');
expect(
await getPkgReleases({
datasource,
Expand All @@ -58,7 +68,7 @@ describe('datasource/terraform', () => {
});
it('processes real data', async () => {
httpMock
.scope(baseUrl)
.scope(primaryUrl)
.get('/v1/providers/hashicorp/azurerm')
.reply(200, JSON.parse(consulData));
const res = await getPkgReleases({
Expand All @@ -69,5 +79,41 @@ describe('datasource/terraform', () => {
expect(res).not.toBeNull();
expect(httpMock.getTrace()).toMatchSnapshot();
});
it('processes data with alternative backend', async () => {
httpMock
.scope(primaryUrl)
.get('/v1/providers/hashicorp/google-beta')
.reply(404, {
errors: ['Not Found'],
});
httpMock
.scope(secondaryUrl)
.get('/index.json')
.reply(200, JSON.parse(hashicorpReleases));

const res = await getPkgReleases({
datasource,
depName: 'google-beta',
});
expect(res).toMatchSnapshot();
expect(res).not.toBeNull();
expect(httpMock.getTrace()).toMatchSnapshot();
});
it('simulate failing secondary release source', async () => {
httpMock
.scope(primaryUrl)
.get('/v1/providers/hashicorp/google-beta')
.reply(404, {
errors: ['Not Found'],
});
httpMock.scope(secondaryUrl).get('/index.json').reply(404);

const res = await getPkgReleases({
datasource,
depName: 'datadog',
});
expect(res).toMatchSnapshot();
expect(res).toBeNull();
});
});
});

0 comments on commit 1a066c6

Please sign in to comment.