Install specific version of deno (#11)

This commit is contained in:
Yoshiya Hinosawa 2018-11-17 14:44:08 +09:00 committed by Ryan Dahl
parent 60cce396d9
commit 99590073b4
3 changed files with 55 additions and 9 deletions

View file

@ -9,13 +9,25 @@ Downloads the latest Deno binary into `$HOME/.deno/bin`.
**Install with Python:** **Install with Python:**
``` ```
curl -sSf https://raw.githubusercontent.com/denoland/deno_install/master/install.py | python curl -L https://deno.land/x/install/install.py | python
``` ```
**Install with PowerShell:** **Install with PowerShell:**
```powershell ```powershell
iex (iwr https://raw.githubusercontent.com/denoland/deno_install/master/install.ps1) iex (iwr https://deno.land/x/install/install.ps1)
``` ```
_Note: Depending on your security settings, you may have to run `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` first to allow downloaded scripts to be executed._ _Note: Depending on your security settings, you may have to run `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` first to allow downloaded scripts to be executed._
## Install other versions
If you need to install specific version of deno, use the following commands:
**Install with Python:**
```
curl -L https://deno.land/x/install/install.py | python - v0.2.0
```
(PowerShell version is not available yet)

View file

@ -18,7 +18,9 @@ try:
except ImportError: except ImportError:
from urllib2 import urlopen from urllib2 import urlopen
RELEASES_URL = "https://github.com/denoland/deno/releases/latest" DENO_REPO_URL = "https://github.com/denoland/deno"
LATEST_RELEASE_URL = DENO_REPO_URL + "/releases/latest"
TAG_URL = DENO_REPO_URL + "/releases/tag/"
FILENAME_LOOKUP = { FILENAME_LOOKUP = {
"darwin": "deno_osx_x64.gz", "darwin": "deno_osx_x64.gz",
"linux": "deno_linux_x64.gz", # python3 "linux": "deno_linux_x64.gz", # python3
@ -28,14 +30,21 @@ FILENAME_LOOKUP = {
} }
def release_url(platform): def release_url(platform, tag):
try: try:
filename = FILENAME_LOOKUP[platform] filename = FILENAME_LOOKUP[platform]
except KeyError: except KeyError:
print("Unable to locate appropriate filename for", platform) print("Unable to locate appropriate filename for", platform)
sys.exit(1) sys.exit(1)
html = urlopen(RELEASES_URL).read().decode('utf-8') url = TAG_URL + tag if tag else LATEST_RELEASE_URL
try:
html = urlopen(url).read().decode('utf-8')
except:
print("Unable to find release page for", tag)
sys.exit(1)
urls = re.findall(r'href=[\'"]?([^\'" >]+)', html) urls = re.findall(r'href=[\'"]?([^\'" >]+)', html)
matching = [u for u in urls if filename in u] matching = [u for u in urls if filename in u]
@ -50,7 +59,7 @@ def main():
bin_dir = deno_bin_dir() bin_dir = deno_bin_dir()
exe_fn = os.path.join(bin_dir, "deno") exe_fn = os.path.join(bin_dir, "deno")
url = release_url(sys.platform) url = release_url(sys.platform, sys.argv[1] if len(sys.argv) > 1 else None)
print("Downloading", url) print("Downloading", url)
compressed = urlopen(url).read() compressed = urlopen(url).read()

View file

@ -10,11 +10,15 @@ import subprocess
this_dir = os.path.dirname(os.path.realpath(__file__)) this_dir = os.path.dirname(os.path.realpath(__file__))
def main(): def bin_dir():
home = os.path.expanduser("~")
return os.path.join(home, ".deno", "bin")
def test_install():
os.chdir(this_dir) os.chdir(this_dir)
PATTERN = "DENO_EXE: " PATTERN = "DENO_EXE: "
home = os.path.expanduser("~") expected_bin_dir = bin_dir()
expected_bin_dir = os.path.join(home, ".deno", "bin")
print("Testing install.py ... Expect deno installed to ", expected_bin_dir) print("Testing install.py ... Expect deno installed to ", expected_bin_dir)
if os.path.exists(expected_bin_dir): if os.path.exists(expected_bin_dir):
shutil.rmtree(expected_bin_dir) shutil.rmtree(expected_bin_dir)
@ -33,5 +37,26 @@ def main():
assert os.path.exists(actual_fn) assert os.path.exists(actual_fn)
def test_tag_install():
print(
"Testing install.py [tag_name] ... Expect specified version of deno installed"
)
cmd = [sys.executable, "install.py", "v0.1.11"]
out = subprocess.check_output(cmd, universal_newlines=True)
bin_path = os.path.join(bin_dir(), "deno")
cmd = [bin_path, "-v"]
out = subprocess.check_output(cmd, universal_newlines=True)
assert "deno: 0.1.11" in out, "installed deno version is not 0.1.11"
assert "v8: 7.1.302.4" in out, "v8 version is not 7.1.302.4"
assert "typescript: 3.1.3" in out, "typescript version is not 3.1.3"
def main():
test_install()
test_tag_install()
if __name__ == '__main__': if __name__ == '__main__':
main() main()