From 66c143c6ebb857cf7116161b318087cadea30a3f Mon Sep 17 00:00:00 2001
From: Will Maier <189851+whilp@users.noreply.github.com>
Date: Fri, 24 Jul 2020 00:28:40 -0700
Subject: [PATCH] feat(bazel): support http_file (#6844)

---
 docs/usage/bazel.md                              |  4 ++--
 lib/manager/bazel/__fixtures__/WORKSPACE1        |  7 +++++++
 .../bazel/__snapshots__/extract.spec.ts.snap     | 16 ++++++++++++++++
 .../bazel/__snapshots__/update.spec.ts.snap      |  7 +++++++
 lib/manager/bazel/extract.ts                     |  3 ++-
 lib/manager/bazel/update.ts                      | 10 ++++++++--
 6 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/docs/usage/bazel.md b/docs/usage/bazel.md
index c023c33a80..7dca329c74 100644
--- a/docs/usage/bazel.md
+++ b/docs/usage/bazel.md
@@ -34,9 +34,9 @@ git_repository(
 
 New versions will be detected using the list of **tags** for that repository on GitHub.
 
-## http_archive
+## http_archive and http_file
 
-Renovate will update any `http_archive` declaration that contains the following:
+Renovate will update any `http_archive` or `http_file` declaration that contains the following:
 
 1.  name
 2.  url matching `https://github.com/<owner>/<repo>/releases/download/<semver>/<repo>.tar.gz`
diff --git a/lib/manager/bazel/__fixtures__/WORKSPACE1 b/lib/manager/bazel/__fixtures__/WORKSPACE1
index 3bb4aa5755..11078c7cc6 100644
--- a/lib/manager/bazel/__fixtures__/WORKSPACE1
+++ b/lib/manager/bazel/__fixtures__/WORKSPACE1
@@ -118,3 +118,10 @@ container_pull(
     repository = "distroless/python3-debian10",
     tag = "latest",
 )
+
+http_file(
+    name="distroless",
+    sha256="f7a6ecfb8174a1dd4713ea3b21621072996ada7e8f1a69e6ae7581be137c6dd6",
+    strip_prefix="distroless-446923c3756ceeaa75888f52fcbdd48bb314fbf8",
+    urls=["https://github.com/GoogleContainerTools/distroless/archive/446923c3756ceeaa75888f52fcbdd48bb314fbf8.tar.gz"]
+)
diff --git a/lib/manager/bazel/__snapshots__/extract.spec.ts.snap b/lib/manager/bazel/__snapshots__/extract.spec.ts.snap
index 3cb557bdd2..900851a2bd 100644
--- a/lib/manager/bazel/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/bazel/__snapshots__/extract.spec.ts.snap
@@ -169,6 +169,22 @@ Array [
     sha256=\\"f7a6ecfb8174a1dd4713ea3b21621072996ada7e8f1a69e6ae7581be137c6dd6\\",
     strip_prefix=\\"distroless-446923c3756ceeaa75888f52fcbdd48bb314fbf8\\",
     urls=[\\"https://github.com/GoogleContainerTools/distroless/archive/446923c3756ceeaa75888f52fcbdd48bb314fbf8.tar.gz\\"]
+)",
+    },
+    "repo": "GoogleContainerTools/distroless",
+  },
+  Object {
+    "currentDigest": "446923c3756ceeaa75888f52fcbdd48bb314fbf8",
+    "datasource": "github-releases",
+    "depName": "distroless",
+    "depType": "http_file",
+    "lookupName": "GoogleContainerTools/distroless",
+    "managerData": Object {
+      "def": "http_file(
+    name=\\"distroless\\",
+    sha256=\\"f7a6ecfb8174a1dd4713ea3b21621072996ada7e8f1a69e6ae7581be137c6dd6\\",
+    strip_prefix=\\"distroless-446923c3756ceeaa75888f52fcbdd48bb314fbf8\\",
+    urls=[\\"https://github.com/GoogleContainerTools/distroless/archive/446923c3756ceeaa75888f52fcbdd48bb314fbf8.tar.gz\\"]
 )",
     },
     "repo": "GoogleContainerTools/distroless",
diff --git a/lib/manager/bazel/__snapshots__/update.spec.ts.snap b/lib/manager/bazel/__snapshots__/update.spec.ts.snap
index a676661130..c608144193 100644
--- a/lib/manager/bazel/__snapshots__/update.spec.ts.snap
+++ b/lib/manager/bazel/__snapshots__/update.spec.ts.snap
@@ -121,6 +121,13 @@ container_pull(
     repository = \\"distroless/python3-debian10\\",
     tag = \\"latest\\",
 )
+
+http_file(
+    name=\\"distroless\\",
+    sha256=\\"f7a6ecfb8174a1dd4713ea3b21621072996ada7e8f1a69e6ae7581be137c6dd6\\",
+    strip_prefix=\\"distroless-446923c3756ceeaa75888f52fcbdd48bb314fbf8\\",
+    urls=[\\"https://github.com/GoogleContainerTools/distroless/archive/446923c3756ceeaa75888f52fcbdd48bb314fbf8.tar.gz\\"]
+)
 "
 `;
 
diff --git a/lib/manager/bazel/extract.ts b/lib/manager/bazel/extract.ts
index 49889d3c31..ba8cedc9fb 100644
--- a/lib/manager/bazel/extract.ts
+++ b/lib/manager/bazel/extract.ts
@@ -79,6 +79,7 @@ function parseContent(content: string): string[] {
   return [
     'container_pull',
     'http_archive',
+    'http_file',
     'go_repository',
     'git_repository',
   ].reduce(
@@ -215,7 +216,7 @@ export function extractPackageFile(content: string): PackageFile | null {
       }
       deps.push(dep);
     } else if (
-      depType === 'http_archive' &&
+      (depType === 'http_archive' || depType === 'http_file') &&
       depName &&
       parseUrl(url) &&
       sha256
diff --git a/lib/manager/bazel/update.ts b/lib/manager/bazel/update.ts
index 8d58e1b1db..102c90429e 100644
--- a/lib/manager/bazel/update.ts
+++ b/lib/manager/bazel/update.ts
@@ -113,7 +113,10 @@ export async function updateDependency({
           `$1"${upgrade.newDigest}",  # ${upgrade.newValue}\n`
         );
       }
-    } else if (upgrade.depType === 'http_archive' && upgrade.newValue) {
+    } else if (
+      (upgrade.depType === 'http_archive' || upgrade.depType === 'http_file') &&
+      upgrade.newValue
+    ) {
       newDef = updateWithNewVersion(
         upgrade.managerData.def,
         upgrade.currentValue,
@@ -141,7 +144,10 @@ export async function updateDependency({
       }
       logger.debug({ hash }, 'Calculated hash');
       newDef = setNewHash(newDef, hash);
-    } else if (upgrade.depType === 'http_archive' && upgrade.newDigest) {
+    } else if (
+      (upgrade.depType === 'http_archive' || upgrade.depType === 'http_file') &&
+      upgrade.newDigest
+    ) {
       const [, shortRepo] = upgrade.repo.split('/');
       const url = `https://github.com/${upgrade.repo}/archive/${upgrade.newDigest}.tar.gz`;
       const hash = await getHashFromUrl(url);
-- 
GitLab