From 28e90ef634043b69253e924eb888f29bf8252704 Mon Sep 17 00:00:00 2001
From: Sebastian Poxhofer <secustor@users.noreply.github.com>
Date: Wed, 2 Dec 2020 16:02:49 +0100
Subject: [PATCH] feat(terraform-version): implement tfenv version file updates
 (#7849)

---
 .../__snapshots__/extract.spec.ts.snap        | 21 +++++++++++++++++++
 lib/manager/terraform-version/extract.spec.ts | 14 +++++++++++++
 lib/manager/terraform-version/extract.ts      | 13 ++++++++++++
 lib/manager/terraform-version/index.ts        |  9 ++++++++
 lib/manager/terraform-version/readme.md       |  1 +
 5 files changed, 58 insertions(+)
 create mode 100644 lib/manager/terraform-version/__snapshots__/extract.spec.ts.snap
 create mode 100644 lib/manager/terraform-version/extract.spec.ts
 create mode 100644 lib/manager/terraform-version/extract.ts
 create mode 100644 lib/manager/terraform-version/index.ts
 create mode 100644 lib/manager/terraform-version/readme.md

diff --git a/lib/manager/terraform-version/__snapshots__/extract.spec.ts.snap b/lib/manager/terraform-version/__snapshots__/extract.spec.ts.snap
new file mode 100644
index 0000000000..dabebdbc5b
--- /dev/null
+++ b/lib/manager/terraform-version/__snapshots__/extract.spec.ts.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`lib/manager/terraform-version/extract extractPackageFile() returns a result 1`] = `
+Array [
+  Object {
+    "currentValue": "12.0.0",
+    "datasource": "github-releases",
+    "depName": "hashicorp/terraform",
+  },
+]
+`;
+
+exports[`lib/manager/terraform-version/extract extractPackageFile() skips non ranges 1`] = `
+Array [
+  Object {
+    "currentValue": "latest",
+    "datasource": "github-releases",
+    "depName": "hashicorp/terraform",
+  },
+]
+`;
diff --git a/lib/manager/terraform-version/extract.spec.ts b/lib/manager/terraform-version/extract.spec.ts
new file mode 100644
index 0000000000..31200c8469
--- /dev/null
+++ b/lib/manager/terraform-version/extract.spec.ts
@@ -0,0 +1,14 @@
+import { extractPackageFile } from './extract';
+
+describe('lib/manager/terraform-version/extract', () => {
+  describe('extractPackageFile()', () => {
+    it('returns a result', () => {
+      const res = extractPackageFile('12.0.0\n');
+      expect(res.deps).toMatchSnapshot();
+    });
+    it('skips non ranges', () => {
+      const res = extractPackageFile('latest');
+      expect(res.deps).toMatchSnapshot();
+    });
+  });
+});
diff --git a/lib/manager/terraform-version/extract.ts b/lib/manager/terraform-version/extract.ts
new file mode 100644
index 0000000000..1d466f582b
--- /dev/null
+++ b/lib/manager/terraform-version/extract.ts
@@ -0,0 +1,13 @@
+import * as datasourceGitHubRelease from '../../datasource/github-releases';
+import { logger } from '../../logger';
+import { PackageDependency, PackageFile } from '../common';
+
+export function extractPackageFile(content: string): PackageFile {
+  logger.trace('terraform-version.extractPackageFile()');
+  const dep: PackageDependency = {
+    depName: 'hashicorp/terraform',
+    currentValue: content.trim(),
+    datasource: datasourceGitHubRelease.id,
+  };
+  return { deps: [dep] };
+}
diff --git a/lib/manager/terraform-version/index.ts b/lib/manager/terraform-version/index.ts
new file mode 100644
index 0000000000..9a55bdbd5c
--- /dev/null
+++ b/lib/manager/terraform-version/index.ts
@@ -0,0 +1,9 @@
+import * as hashicorpVersioning from '../../versioning/hashicorp';
+
+export { extractPackageFile } from './extract';
+
+export const defaultConfig = {
+  fileMatch: ['(^|/)\\.terraform-version$'],
+  versioning: hashicorpVersioning.id,
+  extractVersion: '^v(?<version>.*)$',
+};
diff --git a/lib/manager/terraform-version/readme.md b/lib/manager/terraform-version/readme.md
new file mode 100644
index 0000000000..f803cd62aa
--- /dev/null
+++ b/lib/manager/terraform-version/readme.md
@@ -0,0 +1 @@
+This will maintain `.terraform-version` files. Available versions will be determined from the official Terraform downloads page.
-- 
GitLab