From 461cbc75518946fe6c7612122f9ccb2e8202e583 Mon Sep 17 00:00:00 2001
From: Jason Bedard <jason+github@jbedard.ca>
Date: Sun, 19 Jun 2022 02:33:03 -0400
Subject: [PATCH] feat(bazelisk): add support for bazelisk bazelversion files
 (#16114)

---
 lib/modules/manager/api.ts                   |  2 +
 lib/modules/manager/bazelisk/extract.spec.ts | 53 ++++++++++++++++++++
 lib/modules/manager/bazelisk/extract.ts      | 12 +++++
 lib/modules/manager/bazelisk/index.ts        | 10 ++++
 lib/modules/manager/bazelisk/readme.md       |  1 +
 5 files changed, 78 insertions(+)
 create mode 100644 lib/modules/manager/bazelisk/extract.spec.ts
 create mode 100644 lib/modules/manager/bazelisk/extract.ts
 create mode 100644 lib/modules/manager/bazelisk/index.ts
 create mode 100644 lib/modules/manager/bazelisk/readme.md

diff --git a/lib/modules/manager/api.ts b/lib/modules/manager/api.ts
index ebe04c9b60..59f8d9c223 100644
--- a/lib/modules/manager/api.ts
+++ b/lib/modules/manager/api.ts
@@ -5,6 +5,7 @@ import * as azurePipelines from './azure-pipelines';
 import * as batect from './batect';
 import * as batectWrapper from './batect-wrapper';
 import * as bazel from './bazel';
+import * as bazelisk from './bazelisk';
 import * as bitbucketPipelines from './bitbucket-pipelines';
 import * as buildkite from './buildkite';
 import * as bundler from './bundler';
@@ -79,6 +80,7 @@ api.set('azure-pipelines', azurePipelines);
 api.set('batect', batect);
 api.set('batect-wrapper', batectWrapper);
 api.set('bazel', bazel);
+api.set('bazelisk', bazelisk);
 api.set('bitbucket-pipelines', bitbucketPipelines);
 api.set('buildkite', buildkite);
 api.set('bundler', bundler);
diff --git a/lib/modules/manager/bazelisk/extract.spec.ts b/lib/modules/manager/bazelisk/extract.spec.ts
new file mode 100644
index 0000000000..dde5e2aa84
--- /dev/null
+++ b/lib/modules/manager/bazelisk/extract.spec.ts
@@ -0,0 +1,53 @@
+import { extractPackageFile } from '.';
+
+describe('modules/manager/bazelisk/extract', () => {
+  describe('extractPackageFile()', () => {
+    it('returns a result', () => {
+      const res = extractPackageFile('5.2.0\n');
+      expect(res.deps).toEqual([
+        {
+          currentValue: '5.2.0',
+          datasource: 'github-releases',
+          depName: 'bazel',
+          packageName: 'bazelbuild/bazel',
+        },
+      ]);
+    });
+
+    it('supports ranges', () => {
+      const res = extractPackageFile('5.2\n');
+      expect(res.deps).toEqual([
+        {
+          currentValue: '5.2',
+          datasource: 'github-releases',
+          depName: 'bazel',
+          packageName: 'bazelbuild/bazel',
+        },
+      ]);
+    });
+
+    it('skips non ranges', () => {
+      const res = extractPackageFile('latestn');
+      expect(res.deps).toEqual([
+        {
+          currentValue: 'latestn',
+          datasource: 'github-releases',
+          depName: 'bazel',
+          packageName: 'bazelbuild/bazel',
+        },
+      ]);
+    });
+
+    it('ignores comments past the first line', () => {
+      const res = extractPackageFile('5.2.0\n# comment1\n\n# comment2');
+      expect(res.deps).toEqual([
+        {
+          currentValue: '5.2.0',
+          datasource: 'github-releases',
+          depName: 'bazel',
+          packageName: 'bazelbuild/bazel',
+        },
+      ]);
+    });
+  });
+});
diff --git a/lib/modules/manager/bazelisk/extract.ts b/lib/modules/manager/bazelisk/extract.ts
new file mode 100644
index 0000000000..a4376a5769
--- /dev/null
+++ b/lib/modules/manager/bazelisk/extract.ts
@@ -0,0 +1,12 @@
+import { GithubReleasesDatasource } from '../../datasource/github-releases';
+import type { PackageDependency, PackageFile } from '../types';
+
+export function extractPackageFile(content: string): PackageFile {
+  const dep: PackageDependency = {
+    depName: 'bazel',
+    currentValue: content.split('\n', 2)[0].trim(),
+    datasource: GithubReleasesDatasource.id,
+    packageName: 'bazelbuild/bazel',
+  };
+  return { deps: [dep] };
+}
diff --git a/lib/modules/manager/bazelisk/index.ts b/lib/modules/manager/bazelisk/index.ts
new file mode 100644
index 0000000000..345989e1b4
--- /dev/null
+++ b/lib/modules/manager/bazelisk/index.ts
@@ -0,0 +1,10 @@
+import { GithubReleasesDatasource } from '../../datasource/github-releases';
+
+export { extractPackageFile } from './extract';
+
+export const defaultConfig = {
+  fileMatch: ['(^|\\/)\\.bazelversion$'],
+  pinDigests: false,
+};
+
+export const supportedDatasources = [GithubReleasesDatasource.id];
diff --git a/lib/modules/manager/bazelisk/readme.md b/lib/modules/manager/bazelisk/readme.md
new file mode 100644
index 0000000000..cb720c0992
--- /dev/null
+++ b/lib/modules/manager/bazelisk/readme.md
@@ -0,0 +1 @@
+Simply keeps the `.bazelversion` file updated.
-- 
GitLab