diff options
Diffstat (limited to 'tools/install.py')
-rwxr-xr-x | tools/install.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tools/install.py b/tools/install.py new file mode 100755 index 000000000..c01439a61 --- /dev/null +++ b/tools/install.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# Copyright 2018 the Deno authors. All rights reserved. MIT license. +from __future__ import print_function +import os +import json +import sys +import tempfile +import shutil +import gzip +from zipfile import ZipFile +import re +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +releases_url_html = "https://github.com/denoland/deno/releases/latest" +install_dir = os.path.join(tempfile.gettempdir(), "deno_install") +home = os.path.expanduser("~") + +def get_latest_url(): + res = urlopen(releases_url_html) + html = res.read().decode('utf-8') + urls = re.findall(r'href=[\'"]?([^\'" >]+)', html) + + filename = { + "darwin": "deno_osx_x64.gz", + # python3 sys.platform returns linux ( python2 returns linux2 ) + "linux": "deno_linux_x64.gz", + "linux2": "deno_linux_x64.gz", + "win32": "deno_win_x64.zip", + "cygwin": "deno_win_x64.zip" + }[sys.platform] + + matching = [u for u in urls if filename in u] + + if len(matching) != 1: + print("Bad download url") + print("urls", urls) + print("matching", matching) + sys.exit(1) + + return "https://github.com" + matching[0] + + +def main(): + latest_url = get_latest_url() + latest_fn = dlfile(latest_url) + + bin_dir = deno_bin_dir() + exe_fn = os.path.join(bin_dir, "deno") + + if "zip" in latest_fn: + with ZipFile(latest_fn, 'r') as z: + with open(exe_fn, 'wb+') as exe: + exe.write(z.read('deno.exe')) + else: + with gzip.open(latest_fn, 'rb') as f: + content = f.read() + with open(exe_fn, 'wb+') as exe: + exe.write(content) + + os.chmod(exe_fn, 0o744) + print("DENO_EXE: " + exe_fn) + print("Now manually add %s to your $PATH" % bin_dir) + print("Example:") + print() + print(" echo export PATH=\"%s\":\\$PATH >> $HOME/.bash_profile" % bin_dir) + print() + + +def mkdir(d): + if not os.path.exists(d): + print("mkdir", d) + os.mkdir(d) + + +def deno_bin_dir(): + install_dir = home + d = os.path.join(install_dir, ".deno") + b = os.path.join(d, "bin") + mkdir(d) + mkdir(b) + return b + + +def dlfile(url): + print("Downloading " + url) + f = urlopen(url) + mkdir(install_dir) + p = os.path.join(install_dir, os.path.basename(url)) + print("Writing " + p) + with open(p, "wb") as local_file: + local_file.write(f.read()) + return p + + +if __name__ == '__main__': + main()
\ No newline at end of file |