Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(terraform-provider): Add secondary release repo #6513

Merged
merged 7 commits into from Jun 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -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();
});
});
});