diff --git a/lib/manager/bazel/extract.js b/lib/manager/bazel/extract.js
index ef2bed64168956a6ee7d01573128b34c62e28a61..a8a513505b92cc91e1bc9b0f4371aa378a87b774 100644
--- a/lib/manager/bazel/extract.js
+++ b/lib/manager/bazel/extract.js
@@ -139,7 +139,11 @@ function extractPackageFile(content) {
       const parsedUrl = parseUrl(url);
       dep.depName = depName;
       dep.repo = parsedUrl.repo;
-      dep.currentValue = parsedUrl.currentValue;
+      if (parsedUrl.currentValue.match(/^[a-f0-9]{40}$/i)) {
+        dep.currentDigest = parsedUrl.currentValue;
+      } else {
+        dep.currentValue = parsedUrl.currentValue;
+      }
       dep.datasource = 'github';
       dep.lookupName = dep.repo;
       dep.lookupType = 'releases';
diff --git a/lib/manager/bazel/update.js b/lib/manager/bazel/update.js
index 325012deb6df8c24a725a1d69208f78575b60d16..866b5031b71f991ee7cb01ece883e7afb242460e 100644
--- a/lib/manager/bazel/update.js
+++ b/lib/manager/bazel/update.js
@@ -22,7 +22,7 @@ async function updateDependency(fileContent, upgrade) {
           `$1"${upgrade.newDigest}",  # ${upgrade.newValue}\n`
         );
       }
-    } else if (upgrade.depType === 'http_archive') {
+    } else if (upgrade.depType === 'http_archive' && upgrade.newValue) {
       const [, shortRepo] = upgrade.repo.split('/');
       let newUrl;
       let file;
@@ -50,6 +50,23 @@ async function updateDependency(fileContent, upgrade) {
       );
       newDef = upgrade.def.replace(valuePattern, upgrade.newValue);
       newDef = newDef.replace(/(sha256\s*=\s*)"[^"]+"/, `$1"${hash}"`);
+    } else if (upgrade.depType === 'http_archive' && upgrade.newDigest) {
+      const [, shortRepo] = upgrade.repo.split('/');
+      const newUrl = `https://github.com/${upgrade.repo}/archive/${
+        upgrade.newDigest
+      }.tar.gz`;
+      const file = (await got(newUrl, { encoding: null })).body;
+      const hash = crypto
+        .createHash('sha256')
+        .update(file)
+        .digest('hex');
+      const currentPattern = /(urls\s*=\s*\[")[^"]+("])/;
+      newDef = upgrade.def.replace(currentPattern, `$1${newUrl}$2`);
+      newDef = newDef.replace(/(sha256\s*=\s*)"[^"]+"/, `$1"${hash}"`);
+      newDef = newDef.replace(
+        new RegExp(`(strip_prefix\\s*=\\s*)"[^"]*"`),
+        `$1"${shortRepo}-${upgrade.newDigest}"`
+      );
     }
     logger.debug({ oldDef: upgrade.def, newDef });
     const existingDef = new RegExp(
diff --git a/test/manager/bazel/__snapshots__/extract.spec.js.snap b/test/manager/bazel/__snapshots__/extract.spec.js.snap
index da5992e2612b5948f4257583b7c03ce2ca420311..7435d3144d4eb972205dd312e3b95ec206ab4025 100644
--- a/test/manager/bazel/__snapshots__/extract.spec.js.snap
+++ b/test/manager/bazel/__snapshots__/extract.spec.js.snap
@@ -73,7 +73,7 @@ Array [
     "remote": "https://github.com/bazelbuild/rules_typescript.git",
   },
   Object {
-    "currentValue": "446923c3756ceeaa75888f52fcbdd48bb314fbf8",
+    "currentDigest": "446923c3756ceeaa75888f52fcbdd48bb314fbf8",
     "datasource": "github",
     "def": "http_archive(
     name=\\"distroless\\",
@@ -152,7 +152,7 @@ Array [
     "repo": "bazelbuild/bazel-skylib",
   },
   Object {
-    "currentValue": "446923c3756ceeaa75888f52fcbdd48bb314fbf8",
+    "currentDigest": "446923c3756ceeaa75888f52fcbdd48bb314fbf8",
     "datasource": "github",
     "def": "http_archive(
     name=\\"distroless\\",
diff --git a/test/manager/bazel/update.spec.js b/test/manager/bazel/update.spec.js
index 708b99e936a87f4c3b6bc2f036f3b0031170fd15..90a7a7e66064524139643b14e51c4ec653a5d016 100644
--- a/test/manager/bazel/update.spec.js
+++ b/test/manager/bazel/update.spec.js
@@ -68,6 +68,18 @@ describe('manager/bazel/update', () => {
       expect(res).not.toEqual(content);
       expect(res.indexOf('0.8.1')).not.toBe(-1);
     });
+    it('updates commit-based http archive', async () => {
+      const upgrade = {
+        depName: 'distroless',
+        depType: 'http_archive',
+        repo: 'GoogleContainerTools/distroless',
+        def: `http_archive(\n  name="distroless",\n  sha256="f7a6ecfb8174a1dd4713ea3b21621072996ada7e8f1a69e6ae7581be137c6dd6",\n  strip_prefix="distroless-446923c3756ceeaa75888f52fcbdd48bb314fbf8",\n  urls=["https://github.com/GoogleContainerTools/distroless/archive/446923c3756ceeaa75888f52fcbdd48bb314fbf8.tar.gz"]\n)`,
+        newDigest: '033387ac8853e6cc1cd47df6c346bc53cbc490d8',
+      };
+      got.mockReturnValueOnce({ body: '' });
+      const res = await bazelfile.updateDependency(content, upgrade);
+      expect(res).not.toEqual(content);
+    });
     it('updates second time http archive', async () => {
       const upgrade = {
         depName: 'io_bazel_rules_go',