Add prototype bootstrap script

Change-Id: Ic55bd2b024ef5b543bd441a7fbcd9a2cab120606
diff --git a/bootstrap.py b/bootstrap.py
new file mode 100755
index 0000000..78f5755
--- /dev/null
+++ b/bootstrap.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+
+import json
+import subprocess
+import tempfile
+
+FUCHSIA_SDK_CIPD = "fuchsia/sdk/core/fuchsia-bazel-rules"
+FUCHSIA_SDK_HOSTS = ["linux", "mac"]
+
+
+def run_command(command, verbose=True):
+    if verbose:
+        print(f"Running {command}")
+    command = command.split()
+    subprocess.run(command, check=True, capture_output=True)
+
+
+def init_submodules():
+    init = "git submodule init"
+    run_command(init)
+    update = "git submodule update --recursive"
+    run_command(update)
+
+
+def run_bazel_boostrap():
+    command = "scripts/bootstrap.sh"
+    run_command(command)
+
+
+def fetch_fuchsia_sdk():
+    command = "tools/bazel build @fuchsia_sdk//:fuchsia_toolchain_sdk"
+    run_command(command)
+
+
+def set_bazel_sdk_ensure_files():
+    version = {}
+    temp_dir = tempfile.mkdtemp()
+    for host in FUCHSIA_SDK_HOSTS:
+        run_command(
+            f"cipd describe {FUCHSIA_SDK_CIPD}/{host}-amd64 -version latest -json-output {temp_dir}/{host}.json"
+        )
+        with open(f"{temp_dir}/{host}.json", "r") as f:
+            data = json.load(f)
+            # there are multiple, nested tags. Find the one about jiri_snapshot and parse out the version
+            version[host] = list(
+                filter(
+                    lambda x: x["tag"].startswith("jiri_snapshot:"),
+                    data["result"]["tags"],
+                )
+            )[0]["tag"].split(":")[1]
+    # The format of the  bazel_ensure
+    with open("manifests/bazel_sdk.ensure", "w") as f:
+        f.write("$ResolvedVersions bazel_sdk.resolved\n")
+        f.write("$VerifiedPlatform linux-amd64 mac-amd64\n")
+        f.write(
+            "fuchsia/sdk/core/fuchsia-bazel-rules/${{os=linux}}-${{arch}} version:{linux}\n".format(
+                **version
+            )
+        )
+        f.write(
+            "fuchsia/sdk/core/fuchsia-bazel-rules/${{os=mac}}-amd64 version:{mac}\n".format(
+                **version
+            )
+        )
+
+
+def ensure_resolve():
+    run_command(
+        "cipd ensure-file-resolve -ensure-file /usr/local/google/home/djmurphy/Code/input/manifests/bazel_sdk.ensure"
+    )
+
+
+if __name__ == "__main__":
+    init_submodules()
+    run_bazel_boostrap()
+    set_bazel_sdk_ensure_files()
+    ensure_resolve()
+    fetch_fuchsia_sdk()
diff --git a/manifests/bazel_sdk.ensure b/manifests/bazel_sdk.ensure
index 7a7cb18..eec8659 100644
--- a/manifests/bazel_sdk.ensure
+++ b/manifests/bazel_sdk.ensure
@@ -1,4 +1,4 @@
 $ResolvedVersions bazel_sdk.resolved
 $VerifiedPlatform linux-amd64 mac-amd64
-fuchsia/sdk/core/fuchsia-bazel-rules/${os=linux}-${arch} version:14.20230825.3.1
-fuchsia/sdk/core/fuchsia-bazel-rules/${os=mac}-amd64 version:14.20230825.3.1
+fuchsia/sdk/core/fuchsia-bazel-rules/${os=linux}-${arch} version:16.20231025.3.1
+fuchsia/sdk/core/fuchsia-bazel-rules/${os=mac}-amd64 version:16.20231025.3.1
diff --git a/manifests/bazel_sdk.resolved b/manifests/bazel_sdk.resolved
index c1ae053..60380f0 100644
--- a/manifests/bazel_sdk.resolved
+++ b/manifests/bazel_sdk.resolved
@@ -2,9 +2,9 @@
 # Do not modify manually. All changes will be overwritten.
 
 fuchsia/sdk/core/fuchsia-bazel-rules/linux-amd64
-	version:14.20230825.3.1
-	-8e0YUn0dXZzKSPmEJLVtzk2lijh1zC9A1kny0WwWEsC
+	version:16.20231025.3.1
+	3NEspJjWWjGsKfqqrovCOBKWPd8ZNS_HwQ29DTJzNbwC
 
 fuchsia/sdk/core/fuchsia-bazel-rules/mac-amd64
-	version:14.20230825.3.1
-	d16iCfvEDT919buOe054wlxk0gATLK_GescQCMhrlaEC
+	version:16.20231025.3.1
+	HJj7LeVdSwI_x2ZI922YPm3ZDdaG3A2KKduQ11q8sKMC