diff options
Diffstat (limited to 'tools')
54 files changed, 7361 insertions, 0 deletions
diff --git a/tools/benchmark.py b/tools/benchmark.py new file mode 100755 index 000000000..85e126b88 --- /dev/null +++ b/tools/benchmark.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Performs benchmark and append data to //website/data.json. +# If //website/data.json doesn't exist, this script tries to import it from +# gh-pages branch. +# To view the results locally run ./tools/http_server.py and visit +# http://localhost:4545/website + +import os +import sys +import json +import time +import tempfile +import subprocess +from util import build_path, executable_suffix, root_path, run, run_output +import third_party +from http_benchmark import http_benchmark +import throughput_benchmark +import http_server + +# The list of the tuples of the benchmark name and arguments +exec_time_benchmarks = [ + ("hello", ["tests/002_hello.ts"]), + ("relative_import", ["tests/003_relative_import.ts"]), + ("error_001", ["tests/error_001.ts"]), + ("cold_hello", ["--reload", "tests/002_hello.ts"]), + ("cold_relative_import", ["--reload", "tests/003_relative_import.ts"]), + ("workers_startup", ["tests/workers_startup_bench.ts"]), + ("workers_round_robin", ["tests/workers_round_robin_bench.ts"]), +] + + +def read_json(filename): + with open(filename) as json_file: + return json.load(json_file) + + +def write_json(filename, data): + with open(filename, 'w') as outfile: + json.dump(data, outfile) + + +def get_binary_sizes(build_dir): + sizes = {} + mtimes = {} + # The deno executable should be located at the root of the build tree. + deno_exe = os.path.join(build_dir, "deno" + executable_suffix) + sizes["deno"] = os.path.getsize(deno_exe) + # Because cargo's OUT_DIR is not predictable, search the build tree for + # snapshot related files. + for parent_dir, _, file_names in os.walk(build_dir): + for file_name in file_names: + if not file_name in [ + "CLI_SNAPSHOT.bin", + "CLI_SNAPSHOT.js", + "CLI_SNAPSHOT.js.map", + "COMPILER_SNAPSHOT.bin", + "COMPILER_SNAPSHOT.js", + "COMPILER_SNAPSHOT.js.map", + ]: + continue + file_path = os.path.join(parent_dir, file_name) + file_mtime = os.path.getmtime(file_path) + # If multiple copies of a file are found, use the most recent one. + if file_name in mtimes and mtimes[file_name] > file_mtime: + continue + mtimes[file_name] = file_mtime + sizes[file_name] = os.path.getsize(file_path) + return sizes + + +def get_strace_summary_text(test_args): + f = tempfile.NamedTemporaryFile() + cmd = ["strace", "-c", "-f", "-o", f.name] + test_args + try: + subprocess.check_output(cmd) + except subprocess.CalledProcessError: + pass + return f.read() + + +def strace_parse(summary_text): + summary = {} + # clear empty lines + lines = list(filter(lambda x: x and x != "\n", summary_text.split("\n"))) + if len(lines) < 4: + return {} # malformed summary + lines, total_line = lines[2:-2], lines[-1] + # data to dict for each line + for line in lines: + syscall_fields = line.split() + syscall_name = syscall_fields[-1] + syscall_dict = {} + if 5 <= len(syscall_fields) <= 6: + syscall_dict = { + "% time": float(syscall_fields[0]), + "seconds": float(syscall_fields[1]), + "usecs/call": int(syscall_fields[2]), + "calls": int(syscall_fields[3]) + } + syscall_dict["errors"] = 0 if len(syscall_fields) < 6 else int( + syscall_fields[4]) + summary[syscall_name] = syscall_dict + # record overall (total) data + total_fields = total_line.split() + summary["total"] = { + "% time": float(total_fields[0]), + "seconds": float(total_fields[1]), + "calls": int(total_fields[2]), + "errors": int(total_fields[3]) + } + return summary + + +def get_strace_summary(test_args): + return strace_parse(get_strace_summary_text(test_args)) + + +def run_throughput(deno_exe): + m = {} + m["100M_tcp"] = throughput_benchmark.tcp(deno_exe, 100) + m["100M_cat"] = throughput_benchmark.cat(deno_exe, 100) + m["10M_tcp"] = throughput_benchmark.tcp(deno_exe, 10) + m["10M_cat"] = throughput_benchmark.cat(deno_exe, 10) + return m + + +# "thread_count" and "syscall_count" are both calculated here. +def run_strace_benchmarks(deno_exe, new_data): + thread_count = {} + syscall_count = {} + for (name, args) in exec_time_benchmarks: + s = get_strace_summary([deno_exe, "run"] + args) + thread_count[name] = s["clone"]["calls"] + 1 + syscall_count[name] = s["total"]["calls"] + new_data["thread_count"] = thread_count + new_data["syscall_count"] = syscall_count + + +# Takes the output from "/usr/bin/time -v" as input and extracts the 'maximum +# resident set size' and returns it in bytes. +def find_max_mem_in_bytes(time_v_output): + for line in time_v_output.split('\n'): + if 'maximum resident set size (kbytes)' in line.lower(): + _, value = line.split(': ') + return int(value) * 1024 + + +def run_max_mem_benchmark(deno_exe): + results = {} + for (name, args) in exec_time_benchmarks: + cmd = ["/usr/bin/time", "-v", deno_exe, "run"] + args + try: + out = subprocess.check_output(cmd, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + pass + mem = find_max_mem_in_bytes(out) + results[name] = mem + return results + + +def run_exec_time(deno_exe, build_dir): + third_party.download_hyperfine() + hyperfine_exe = third_party.get_prebuilt_tool_path("hyperfine") + benchmark_file = os.path.join(build_dir, "hyperfine_results.json") + run([ + hyperfine_exe, "--ignore-failure", "--export-json", benchmark_file, + "--warmup", "3" + ] + [ + deno_exe + " run " + " ".join(args) + for [_, args] in exec_time_benchmarks + ]) + hyperfine_results = read_json(benchmark_file) + results = {} + for [[name, _], data] in zip(exec_time_benchmarks, + hyperfine_results["results"]): + results[name] = { + "mean": data["mean"], + "stddev": data["stddev"], + "user": data["user"], + "system": data["system"], + "min": data["min"], + "max": data["max"] + } + return results + + +def run_http(build_dir, new_data): + stats = http_benchmark(build_dir) + new_data["req_per_sec"] = {k: v["req_per_sec"] for k, v in stats.items()} + new_data["max_latency"] = {k: v["max_latency"] for k, v in stats.items()} + + +def bundle_benchmark(deno_exe): + bundles = { + "file_server": "./std/http/file_server.ts", + "gist": "./std/examples/gist.ts", + } + + sizes = {} + + for name, url in bundles.items(): + # bundle + run([deno_exe, "bundle", url]) + path = name + ".bundle.js" + # get size of bundle + assert os.path.exists(path) + sizes[name] = os.path.getsize(path) + # remove bundle + os.remove(path) + + return sizes + + +def main(argv): + if len(argv) == 2: + build_dir = sys.argv[1] + elif len(argv) == 1: + build_dir = build_path() + else: + print "Usage: tools/benchmark.py [build_dir]" + sys.exit(1) + + sha1 = run_output(["git", "rev-parse", "HEAD"], + exit_on_fail=True).out.strip() + http_server.spawn() + + deno_exe = os.path.join(build_dir, "deno") + + os.chdir(root_path) + + new_data = { + "created_at": time.strftime("%Y-%m-%dT%H:%M:%SZ"), + "sha1": sha1, + } + + # TODO(ry) The "benchmark" benchmark should actually be called "exec_time". + # When this is changed, the historical data in gh-pages branch needs to be + # changed too. + new_data["benchmark"] = run_exec_time(deno_exe, build_dir) + + new_data["binary_size"] = get_binary_sizes(build_dir) + new_data["bundle_size"] = bundle_benchmark(deno_exe) + + # Cannot run throughput benchmark on windows because they don't have nc or + # pipe. + if os.name != 'nt': + new_data["throughput"] = run_throughput(deno_exe) + run_http(build_dir, new_data) + + if "linux" in sys.platform: + run_strace_benchmarks(deno_exe, new_data) + new_data["max_memory"] = run_max_mem_benchmark(deno_exe) + + print "===== <BENCHMARK RESULTS>" + print json.dumps(new_data, indent=2) + print "===== </BENCHMARK RESULTS>" + + write_json(os.path.join(build_dir, "bench.json"), new_data) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/tools/benchmark_test.py b/tools/benchmark_test.py new file mode 100755 index 000000000..28d812647 --- /dev/null +++ b/tools/benchmark_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import sys +import os +import unittest +import benchmark +from test_util import DenoTestCase, run_tests + + +class TestBenchmark(DenoTestCase): + def test_strace_parse(self): + with open( + os.path.join(sys.path[0], "testdata/strace_summary.out"), + "r") as f: + summary = benchmark.strace_parse(f.read()) + # first syscall line + assert summary["munmap"]["calls"] == 60 + assert summary["munmap"]["errors"] == 0 + # line with errors + assert summary["mkdir"]["errors"] == 2 + # last syscall line + assert summary["prlimit64"]["calls"] == 2 + assert summary["prlimit64"]["% time"] == 0 + # summary line + assert summary["total"]["calls"] == 704 + + def test_max_mem_parse(self): + with open(os.path.join(sys.path[0], "testdata/time.out"), "r") as f: + data = f.read() + assert benchmark.find_max_mem_in_bytes(data) == 120380 * 1024 + + def test_binary_size(self): + binary_size_dict = benchmark.get_binary_sizes(self.build_dir) + assert binary_size_dict["deno"] > 0 + assert binary_size_dict["CLI_SNAPSHOT.js"] > 0 + assert binary_size_dict["CLI_SNAPSHOT.js.map"] > 0 + assert binary_size_dict["CLI_SNAPSHOT.bin"] > 0 + + @unittest.skipIf("linux" not in sys.platform, + "strace only supported on linux") + def test_strace(self): + new_data = {} + benchmark.run_strace_benchmarks(self.deno_exe, new_data) + assert "thread_count" in new_data + assert "syscall_count" in new_data + + s = new_data["thread_count"] + assert "hello" in s + assert s["hello"] > 1 + + s = new_data["syscall_count"] + assert "hello" in s + assert s["hello"] > 1 + + +if __name__ == '__main__': + # FIME this doesn't appear to be the case. + # This test assumes tools/http_server.py is running in the background. + run_tests() diff --git a/tools/build_benchmark_jsons.py b/tools/build_benchmark_jsons.py new file mode 100755 index 000000000..1d7a03401 --- /dev/null +++ b/tools/build_benchmark_jsons.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +from util import build_path +from benchmark import read_json, write_json +import os + +current_data_file = os.path.join(build_path(), "bench.json") +gh_pages_data_file = "gh-pages/data.json" +all_data_file = "website/data.json" # Includes all benchmark data. +recent_data_file = "website/recent.json" # Includes recent 20 benchmark data. + +assert os.path.exists(current_data_file) +assert os.path.exists(gh_pages_data_file) + +new_data = read_json(current_data_file) +all_data = read_json(gh_pages_data_file) +all_data.append(new_data) + +write_json(all_data_file, all_data) +write_json(recent_data_file, all_data[-20:]) diff --git a/tools/build_website.py b/tools/build_website.py new file mode 100755 index 000000000..b519f3853 --- /dev/null +++ b/tools/build_website.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +from util import run, root_path, build_path + +os.chdir(os.path.join(root_path, "website")) +deno_exe = os.path.join(build_path(), "deno") +run([deno_exe, "bundle", "app.ts", "app.bundle.js"]) diff --git a/tools/cargo_package.py b/tools/cargo_package.py new file mode 100755 index 000000000..29f5e7fb5 --- /dev/null +++ b/tools/cargo_package.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python +# Because of limitations in Cargo, Deno must dynamically build temporary source +# directories in order to publish to crates.io. +# The "deno" crate corresponds to the //core/ directory and depends on a +# platform dependent crate binary crate containing pre-compiled libdeno +# https://crates.io/crates/deno +# https://crates.io/crates/deno-x86_64-pc-windows-msvc +# https://crates.io/crates/deno-x86_64-apple-darwin +# https://crates.io/crates/deno-x86_64-unknown-linux-gnu + +import os +import sys +import re +import errno +from shutil import copytree, ignore_patterns, copyfile +from tempfile import mkdtemp +from string import Template +from util import root_path, run + +if sys.platform == "linux2": + llvm_target = "x86_64-unknown-linux-gnu" + static_lib_suffix = ".a" +elif sys.platform == "darwin": + llvm_target = "x86_64-apple-darwin" + static_lib_suffix = ".a" +elif sys.platform == "win32": + llvm_target = "x86_64-pc-windows-msvc" + static_lib_suffix = ".lib" +else: + assert (False) + +lib_name = os.path.join(root_path, "target", "release", "obj", + "libdeno" + static_lib_suffix) + + +def get_version(toml_path): + for line in open(toml_path): + match = re.search('version = "(.*)"', line) + if match: + return match.group(1) + + +core_path = os.path.join(root_path, "core") +cargo_toml_path = os.path.join(core_path, "Cargo.toml") +version = get_version(cargo_toml_path) + + +def main(): + os.chdir(root_path) + + run([ + "cargo", "build", "-vv", "--manifest-path", cargo_toml_path, "--lib", + "--release", "--locked" + ]) + assert (os.path.exists(lib_name)) + + root_temp = mkdtemp() + print "cargo package temp dir", root_temp + + build_core(root_temp) + build_platform_crate(root_temp) + + print "Now go into %s and run 'cargo publish' manually." % root_temp + + +def build_core(root_temp): + core_temp = os.path.join(root_temp, "core") + + # Copy entire core tree into temp directory, excluding build.rs and libdeno + # and unnecessary files. + copytree( + core_path, + core_temp, + ignore=ignore_patterns("build.rs", "libdeno", ".*", "*.gn", "*.orig")) + + cargo_toml_temp = os.path.join(core_temp, "Cargo.toml") + + t = cargo_toml_deps.substitute(VERSION=version) + # Append deps to //core/Cargo.toml + # This append is the entire reason we are copying the tree. + with open(cargo_toml_temp, "a") as f: + f.write(t) + + +def build_platform_crate(root_temp): + platform_temp = os.path.join(root_temp, "platform") + + copy_static_lib(platform_temp) + + inputs = {"TARGET": llvm_target, "VERSION": version} + + generate(platform_temp, "build.rs", platform_build_rs.substitute(inputs)) + generate(platform_temp, "Cargo.toml", + platform_cargo_toml.substitute(inputs)) + generate(platform_temp, "src/lib.rs", "") + + +def copy_static_lib(platform_temp): + platform_lib = os.path.join(platform_temp, "lib/") + mkdir_p(platform_lib) + platform_lib_name = os.path.join(platform_lib, os.path.basename(lib_name)) + assert (os.path.exists(lib_name)) + copyfile(lib_name, platform_lib_name) + + +platform_build_rs = Template(""" +fn main() { + use std::env::var; + use std::path::Path; + if var("TARGET") + .map(|target| target == "$TARGET") + .unwrap_or(false) + { + let dir = var("CARGO_MANIFEST_DIR").unwrap(); + println!( + "cargo:rustc-link-search=native={}", + Path::new(&dir).join("lib").display() + ); + } +} +""") + +platform_cargo_toml = Template(""" +[package] +name = "deno-$TARGET" +description = "Binary dependencies for the 'deno' crate" +authors = ["The deno authors <bertbelder@nodejs.org>"] +version = "$VERSION" +build = "build.rs" +include = ["src/*", "lib/*", "Cargo.toml", "build.rs"] +license = "MIT" +repository = "https://github.com/denoland/deno" +""") + +cargo_toml_deps = Template(""" +[target.x86_64-apple-darwin.dependencies] +deno-x86_64-apple-darwin = "=$VERSION" + +[target.x86_64-pc-windows-msvc.dependencies] +deno-x86_64-pc-windows-msvc = "=$VERSION" + +[target.x86_64-unknown-linux-gnu.dependencies] +deno-x86_64-unknown-linux-gnu = "=$VERSION" +""") + + +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: + if exc.errno == errno.EEXIST and os.path.isdir(path): + pass + else: + raise + + +def generate(out_dir, filename, content): + path = os.path.join(out_dir, filename) + d = os.path.dirname(path) + mkdir_p(d) + with open(path, "w") as f: + f.write(content) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/cargo_publish_others.py b/tools/cargo_publish_others.py new file mode 100755 index 000000000..83b9b50e2 --- /dev/null +++ b/tools/cargo_publish_others.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# Publishes 'deno_cli', 'deno_cli_snapshots', and 'deno_typescript' crates. +# DOES NOT PUBLISH 'deno' crate see tools/cargo_package.py for that. + +import os +import sys +import argparse +from util import run, root_path + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--dry-run", action="store_true") + args = parser.parse_args() + + cargo_publish = ["cargo", "publish"] + if args.dry_run: + cargo_publish += ["--dry-run"] + + # Publish the deno_typescript crate. + os.chdir(os.path.join(root_path, "deno_typescript")) + run(cargo_publish) + + # Publish the deno_cli crate. + os.chdir(os.path.join(root_path, "cli")) + run(cargo_publish) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/complex_permissions_test.py b/tools/complex_permissions_test.py new file mode 100755 index 000000000..9f0fcd7e7 --- /dev/null +++ b/tools/complex_permissions_test.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import unittest + +import http_server +from test_util import DenoTestCase, run_tests +from util import root_path, tty_capture + +PERMISSIONS_PROMPT_TEST_TS = "tools/complex_permissions_test.ts" + +PROMPT_PATTERN = b'⚠️' +PERMISSION_DENIED_PATTERN = b'PermissionDenied: permission denied' + + +@unittest.skipIf(os.name == 'nt', "Unable to test tty on Windows") +class BaseComplexPermissionTest(DenoTestCase): + def _run_deno(self, flags, args): + "Returns (return_code, stdout, stderr)." + cmd = ([self.deno_exe, "run", "--no-prompt"] + flags + + [PERMISSIONS_PROMPT_TEST_TS] + args) + return tty_capture(cmd, b'') + + +class BaseReadWritePermissionsTest(object): + test_type = None + + def test_inside_project_dir(self): + code, _stdout, stderr = self._run_deno( + ["--allow-" + self.test_type + "=" + root_path], + [self.test_type, "package.json", "cli/tests/subdir/config.json"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_outside_test_dir(self): + code, _stdout, stderr = self._run_deno([ + "--allow-" + self.test_type + "=" + os.path.join( + root_path, "cli/tests") + ], [self.test_type, "package.json"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_inside_test_dir(self): + code, _stdout, stderr = self._run_deno([ + "--allow-" + self.test_type + "=" + os.path.join( + root_path, "cli/tests") + ], [self.test_type, "cli/tests/subdir/config.json"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_outside_test_and_js_dir(self): + code, _stdout, stderr = self._run_deno([ + "--allow-" + self.test_type + "=" + os.path.join( + root_path, "cli/tests") + "," + os.path.join( + root_path, "cli/js") + ], [self.test_type, "package.json"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_inside_test_and_js_dir(self): + code, _stdout, stderr = self._run_deno([ + "--allow-" + self.test_type + "=" + os.path.join( + root_path, "cli/tests") + "," + os.path.join( + root_path, "cli/js") + ], [ + self.test_type, "cli/js/dir_test.ts", + "cli/tests/subdir/config.json" + ]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_relative(self): + # Save and restore curdir + saved_curdir = os.getcwd() + os.chdir(root_path) + code, _stdout, stderr = self._run_deno( + ["--allow-" + self.test_type + "=" + "./cli/tests"], + [self.test_type, "cli/tests/subdir/config.json"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + os.chdir(saved_curdir) + + def test_no_prefix(self): + # Save and restore curdir + saved_curdir = os.getcwd() + os.chdir(root_path) + code, _stdout, stderr = self._run_deno( + ["--allow-" + self.test_type + "=" + "cli/tests"], + [self.test_type, "cli/tests/subdir/config.json"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + os.chdir(saved_curdir) + + +class TestReadPermissions(BaseReadWritePermissionsTest, + BaseComplexPermissionTest): + test_type = "read" + + +class TestWritePermissions(BaseReadWritePermissionsTest, + BaseComplexPermissionTest): + test_type = "write" + + +class TestNetFetchPermissions(BaseComplexPermissionTest): + test_type = "netFetch" + + def test_allow_localhost_4545(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=localhost:4545"], + [self.test_type, "http://localhost:4545"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_allow_deno_land(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=deno.land"], + [self.test_type, "http://localhost:4545"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_allow_localhost_4545_fail(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=localhost:4545"], + [self.test_type, "http://localhost:4546"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_allow_localhost(self): + code, _stdout, stderr = self._run_deno(["--allow-net=localhost"], [ + self.test_type, "http://localhost:4545", "http://localhost:4546", + "http://localhost:4547" + ]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + +class TestNetDialPermissions(BaseComplexPermissionTest): + test_type = "netDial" + + def test_allow_localhost_ip_4555(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=127.0.0.1:4545"], [self.test_type, "127.0.0.1:4545"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_allow_deno_land(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=deno.land"], [self.test_type, "127.0.0.1:4545"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_allow_localhost_ip_4545_fail(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=127.0.0.1:4545"], [self.test_type, "127.0.0.1:4546"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_allow_localhost_ip(self): + code, _stdout, stderr = self._run_deno(["--allow-net=127.0.0.1"], [ + self.test_type, "127.0.0.1:4545", "127.0.0.1:4546", + "127.0.0.1:4547" + ]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + +class TestNetListenPermissions(BaseComplexPermissionTest): + test_type = "netListen" + + def test_allow_localhost_4555(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=localhost:4555"], [self.test_type, "localhost:4555"]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_allow_deno_land(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=deno.land"], [self.test_type, "localhost:4545"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_allow_localhost_4555_fail(self): + code, _stdout, stderr = self._run_deno( + ["--allow-net=localhost:4555"], [self.test_type, "localhost:4556"]) + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN in stderr + + def test_allow_localhost(self): + code, _stdout, stderr = self._run_deno(["--allow-net=localhost"], [ + self.test_type, "localhost:4555", "localhost:4556", + "localhost:4557" + ]) + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert PERMISSION_DENIED_PATTERN not in stderr + + +def complex_permissions_tests(): + return BaseComplexPermissionTest.__subclasses__() + + +if __name__ == "__main__": + run_tests() diff --git a/tools/complex_permissions_test.ts b/tools/complex_permissions_test.ts new file mode 100644 index 000000000..a2e0f7824 --- /dev/null +++ b/tools/complex_permissions_test.ts @@ -0,0 +1,38 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +const { args, readFileSync, writeFileSync, exit } = Deno; + +const name = args[1]; +const test: (args: string[]) => void = { + read(files: string[]): void { + files.forEach(file => readFileSync(file)); + }, + write(files: string[]): void { + files.forEach(file => + writeFileSync(file, new Uint8Array(0), { append: true }) + ); + }, + netFetch(hosts: string[]): void { + hosts.forEach(host => fetch(host)); + }, + netListen(hosts: string[]): void { + hosts.forEach(host => { + const [hostname, port] = host.split(":"); + const listener = Deno.listen({ hostname, port: Number(port) }); + listener.close(); + }); + }, + async netDial(hosts: string[]): Promise<void> { + for (const host of hosts) { + const [hostname, port] = host.split(":"); + const listener = await Deno.dial({ hostname, port: Number(port) }); + listener.close(); + } + } +}[name]; + +if (!test) { + console.log("Unknown test:", name); + exit(1); +} + +test(args.slice(2)); diff --git a/tools/deno_dir_test.py b/tools/deno_dir_test.py new file mode 100755 index 000000000..042475a81 --- /dev/null +++ b/tools/deno_dir_test.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Check deno dir is created properly +# Usage: deno_dir_test.py [path to deno dir] +import os + +from test_util import DenoTestCase, run_tests +from util import mkdtemp, rmtree, run_output + + +class TestDenoDir(DenoTestCase): + def setUp(self): + self.old_deno_dir = None + if "DENO_DIR" in os.environ: + self.old_deno_dir = os.environ["DENO_DIR"] + del os.environ["DENO_DIR"] + + def tearDown(self): + if self.old_deno_dir is not None: + os.environ["DENO_DIR"] = self.old_deno_dir + + def test_deno_dir(self): + deno_dir = mkdtemp() + if os.path.isdir(deno_dir): + rmtree(deno_dir) + + # Run deno with no env flag + self.run_deno() + assert not os.path.isdir(deno_dir) + + # TODO(bartlomieju): reenable or rewrite these tests + # now all cache directories are lazily created + # Run deno with DENO_DIR env flag + # self.run_deno(deno_dir) + # assert os.path.isdir(deno_dir) + # assert os.path.isdir(os.path.join(deno_dir, "deps")) + # assert os.path.isdir(os.path.join(deno_dir, "gen")) + # rmtree(deno_dir) + + def run_deno(self, deno_dir=None): + cmd = [ + self.deno_exe, "run", + "http://localhost:4545/tests/subdir/print_hello.ts" + ] + deno_dir_env = {"DENO_DIR": deno_dir} if deno_dir is not None else None + res = run_output(cmd, quiet=True, env=deno_dir_env) + print res.code, res.out, res.err + self.assertEqual(res.code, 0) + + +if __name__ == '__main__': + run_tests() diff --git a/tools/deno_http_proxy.ts b/tools/deno_http_proxy.ts new file mode 100644 index 000000000..728e4fd3f --- /dev/null +++ b/tools/deno_http_proxy.ts @@ -0,0 +1,24 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import { serve, ServerRequest } from "../std/http/server.ts"; + +const addr = Deno.args[1] || "127.0.0.1:4500"; +const originAddr = Deno.args[2] || "127.0.0.1:4501"; +const server = serve(addr); + +async function main(): Promise<void> { + console.log(`Proxy listening on http://${addr}/`); + for await (const req of server) { + proxyRequest(req); + } +} + +async function proxyRequest(req: ServerRequest): Promise<void> { + const url = `http://${originAddr}${req.url}`; + const resp = await fetch(url, { + method: req.method, + headers: req.headers + }); + req.respond(resp); +} + +main(); diff --git a/tools/deno_tcp.ts b/tools/deno_tcp.ts new file mode 100644 index 000000000..2b259cd38 --- /dev/null +++ b/tools/deno_tcp.ts @@ -0,0 +1,35 @@ +// Used for benchmarking Deno's networking. See tools/http_benchmark.py +// TODO Replace this with a real HTTP server once +// https://github.com/denoland/deno/issues/726 is completed. +// Note: this is a keep-alive server. +const addr = Deno.args[1] || "127.0.0.1:4500"; +const [hostname, port] = addr.split(":"); +const listener = Deno.listen({ hostname, port: Number(port) }); +const response = new TextEncoder().encode( + "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n" +); + +async function handle(conn: Deno.Conn): Promise<void> { + const buffer = new Uint8Array(1024); + try { + while (true) { + const r = await conn.read(buffer); + if (r === Deno.EOF) { + break; + } + await conn.write(response); + } + } finally { + conn.close(); + } +} + +async function main(): Promise<void> { + console.log("Listening on", addr); + while (true) { + const conn = await listener.accept(); + handle(conn); + } +} + +main(); diff --git a/tools/deno_tcp_proxy.ts b/tools/deno_tcp_proxy.ts new file mode 100644 index 000000000..23d219071 --- /dev/null +++ b/tools/deno_tcp_proxy.ts @@ -0,0 +1,35 @@ +// Used for benchmarking Deno's tcp proxy perfromance. See tools/http_benchmark.py +const addr = Deno.args[1] || "127.0.0.1:4500"; +const originAddr = Deno.args[2] || "127.0.0.1:4501"; + +const [hostname, port] = addr.split(":"); +const [originHostname, originPort] = originAddr.split(":"); + +const listener = Deno.listen({ hostname, port: Number(port) }); + +async function handle(conn: Deno.Conn): Promise<void> { + const origin = await Deno.dial({ + hostname: originHostname, + port: Number(originPort) + }); + try { + await Promise.all([Deno.copy(conn, origin), Deno.copy(origin, conn)]); + } catch (err) { + if (err.message !== "read error" && err.message !== "write error") { + throw err; + } + } finally { + conn.close(); + origin.close(); + } +} + +async function main(): Promise<void> { + console.log(`Proxy listening on http://${addr}/`); + while (true) { + const conn = await listener.accept(); + handle(conn); + } +} + +main(); diff --git a/tools/docs.py b/tools/docs.py new file mode 100755 index 000000000..901a633e0 --- /dev/null +++ b/tools/docs.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import tempfile +from util import run, root_path + +target_path = os.path.join(root_path, "target/") + +os.chdir(root_path) + +# Builds into target/doc +run(["cargo", "doc", "--all", "--no-deps", "-vv"]) + +# 'deno types' is stored in js/lib.deno_runtime.d.ts +# We want to run typedoc on that declaration file only. +os.chdir(os.path.join(root_path, "js")) + +# You must have typedoc installed seprately. +# TODO Replace typedoc with something else ASAP. It's very awful. +run([ + "typedoc", "lib.deno_runtime.d.ts", "--out", + os.path.join(target_path, "typedoc"), "--entryPoint", "Deno", + "--ignoreCompilerErrors", "--includeDeclarations", "--excludeExternals", + "--excludePrivate", "--excludeProtected", "--mode", "file", "--name", + "deno", "--theme", "minimal", "--readme", "none" +]) diff --git a/tools/fetch_test.py b/tools/fetch_test.py new file mode 100755 index 000000000..e6e5cb6a0 --- /dev/null +++ b/tools/fetch_test.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import shutil +import sys + +import http_server +from test_util import DenoTestCase, run_tests +from util import mkdtemp, tests_path, run_output + + +class TestFetch(DenoTestCase): + def test_fetch(self): + deno_dir = mkdtemp() + try: + t = os.path.join(tests_path, "006_url_imports.ts") + result = run_output([self.deno_exe, "fetch", t], + quiet=True, + merge_env={"DENO_DIR": deno_dir}) + self.assertEqual(result.out, "") + self.assertEqual(result.code, 0) + # Check that we actually did the prefetch. + os.path.exists( + os.path.join( + deno_dir, + "deps/http/localhost_PORT4545/tests/subdir/mod2.ts")) + finally: + shutil.rmtree(deno_dir) + + +if __name__ == "__main__": + run_tests() diff --git a/tools/fmt_test.py b/tools/fmt_test.py new file mode 100755 index 000000000..ca7cc7c20 --- /dev/null +++ b/tools/fmt_test.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import shutil + +from test_util import DenoTestCase, run_tests +from util import mkdtemp, root_path, tests_path, run_output + + +class TestFmt(DenoTestCase): + def test_fmt(self): + d = mkdtemp() + try: + fixed_filename = os.path.join(tests_path, + "badly_formatted_fixed.js") + src = os.path.join(tests_path, "badly_formatted.js") + dst = os.path.join(d, "badly_formatted.js") + shutil.copyfile(src, dst) + + # Set DENO_DIR to the temp dir to test an initial fetch of prettier. + # TODO(ry) This make the test depend on internet access which is not + # ideal. We should have prettier in the repo already, and we could + # fetch it instead through tools/http_server.py. + deno_dir = d + + result = run_output( + [os.path.join(root_path, self.deno_exe), "fmt", dst], + cwd=d, + merge_env={"DENO_DIR": deno_dir}, + exit_on_fail=True, + quiet=True) + self.assertEqual(result.code, 0) + with open(fixed_filename) as f: + expected = f.read() + with open(dst) as f: + actual = f.read() + self.assertEqual(expected, actual) + finally: + shutil.rmtree(d) + + +if __name__ == "__main__": + run_tests() diff --git a/tools/format.py b/tools/format.py new file mode 100755 index 000000000..ac6035804 --- /dev/null +++ b/tools/format.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# Copyright 2018 the Deno authors. All rights reserved. MIT license. +import os +import sys +import argparse +from third_party import get_buildtools_tool_path, google_env, python_env +from util import git_ls_files, third_party_path, root_path, run + + +def main(): + os.chdir(root_path) + + parser = argparse.ArgumentParser() + parser.add_argument("--cc", help="run clang-format", action="store_true") + parser.add_argument("--gn", help="run gn format", action="store_true") + parser.add_argument("--js", help="run prettier", action="store_true") + parser.add_argument("--py", help="run yapf", action="store_true") + parser.add_argument("--rs", help="run rustfmt", action="store_true") + args = parser.parse_args() + + did_fmt = False + if args.cc: + clang_format() + did_fmt = True + if args.gn: + gn_format() + did_fmt = True + if args.js: + prettier() + did_fmt = True + if args.py: + yapf() + did_fmt = True + if args.rs: + rustfmt() + did_fmt = True + + if not did_fmt: + clang_format() + gn_format() + prettier() + yapf() + rustfmt() + + +def clang_format(): + print "clang-format" + exe = get_buildtools_tool_path("clang-format") + source_files = git_ls_files(root_path, ["*.cc", "*.h"]) + run([exe, "-i", "-style", "Google", "--"] + source_files, + env=google_env(), + quiet=True) + + +def gn_format(): + print "gn format" + exe = get_buildtools_tool_path("gn") + source_files = git_ls_files(root_path, ["*.gn", "*.gni"]) + run([exe, "format", "--"] + source_files, env=google_env(), quiet=True) + + +def prettier(): + print "prettier" + script = os.path.join(third_party_path, "node_modules", "prettier", + "bin-prettier.js") + source_files = git_ls_files(root_path, ["*.js", "*.json", "*.ts", "*.md"]) + run(["node", script, "--write", "--loglevel=error", "--"] + source_files, + shell=False, + quiet=True) + + +def yapf(): + print "yapf" + script = os.path.join(third_party_path, "python_packages", "bin", "yapf") + source_files = git_ls_files(root_path, ["*.py"]) + run([sys.executable, script, "-i", "--"] + source_files, + env=python_env(), + shell=False, + quiet=True) + + +def rustfmt(): + print "rustfmt" + config_file = os.path.join(root_path, ".rustfmt.toml") + source_files = git_ls_files(root_path, ["*.rs"]) + run([ + "rustfmt", + "--config-path=" + config_file, + "--", + ] + source_files, + shell=False, + quiet=True) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/http_benchmark.py b/tools/http_benchmark.py new file mode 100755 index 000000000..4f2c768fd --- /dev/null +++ b/tools/http_benchmark.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import sys +import time +import subprocess +import util + +# Some of the benchmarks in this file have been renamed. In case the history +# somehow gets messed up: +# "node_http" was once called "node" +# "deno_tcp" was once called "deno" +# "deno_http" was once called "deno_net_http" + +DURATION = "10s" + +LAST_PORT = 4544 + + +def server_addr(port): + return "0.0.0.0:%s" % port + + +def get_port(port=None): + global LAST_PORT + if port is None: + port = LAST_PORT + LAST_PORT = LAST_PORT + 1 + # Return port as str because all usages below are as a str and having it an + # integer just adds complexity. + return str(port) + + +def deno_tcp(deno_exe): + port = get_port() + deno_cmd = [ + deno_exe, "run", "--allow-net", "tools/deno_tcp.ts", + server_addr(port) + ] + print "http_benchmark testing DENO tcp." + return run(deno_cmd, port) + + +def deno_tcp_current_thread(deno_exe): + port = get_port() + deno_cmd = [ + deno_exe, "run", "--current-thread", "--allow-net", + "tools/deno_tcp.ts", + server_addr(port) + ] + print "http_benchmark testing DENO tcp (single-thread)." + return run(deno_cmd, port) + + +def deno_http(deno_exe): + port = get_port() + deno_cmd = [ + deno_exe, "run", "--allow-net", "std/http/http_bench.ts", + server_addr(port) + ] + print "http_benchmark testing DENO using net/http." + return run(deno_cmd, port) + + +def deno_tcp_proxy(deno_exe, hyper_hello_exe): + port = get_port() + origin_port = get_port() + deno_cmd = [ + deno_exe, "run", "--allow-net", "tools/deno_tcp_proxy.ts", + server_addr(port), + server_addr(origin_port) + ] + print "http_proxy_benchmark testing DENO using net/tcp." + return run( + deno_cmd, + port, + origin_cmd=http_proxy_origin(hyper_hello_exe, origin_port)) + + +def deno_http_proxy(deno_exe, hyper_hello_exe): + port = get_port() + origin_port = get_port() + deno_cmd = [ + deno_exe, "run", "--allow-net", "tools/deno_http_proxy.ts", + server_addr(port), + server_addr(origin_port) + ] + print "http_proxy_benchmark testing DENO using net/http." + return run( + deno_cmd, + port, + origin_cmd=http_proxy_origin(hyper_hello_exe, origin_port)) + + +def deno_core_single(exe): + print "http_benchmark testing deno_core_single" + return run([exe, "--single-thread"], 4544) + + +def deno_core_multi(exe): + print "http_benchmark testing deno_core_multi" + return run([exe, "--multi-thread"], 4544) + + +def node_http(): + port = get_port() + node_cmd = ["node", "tools/node_http.js", port] + print "http_benchmark testing NODE." + return run(node_cmd, port) + + +def node_http_proxy(hyper_hello_exe): + port = get_port() + origin_port = get_port() + node_cmd = ["node", "tools/node_http_proxy.js", port, origin_port] + print "http_proxy_benchmark testing NODE." + return run(node_cmd, port, None, + http_proxy_origin(hyper_hello_exe, origin_port)) + + +def node_tcp_proxy(hyper_hello_exe): + port = get_port() + origin_port = get_port() + node_cmd = ["node", "tools/node_tcp_proxy.js", port, origin_port] + print "http_proxy_benchmark testing NODE tcp." + return run(node_cmd, port, None, + http_proxy_origin(hyper_hello_exe, origin_port)) + + +def node_tcp(): + port = get_port() + node_cmd = ["node", "tools/node_tcp.js", port] + print "http_benchmark testing node_tcp.js" + return run(node_cmd, port) + + +def http_proxy_origin(hyper_hello_exe, port): + return [hyper_hello_exe, port] + + +def hyper_http(hyper_hello_exe): + port = get_port() + hyper_cmd = [hyper_hello_exe, port] + print "http_benchmark testing RUST hyper." + return run(hyper_cmd, port) + + +def http_benchmark(build_dir): + hyper_hello_exe = os.path.join(build_dir, "hyper_hello") + core_http_bench_exe = os.path.join(build_dir, + "examples/deno_core_http_bench") + deno_exe = os.path.join(build_dir, "deno") + return { + # "deno_tcp" was once called "deno" + "deno_tcp": deno_tcp(deno_exe), + "deno_tcp_current_thread": deno_tcp_current_thread(deno_exe), + # "deno_http" was once called "deno_net_http" + "deno_http": deno_http(deno_exe), + "deno_proxy": deno_http_proxy(deno_exe, hyper_hello_exe), + "deno_proxy_tcp": deno_tcp_proxy(deno_exe, hyper_hello_exe), + "deno_core_single": deno_core_single(core_http_bench_exe), + "deno_core_multi": deno_core_multi(core_http_bench_exe), + # "node_http" was once called "node" + "node_http": node_http(), + "node_proxy": node_http_proxy(hyper_hello_exe), + "node_proxy_tcp": node_tcp_proxy(hyper_hello_exe), + "node_tcp": node_tcp(), + "hyper": hyper_http(hyper_hello_exe) + } + + +def run(server_cmd, port, merge_env=None, origin_cmd=None): + + # Run deno echo server in the background. + if merge_env is None: + env = None + else: + env = os.environ.copy() + for key, value in merge_env.iteritems(): + env[key] = value + + # Wait for port 4544 to become available. + # TODO Need to use SO_REUSEPORT with tokio::net::TcpListener. + time.sleep(5) + + origin = None + if origin_cmd is not None: + origin = subprocess.Popen(origin_cmd, env=env) + + print server_cmd + server = subprocess.Popen(server_cmd, env=env) + + time.sleep(5) # wait for server to wake up. TODO racy. + + try: + cmd = "third_party/wrk/%s/wrk -d %s --latency http://127.0.0.1:%s/" % ( + util.platform(), DURATION, port) + print cmd + output = subprocess.check_output(cmd, shell=True) + stats = util.parse_wrk_output(output) + print output + return stats + finally: + server.kill() + if origin is not None: + origin.kill() + + +if __name__ == '__main__': + if len(sys.argv) < 2: + print "Usage ./tools/http_benchmark.py target/debug/deno" + sys.exit(1) + deno_http(sys.argv[1]) diff --git a/tools/http_server.py b/tools/http_server.py new file mode 100755 index 000000000..1951c9e53 --- /dev/null +++ b/tools/http_server.py @@ -0,0 +1,197 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Many tests expect there to be an http server on port 4545 servering the deno +# root directory. +from collections import namedtuple +from contextlib import contextmanager +import os +import SimpleHTTPServer +import SocketServer +import sys +from time import sleep +from threading import Thread +from util import root_path + +PORT = 4545 +REDIRECT_PORT = 4546 +ANOTHER_REDIRECT_PORT = 4547 +DOUBLE_REDIRECTS_PORT = 4548 +INF_REDIRECTS_PORT = 4549 + +QUIET = '-v' not in sys.argv and '--verbose' not in sys.argv + + +class QuietSimpleHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): + def log_request(self, code='-', size='-'): + if not QUIET: + SimpleHTTPServer.SimpleHTTPRequestHandler.log_request( + self, code, size) + + +class ContentTypeHandler(QuietSimpleHTTPRequestHandler): + def do_GET(self): + if "multipart_form_data.txt" in self.path: + self.protocol_version = 'HTTP/1.1' + self.send_response(200, 'OK') + self.send_header('Content-type', + 'multipart/form-data;boundary=boundary') + self.end_headers() + self.wfile.write( + bytes('Preamble\r\n' + '--boundary\t \r\n' + 'Content-Disposition: form-data; name="field_1"\r\n' + '\r\n' + 'value_1 \r\n' + '\r\n--boundary\r\n' + 'Content-Disposition: form-data; name="field_2"; ' + 'filename="file.js"\r\n' + 'Content-Type: text/javascript\r\n' + '\r\n' + 'console.log("Hi")' + '\r\n--boundary--\r\n' + 'Epilogue')) + return + return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) + + def do_POST(self): + # Simple echo server for request reflection + if "echo_server" in self.path: + self.protocol_version = 'HTTP/1.1' + self.send_response(200, 'OK') + if self.headers.has_key('content-type'): + self.send_header('content-type', + self.headers.getheader('content-type')) + if self.headers.has_key('user-agent'): + self.send_header('user-agent', + self.headers.getheader('user-agent')) + self.end_headers() + data_string = self.rfile.read(int(self.headers['Content-Length'])) + self.wfile.write(bytes(data_string)) + return + self.protocol_version = 'HTTP/1.1' + self.send_response(501) + self.send_header('content-type', 'text/plain') + self.end_headers() + self.wfile.write(bytes('Server does not support this operation')) + + def guess_type(self, path): + if ".t1." in path: + return "text/typescript" + if ".t2." in path: + return "video/vnd.dlna.mpeg-tts" + if ".t3." in path: + return "video/mp2t" + if ".t4." in path: + return "application/x-typescript" + if ".j1." in path: + return "text/javascript" + if ".j2." in path: + return "application/ecmascript" + if ".j3." in path: + return "text/ecmascript" + if ".j4." in path: + return "application/x-javascript" + if "form_urlencoded" in path: + return "application/x-www-form-urlencoded" + if "no_ext" in path: + return "text/typescript" + if "unknown_ext" in path: + return "text/typescript" + if "mismatch_ext" in path: + return "text/javascript" + return SimpleHTTPServer.SimpleHTTPRequestHandler.guess_type(self, path) + + +RunningServer = namedtuple("RunningServer", ["server", "thread"]) + + +def server(): + os.chdir(root_path) # Hopefully the main thread doesn't also chdir. + Handler = ContentTypeHandler + Handler.extensions_map.update({ + ".ts": "application/typescript", + ".js": "application/javascript", + ".json": "application/json", + }) + SocketServer.TCPServer.allow_reuse_address = True + s = SocketServer.TCPServer(("", PORT), Handler) + if not QUIET: + print "Deno test server http://localhost:%d/" % PORT + return RunningServer(s, start(s)) + + +def base_redirect_server(host_port, target_port, extra_path_segment=""): + os.chdir(root_path) + target_host = "http://localhost:%d" % target_port + + class RedirectHandler(QuietSimpleHTTPRequestHandler): + def do_GET(self): + self.send_response(301) + self.send_header('Location', + target_host + extra_path_segment + self.path) + self.end_headers() + + Handler = RedirectHandler + SocketServer.TCPServer.allow_reuse_address = True + s = SocketServer.TCPServer(("", host_port), Handler) + if not QUIET: + print "redirect server http://localhost:%d/ -> http://localhost:%d/" % ( + host_port, target_port) + return RunningServer(s, start(s)) + + +# redirect server +def redirect_server(): + return base_redirect_server(REDIRECT_PORT, PORT) + + +# another redirect server pointing to the same port as the one above +# BUT with an extra subdir path +def another_redirect_server(): + return base_redirect_server( + ANOTHER_REDIRECT_PORT, PORT, extra_path_segment="/tests/subdir") + + +# redirect server that points to another redirect server +def double_redirects_server(): + return base_redirect_server(DOUBLE_REDIRECTS_PORT, REDIRECT_PORT) + + +# redirect server that points to itself +def inf_redirects_server(): + return base_redirect_server(INF_REDIRECTS_PORT, INF_REDIRECTS_PORT) + + +def start(s): + thread = Thread(target=s.serve_forever, kwargs={"poll_interval": 0.05}) + thread.daemon = True + thread.start() + return thread + + +@contextmanager +def spawn(): + servers = (server(), redirect_server(), another_redirect_server(), + double_redirects_server()) + while any(not s.thread.is_alive() for s in servers): + sleep(0.01) + try: + yield + finally: + for s in servers: + s.server.shutdown() + + +def main(): + servers = (server(), redirect_server(), another_redirect_server(), + double_redirects_server(), inf_redirects_server()) + try: + while all(s.thread.is_alive() for s in servers): + sleep(10) + except KeyboardInterrupt: + pass + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/tools/hyper_hello/Cargo.toml b/tools/hyper_hello/Cargo.toml new file mode 100644 index 000000000..8d4048289 --- /dev/null +++ b/tools/hyper_hello/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "hyper_hello" +version = "0.0.1" + +[dependencies] +hyper = "0.12.34" +ring = "0.16.9" + +[[bin]] +name = "hyper_hello" +path = "hyper_hello.rs" diff --git a/tools/hyper_hello/hyper_hello.rs b/tools/hyper_hello/hyper_hello.rs new file mode 100644 index 000000000..9491b0750 --- /dev/null +++ b/tools/hyper_hello/hyper_hello.rs @@ -0,0 +1,39 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +// Adapted from https://github.com/hyperium/hyper/blob/master/examples/hello.rs + +#![deny(warnings)] +extern crate hyper; + +use hyper::rt::{self, Future}; +use hyper::service::service_fn_ok; +use hyper::{Body, Response, Server}; +use std::env; + +static PHRASE: &[u8] = b"Hello World!"; + +fn main() { + let mut port: u16 = 4544; + if let Some(custom_port) = env::args().nth(1) { + port = custom_port.parse::<u16>().unwrap(); + } + + let addr = ([127, 0, 0, 1], port).into(); + + // new_service is run for each connection, creating a 'service' + // to handle requests for that specific connection. + let new_service = || { + // This is the `Service` that will handle the connection. + // `service_fn_ok` is a helper to convert a function that + // returns a Response into a `Service`. + service_fn_ok(|_| Response::new(Body::from(PHRASE))) + }; + + let server = Server::bind(&addr) + .tcp_nodelay(true) + .serve(new_service) + .map_err(|e| eprintln!("server error: {}", e)); + + println!("Listening on http://{}", addr); + + rt::run(server); +} diff --git a/tools/is_tty_test.py b/tools/is_tty_test.py new file mode 100755 index 000000000..16a4ef255 --- /dev/null +++ b/tools/is_tty_test.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import unittest +from sys import stdin + +from test_util import DenoTestCase, run_tests +from util import tty_capture + +IS_TTY_TEST_TS = "tests/is_tty.ts" + + +@unittest.skipIf(os.name == 'nt', "Unable to test tty on Windows") +class TestIsTty(DenoTestCase): + def test_is_tty(self): + cmd = [self.deno_exe, "run", IS_TTY_TEST_TS] + code, stdout, _ = tty_capture(cmd, b'') + assert code == 0 + assert str(stdin.isatty()).lower() in stdout + + +if __name__ == "__main__": + run_tests() diff --git a/tools/lint.py b/tools/lint.py new file mode 100755 index 000000000..e71d5d0ef --- /dev/null +++ b/tools/lint.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Does google-lint on c++ files and ts-lint on typescript files + +import os +import sys +from util import enable_ansi_colors, git_ls_files, libdeno_path, root_path, run +from util import third_party_path +from third_party import python_env + + +def main(): + enable_ansi_colors() + os.chdir(root_path) + cpplint() + eslint() + pylint() + + +def cpplint(): + print "cpplint" + script = os.path.join(third_party_path, "cpplint", "cpplint.py") + source_files = git_ls_files(libdeno_path, ["*.cc", "*.h"]) + run([ + sys.executable, + script, + "--quiet", + "--filter=-build/include_subdir", + "--repository=" + libdeno_path, + "--", + ] + source_files, + env=python_env(), + shell=False, + quiet=True) + + +def eslint(): + print "eslint" + script = os.path.join(third_party_path, "node_modules", "eslint", "bin", + "eslint") + # Find all *directories* in the main repo that contain .ts/.js files. + source_files = git_ls_files(root_path, ["*.js", "*.ts"]) + source_dirs = set([os.path.dirname(f) for f in source_files]) + # Within the source dirs, eslint does its own globbing, taking into account + # the exclusion rules listed in '.eslintignore'. + source_globs = ["%s/*.{js,ts}" % d for d in source_dirs] + run(["node", script, "--max-warnings=0", "--"] + source_globs, + shell=False, + quiet=True) + + +def pylint(): + print "pylint" + script = os.path.join(third_party_path, "python_packages", "pylint") + rcfile = os.path.join(third_party_path, "depot_tools", "pylintrc") + source_files = git_ls_files(root_path, ["*.py", ":!:gclient_config.py"]) + run([sys.executable, script, "--rcfile=" + rcfile, "--"] + source_files, + env=python_env(), + shell=False, + quiet=True) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/node_http.js b/tools/node_http.js new file mode 100644 index 000000000..2439cfc43 --- /dev/null +++ b/tools/node_http.js @@ -0,0 +1,9 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +const http = require("http"); +const port = process.argv[2] || "4544"; +console.log("port", port); +http + .Server((req, res) => { + res.end("Hello World\n"); + }) + .listen(port); diff --git a/tools/node_http_proxy.js b/tools/node_http_proxy.js new file mode 100644 index 000000000..75dd5a371 --- /dev/null +++ b/tools/node_http_proxy.js @@ -0,0 +1,28 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +const http = require("http"); +const port = process.argv[2] || "4544"; +const originPort = process.argv[3] || "4545"; +console.log("port", port); +http + .Server((req, res) => { + const options = { + port: originPort, + path: req.url, + method: req.method, + headers: req.headers + }; + + const proxy = http.request(options, proxyRes => { + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe( + res, + { end: true } + ); + }); + + req.pipe( + proxy, + { end: true } + ); + }) + .listen(port); diff --git a/tools/node_tcp.js b/tools/node_tcp.js new file mode 100644 index 000000000..1e68fc05f --- /dev/null +++ b/tools/node_tcp.js @@ -0,0 +1,18 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +// Note: this is a keep-alive server. +const { Server } = require("net"); +const port = process.argv[2] || "4544"; +console.log("port", port); + +const response = Buffer.from( + "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n" +); + +Server(socket => { + socket.on("data", _ => { + socket.write(response); + }); + socket.on("error", _ => { + socket.destroy(); + }); +}).listen(port); diff --git a/tools/node_tcp_promise.js b/tools/node_tcp_promise.js new file mode 100644 index 000000000..c6de120b1 --- /dev/null +++ b/tools/node_tcp_promise.js @@ -0,0 +1,25 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +// Note: this is a keep-alive server. +const { Server } = require("net"); +const port = process.argv[2] || "4544"; +console.log("port", port); + +const response = Buffer.from( + "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n" +); + +async function write(socket, buffer) { + const p = new Promise((resolve, _) => { + socket.write(buffer, resolve); + }); + return p; +} + +Server(async socket => { + socket.on("error", _ => { + socket.destroy(); + }); + for await (const _ of socket) { + write(socket, response); + } +}).listen(port); diff --git a/tools/node_tcp_proxy.js b/tools/node_tcp_proxy.js new file mode 100644 index 000000000..7dc1b2612 --- /dev/null +++ b/tools/node_tcp_proxy.js @@ -0,0 +1,68 @@ +const net = require("net"); + +process.on("uncaughtException", function(error) { + console.error(error); +}); + +if (process.argv.length != 4) { + console.log("usage: %s <localport> <remoteport>", process.argv[1]); + process.exit(); +} + +const localport = process.argv[2]; +const remoteport = process.argv[3]; + +const remotehost = "127.0.0.1"; + +const server = net.createServer(function(localsocket) { + const remotesocket = new net.Socket(); + + remotesocket.connect(remoteport, remotehost); + + localsocket.on("data", function(data) { + const flushed = remotesocket.write(data); + if (!flushed) { + localsocket.pause(); + } + }); + + remotesocket.on("data", function(data) { + const flushed = localsocket.write(data); + if (!flushed) { + remotesocket.pause(); + } + }); + + localsocket.on("drain", function() { + remotesocket.resume(); + }); + + remotesocket.on("drain", function() { + localsocket.resume(); + }); + + localsocket.on("close", function() { + remotesocket.end(); + }); + + remotesocket.on("close", function() { + localsocket.end(); + }); + + localsocket.on("error", function() { + localsocket.end(); + }); + + remotesocket.on("error", function() { + remotesocket.end(); + }); +}); + +server.listen(localport); + +console.log( + "redirecting connections from 127.0.0.1:%d to %s:%d", + localport, + remotehost, + remoteport +); diff --git a/tools/permission_prompt_test.py b/tools/permission_prompt_test.py new file mode 100755 index 000000000..e5516e450 --- /dev/null +++ b/tools/permission_prompt_test.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import unittest + +from test_util import DenoTestCase, run_tests +from util import tty_capture + +PERMISSIONS_PROMPT_TEST_TS = "tools/permission_prompt_test.ts" + +PROMPT_PATTERN = b'⚠️' +FIRST_CHECK_FAILED_PATTERN = b'First check failed' +PERMISSION_DENIED_PATTERN = b'PermissionDenied: permission denied' + + +@unittest.skipIf(os.name == 'nt', "Unable to test tty on Windows") +class BasePromptTest(object): + def _run_deno(self, flags, args, bytes_input): + "Returns (return_code, stdout, stderr)." + cmd = [self.deno_exe, "run"] + flags + [PERMISSIONS_PROMPT_TEST_TS + ] + args + return tty_capture(cmd, bytes_input) + + def test_allow_flag(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + ["--allow-" + test_type], ["needs" + test_type.capitalize()], b'') + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert FIRST_CHECK_FAILED_PATTERN not in stdout + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_yes_yes(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'y\ny\n') + assert code == 0 + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN not in stdout + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_yes_no(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'y\nn\n') + assert code == 1 + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN not in stdout + assert PERMISSION_DENIED_PATTERN in stderr + + def test_no_no(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'n\nn\n') + assert code == 1 + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN in stdout + assert PERMISSION_DENIED_PATTERN in stderr + + def test_no_yes(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'n\ny\n') + assert code == 0 + + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN in stdout + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_allow(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'a\n') + assert code == 0 + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN not in stdout + assert PERMISSION_DENIED_PATTERN not in stderr + + def test_deny(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'd\n') + assert code == 1 + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN in stdout + assert PERMISSION_DENIED_PATTERN in stderr + + def test_unrecognized_option(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + [], ["needs" + test_type.capitalize()], b'e\na\n') + assert code == 0 + assert PROMPT_PATTERN in stderr + assert FIRST_CHECK_FAILED_PATTERN not in stdout + assert PERMISSION_DENIED_PATTERN not in stderr + assert b'Unrecognized option' in stderr + + def test_no_prompt(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + ["--no-prompt"], ["needs" + test_type.capitalize()], b'') + assert code == 1 + assert PROMPT_PATTERN not in stderr + assert FIRST_CHECK_FAILED_PATTERN in stdout + assert PERMISSION_DENIED_PATTERN in stderr + + def test_no_prompt_allow(self): + test_type = self.test_type + code, stdout, stderr = self._run_deno( + ["--no-prompt", "--allow-" + test_type], + ["needs" + test_type.capitalize()], b'') + assert code == 0 + assert PROMPT_PATTERN not in stderr + assert FIRST_CHECK_FAILED_PATTERN not in stdout + assert PERMISSION_DENIED_PATTERN not in stderr + + +class ReadPromptTest(DenoTestCase, BasePromptTest): + test_type = "read" + + +class WritePromptTest(DenoTestCase, BasePromptTest): + test_type = "write" + + +class EnvPromptTest(DenoTestCase, BasePromptTest): + test_type = "env" + + +class NetPromptTest(DenoTestCase, BasePromptTest): + test_type = "net" + + +class RunPromptTest(DenoTestCase, BasePromptTest): + test_type = "run" + + +def permission_prompt_tests(): + return BasePromptTest.__subclasses__() + + +if __name__ == "__main__": + run_tests() diff --git a/tools/permission_prompt_test.ts b/tools/permission_prompt_test.ts new file mode 100644 index 000000000..da0c986ed --- /dev/null +++ b/tools/permission_prompt_test.ts @@ -0,0 +1,67 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +const { args, env, exit, makeTempDirSync, readFileSync, run } = Deno; + +const firstCheckFailedMessage = "First check failed"; + +const name = args[1]; +const test = { + async needsRead(): Promise<void> { + try { + readFileSync("package.json"); + } catch (e) { + console.log(firstCheckFailedMessage); + } + readFileSync("package.json"); + }, + needsWrite(): void { + try { + makeTempDirSync(); + } catch (e) { + console.log(firstCheckFailedMessage); + } + makeTempDirSync(); + }, + needsEnv(): void { + try { + env().home; + } catch (e) { + console.log(firstCheckFailedMessage); + } + env().home; + }, + needsNet(): void { + try { + Deno.listen({ hostname: "127.0.0.1", port: 4540 }); + } catch (e) { + console.log(firstCheckFailedMessage); + } + Deno.listen({ hostname: "127.0.0.1", port: 4541 }); + }, + needsRun(): void { + try { + run({ + args: [ + "python", + "-c", + "import sys; sys.stdout.write('hello'); sys.stdout.flush()" + ] + }); + } catch (e) { + console.log(firstCheckFailedMessage); + } + run({ + args: [ + "python", + "-c", + "import sys; sys.stdout.write('hello'); sys.stdout.flush()" + ] + }); + } +}[name]; + +if (!test) { + console.log("Unknown test:", name); + exit(1); +} + +test(); diff --git a/tools/repl_test.py b/tools/repl_test.py new file mode 100644 index 000000000..544dd6a7e --- /dev/null +++ b/tools/repl_test.py @@ -0,0 +1,183 @@ +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +from subprocess import CalledProcessError, PIPE, Popen +import sys +import time + +from test_util import DenoTestCase, run_tests + + +class TestRepl(DenoTestCase): + def input(self, *lines, **kwargs): + exit_ = kwargs.pop("exit", True) + sleep_ = kwargs.pop("sleep", 0) + env_ = kwargs.pop("env", None) + p = Popen([self.deno_exe], + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + env=env_) + try: + # Note: The repl takes a >100ms until it's ready. + time.sleep(sleep_) + for line in lines: + p.stdin.write(line.encode("utf-8") + b'\n') + p.stdin.flush() + time.sleep(sleep_) + if exit_: + p.stdin.write(b'Deno.exit(0)\n') + else: + time.sleep(1) # wait to be killed by js + out, err = p.communicate() + except CalledProcessError as e: + p.kill() + p.wait() + raise e + retcode = p.poll() + # Ignore Windows CRLF (\r\n). + return out.replace('\r\n', '\n'), err.replace('\r\n', '\n'), retcode + + def test_console_log(self): + out, err, code = self.input("console.log('hello')", "'world'") + self.assertEqual(out, 'hello\nundefined\nworld\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_eof(self): + out, err, code = self.input("1 + 2", exit=False) + self.assertEqual(out, '3\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_exit_command(self): + out, err, code = self.input("exit", "'ignored'", exit=False) + self.assertEqual(out, '') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_help_command(self): + out, err, code = self.input("help") + expectedOut = '\n'.join([ + "_ Get last evaluation result", + "_error Get last thrown error", + "exit Exit the REPL", + "help Print this help message", + "", + ]) + self.assertEqual(out, expectedOut) + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_function(self): + out, err, code = self.input("Deno.writeFileSync") + self.assertEqual(out, '[Function: writeFileSync]\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_multiline(self): + out, err, code = self.input("(\n1 + 2\n)") + self.assertEqual(out, '3\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + # This should print error instead of wait for input + def test_eval_unterminated(self): + out, err, code = self.input("eval('{')") + self.assertEqual(out, '') + assert "Unexpected end of input" in err + self.assertEqual(code, 0) + + def test_reference_error(self): + out, err, code = self.input("not_a_variable") + self.assertEqual(out, '') + assert "not_a_variable is not defined" in err + self.assertEqual(code, 0) + + # def test_set_timeout(self): + # out, err, code = self.input( + # "setTimeout(() => { console.log('b'); Deno.exit(0); }, 1)", + # "'a'", + # exit=False) + # self.assertEqual(out, '1\na\nb\n') + # self.assertEqual(err, '') + # self.assertEqual(code, 0) + + # def test_set_timeout_interlaced(self): + # out, err, code = self.input( + # "setTimeout(() => console.log('a'), 1)", + # "setTimeout(() => console.log('b'), 6)", + # sleep=0.8) + # self.assertEqual(out, '1\n2\na\nb\n') + # self.assertEqual(err, '') + # self.assertEqual(code, 0) + + # def test_async_op(self): + # out, err, code = self.input( + # "fetch('http://localhost:4545/tests/001_hello.js')" + + # ".then(res => res.text()).then(console.log)", + # sleep=1) + # self.assertEqual(out, 'Promise {}\nconsole.log("Hello World");\n\n') + # self.assertEqual(err, '') + # self.assertEqual(code, 0) + + def test_syntax_error(self): + out, err, code = self.input("syntax error") + self.assertEqual(out, '') + assert "Unexpected identifier" in err + self.assertEqual(code, 0) + + def test_type_error(self): + out, err, code = self.input("console()") + self.assertEqual(out, '') + assert "console is not a function" in err + self.assertEqual(code, 0) + + def test_variable(self): + out, err, code = self.input("var a = 123;", "a") + self.assertEqual(out, 'undefined\n123\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_lexical_scoped_variable(self): + out, err, code = self.input("let a = 123;", "a") + self.assertEqual(out, 'undefined\n123\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_missing_deno_dir(self): + new_env = os.environ.copy() + new_env["DENO_DIR"] = os.path.abspath("doesnt_exist") + out, err, code = self.input("'noop'", exit=False, env=new_env) + self.assertEqual(out, "noop\n") + self.assertTrue(err.startswith("Unable to save REPL history:")) + self.assertEqual(code, 0) + + def test_save_last_eval(self): + out, err, code = self.input("1", "_") + self.assertEqual(out, '1\n1\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_save_last_thrown(self): + out, err, code = self.input("throw 1", "_error") + self.assertEqual(out, '1\n') + self.assertEqual(err, 'Thrown: 1\n') + self.assertEqual(code, 0) + + def test_assign_underscore(self): + out, err, code = self.input("_ = 1", "2", "_") + self.assertEqual( + out, 'Last evaluation result is no longer saved to _.\n1\n2\n1\n') + self.assertEqual(err, '') + self.assertEqual(code, 0) + + def test_assign_underscore_error(self): + out, err, code = self.input("_error = 1", "throw 2", "_error") + self.assertEqual( + out, 'Last thrown error is no longer saved to _error.\n1\n1\n') + self.assertEqual(err, 'Thrown: 2\n') + self.assertEqual(code, 0) + + +if __name__ == "__main__": + run_tests() diff --git a/tools/run_node.py b/tools/run_node.py new file mode 100755 index 000000000..86e7a15b0 --- /dev/null +++ b/tools/run_node.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +""" +gn can only run python scripts. This launches a subprocess Node process. +The working dir of this program is out/Debug/ (AKA root_build_dir) +Before running node, we symlink js/node_modules to out/Debug/node_modules. +""" +import sys +from os import path +from util import symlink, root_path, run + +if not path.exists("node_modules"): + target_abs = path.join(root_path, "third_party/node_modules") + target_rel = path.relpath(target_abs) + symlink(target_rel, "node_modules", True) + +run(["node"] + sys.argv[1:], quiet=True) diff --git a/tools/setup.py b/tools/setup.py new file mode 100755 index 000000000..e18b5ffd3 --- /dev/null +++ b/tools/setup.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import re +import sys +from distutils.spawn import find_executable +import argparse +import third_party +from util import build_mode, build_path, enable_ansi_colors, libdeno_path +from util import shell_quote, root_path, run, third_party_path + +parser = argparse.ArgumentParser() +parser.add_argument( + "--no-binary-download", + help="Do not download binaries, must use depot_tools manually", + action="store_true") + + +def main(): + enable_ansi_colors() + os.chdir(root_path) + + args = parser.parse_args() + + if args.no_binary_download: + print "no binary download" + else: + print "binary download" + third_party.download_gn() + third_party.download_clang_format() + third_party.download_clang() + third_party.download_sccache() + third_party.maybe_download_sysroot() + + write_lastchange() + + mode = build_mode(default=None) + if mode is not None: + gn_gen(mode) + else: + gn_gen("release") + gn_gen("debug") + + +def write_if_not_exists(filename, contents): + if not os.path.exists(filename): + with open(filename, "w+") as f: + f.write(contents) + + +def write_lastchange(): + lastchange_file = os.path.join(libdeno_path, "build", "util", "LASTCHANGE") + committime_file = lastchange_file + ".committime" + write_if_not_exists( + lastchange_file, + "LASTCHANGE=c42e4ddbb7973bfb0c57a49ab6bf6dc432baad7e-\n") + write_if_not_exists(committime_file, "1535518087") + # TODO Properly we should call the following script, but it seems to cause + # a rebuild on every commit. + # run([ + # sys.executable, "build/util/lastchange.py", "-o", lastchange_file, + # "--source-dir", root_path, "--filter=" + # ]) + + +# If this text is found in args.gn, we assume it hasn't been hand edited. +gn_args_header = [ + "# This file is automatically generated by tools/setup.py.", + "# REMOVE THIS LINE to preserve any changes you make.", "" +] + + +def gn_string(s): + # In gn, strings are enclosed in double-quotes and use backslash as the + # escape character. The only escape sequences supported are: + # \" (for literal quote) + # \$ (for literal dollars sign) + # \\ (for literal backslash) + # Any other use of a backslash is treated as a literal backslash. + s = re.sub(r'("|\$|\\(?=["$\\]))', r'\\\1', s) + s = '"' + s + '"' + return s + + +def gn_args_are_generated(lines): + for line in lines: + if re.match("^\s*#.*REMOVE THIS LINE", line): + return True + return False + + +def read_gn_args(args_filename): + if not os.path.exists(args_filename): + return (None, False) # No content, not hand edited. + + with open(args_filename) as f: + lines = f.read().splitlines() + args = [l.strip() for l in lines if not re.match("^\s*(#|$)", l)] + hand_edited = not gn_args_are_generated(lines) + return (args, hand_edited) + + +def write_gn_args(args_filename, args): + assert not gn_args_are_generated(args) # No header -> hand crafted. + lines = gn_args_header + args + assert gn_args_are_generated(lines) # With header -> generated. + + # Ensure the directory where args.gn goes exists. + d = os.path.dirname(args_filename) + if not os.path.isdir(d): + os.makedirs(d) + + with open(args_filename, "w") as f: + f.write("\n".join(lines) + "\n") + + +def generate_gn_args(mode): + out = [] + if mode == "release": + out += ["is_official_build=true", "symbol_level=0"] + elif mode == "debug": + out += ["is_debug=true"] + else: + print "Bad mode {}. Use 'release' or 'debug' (default)" % mode + sys.exit(1) + + if "DENO_BUILD_ARGS" in os.environ: + out += os.environ["DENO_BUILD_ARGS"].split() + + # Check if sccache is in the path, and if so we set cc_wrapper. + cc_wrapper = find_executable("sccache") + if not cc_wrapper: + cc_wrapper = third_party.get_prebuilt_tool_path("sccache") + + if os.path.exists(cc_wrapper): + # The gn toolchain does not shell escape cc_wrapper, so do it here. + out += ['cc_wrapper=%s' % gn_string(shell_quote(cc_wrapper))] + if os.name == "nt": + # Disable treat_warnings_as_errors until this sccache bug is fixed: + # https://github.com/mozilla/sccache/issues/264 + out += ["treat_warnings_as_errors=false"] + + return out + + +def gn_exe(): + if "DENO_GN_PATH" in os.environ: + return os.environ["DENO_GN_PATH"] + else: + return third_party.get_buildtools_tool_path("gn") + + +# gn gen. +def gn_gen(mode): + os.environ["DENO_BUILD_MODE"] = mode + + # Rather than using gn gen --args we write directly to the args.gn file. + # This is to avoid quoting/escaping complications when passing overrides as + # command-line arguments. + args_filename = os.path.join(build_path(), "args.gn") + + # Check if args.gn exists, and if it was auto-generated or handcrafted. + existing_gn_args, hand_edited = read_gn_args(args_filename) + + # If args.gn wasn't handcrafted, regenerate it. + if hand_edited: + print "%s: Using gn options from hand edited '%s'." % (mode, + args_filename) + gn_args = existing_gn_args + else: + print "%s: Writing gn options to '%s'." % (mode, args_filename) + gn_args = generate_gn_args(mode) + if gn_args != existing_gn_args: + write_gn_args(args_filename, gn_args) + + for line in gn_args: + print " " + line + + run([gn_exe(), "gen", build_path()], + cwd=libdeno_path, + env=third_party.google_env()) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/setup_test.py b/tools/setup_test.py new file mode 100644 index 000000000..275c53e30 --- /dev/null +++ b/tools/setup_test.py @@ -0,0 +1,64 @@ +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import sys +from shutil import rmtree +from tempfile import mktemp +from setup import gn_string, read_gn_args, write_gn_args +from test_util import DenoTestCase, run_tests + + +class TestSetup(DenoTestCase): + def test_gn_string(self): + assert gn_string('abc') == '"abc"' + assert gn_string('foo$bar"baz') == '"foo\\$bar\\"baz"' + assert gn_string('do\\not\\escape') == '"do\\not\\escape"' + assert gn_string('so\\\\very\\"fun\\') == '"so\\\\\\very\\\\\\"fun\\"' + + def test_read_gn_args(self): + # Args file doesn't exist. + (args, + hand_edited) = read_gn_args("/baddir/hopefully/nonexistent/args.gn") + assert args is None + assert not hand_edited + + # Handwritten empty args file. + filename = mktemp() + with open(filename, "w"): + pass + (args, hand_edited) = read_gn_args(filename) + os.remove(filename) + assert args == [] + assert hand_edited + + # Handwritten non-empty args file. + expect_args = ['some_number=2', 'another_string="ran/dom#yes"'] + filename = mktemp() + with open(filename, "w") as f: + f.write("\n".join(expect_args + ["", "# A comment to be ignored"])) + (args, hand_edited) = read_gn_args(filename) + os.remove(filename) + assert args == expect_args + assert hand_edited + + def test_write_gn_args(self): + # Build a nonexistent path; write_gn_args() should call mkdir as needed. + d = mktemp() + filename = os.path.join(d, "args.gn") + assert not os.path.exists(d) + assert not os.path.exists(filename) + # Write some args. + args = ['lalala=42', 'foo_bar_baz="lorem ipsum dolor#amet"'] + write_gn_args(filename, args) + # Directory and args file should now be created. + assert os.path.isdir(d) + assert os.path.isfile(filename) + # Validate that the right contents were written. + (check_args, hand_edited) = read_gn_args(filename) + assert check_args == args + assert not hand_edited + # Clean up. + rmtree(d) + + +if __name__ == '__main__': + run_tests() diff --git a/tools/sha256sum.py b/tools/sha256sum.py new file mode 100644 index 000000000..99ca283b1 --- /dev/null +++ b/tools/sha256sum.py @@ -0,0 +1,70 @@ +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +""" +Computes the SHA256 hash and formats the result. +""" + +import argparse +from hashlib import sha256 +import os +import sys + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + + # Arguments specifying where input comes from. + # If multiple sources are specified, they are all concatenated together. + parser.add_argument( + "--input", + action="append", + dest="input", + type=str, + metavar="TEXT", + help="Hash literal text specified on the command line.") + parser.add_argument( + "--infile", + action="append", + dest="input", + type=read_file, + metavar="FILE", + help="Hash the contents of a file.") + + # Arguments dealing with output. + parser.add_argument( + "--format", + type=str, + dest="format", + default="%s", + metavar="TEMPLATE", + help="Format output using Python template (default = '%%s').") + parser.add_argument( + "--outfile", + dest="outfile", + type=argparse.FileType("wb"), + default=sys.stdout, + metavar="FILE", + help="Write the formatted hash to a file (default = stdout).") + + # Parse arguments. Print usage and exit if given no input. + args = parser.parse_args() + if (not args.input): + parser.print_usage() + return 1 + + # Compute the hash of all inputs concatenated together. + hasher = sha256() + for data in args.input: + hasher.update(data) + h = hasher.hexdigest() + + # Format and write to specified out file (or the default, stdout). + args.outfile.write(args.format % h) + + +def read_file(filename): + with open(filename, "rb") as f: + return f.read() + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/sync_gclient.py b/tools/sync_gclient.py new file mode 100755 index 000000000..5da301359 --- /dev/null +++ b/tools/sync_gclient.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Run this script if you are changing //gclient_config.py +# To update the deno_third_party git repo after running this, try the following: +# cd third_party +# find v8 -type f | grep -v "\.git" | \ +# xargs -I% git add -f --no-warn-embedded-repo "%" + +import third_party +import util + +util.enable_ansi_colors() +third_party.run_gclient_sync() diff --git a/tools/sync_node_modules.py b/tools/sync_node_modules.py new file mode 100755 index 000000000..5c5705d9a --- /dev/null +++ b/tools/sync_node_modules.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import third_party +import util +util.enable_ansi_colors() +third_party.run_yarn() diff --git a/tools/sync_python_modules.py b/tools/sync_python_modules.py new file mode 100755 index 000000000..0a40740f0 --- /dev/null +++ b/tools/sync_python_modules.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import third_party +import util +util.enable_ansi_colors() +third_party.run_pip() diff --git a/tools/target_test.py b/tools/target_test.py new file mode 100644 index 000000000..724dacdec --- /dev/null +++ b/tools/target_test.py @@ -0,0 +1,56 @@ +import os +import sys + +from test_util import DenoTestCase, run_tests +from util import build_mode, executable_suffix, tests_path, run, run_output + + +class TestTarget(DenoTestCase): + @staticmethod + def check_exists(filename): + if not os.path.exists(filename): + print "Required target doesn't exist:", filename + sys.exit(1) + + def test_executable_exists(self): + self.check_exists(self.deno_exe) + + def _test(self, executable): + "Test executable runs and exits with code 0." + bin_file = os.path.join(self.build_dir, executable + executable_suffix) + self.check_exists(bin_file) + run([bin_file], quiet=True) + + def test_libdeno(self): + self._test("libdeno_test") + + def test_no_color(self): + t = os.path.join(tests_path, "no_color.js") + result = run_output([self.deno_exe, "run", t], + merge_env={"NO_COLOR": "1"}, + quiet=True) + assert result.out.strip() == "noColor true" + t = os.path.join(tests_path, "no_color.js") + result = run_output([self.deno_exe, "run", t], quiet=True) + assert result.out.strip() == "noColor false" + + def test_exec_path(self): + cmd = [ + self.deno_exe, "run", "--allow-run", "--allow-env", + "tests/exec_path.ts" + ] + result = run_output(cmd, quiet=True) + print "exec_path", result + self.assertEqual(result.code, 0) + if os.name == "nt": + # When running in github actions, the windows drive letter of the + # executable path reported by deno has a different case than the one + # reported by python. + assert self.deno_exe.upper() in result.out.strip().upper() + assert self.deno_exe[1:] in result.out.strip() + else: + assert self.deno_exe in result.out.strip() + + +if __name__ == "__main__": + run_tests() diff --git a/tools/test_format.py b/tools/test_format.py new file mode 100755 index 000000000..c45e0861e --- /dev/null +++ b/tools/test_format.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# This program fails if ./tools/format.py changes any files. + +import sys +import subprocess +import util + + +def main(): + util.run([sys.executable, "tools/format.py"]) + result = util.run_output( + ["git", "status", "-uno", "--porcelain", "--ignore-submodules"], + exit_on_fail=True) + if result.out: + print "Run tools/format.py " + print result.out + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/tools/test_util.py b/tools/test_util.py new file mode 100644 index 000000000..6540f37aa --- /dev/null +++ b/tools/test_util.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Runs the full test suite. +# Usage: ./tools/test.py out/Debug +import argparse +import contextlib +import os +import sys +import unittest + +from util import (enable_ansi_colors, build_path, RESET, FG_RED, FG_GREEN, + executable_suffix, rmtree, tests_path) + + +class DenoTestCase(unittest.TestCase): + @classmethod + def setUpClass(cls): + args = parse_test_args() + + cls.build_dir = args.build_dir + cls.deno_exe = args.executable + + +# overload the test result class +class ColorTextTestResult(unittest.TextTestResult): + @contextlib.contextmanager + def color(self, code): + self.stream.write(code) + try: + yield + finally: + self.stream.write(RESET) + + def getDescription(self, test): + name = str(test) + if name.startswith("test_"): + name = name[5:] + return name + + def addSuccess(self, test): + with self.color(FG_GREEN): + super(ColorTextTestResult, self).addSuccess(test) + + def addError(self, test, err): + with self.color(FG_RED): + super(ColorTextTestResult, self).addError(test, err) + + def addFailure(self, test, err): + with self.color(FG_RED): + super(ColorTextTestResult, self).addFailure(test, err) + + +class ColorTextTestRunner(unittest.TextTestRunner): + resultclass = ColorTextTestResult + + +def create_test_arg_parser(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--failfast', '-f', action='store_true', help='Stop on first failure') + parser.add_argument( + '--verbose', '-v', action='store_true', help='Verbose output') + parser.add_argument("--executable", help="Use external executable of Deno") + parser.add_argument( + '--release', + action='store_true', + help='Test against release executable') + parser.add_argument( + '--pattern', '-p', help='Run tests that match provided pattern') + parser.add_argument( + '--build-dir', dest="build_dir", help='Deno build directory') + return parser + + +TestArgParser = create_test_arg_parser() + + +def parse_test_args(argv=None): + if argv is None: + argv = sys.argv[1:] + + args = TestArgParser.parse_args(argv) + + if args.executable and args.release: + raise argparse.ArgumentError( + None, "Path to executable is inferred from " + "--release, cannot provide both.") + + if not args.build_dir: + args.build_dir = build_path() + + if not args.executable: + args.executable = os.path.join(args.build_dir, + "deno" + executable_suffix) + + if not os.path.isfile(args.executable): + raise argparse.ArgumentError( + None, "deno executable not found at {}".format(args.executable)) + + return args + + +def filter_test_suite(suite, pattern): + filtered_tests = [] + + for test_case in suite: + if isinstance(test_case, unittest.TestSuite): + filtered_tests += filter_test_suite(test_case, pattern) + else: + if pattern in str(test_case): + filtered_tests.append(test_case) + + return filtered_tests + + +def run_tests(test_cases=None): + args = parse_test_args() + + loader = unittest.TestLoader() + + # if suite was not explicitly passed load test + # cases from calling module + if test_cases is None: + import __main__ + suite = loader.loadTestsFromModule(__main__) + else: + suite = unittest.TestSuite() + for test_case in test_cases: + suite.addTests(loader.loadTestsFromTestCase(test_case)) + + if args.pattern: + filtered_tests = filter_test_suite(suite, args.pattern) + suite = unittest.TestSuite(filtered_tests) + + runner = ColorTextTestRunner( + verbosity=args.verbose + 2, failfast=args.failfast) + + result = runner.run(suite) + if not result.wasSuccessful(): + sys.exit(1) diff --git a/tools/testdata/strace_summary.out b/tools/testdata/strace_summary.out new file mode 100644 index 000000000..7984b175a --- /dev/null +++ b/tools/testdata/strace_summary.out @@ -0,0 +1,39 @@ +% time seconds usecs/call calls errors syscall +------ ----------- ----------- --------- --------- ---------------- + 65.76 0.005881 98 60 munmap + 13.79 0.001233 2 462 mprotect + 7.13 0.000638 11 56 mmap + 3.57 0.000319 22 14 openat + 1.65 0.000148 10 14 fstat + 1.58 0.000141 7 20 read + 1.53 0.000137 7 18 close + 1.49 0.000133 16 8 madvise + 1.10 0.000098 98 1 execve + 0.30 0.000027 9 3 prctl + 0.29 0.000026 26 1 1 access + 0.25 0.000022 11 2 2 mkdir + 0.23 0.000021 7 3 write + 0.18 0.000016 4 4 set_robust_list + 0.16 0.000014 7 2 brk + 0.15 0.000013 13 1 pipe2 + 0.11 0.000010 3 3 clone + 0.11 0.000010 3 3 sigaltstack + 0.10 0.000009 4 2 stat + 0.10 0.000009 9 1 arch_prctl + 0.10 0.000009 9 1 epoll_create1 + 0.09 0.000008 8 1 epoll_ctl + 0.08 0.000007 3 2 getrandom + 0.04 0.000004 4 1 getcwd + 0.04 0.000004 2 2 sched_getaffinity + 0.03 0.000003 3 1 1 ioctl + 0.03 0.000003 1 3 futex + 0.00 0.000000 0 1 open + 0.00 0.000000 0 5 rt_sigaction + 0.00 0.000000 0 1 rt_sigprocmask + 0.00 0.000000 0 1 fcntl + 0.00 0.000000 0 1 1 readlink + 0.00 0.000000 0 1 set_tid_address + 0.00 0.000000 0 3 epoll_wait + 0.00 0.000000 0 2 prlimit64 +------ ----------- ----------- --------- --------- ---------------- +100.00 0.008943 704 5 total diff --git a/tools/testdata/time.out b/tools/testdata/time.out new file mode 100644 index 000000000..3ff409bd7 --- /dev/null +++ b/tools/testdata/time.out @@ -0,0 +1,18 @@ +Hello + Command being timed: "./target/debug/deno tests/003_relative_import.ts" + User time (seconds): 2.43 + System time (seconds): 0.05 + Percent of CPU this job got: 156% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.59 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 120380 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 41452 + Voluntary context switches: 75 + Involuntary context switches: 42 + Swaps: 0 + File system inputs: 0
\ No newline at end of file diff --git a/tools/testdata/travis_benchmark.json b/tools/testdata/travis_benchmark.json new file mode 100644 index 000000000..76fe3173f --- /dev/null +++ b/tools/testdata/travis_benchmark.json @@ -0,0 +1,3059 @@ +{ + "builds": [ + { + "id": 88053256, + "repository_id": 4647767, + "commit_id": 142218266, + "number": "3226", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Add repl", + "pull_request_number": 998, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "errored", + "started_at": "2018-10-16T06:02:26Z", + "finished_at": "2018-10-16T06:02:59Z", + "duration": 47, + "job_ids": [152008528, 152008529] + }, + { + "id": 88039269, + "repository_id": 4647767, + "commit_id": 142188592, + "number": "3224", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "`deno -v` should report typescript version", + "pull_request_number": 995, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-16T01:24:11Z", + "finished_at": "2018-10-16T01:32:43Z", + "duration": 980, + "job_ids": [151979421, 151979422] + }, + { + "id": 88038776, + "repository_id": 4647767, + "commit_id": 142187574, + "number": "3223", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "First pass at HTTP req/sec benchmark", + "pull_request_number": 996, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\n if [ ! $(which ab) ]; then\n sudo apt-get install apache2-utils\n fi\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-16T01:14:08Z", + "finished_at": "2018-10-16T01:23:02Z", + "duration": 1047, + "job_ids": [151978345, 151978346] + }, + { + "id": 88037765, + "repository_id": 4647767, + "commit_id": 142185325, + "number": "3222", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "`deno -v` should report typescript version", + "pull_request_number": 995, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-16T00:54:22Z", + "finished_at": "2018-10-16T01:03:53Z", + "duration": 1027, + "job_ids": [151976108, 151976109] + }, + { + "id": 88035921, + "repository_id": 4647767, + "commit_id": 142181355, + "number": "3221", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Inject typescript version from package.json during build through env! (`deno -v`)", + "pull_request_number": 997, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "$DENO_BUILD_PATH/deno -v", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-16T00:22:14Z", + "finished_at": "2018-10-16T00:31:13Z", + "duration": 970, + "job_ids": [151972101, 151972102] + }, + { + "id": 88035173, + "repository_id": 4647767, + "commit_id": 142179730, + "number": "3220", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Inject typescript version from package.json during build through env! (`deno -v`)", + "pull_request_number": 997, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./out/Default/deno -v", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "failed", + "started_at": "2018-10-16T00:11:05Z", + "finished_at": "2018-10-16T00:19:46Z", + "duration": 934, + "job_ids": [151970315, 151970316] + }, + { + "id": 88034680, + "repository_id": 4647767, + "commit_id": 142178667, + "number": "3219", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Inject typescript version from package.json during build through env! (`deno -v`)", + "pull_request_number": 997, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./out/release/deno -v", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "failed", + "started_at": "2018-10-16T00:02:53Z", + "finished_at": "2018-10-16T00:13:59Z", + "duration": 943, + "job_ids": [151969208, 151969210] + }, + { + "id": 88034308, + "repository_id": 4647767, + "commit_id": 142177845, + "number": "3218", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Inject typescript version from package.json during build through env! (`deno -v`)", + "pull_request_number": 997, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T23:56:19Z", + "finished_at": "2018-10-16T00:06:01Z", + "duration": 1021, + "job_ids": [151968442, 151968443] + }, + { + "id": 88033114, + "repository_id": 4647767, + "commit_id": 142175399, + "number": "3217", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Inject typescript version from package.json during build through env! (`deno -v`)", + "pull_request_number": 997, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T23:39:18Z", + "finished_at": "2018-10-15T23:48:27Z", + "duration": 993, + "job_ids": [151965974, 151965975] + }, + { + "id": 88029775, + "repository_id": 4647767, + "commit_id": 142168152, + "number": "3216", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "First pass at HTTP req/sec benchmark", + "pull_request_number": 996, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\n if [ ! $(which ab) ]; then\n sudo apt-get install apache2-utils\n fi\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T22:55:48Z", + "finished_at": "2018-10-15T23:04:46Z", + "duration": 1048, + "job_ids": [151958374, 151958378] + }, + { + "id": 88028304, + "repository_id": 4647767, + "commit_id": 142164828, + "number": "3215", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "First pass at HTTP req/sec benchmark", + "pull_request_number": 996, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\n if [ ! $(which ab) ]; then\n sudo apt-get install apache2-utils\n fi\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T22:36:34Z", + "finished_at": "2018-10-15T22:46:01Z", + "duration": 1080, + "job_ids": [151955204, 151955205] + }, + { + "id": 88025400, + "repository_id": 4647767, + "commit_id": 142158554, + "number": "3214", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "First pass at HTTP req/sec benchmark", + "pull_request_number": 996, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\n if [ ! $(which wrk) ]; then\n sudo apt-get install wrk\n fi\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "errored", + "started_at": "2018-10-15T22:03:14Z", + "finished_at": "2018-10-15T22:12:24Z", + "duration": 633, + "job_ids": [151949214, 151949215] + }, + { + "id": 88019352, + "repository_id": 4647767, + "commit_id": 142143927, + "number": "3213", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "First pass at HTTP req/sec benchmark", + "pull_request_number": 996, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\n if [ ! $(which wrk) ]; then\n apt-get install wrk\n fi\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "errored", + "started_at": "2018-10-15T21:03:30Z", + "finished_at": "2018-10-15T21:12:43Z", + "duration": 605, + "job_ids": [151936265, 151936266] + }, + { + "id": 88003226, + "repository_id": 4647767, + "commit_id": 142108538, + "number": "3212", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "`deno -v` should report typescript version", + "pull_request_number": 995, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T18:41:34Z", + "finished_at": "2018-10-15T18:50:57Z", + "duration": 1023, + "job_ids": [151902875, 151902876] + }, + { + "id": 87995060, + "repository_id": 4647767, + "commit_id": 142091478, + "number": "3209", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Fix a binary size regression", + "pull_request_number": 992, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T17:33:47Z", + "finished_at": "2018-10-15T17:43:46Z", + "duration": 1140, + "job_ids": [151886378, 151886379] + }, + { + "id": 87988978, + "repository_id": 4647767, + "commit_id": 142079021, + "number": "3207", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Exit cleanly on unrecognized arguments", + "pull_request_number": 990, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T16:43:54Z", + "finished_at": "2018-10-15T17:12:26Z", + "duration": 1957, + "job_ids": [151874417, 151874418] + }, + { + "id": 87973681, + "repository_id": 4647767, + "commit_id": 142047284, + "number": "3204", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "WIP repl inside deno, initial phase", + "pull_request_number": 947, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "failed", + "started_at": "2018-10-15T14:59:30Z", + "finished_at": "2018-10-15T15:08:01Z", + "duration": 978, + "job_ids": [151846133, 151846134] + }, + { + "id": 87971925, + "repository_id": 4647767, + "commit_id": 142043639, + "number": "3203", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "WIP repl inside deno, initial phase", + "pull_request_number": 947, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "failed", + "started_at": "2018-10-15T14:49:22Z", + "finished_at": "2018-10-15T14:57:42Z", + "duration": 948, + "job_ids": [151843047, 151843048] + }, + { + "id": 87966224, + "repository_id": 4647767, + "commit_id": 142031738, + "number": "3202", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "WIP repl inside deno, initial phase", + "pull_request_number": 947, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "errored", + "started_at": "2018-10-15T14:14:16Z", + "finished_at": "2018-10-15T14:15:10Z", + "duration": 47, + "job_ids": [151832638, 151832639] + }, + { + "id": 87965303, + "repository_id": 4647767, + "commit_id": 142029715, + "number": "3201", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "WIP repl inside deno, initial phase", + "pull_request_number": 947, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "errored", + "started_at": "2018-10-15T14:07:57Z", + "finished_at": "2018-10-15T14:08:44Z", + "duration": 43, + "job_ids": [151830770, 151830771] + }, + { + "id": 87954382, + "repository_id": 4647767, + "commit_id": 142007106, + "number": "3200", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Implement url joining utility function", + "pull_request_number": 991, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T12:54:45Z", + "finished_at": "2018-10-15T13:03:54Z", + "duration": 1022, + "job_ids": [151809886, 151809887] + }, + { + "id": 87944481, + "repository_id": 4647767, + "commit_id": 141986531, + "number": "3199", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Specify deno_dir location with env var DENO_DIR", + "pull_request_number": 970, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T11:33:43Z", + "finished_at": "2018-10-15T11:42:25Z", + "duration": 990, + "job_ids": [151791302, 151791303] + }, + { + "id": 87942227, + "repository_id": 4647767, + "commit_id": 141981706, + "number": "3198", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Specify deno_dir location with env var DENO_DIR", + "pull_request_number": 970, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T11:13:31Z", + "finished_at": "2018-10-15T11:22:13Z", + "duration": 1010, + "job_ids": [151787197, 151787199] + }, + { + "id": 87897848, + "repository_id": 4647767, + "commit_id": 141887249, + "number": "3197", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "Exit cleanly on unrecognized arguments", + "pull_request_number": 990, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T01:03:58Z", + "finished_at": "2018-10-15T01:12:43Z", + "duration": 999, + "job_ids": [151701418, 151701419] + }, + { + "id": 87896922, + "repository_id": 4647767, + "commit_id": 141884956, + "number": "3196", + "event_type": "pull_request", + "pull_request": true, + "pull_request_title": "better error message from tools/format.py", + "pull_request_number": 926, + "config": { + "dist": "trusty", + "cache": { + "ccache": true, + "directories": [ + "$CARGO_HOME", + "$RUSTUP_HOME", + "$HOMEBREW_PATH", + "$SCCACHE_DIR", + "third_party/v8/build/linux/debian_sid_amd64-sysroot/", + "third_party/v8/third_party/llvm-build/" + ] + }, + "group": "stable", + "deploy": [ + { + "file": "$DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz", + "true": { "repo": "denoland/deno", "tags": true }, + "api_key": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "provider": "releases", + "skip-cleanup": true + }, + { + "true": { + "repo": "denoland/deno", + "branch": "master", + "condition": "$BENCHMARK == 1" + }, + "provider": "pages", + "local-dir": "gh-pages", + "github-token": { + "secure": "RIwv515oDcPAlEvt7uG8FeSFi6Tz6ODJUOXcFj6FYUPszxJ7Cg1kBLKln+fNW5OeOc52VsaZb/vPZ85skyEM6zk2ijL9FcSnnfNEm548w77iH6G0sk09NgBTy6KRXES6NZHD9jN1YTWYkT2G1NQi7mLqxR8a8pnWTbeK5HhtSWGsZPtXqf5iQbvnWsmKA0/w+FIgKupU0xe/qsYjh0eMLYpZDUWoKO0VxBKJ/ix5Uz91aJTjMIcHHij+ALg4pk+FkDotdyx39XB9b25KDxGuaI7NxWjSPzDxs/ZBHP6QYDLO0ti93ftvLAxRoBKPFoZrXqAu3KG9anr9WvxE40DO9OdV0VX2ZUatMUQm3DpSheN8ml2sErFqjIInqlpkdOVDYORz7FikPxkb9DKt+iuyFfxPRa4YWJv2tg8+Hy/nRCQw69OoKqrSNJ8KJDB3OjYbRBtdHz79RLJhTsGZla6RiyXfM7crR7CbFjbwdbW3Pt60t24fhvXQ0SwR0QTgzS/ieYEQHq/9GtSQA/Tn4kdIkyN6BdOMrQd/aUtgKmNdqbSlfmWGNyNZIxHdB+3RrTNT1tagkRI4UHEUfEujpIdYKwLjv0Xmi/VtTM+zOSkzHsIWGPfHBmIGnXfAItUHqivQYJ15E+dzg3T1CEbBxkDQtvwien9Fa8/pBsMkyovl8ps=" + }, + "keep-history": true, + "skip-cleanup": true + } + ], + "matrix": { + "include": [ + { + "os": "linux", + "env": "BENCHMARK=1", + "dist": "trusty", + "sudo": "required" + }, + { "os": "osx", "dist": "trusty" } + ] + }, + "script": [ + "./tools/lint.py", + "bash -c \"sleep 2100; pkill ninja\" \u0026", + "./tools/build.py -j2", + "./tools/test.py $DENO_BUILD_PATH" + ], + ".result": "configured", + "install": [ + "nvm install v8", + "nvm use --delete-prefix v8", + "node -v", + "# OS X: install a private copy of homebrew.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" ]]; then\n export BREW=\"${HOMEBREW_PATH}bin/brew\"\n export PATH=\"${HOMEBREW_PATH}bin:$PATH\"\n if [[ ! -x \"$BREW\" ]]; then\n git clone git://github.com/homebrew/brew \"$HOMEBREW_PATH\"\n fi\n \"$BREW\" --version\nfi", + "# Install ccache (if necessary) and set it up.\nif [[ \"$TRAVIS_OS_NAME\" == \"osx\" \u0026\u0026 ! $(which ccache) ]]; then\n \"$BREW\" install ccache\nfi\nccache --version | head -n 1\nccache --max-size=1G", + "# Install Rust.\n# TODO(ry) Include rustc in third_party.\n# https://github.com/denoland/deno/issues/386\nif [ ! $(which rustc) ]; then\n curl -sSf https://sh.rustup.rs | sh -s -- -y\nfi\nrustc --version\ncargo --version", + "# Install and start sccache.\nif [ ! $(which sccache) ]; then\n cargo install sccache\nfi\nsccache --version\nsccache --start-server", + "# Install hyperfine (if benchmarking is enabled for this build).\nif [ $BENCHMARK ]; then\n if [ ! $(which hyperfine) ]; then\n cargo install hyperfine\n fi\n hyperfine --version\nfi", + "# Remove unnnecessary cargo and rustup directories.\n# This keeps the Travis CI cache small and fast.\nrm -rf \"$CARGO_HOME\"registry\nrm -rf \"$RUSTUP_HOME\"downloads\nrm -rf \"$RUSTUP_HOME\"tmp\nrm -rf \"$RUSTUP_HOME\"toolchains/*/etc\nrm -rf \"$RUSTUP_HOME\"toolchains/*/share" + ], + "language": "c++", + "global_env": [ + "CARGO_HOME=$HOME/.cargo/", + "RUSTUP_HOME=$HOME/.rustup/", + "RUST_BACKTRACE=1", + "HOMEBREW_PATH=$HOME/homebrew/", + "DENO_BUILD_ARGS=\"use_custom_libcxx=false use_sysroot=false\"", + "DENO_BUILD_PATH=$HOME/out/Default", + "DENO_BUILD_MODE=release", + "PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH", + "CCACHE_CPP2=yes", + "CCACHE_SLOPPINESS=time_macros", + "SCCACHE_DIR=$HOME/.sccache/", + "SCCACHE_CACHE_SIZE=1G", + "SCCACHE_IDLE_TIMEOUT=0" + ], + "after_script": ["ccache --show-stats", "sccache --stop-server"], + "after_success": [ + "# Run benchmarks and publish the result to github pages.\nif [ $BENCHMARK ]; then\n ./tools/benchmark.py $DENO_BUILD_PATH \u0026\u0026\n cp -r website/* gh-pages/\nfi\n" + ], + "before_deploy": [ + "gzip -c $DENO_BUILD_PATH/deno \u003e $DENO_BUILD_PATH/deno_${TRAVIS_OS_NAME}_x64.gz" + ], + "before_script": ["./tools/setup.py"] + }, + "state": "passed", + "started_at": "2018-10-15T00:34:50Z", + "finished_at": "2018-10-15T00:43:33Z", + "duration": 984, + "job_ids": [151699430, 151699431] + } + ], + "commits": [ + { + "id": 142218266, + "sha": "fd73a90539b34ff6eeda5bc5da536e97e7cc1f89", + "branch": "master", + "tag": null, + "message": "Remove old code", + "committed_at": "2018-10-16T05:48:46Z", + "author_name": "Andy Hayden", + "author_email": "andyhayden1@gmail.com", + "committer_name": "Andy Hayden", + "committer_email": "andyhayden1@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/998", + "pull_request_number": 998 + }, + { + "id": 142188592, + "sha": "95486a061161511714af59349c348e96ea92a5f0", + "branch": "master", + "tag": null, + "message": "`deno -v` should report typescript version\n\nFixes #993", + "committed_at": "2018-10-16T01:21:36Z", + "author_name": "Jinho Bang", + "author_email": "zino@chromium.org", + "committer_name": "Jinho Bang", + "committer_email": "zino@chromium.org", + "compare_url": "https://github.com/denoland/deno/pull/995", + "pull_request_number": 995 + }, + { + "id": 142187574, + "sha": "f112d1c5cade99ad8446e70982867b636f5443b9", + "branch": "master", + "tag": null, + "message": "First pass at http benchmark.", + "committed_at": "2018-10-16T01:13:07Z", + "author_name": "Ryan Dahl", + "author_email": "ry@tinyclouds.org", + "committer_name": "Ryan Dahl", + "committer_email": "ry@tinyclouds.org", + "compare_url": "https://github.com/denoland/deno/pull/996", + "pull_request_number": 996 + }, + { + "id": 142185325, + "sha": "dac5f097445f05ea7bcadcbe4ad4f4ddb251b86a", + "branch": "master", + "tag": null, + "message": "`deno -v` should report typescript version\n\nFixes #993", + "committed_at": "2018-10-16T00:52:33Z", + "author_name": "Jinho Bang", + "author_email": "zino@chromium.org", + "committer_name": "Jinho Bang", + "committer_email": "zino@chromium.org", + "compare_url": "https://github.com/denoland/deno/pull/995", + "pull_request_number": 995 + }, + { + "id": 142181355, + "sha": "8e3bc586a27c5471a7d1d92f881a5421be99c380", + "branch": "master", + "tag": null, + "message": "Fix unicode issue; print -v on AppVeyor/Travis", + "committed_at": "2018-10-16T00:20:26Z", + "author_name": "Kevin (Kun) \"Kassimo\" Qian", + "author_email": "kevinkassimo@gmail.com", + "committer_name": "Kevin (Kun) \"Kassimo\" Qian", + "committer_email": "kevinkassimo@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/997", + "pull_request_number": 997 + }, + { + "id": 142179730, + "sha": "69d571858564c191baa665b501851421c3fdf7cb", + "branch": "master", + "tag": null, + "message": "Fix unicode issue; print -v on AppVeyor/Travis", + "committed_at": "2018-10-16T00:09:32Z", + "author_name": "Kevin (Kun) \"Kassimo\" Qian", + "author_email": "kevinkassimo@gmail.com", + "committer_name": "Kevin (Kun) \"Kassimo\" Qian", + "committer_email": "kevinkassimo@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/997", + "pull_request_number": 997 + }, + { + "id": 142178667, + "sha": "df38bae0249730c013661446954497771adec530", + "branch": "master", + "tag": null, + "message": "Debug", + "committed_at": "2018-10-16T00:01:02Z", + "author_name": "Kevin (Kun) \"Kassimo\" Qian", + "author_email": "kevinkassimo@gmail.com", + "committer_name": "Kevin (Kun) \"Kassimo\" Qian", + "committer_email": "kevinkassimo@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/997", + "pull_request_number": 997 + }, + { + "id": 142177845, + "sha": "f73a2e54c18ba86ec0d6ead7744a7ab66d221c12", + "branch": "master", + "tag": null, + "message": "Debug", + "committed_at": "2018-10-15T23:55:27Z", + "author_name": "Kevin (Kun) \"Kassimo\" Qian", + "author_email": "kevinkassimo@gmail.com", + "committer_name": "Kevin (Kun) \"Kassimo\" Qian", + "committer_email": "kevinkassimo@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/997", + "pull_request_number": 997 + }, + { + "id": 142175399, + "sha": "3a0a7aec9874b0d01adca9591adf537587d2777d", + "branch": "master", + "tag": null, + "message": "Inject ts version during build through env", + "committed_at": "2018-10-15T23:34:26Z", + "author_name": "Kevin (Kun) \"Kassimo\" Qian", + "author_email": "kevinkassimo@gmail.com", + "committer_name": "Kevin (Kun) \"Kassimo\" Qian", + "committer_email": "kevinkassimo@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/997", + "pull_request_number": 997 + }, + { + "id": 142168152, + "sha": "06e8f5b6687330c49c8faf0d7da109110326e5e0", + "branch": "master", + "tag": null, + "message": "First pass at http benchmark.", + "committed_at": "2018-10-15T22:54:43Z", + "author_name": "Ryan Dahl", + "author_email": "ry@tinyclouds.org", + "committer_name": "Ryan Dahl", + "committer_email": "ry@tinyclouds.org", + "compare_url": "https://github.com/denoland/deno/pull/996", + "pull_request_number": 996 + }, + { + "id": 142164828, + "sha": "1e7d3f81ea9176e8f35dc499e31e2e21ed954fda", + "branch": "master", + "tag": null, + "message": "Use ab instead of wrk (debian doesnt have wrk)", + "committed_at": "2018-10-15T22:35:44Z", + "author_name": "Ryan Dahl", + "author_email": "ry@tinyclouds.org", + "committer_name": "Ryan Dahl", + "committer_email": "ry@tinyclouds.org", + "compare_url": "https://github.com/denoland/deno/pull/996", + "pull_request_number": 996 + }, + { + "id": 142158554, + "sha": "793a2bde892e61eadaa07ebe09c8c808db77d7b9", + "branch": "master", + "tag": null, + "message": "First pass at wrk benchmark.", + "committed_at": "2018-10-15T22:01:54Z", + "author_name": "Ryan Dahl", + "author_email": "ry@tinyclouds.org", + "committer_name": "Ryan Dahl", + "committer_email": "ry@tinyclouds.org", + "compare_url": "https://github.com/denoland/deno/pull/996", + "pull_request_number": 996 + }, + { + "id": 142143927, + "sha": "326604257421c88db4b07f6a6a32d5bd72efb734", + "branch": "master", + "tag": null, + "message": "First pass at wrk benchmark.", + "committed_at": "2018-10-15T21:01:26Z", + "author_name": "Ryan Dahl", + "author_email": "ry@tinyclouds.org", + "committer_name": "Ryan Dahl", + "committer_email": "ry@tinyclouds.org", + "compare_url": "https://github.com/denoland/deno/pull/996", + "pull_request_number": 996 + }, + { + "id": 142108538, + "sha": "4ddb2a80705450abb1c4e038c34dd0ff035356e0", + "branch": "master", + "tag": null, + "message": "`deno -v` should report typescript version\n\nFixes #993", + "committed_at": "2018-10-15T18:40:21Z", + "author_name": "Jinho Bang", + "author_email": "zino@chromium.org", + "committer_name": "Jinho Bang", + "committer_email": "zino@chromium.org", + "compare_url": "https://github.com/denoland/deno/pull/995", + "pull_request_number": 995 + }, + { + "id": 142091478, + "sha": "b9e9ac57e4b5727aa0076ba5f5fc7b6215d463fe", + "branch": "master", + "tag": null, + "message": "Fix a binary size regression\n\nThis patch changes Jumbo build to use only in debug mode.", + "committed_at": "2018-10-15T17:28:35Z", + "author_name": "Jinho Bang", + "author_email": "zino@chromium.org", + "committer_name": "Jinho Bang", + "committer_email": "zino@chromium.org", + "compare_url": "https://github.com/denoland/deno/pull/992", + "pull_request_number": 992 + }, + { + "id": 142079021, + "sha": "c30b2fd05b9218c476f52439b66ced5afe471e26", + "branch": "master", + "tag": null, + "message": "simplify error message", + "committed_at": "2018-10-15T16:42:58Z", + "author_name": "Ryan Dahl", + "author_email": "ry@tinyclouds.org", + "committer_name": "GitHub", + "committer_email": "noreply@github.com", + "compare_url": "https://github.com/denoland/deno/pull/990", + "pull_request_number": 990 + }, + { + "id": 142047284, + "sha": "f6d0de1276aecb5583aba5266205db465fd82598", + "branch": "master", + "tag": null, + "message": "formating", + "committed_at": "2018-10-15T14:58:19Z", + "author_name": "Shiva Prasanth", + "author_email": "kesavararapu.siva@gmail.com", + "committer_name": "Shiva Prasanth", + "committer_email": "kesavararapu.siva@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/947", + "pull_request_number": 947 + }, + { + "id": 142043639, + "sha": "2183fb826cecba6ef8bfb00344156d1ade752c7c", + "branch": "master", + "tag": null, + "message": "adding deno namespace to repl", + "committed_at": "2018-10-15T14:12:52Z", + "author_name": "Shiva Prasanth", + "author_email": "kesavararapu.siva@gmail.com", + "committer_name": "Shiva Prasanth", + "committer_email": "kesavararapu.siva@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/947", + "pull_request_number": 947 + }, + { + "id": 142031738, + "sha": "566d00715d0ff1674ff221689d4f7b4cbb0d2330", + "branch": "master", + "tag": null, + "message": "adding deno namespace to repl", + "committed_at": "2018-10-15T14:12:52Z", + "author_name": "Shiva Prasanth", + "author_email": "kesavararapu.siva@gmail.com", + "committer_name": "Shiva Prasanth", + "committer_email": "kesavararapu.siva@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/947", + "pull_request_number": 947 + }, + { + "id": 142029715, + "sha": "9e815bc6b8eeedec408091b57638bfb9096d43b3", + "branch": "master", + "tag": null, + "message": "thirdParty", + "committed_at": "2018-10-15T13:56:03Z", + "author_name": "Shiva Prasanth", + "author_email": "kesavararapu.siva@gmail.com", + "committer_name": "Shiva Prasanth", + "committer_email": "kesavararapu.siva@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/947", + "pull_request_number": 947 + }, + { + "id": 142007106, + "sha": "5a31e1eaf0a9ce89a19be30babd2048d39fe536d", + "branch": "master", + "tag": null, + "message": "Implement url joining utility function\n\nFixes #955", + "committed_at": "2018-10-15T08:22:54Z", + "author_name": "Jinho Bang", + "author_email": "zino@chromium.org", + "committer_name": "Jinho Bang", + "committer_email": "jinho.bang@samsung.com", + "compare_url": "https://github.com/denoland/deno/pull/991", + "pull_request_number": 991 + }, + { + "id": 141986531, + "sha": "7127136928e54c06b775402227cb6480a1dc9d8e", + "branch": "master", + "tag": null, + "message": "Use C:\\deno instead of c:\\deno", + "committed_at": "2018-10-15T11:31:48Z", + "author_name": "Amos Lim", + "author_email": "amoseui@gmail.com", + "committer_name": "Amos Lim", + "committer_email": "amoseui@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/970", + "pull_request_number": 970 + }, + { + "id": 141981706, + "sha": "21c8ce0f1a49ad909fc52ab82cd9b98c1ae02430", + "branch": "master", + "tag": null, + "message": "Let deno_dir_test run deno with or without env DENO_DIR", + "committed_at": "2018-10-15T11:08:30Z", + "author_name": "Amos Lim", + "author_email": "amoseui@gmail.com", + "committer_name": "Amos Lim", + "committer_email": "amoseui@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/970", + "pull_request_number": 970 + }, + { + "id": 141887249, + "sha": "44fc4ce9920340fefdcce3930269cf99dc4369bc", + "branch": "master", + "tag": null, + "message": "Exit cleanly on unrecognized arguments\n\nRefactor set_flags to return a Result", + "committed_at": "2018-10-15T00:56:41Z", + "author_name": "Andy Hayden", + "author_email": "andyhayden1@gmail.com", + "committer_name": "Andy Hayden", + "committer_email": "andyhayden1@gmail.com", + "compare_url": "https://github.com/denoland/deno/pull/990", + "pull_request_number": 990 + }, + { + "id": 141884956, + "sha": "d220136bee5c5645da905a6118bb3f0f0c893319", + "branch": "master", + "tag": null, + "message": "formating print", + "committed_at": "2018-10-15T00:34:03Z", + "author_name": "Shiva Prasanth", + "author_email": "kesavarapu.siva@gmail.com", + "committer_name": "GitHub", + "committer_email": "noreply@github.com", + "compare_url": "https://github.com/denoland/deno/pull/926", + "pull_request_number": 926 + } + ] +} diff --git a/tools/testdata/unit_test_output1.txt b/tools/testdata/unit_test_output1.txt new file mode 100644 index 000000000..4b208319f --- /dev/null +++ b/tools/testdata/unit_test_output1.txt @@ -0,0 +1,238 @@ +running 96 tests +test permSerialization_permW0N0E0 +... [32mok[0m +test permFromStringThrows_permW0N0E0 +... [32mok[0m +test compilerInstance_permW0N0E0 +... [32mok[0m +test compilerRun_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerRunMultiModule_permW0N0E0 +... [32mok[0m +test compilerRunCircularDependency_permW0N0E0 +Compiling modA +Compiling modB +... [32mok[0m +test compilerResolveModule_permW0N0E0 +... [32mok[0m +test compilerGetModuleDependencies_permW0N0E0 +... [32mok[0m +test compilerGetCompilationSettings_permW0N0E0 +... [32mok[0m +test compilerGetNewLine_permW0N0E0 +... [32mok[0m +test compilerGetScriptFileNames_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerRecompileFlag_permW0N0E0 +Compiling /root/project/foo/bar.ts +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerGetScriptKind_permW0N0E0 +... [32mok[0m +test compilerGetScriptVersion_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerGetScriptVersionUnknown_permW0N0E0 +... [32mok[0m +test compilerGetScriptSnapshot_permW0N0E0 +... [32mok[0m +test compilerGetCurrentDirectory_permW0N0E0 +... [32mok[0m +test compilerGetDefaultLibFileName_permW0N0E0 +... [32mok[0m +test compilerUseCaseSensitiveFileNames_permW0N0E0 +... [32mok[0m +test compilerReadFile_permW0N0E0 +... [32mok[0m +test compilerFileExists_permW0N0E0 +... [32mok[0m +test compilerResolveModuleNames_permW0N0E0 +... [32mok[0m +test consoleTestAssert_permW0N0E0 +... [32mok[0m +test consoleTestStringifyComplexObjects_permW0N0E0 +... [32mok[0m +test consoleTestStringifyCircular_permW0N0E0 +... [32mok[0m +test consoleTestStringifyWithDepth_permW0N0E0 +... [32mok[0m +test consoleTestError_permW0N0E0 +... [32mok[0m +test consoleDetachedLog_permW0N0E0 +Hello world +Hello world +Hello world +Hello world +Hello world +Hello world +... [32mok[0m +test fetchPerm_permW0N0E0 +... [32mok[0m +test headersAppend_permW0N0E0 +... [32mok[0m +test newHeaderTest_permW0N0E0 +... [32mok[0m +test newHeaderWithSequence_permW0N0E0 +... [32mok[0m +test newHeaderWithRecord_permW0N0E0 +... [32mok[0m +test newHeaderWithHeadersInstance_permW0N0E0 +... [32mok[0m +test headerAppendSuccess_permW0N0E0 +... [32mok[0m +test headerSetSuccess_permW0N0E0 +... [32mok[0m +test headerHasSuccess_permW0N0E0 +... [32mok[0m +test headerDeleteSuccess_permW0N0E0 +... [32mok[0m +test headerGetSuccess_permW0N0E0 +... [32mok[0m +test headerForEachSuccess_permW0N0E0 +... [32mok[0m +test envFailure_permW0N0E0 +... [32mok[0m +test filesStdioFileDescriptors_permW0N0E0 +... [32mok[0m +test filesCopyToStdout_permW0N0E0 +{ + "name": "deno", + "devDependencies": { + "@types/base64-js": "^1.2.5", + "@types/flatbuffers": "^1.9.0", + "@types/source-map-support": "^0.4.1", + "@types/text-encoding": "0.0.33", + "base64-js": "^1.3.0", + "flatbuffers": "^1.9.0", + "magic-string": "^0.22.5", + "prettier": "^1.14.0", + "rollup": "^0.63.2", + "rollup-plugin-alias": "^1.4.0", + "rollup-plugin-analyzer": "^2.1.0", + "rollup-plugin-commonjs": "^9.1.3", + "rollup-plugin-node-globals": "^1.2.1", + "rollup-plugin-node-resolve": "^3.3.0", + "rollup-plugin-string": "^2.0.2", + "rollup-plugin-typescript2": "^0.16.1", + "rollup-pluginutils": "^2.3.0", + "source-map-support": "^0.5.6", + "text-encoding": "0.6.4", + "tslint": "^5.10.0", + "tslint-eslint-rules": "^5.3.1", + "tslint-no-circular-imports": "^0.5.0", + "typescript": "3.0.3" + } +} +bytes written 860 +... [32mok[0m +test readFileSyncSuccess_permW0N0E0 +... [32mok[0m +test readFileSyncNotFound_permW0N0E0 +... [32mok[0m +test readFileSuccess_permW0N0E0 +... [32mok[0m +test readDirSyncNotDir_permW0N0E0 +... [32mok[0m +test readDirSyncNotFound_permW0N0E0 +... [32mok[0m +test writeFileSyncPerm_permW0N0E0 +... [32mok[0m +test writeFilePerm_permW0N0E0 +... [32mok[0m +test copyFileSyncPerm_permW0N0E0 +... [32mok[0m +test copyFilePerm_permW0N0E0 +... [32mok[0m +test mkdirSyncPerm_permW0N0E0 +... [32mok[0m +test makeTempDirSyncPerm_permW0N0E0 +... [32mok[0m +test statSyncSuccess_permW0N0E0 +... [32mok[0m +test statSyncNotFound_permW0N0E0 +... [32mok[0m +test lstatSyncSuccess_permW0N0E0 +... [32mok[0m +test lstatSyncNotFound_permW0N0E0 +... [32mok[0m +test statSuccess_permW0N0E0 +... [32mok[0m +test statNotFound_permW0N0E0 +... [32mok[0m +test lstatSuccess_permW0N0E0 +... [32mok[0m +test lstatNotFound_permW0N0E0 +... [32mok[0m +test renameSyncPerm_permW0N0E0 +... [32mok[0m +test readlinkSyncNotFound_permW0N0E0 +... [32mok[0m +test blobString_permW0N0E0 +... [32mok[0m +test blobBuffer_permW0N0E0 +... [32mok[0m +test blobSlice_permW0N0E0 +... [32mok[0m +test timeoutSuccess_permW0N0E0 +... [32mok[0m +test timeoutArgs_permW0N0E0 +... [32mok[0m +test timeoutCancelSuccess_permW0N0E0 +... [32mok[0m +test timeoutCancelMultiple_permW0N0E0 +... [32mok[0m +test timeoutCancelInvalidSilentFail_permW0N0E0 +... [32mok[0m +test intervalSuccess_permW0N0E0 +... [32mok[0m +test intervalCancelSuccess_permW0N0E0 +... [32mok[0m +test intervalOrdering_permW0N0E0 +... [32mok[0m +test intervalCancelInvalidSilentFail_permW0N0E0 +... [32mok[0m +test symlinkSyncPerm_permW0N0E0 +... [32mok[0m +test platformTransform_permW0N0E0 +... [32mok[0m +test atobSuccess_permW0N0E0 +... [32mok[0m +test btoaSuccess_permW0N0E0 +... [32mok[0m +test btoaFailed_permW0N0E0 +... [32mok[0m +test truncateSyncPerm_permW0N0E0 +... [32mok[0m +test truncatePerm_permW0N0E0 +... [32mok[0m +test evalErrorFormatted_permW0N0E0 +... [32mok[0m +test createExecTimeColumnsRegularData_permW0N0E0 +... [32mok[0m +test createExecTimeColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createBinarySizeColumnsRegularData_permW0N0E0 +... [32mok[0m +test createBinarySizeColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createThreadCountColumnsRegularData_permW0N0E0 +... [32mok[0m +test createThreadCountColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createSyscallCountColumnsRegularData_permW0N0E0 +... [32mok[0m +test createSyscallCountColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createSha1ListRegularData_permW0N0E0 +... [32mok[0m +test formatBytesPatterns_permW0N0E0 +... [32mok[0m +test formatSecondsPatterns_permW0N0E0 +... [32mok[0m +test getTravisDataSuccess_permW0N0E0 +... [32mok[0m + +test result: [32mok[0m. 96 passed; 0 failed; 0 ignored; 0 measured; 36 filtered out + diff --git a/tools/testdata/unit_test_output2.txt b/tools/testdata/unit_test_output2.txt new file mode 100644 index 000000000..5913d3b90 --- /dev/null +++ b/tools/testdata/unit_test_output2.txt @@ -0,0 +1,71 @@ +running 96 tests +test permSerialization_permW0N0E0 +... [32mok[0m +test permFromStringThrows_permW0N0E0 +... [32mok[0m +test compilerInstance_permW0N0E0 +... [32mok[0m +test compilerRun_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerRunMultiModule_permW0N0E0 +... [32mok[0m +test compilerRunCircularDependency_permW0N0E0 +Compiling modA +Compiling modB +... [32mok[0m +test compilerResolveModule_permW0N0E0 +... [32mok[0m +test compilerGetModuleDependencies_permW0N0E0 +... [32mok[0m +test compilerGetCompilationSettings_permW0N0E0 +... [32mok[0m +test compilerGetNewLine_permW0N0E0 +... [32mok[0m +test compilerGetScriptFileNames_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerRecompileFlag_permW0N0E0 +Compiling /root/project/foo/bar.ts +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerGetScriptKind_permW0N0E0 +... [32mok[0m +test compilerGetScriptVersion_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerGetScriptVersionUnknown_permW0N0E0 +... [32mok[0m +test compilerGetScriptSnapshot_permW0N0E0 +... [32mok[0m +test compilerGetCurrentDirectory_permW0N0E0 +... [32mok[0m +test compilerGetDefaultLibFileName_permW0N0E0 +... [32mok[0m +test compilerUseCaseSensitiveFileNames_permW0N0E0 +... [32mok[0m +test compilerReadFile_permW0N0E0 +... [32mok[0m +test compilerFileExists_permW0N0E0 +... [32mok[0m +test compilerResolveModuleNames_permW0N0E0 +... [32mok[0m +test consoleTestAssert_permW0N0E0 +... [32mok[0m +test consoleTestStringifyComplexObjects_permW0N0E0 +... [32mok[0m +test consoleTestStringifyCircular_permW0N0E0 +... [32mok[0m +test consoleTestStringifyWithDepth_permW0N0E0 +... [32mok[0m +test consoleTestError_permW0N0E0 +... [32mok[0m +test consoleDetachedLog_permW0N0E0 +Hello world +Hello world +Hello world +Hello world +Hello world +Hello world +... [32mok[0m +test fetchPerm_permW0N0E0 diff --git a/tools/testdata/unit_test_output3.txt b/tools/testdata/unit_test_output3.txt new file mode 100644 index 000000000..402261e76 --- /dev/null +++ b/tools/testdata/unit_test_output3.txt @@ -0,0 +1,268 @@ +Compiling /Users/rld/src/deno/js/unit_tests.ts +Compiling /Users/rld/src/deno/js/compiler_test.ts +Compiling /Users/rld/src/deno/js/test_util.ts +Compiling /Users/rld/src/deno/js/testing/testing.ts +Compiling /Users/rld/src/deno/js/testing/util.ts +Compiling /Users/rld/src/deno/js/console_test.ts +Compiling /Users/rld/src/deno/js/console.ts +Compiling /Users/rld/src/deno/js/fetch_test.ts +Compiling /Users/rld/src/deno/js/os_test.ts +Compiling /Users/rld/src/deno/js/files_test.ts +Compiling /Users/rld/src/deno/js/read_file_test.ts +Compiling /Users/rld/src/deno/js/read_dir_test.ts +Compiling /Users/rld/src/deno/js/write_file_test.ts +Compiling /Users/rld/src/deno/js/copy_file_test.ts +Compiling /Users/rld/src/deno/js/mkdir_test.ts +Compiling /Users/rld/src/deno/js/make_temp_dir_test.ts +Compiling /Users/rld/src/deno/js/stat_test.ts +Compiling /Users/rld/src/deno/js/rename_test.ts +Compiling /Users/rld/src/deno/js/read_link_test.ts +Compiling /Users/rld/src/deno/js/blob_test.ts +Compiling /Users/rld/src/deno/js/timers_test.ts +Compiling /Users/rld/src/deno/js/symlink_test.ts +Compiling /Users/rld/src/deno/js/platform_test.ts +Compiling /Users/rld/src/deno/js/text_encoding_test.ts +Compiling /Users/rld/src/deno/js/net_test.ts +Compiling /Users/rld/src/deno/js/trace_test.ts +Compiling /Users/rld/src/deno/js/truncate_test.ts +Compiling /Users/rld/src/deno/js/v8_source_maps_test.ts +Compiling /Users/rld/src/deno/website/app_test.js +Compiling /Users/rld/src/deno/website/app.js +running 96 tests +test permSerialization_permW0N0E0 +... [32mok[0m +test permFromStringThrows_permW0N0E0 +... [32mok[0m +test compilerInstance_permW0N0E0 +... [32mok[0m +test compilerRun_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerRunMultiModule_permW0N0E0 +... [32mok[0m +test compilerRunCircularDependency_permW0N0E0 +Compiling modA +Compiling modB +... [32mok[0m +test compilerResolveModule_permW0N0E0 +... [32mok[0m +test compilerGetModuleDependencies_permW0N0E0 +... [32mok[0m +test compilerGetCompilationSettings_permW0N0E0 +... [32mok[0m +test compilerGetNewLine_permW0N0E0 +... [32mok[0m +test compilerGetScriptFileNames_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerRecompileFlag_permW0N0E0 +Compiling /root/project/foo/bar.ts +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerGetScriptKind_permW0N0E0 +... [32mok[0m +test compilerGetScriptVersion_permW0N0E0 +Compiling /root/project/foo/bar.ts +... [32mok[0m +test compilerGetScriptVersionUnknown_permW0N0E0 +... [32mok[0m +test compilerGetScriptSnapshot_permW0N0E0 +... [32mok[0m +test compilerGetCurrentDirectory_permW0N0E0 +... [32mok[0m +test compilerGetDefaultLibFileName_permW0N0E0 +... [32mok[0m +test compilerUseCaseSensitiveFileNames_permW0N0E0 +... [32mok[0m +test compilerReadFile_permW0N0E0 +... [32mok[0m +test compilerFileExists_permW0N0E0 +... [32mok[0m +test compilerResolveModuleNames_permW0N0E0 +... [32mok[0m +test consoleTestAssert_permW0N0E0 +... [32mok[0m +test consoleTestStringifyComplexObjects_permW0N0E0 +... [32mok[0m +test consoleTestStringifyCircular_permW0N0E0 +... [32mok[0m +test consoleTestStringifyWithDepth_permW0N0E0 +... [32mok[0m +test consoleTestError_permW0N0E0 +... [32mok[0m +test consoleDetachedLog_permW0N0E0 +Hello world +Hello world +Hello world +Hello world +Hello world +Hello world +... [32mok[0m +test fetchPerm_permW0N0E0 +... [32mok[0m +test headersAppend_permW0N0E0 +... [32mok[0m +test newHeaderTest_permW0N0E0 +... [32mok[0m +test newHeaderWithSequence_permW0N0E0 +... [32mok[0m +test newHeaderWithRecord_permW0N0E0 +... [32mok[0m +test newHeaderWithHeadersInstance_permW0N0E0 +... [32mok[0m +test headerAppendSuccess_permW0N0E0 +... [32mok[0m +test headerSetSuccess_permW0N0E0 +... [32mok[0m +test headerHasSuccess_permW0N0E0 +... [32mok[0m +test headerDeleteSuccess_permW0N0E0 +... [32mok[0m +test headerGetSuccess_permW0N0E0 +... [32mok[0m +test headerForEachSuccess_permW0N0E0 +... [32mok[0m +test envFailure_permW0N0E0 +... [32mok[0m +test filesStdioFileDescriptors_permW0N0E0 +... [32mok[0m +test filesCopyToStdout_permW0N0E0 +{ + "name": "deno", + "devDependencies": { + "@types/base64-js": "^1.2.5", + "@types/flatbuffers": "^1.9.0", + "@types/source-map-support": "^0.4.1", + "@types/text-encoding": "0.0.33", + "base64-js": "^1.3.0", + "flatbuffers": "^1.9.0", + "magic-string": "^0.22.5", + "prettier": "^1.14.0", + "rollup": "^0.63.2", + "rollup-plugin-alias": "^1.4.0", + "rollup-plugin-analyzer": "^2.1.0", + "rollup-plugin-commonjs": "^9.1.3", + "rollup-plugin-node-globals": "^1.2.1", + "rollup-plugin-node-resolve": "^3.3.0", + "rollup-plugin-string": "^2.0.2", + "rollup-plugin-typescript2": "^0.16.1", + "rollup-pluginutils": "^2.3.0", + "source-map-support": "^0.5.6", + "text-encoding": "0.6.4", + "tslint": "^5.10.0", + "tslint-eslint-rules": "^5.3.1", + "tslint-no-circular-imports": "^0.5.0", + "typescript": "3.0.3" + } +} +bytes written 860 +... [32mok[0m +test readFileSyncSuccess_permW0N0E0 +... [32mok[0m +test readFileSyncNotFound_permW0N0E0 +... [32mok[0m +test readFileSuccess_permW0N0E0 +... [32mok[0m +test readDirSyncNotDir_permW0N0E0 +... [32mok[0m +test readDirSyncNotFound_permW0N0E0 +... [32mok[0m +test writeFileSyncPerm_permW0N0E0 +... [32mok[0m +test writeFilePerm_permW0N0E0 +... [32mok[0m +test copyFileSyncPerm_permW0N0E0 +... [32mok[0m +test copyFilePerm_permW0N0E0 +... [32mok[0m +test mkdirSyncPerm_permW0N0E0 +... [32mok[0m +test makeTempDirSyncPerm_permW0N0E0 +... [32mok[0m +test statSyncSuccess_permW0N0E0 +... [32mok[0m +test statSyncNotFound_permW0N0E0 +... [32mok[0m +test lstatSyncSuccess_permW0N0E0 +... [32mok[0m +test lstatSyncNotFound_permW0N0E0 +... [32mok[0m +test statSuccess_permW0N0E0 +... [32mok[0m +test statNotFound_permW0N0E0 +... [32mok[0m +test lstatSuccess_permW0N0E0 +... [32mok[0m +test lstatNotFound_permW0N0E0 +... [32mok[0m +test renameSyncPerm_permW0N0E0 +... [32mok[0m +test readlinkSyncNotFound_permW0N0E0 +... [32mok[0m +test blobString_permW0N0E0 +... [32mok[0m +test blobBuffer_permW0N0E0 +... [32mok[0m +test blobSlice_permW0N0E0 +... [32mok[0m +test timeoutSuccess_permW0N0E0 +... [32mok[0m +test timeoutArgs_permW0N0E0 +... [32mok[0m +test timeoutCancelSuccess_permW0N0E0 +... [32mok[0m +test timeoutCancelMultiple_permW0N0E0 +... [32mok[0m +test timeoutCancelInvalidSilentFail_permW0N0E0 +... [32mok[0m +test intervalSuccess_permW0N0E0 +... [32mok[0m +test intervalCancelSuccess_permW0N0E0 +... [32mok[0m +test intervalOrdering_permW0N0E0 +... [32mok[0m +test intervalCancelInvalidSilentFail_permW0N0E0 +... [32mok[0m +test symlinkSyncPerm_permW0N0E0 +... [32mok[0m +test platformTransform_permW0N0E0 +... [32mok[0m +test atobSuccess_permW0N0E0 +... [32mok[0m +test btoaSuccess_permW0N0E0 +... [32mok[0m +test btoaFailed_permW0N0E0 +... [32mok[0m +test truncateSyncPerm_permW0N0E0 +... [32mok[0m +test truncatePerm_permW0N0E0 +... [32mok[0m +test evalErrorFormatted_permW0N0E0 +... [32mok[0m +test createExecTimeColumnsRegularData_permW0N0E0 +... [32mok[0m +test createExecTimeColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createBinarySizeColumnsRegularData_permW0N0E0 +... [32mok[0m +test createBinarySizeColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createThreadCountColumnsRegularData_permW0N0E0 +... [32mok[0m +test createThreadCountColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createSyscallCountColumnsRegularData_permW0N0E0 +... [32mok[0m +test createSyscallCountColumnsIrregularData_permW0N0E0 +... [32mok[0m +test createSha1ListRegularData_permW0N0E0 +... [32mok[0m +test formatBytesPatterns_permW0N0E0 +... [32mok[0m +test formatSecondsPatterns_permW0N0E0 +... [32mok[0m +test getTravisDataSuccess_permW0N0E0 +... [32mok[0m + +test result: [32mok[0m. 96 passed; 0 failed; 0 ignored; 0 measured; 36 filtered out + diff --git a/tools/testdata/wrk1.txt b/tools/testdata/wrk1.txt new file mode 100644 index 000000000..8ad7cf739 --- /dev/null +++ b/tools/testdata/wrk1.txt @@ -0,0 +1,14 @@ +Running 10s test @ http://127.0.0.1:4500/ + 2 threads and 10 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 5.08ms 1.37ms 34.96ms 96.63% + Req/Sec 0.92k 51.83 1.00k 78.50% + Latency Distribution + 50% 1.96ms + 75% 2.02ms + 90% 2.43ms + 99% 6.25ms + 18381 requests in 10.00s, 0.89MB read + Socket errors: connect 0, read 18381, write 0, timeout 0 +Requests/sec: 1837.86 +Transfer/sec: 91.53KB diff --git a/tools/testdata/wrk2.txt b/tools/testdata/wrk2.txt new file mode 100644 index 000000000..4b68c6c8a --- /dev/null +++ b/tools/testdata/wrk2.txt @@ -0,0 +1,13 @@ +Running 10s test @ http://127.0.0.1:4544/ + 2 threads and 10 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 402.90us 1.15ms 1.25us 94.86% + Req/Sec 26.86k 2.01k 31.81k 78.71% + Latency Distribution + 50% 2.03ms + 75% 2.10ms + 90% 2.43ms + 99% 6.22ms + 539721 requests in 10.10s, 26.25MB read +Requests/sec: 53435.75 +Transfer/sec: 2.60MB diff --git a/tools/testdata/wrk3.txt b/tools/testdata/wrk3.txt new file mode 100644 index 000000000..4c115a096 --- /dev/null +++ b/tools/testdata/wrk3.txt @@ -0,0 +1,13 @@ +Running 10s test @ http://127.0.0.1:4544/ + 2 threads and 10 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 26.55ms 152.26ms 1.63s 97.45% + Req/Sec 48.26k 3.13k 61.41k 93.00% + Latency Distribution + 50% 1.98ms + 75% 2.06ms + 90% 2.47ms + 99% 6.36ms + 960491 requests in 10.00s, 80.61MB read +Requests/sec: 96037.58 +Transfer/sec: 8.06MB diff --git a/tools/third_party.py b/tools/third_party.py new file mode 100644 index 000000000..bdb5662af --- /dev/null +++ b/tools/third_party.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# This script contains helper functions to work with the third_party subrepo. + +import os +import re +import site +import sys +from tempfile import mkdtemp +from util import add_env_path, executable_suffix, libdeno_path, make_env, rmtree +from util import root_path, run, third_party_path + +depot_tools_path = os.path.join(third_party_path, "depot_tools") +prebuilt_path = os.path.join(root_path, "prebuilt") +python_packages_path = os.path.join(third_party_path, "python_packages") + +python_site_env = None + + +# Creates/modifies an environment so python can find packages that are bundled +# in the 'third_party' directory. +def python_env(env=None, merge_env=None): + if merge_env is None: + merge_env = {} + global python_site_env + + # Use site.addsitedir() to determine which search paths would be considered + # if 'third_party/python_packages' was a site-packages directory. + # PATH is also updated, so windows can find the DLLs that ship with pywin32. + if python_site_env is None: + python_site_env = {} + temp = os.environ["PATH"], sys.path + os.environ["PATH"], sys.path = "", [] + site.addsitedir(os.path.join(libdeno_path, + "build")) # Modifies PATH and sys.path. + site.addsitedir(python_packages_path) # Modifies PATH and sys.path. + python_site_env = {"PATH": os.environ["PATH"], "PYTHONPATH": sys.path} + os.environ["PATH"], sys.path = temp + + # Make a new environment object. + env = make_env(env=env, merge_env=merge_env) + # Apply PATH and PYTHONPATH from the site-packages environment. + add_env_path(python_site_env["PATH"], env=env, key="PATH") + add_env_path(python_site_env["PYTHONPATH"], env=env, key="PYTHONPATH") + + return env + + +# This function creates or modifies an environment so that it matches the +# expectations of various google tools (gn, gclient, etc). +def google_env(env=None, merge_env=None, depot_tools_path_=depot_tools_path): + if merge_env is None: + merge_env = {} + # Google tools need the python env too. + env = python_env(env=env, merge_env=merge_env) + + # Depot_tools to be in the PATH, before Python. + add_env_path(depot_tools_path_, env=env, prepend=True) + + if os.name == "nt": # Windows-only enviroment tweaks. + # We're not using Google's internal infrastructure. + if os.name == "nt" and not "DEPOT_TOOLS_WIN_TOOLCHAIN" in env: + env["DEPOT_TOOLS_WIN_TOOLCHAIN"] = "0" + + # The 'setup_toolchain.py' script does a good job finding the Windows + # SDK. Unfortunately, if any of the environment variables below are set + # (as vcvarsall.bat typically would), setup_toolchain absorbs them too, + # adding multiple identical -imsvc<path> items to CFLAGS. + # This small variation has no effect on compiler output, but it + # makes ninja rebuild everything, and causes sccache cache misses. + # TODO(piscisaureus): fix this upstream. + env["INCLUDE"] = "" + env["LIB"] = "" + env["LIBPATH"] = "" + + return env + + +# Run Yarn to install JavaScript dependencies. +def run_yarn(): + run(["yarn", "install"], cwd=third_party_path) + + +# Install python packages with pip. +def run_pip(): + # Install an recent version of pip into a temporary directory. The version + # that is bundled with python is too old to support the next step. + temp_python_home = mkdtemp() + pip_env = {"PYTHONUSERBASE": temp_python_home} + run([sys.executable, "-m", "pip", "install", "--upgrade", "--user", "pip"], + cwd=third_party_path, + merge_env=pip_env) + + # Install pywin32. + run([ + sys.executable, "-m", "pip", "install", "--upgrade", "--target", + python_packages_path, "--platform=win_amd64", "--only-binary=:all:", + "pypiwin32" + ], + cwd=third_party_path, + merge_env=pip_env) + + # Get yapf. + run([ + sys.executable, "-m", "pip", "install", "--upgrade", "--target", + python_packages_path, "yapf" + ], + cwd=third_party_path, + merge_env=pip_env) + + run([ + sys.executable, "-m", "pip", "install", "--upgrade", "--target", + python_packages_path, "pylint==1.5.6" + ], + cwd=third_party_path, + merge_env=pip_env) + + # Remove the temporary pip installation. + rmtree(temp_python_home) + + +# Run gclient to install other dependencies. +def run_gclient_sync(): + # Depot_tools will normally try to self-update, which will fail because + # it's not checked out from it's own git repository; gclient will then try + # to fix things up and not succeed, and and we'll end up with a huge mess. + # To work around this, we rename the `depot_tools` directory to + # `{root_path}/depot_tools_temp` first, and we set DEPOT_TOOLS_UPDATE=0 in + # the environment so depot_tools doesn't attempt to self-update. + # Since depot_tools is listed in .gclient_entries, gclient will install a + # fresh copy in `third_party/depot_tools`. + # If it all works out, we remove the depot_tools_temp directory afterwards. + depot_tools_temp_path = os.path.join(root_path, "depot_tools_temp") + + # Rename depot_tools to depot_tools_temp. + try: + os.rename(depot_tools_path, depot_tools_temp_path) + except OSError: + # If renaming failed, and the depot_tools_temp directory already exists, + # assume that it's still there because a prior run_gclient_sync() call + # failed half-way, before we got the chance to remove the temp dir. + # We'll use whatever is in the temp dir that was already there. + # If not, the user can recover by removing the temp directory manually. + if os.path.isdir(depot_tools_temp_path): + pass + else: + raise + + args = [ + "gclient", "sync", "--reset", "--shallow", "--no-history", "--nohooks" + ] + envs = { + "DEPOT_TOOLS_UPDATE": "0", + "GCLIENT_FILE": os.path.join(root_path, "gclient_config.py") + } + env = google_env(depot_tools_path_=depot_tools_temp_path, merge_env=envs) + run(args, cwd=third_party_path, env=env) + + # Delete the depot_tools_temp directory, but not before verifying that + # gclient did indeed install a fresh copy. + # Also check that `{depot_tools_temp_path}/gclient.py` exists, so a typo in + # this script won't accidentally blow out someone's home dir. + if (os.path.isdir(os.path.join(depot_tools_path, ".git")) + and os.path.isfile(os.path.join(depot_tools_path, "gclient.py")) + and os.path.isfile( + os.path.join(depot_tools_temp_path, "gclient.py"))): + rmtree(depot_tools_temp_path) + + +def get_platform_dir_name(): + if sys.platform == "win32": + return "win" + elif sys.platform == "darwin": + return "mac" + elif sys.platform.startswith("linux"): + return "linux64" + + +def get_prebuilt_tool_path(tool): + return os.path.join(prebuilt_path, get_platform_dir_name(), + tool + executable_suffix) + + +def get_buildtools_tool_path(tool): + return os.path.join(libdeno_path, "buildtools", get_platform_dir_name(), + tool + executable_suffix) + + +# Download the given item from Google storage. +def download_from_google_storage(item, bucket, base_dir): + download_script = os.path.join(depot_tools_path, + "download_from_google_storage.py") + sha1_file = os.path.join(base_dir, get_platform_dir_name(), + item + executable_suffix + ".sha1") + run([ + sys.executable, + download_script, + "--platform=" + sys.platform, + "--no_auth", + "--bucket=%s" % bucket, + "--sha1_file", + sha1_file, + ], + env=google_env()) + + +# Download the given item from Chrome Infrastructure Package Deployment. +def download_from_cipd(item, version): + cipd_exe = os.path.join(depot_tools_path, "cipd") + download_dir = os.path.join(libdeno_path, "buildtools", + get_platform_dir_name()) + + if sys.platform == "win32": + item += "windows-amd64" + elif sys.platform == "darwin": + item += "mac-amd64" + elif sys.platform.startswith("linux"): + item += "linux-amd64" + + # Init cipd if necessary. + if not os.path.exists(os.path.join(download_dir, ".cipd")): + run([ + cipd_exe, + "init", + download_dir, + "-force", + ], env=google_env()) + + run([ + cipd_exe, + "install", + item, + "git_revision:" + version, + "-root", + download_dir, + ], + env=google_env()) + + +# Download gn from Google storage. +def download_gn(): + download_from_cipd("gn/gn/", "152c5144ceed9592c20f0c8fd55769646077569b") + + +# Download clang-format from Google storage. +def download_clang_format(): + download_from_google_storage("clang-format", "chromium-clang-format", + os.path.join(libdeno_path, "buildtools")) + + +def download_sccache(): + download_from_google_storage("sccache", "denoland", prebuilt_path) + + +def download_hyperfine(): + download_from_google_storage("hyperfine", "denoland", prebuilt_path) + + +# Download clang by calling the clang update script. +def download_clang(): + update_script = os.path.join(libdeno_path, "v8", "tools", "clang", + "scripts", "update.py") + run([sys.executable, update_script], env=google_env()) + + +def maybe_download_sysroot(): + if sys.platform.startswith("linux"): + install_script = os.path.join(libdeno_path, "build", "linux", + "sysroot_scripts", "install-sysroot.py") + run([sys.executable, install_script, "--arch=amd64"], env=google_env()) diff --git a/tools/throughput_benchmark.py b/tools/throughput_benchmark.py new file mode 100755 index 000000000..f46503193 --- /dev/null +++ b/tools/throughput_benchmark.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +# Performs benchmark and append data to //website/data.json. +# If //website/data.json doesn't exist, this script tries to import it from +# gh-pages branch. +# To view the results locally run ./tools/http_server.py and visit +# http://localhost:4545/website + +import os +import sys +import time +import subprocess +import util + +MB = 1024 * 1024 +SERVER_ADDR = "0.0.0.0:4544" +CLIENT_ADDR = "127.0.0.1 4544" + + +def cat(deno_exe, megs): + size = megs * MB + start = time.time() + cmd = deno_exe + " run --allow-read " + cmd += "tests/cat.ts /dev/zero | head -c %s " % size + print cmd + subprocess.check_output(cmd, shell=True) + end = time.time() + return end - start + + +def tcp(deno_exe, megs): + size = megs * MB + # Run deno echo server in the background. + args = [ + deno_exe, "run", "--allow-net", "tests/echo_server.ts", SERVER_ADDR + ] + print args + echo_server = subprocess.Popen(args) + + time.sleep(5) # wait for deno to wake up. TODO racy. + try: + start = time.time() + nc_cmd = "nc " + CLIENT_ADDR + cmd = ("head -c %s /dev/zero " % size) + " | " + nc_cmd + print cmd + subprocess.check_output(cmd, shell=True) + end = time.time() + return end - start + finally: + echo_server.kill() + + +def main(): + deno_exe = sys.argv[1] + megs = int(sys.argv[2]) + if not deno_exe or not megs: + print "Usage ./tools/throughput_benchmark.py target/debug/deno 100" + sys.exit(1) + secs = tcp(sys.argv[1], megs) + print secs, "seconds" + + +if __name__ == '__main__': + main() diff --git a/tools/upload_website.py b/tools/upload_website.py new file mode 100755 index 000000000..e1d100f99 --- /dev/null +++ b/tools/upload_website.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os +import sys +import tempfile +from util import run, root_path, build_path + +# Probably run tools/docs.py first. +# AWS CLI must be installed separately. + +os.chdir(os.path.join(root_path, "website")) + +deno_exe = os.path.join(build_path(), "deno") +run([sys.executable, "../tools/build_website.py"]) + +# Invalidate the cache. +run([ + "aws", "cloudfront", "create-invalidation", "--distribution-id", + "E2HNK8Z3X3JDVG", "--paths", "/*" +]) + +run(["aws", "s3", "sync", ".", "s3://deno.land/"]) diff --git a/tools/util.py b/tools/util.py new file mode 100644 index 000000000..9a4c0ce02 --- /dev/null +++ b/tools/util.py @@ -0,0 +1,413 @@ +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import collections +import os +import re +import shutil +import select +import stat +import sys +import subprocess +import tempfile +import time + +if os.environ.get("NO_COLOR", None): + RESET = FG_READ = FG_GREEN = "" +else: + RESET = "\x1b[0m" + FG_RED = "\x1b[31m" + FG_GREEN = "\x1b[32m" + +executable_suffix = ".exe" if os.name == "nt" else "" + +root_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) +libdeno_path = os.path.join(root_path, "core", "libdeno") +tests_path = os.path.join(root_path, "tests") +third_party_path = os.path.join(root_path, "third_party") + + +def make_env(merge_env=None, env=None): + if env is None: + env = os.environ + env = env.copy() + if merge_env is None: + merge_env = {} + for key in merge_env.keys(): + env[key] = merge_env[key] + return env + + +def add_env_path(add, env, key="PATH", prepend=False): + dirs_left = env[key].split(os.pathsep) if key in env else [] + dirs_right = add.split(os.pathsep) if isinstance(add, str) else add + + if prepend: + dirs_left, dirs_right = dirs_right, dirs_left + + for d in dirs_right: + if not d in dirs_left: + dirs_left += [d] + + env[key] = os.pathsep.join(dirs_left) + + +def run(args, quiet=False, cwd=None, env=None, merge_env=None, shell=None): + args[0] = os.path.normpath(args[0]) + env = make_env(env=env, merge_env=merge_env) + if shell is None: + # Use the default value for 'shell' parameter. + # - Posix: do not use shell. + # - Windows: use shell; this makes .bat/.cmd files work. + shell = os.name == "nt" + if not quiet: + print " ".join([shell_quote(arg) for arg in args]) + rc = subprocess.call(args, cwd=cwd, env=env, shell=shell) + if rc != 0: + sys.exit(rc) + + +CmdResult = collections.namedtuple('CmdResult', ['out', 'err', 'code']) + + +def run_output(args, + quiet=False, + cwd=None, + env=None, + merge_env=None, + exit_on_fail=False): + if merge_env is None: + merge_env = {} + args[0] = os.path.normpath(args[0]) + if not quiet: + print " ".join(args) + env = make_env(env=env, merge_env=merge_env) + shell = os.name == "nt" # Run through shell to make .bat/.cmd files work. + p = subprocess.Popen( + args, + cwd=cwd, + env=env, + shell=shell, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + try: + out, err = p.communicate() + except subprocess.CalledProcessError as e: + p.kill() + p.wait() + raise e + retcode = p.poll() + if retcode and exit_on_fail: + sys.exit(retcode) + # Ignore Windows CRLF (\r\n). + return CmdResult( + out.replace('\r\n', '\n'), err.replace('\r\n', '\n'), retcode) + + +def shell_quote_win(arg): + if re.search(r'[\x00-\x20"^%~!@&?*<>|()=]', arg): + # Double all " quote characters. + arg = arg.replace('"', '""') + # Wrap the entire string in " quotes. + arg = '"' + arg + '"' + # Double any N backslashes that are immediately followed by a " quote. + arg = re.sub(r'(\\+)(?=")', r'\1\1', arg) + return arg + + +def shell_quote(arg): + if os.name == "nt": + return shell_quote_win(arg) + else: + # Python 2 has posix shell quoting built in, albeit in a weird place. + from pipes import quote + return quote(arg) + + +def symlink(target, name, target_is_dir=False): + if os.name == "nt": + from ctypes import WinDLL, WinError, GetLastError + from ctypes.wintypes import BOOLEAN, DWORD, LPCWSTR + + kernel32 = WinDLL('kernel32', use_last_error=False) + CreateSymbolicLinkW = kernel32.CreateSymbolicLinkW + CreateSymbolicLinkW.restype = BOOLEAN + CreateSymbolicLinkW.argtypes = (LPCWSTR, LPCWSTR, DWORD) + + # File-type symlinks can only use backslashes as separators. + target = os.path.normpath(target) + + # If the symlink points at a directory, it needs to have the appropriate + # flag set, otherwise the link will be created but it won't work. + if target_is_dir: + type_flag = 0x01 # SYMBOLIC_LINK_FLAG_DIRECTORY + else: + type_flag = 0 + + # Before Windows 10, creating symlinks requires admin privileges. + # As of Win 10, there is a flag that allows anyone to create them. + # Initially, try to use this flag. + unpriv_flag = 0x02 # SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE + r = CreateSymbolicLinkW(name, target, type_flag | unpriv_flag) + + # If it failed with ERROR_INVALID_PARAMETER, try again without the + # 'allow unprivileged create' flag. + if not r and GetLastError() == 87: # ERROR_INVALID_PARAMETER + r = CreateSymbolicLinkW(name, target, type_flag) + + # Throw if unsuccessful even after the second attempt. + if not r: + raise WinError() + else: + os.symlink(target, name) + + +def touch(fname): + if os.path.exists(fname): + os.utime(fname, None) + else: + open(fname, 'a').close() + + +# Recursively list all files in (a subdirectory of) a git worktree. +# * Optionally, glob patterns may be specified to e.g. only list files with a +# certain extension. +# * Untracked files are included, unless they're listed in .gitignore. +# * Directory names themselves are not listed (but the files inside are). +# * Submodules and their contents are ignored entirely. +# * This function fails if the query matches no files. +def git_ls_files(base_dir, patterns=None): + base_dir = os.path.abspath(base_dir) + args = [ + "git", "-C", base_dir, "ls-files", "-z", "--exclude-standard", + "--cached", "--modified", "--others" + ] + if patterns: + args += ["--"] + patterns + output = subprocess.check_output(args) + files = [ + os.path.normpath(os.path.join(base_dir, f)) for f in output.split("\0") + if f != "" + ] + if not files: + raise RuntimeError("git_ls_files: no files in '%s'" % base_dir + + (" matching %s" % patterns if patterns else "")) + return files + + +# The Python equivalent of `rm -rf`. +def rmtree(directory): + # On Windows, shutil.rmtree() won't delete files that have a readonly bit. + # Git creates some files that do. The 'onerror' callback deals with those. + def rm_readonly(func, path, _): + os.chmod(path, stat.S_IWRITE) + func(path) + + shutil.rmtree(directory, onerror=rm_readonly) + + +def build_mode(default="debug"): + if "DENO_BUILD_MODE" in os.environ: + return os.environ["DENO_BUILD_MODE"] + elif "--release" in sys.argv: + return "release" + else: + return default + + +# E.G. "target/debug" +def build_path(): + if "DENO_BUILD_PATH" in os.environ: + return os.environ["DENO_BUILD_PATH"] + else: + return os.path.join(root_path, "target", build_mode()) + + +def parse_exit_code(s): + codes = [int(d or 1) for d in re.findall(r'error(\d*)', s)] + if len(codes) > 1: + assert False, "doesn't support multiple error codes." + elif len(codes) == 1: + return codes[0] + else: + return 0 + + +# Attempts to enable ANSI escape code support. +# Returns True if successful, False if not supported. +def enable_ansi_colors(): + if os.name != 'nt': + return True # On non-windows platforms this just works. + return enable_ansi_colors_win10() + + +# The windows 10 implementation of enable_ansi_colors. +def enable_ansi_colors_win10(): + import ctypes + + # Function factory for errcheck callbacks that raise WinError on failure. + def raise_if(error_result): + def check(result, _func, args): + if result == error_result: + raise ctypes.WinError(ctypes.get_last_error()) + return args + + return check + + # Windows API types. + from ctypes.wintypes import BOOL, DWORD, HANDLE, LPCWSTR, LPVOID + LPDWORD = ctypes.POINTER(DWORD) + + # Generic constants. + NULL = ctypes.c_void_p(0).value + INVALID_HANDLE_VALUE = ctypes.c_void_p(-1).value + ERROR_INVALID_PARAMETER = 87 + + # CreateFile flags. + # yapf: disable + GENERIC_READ = 0x80000000 + GENERIC_WRITE = 0x40000000 + FILE_SHARE_READ = 0x01 + FILE_SHARE_WRITE = 0x02 + OPEN_EXISTING = 3 + # yapf: enable + + # Get/SetConsoleMode flags. + ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x04 + + kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) + + # HANDLE CreateFileW(...) + CreateFileW = kernel32.CreateFileW + CreateFileW.restype = HANDLE + CreateFileW.errcheck = raise_if(INVALID_HANDLE_VALUE) + # yapf: disable + CreateFileW.argtypes = (LPCWSTR, # lpFileName + DWORD, # dwDesiredAccess + DWORD, # dwShareMode + LPVOID, # lpSecurityAttributes + DWORD, # dwCreationDisposition + DWORD, # dwFlagsAndAttributes + HANDLE) # hTemplateFile + # yapf: enable + + # BOOL CloseHandle(HANDLE hObject) + CloseHandle = kernel32.CloseHandle + CloseHandle.restype = BOOL + CloseHandle.errcheck = raise_if(False) + CloseHandle.argtypes = (HANDLE, ) + + # BOOL GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode) + GetConsoleMode = kernel32.GetConsoleMode + GetConsoleMode.restype = BOOL + GetConsoleMode.errcheck = raise_if(False) + GetConsoleMode.argtypes = (HANDLE, LPDWORD) + + # BOOL SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode) + SetConsoleMode = kernel32.SetConsoleMode + SetConsoleMode.restype = BOOL + SetConsoleMode.errcheck = raise_if(False) + SetConsoleMode.argtypes = (HANDLE, DWORD) + + # Open the console output device. + conout = CreateFileW("CONOUT$", GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, 0, 0) + + # Get the current mode. + mode = DWORD() + GetConsoleMode(conout, ctypes.byref(mode)) + + # Try to set the flag that controls ANSI escape code support. + try: + SetConsoleMode(conout, mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING) + except WindowsError as e: # pylint:disable=undefined-variable + if e.winerror == ERROR_INVALID_PARAMETER: + return False # Not supported, likely an older version of Windows. + raise + finally: + CloseHandle(conout) + + return True + + +def extract_number(pattern, string): + matches = re.findall(pattern, string) + if len(matches) != 1: + return None + return int(matches[0]) + + +def extract_max_latency_in_milliseconds(pattern, string): + matches = re.findall(pattern, string) + if len(matches) != 1: + return None + num = float(matches[0][0]) + unit = matches[0][1] + if (unit == 'ms'): + return num + elif (unit == 'us'): + return num / 1000 + elif (unit == 's'): + return num * 1000 + + +def parse_wrk_output(output): + stats = {} + stats['req_per_sec'] = None + stats['max_latency'] = None + for line in output.split("\n"): + if stats['req_per_sec'] is None: + stats['req_per_sec'] = extract_number(r'Requests/sec:\s+(\d+)', + line) + if stats['max_latency'] is None: + stats['max_latency'] = extract_max_latency_in_milliseconds( + r'\s+99%(?:\s+(\d+.\d+)([a-z]+))', line) + return stats + + +def platform(): + return {"linux2": "linux", "darwin": "mac", "win32": "win"}[sys.platform] + + +def mkdtemp(): + # On Windows, set the base directory that mkdtemp() uses explicitly. If not, + # it'll use the short (8.3) path to the temp dir, which triggers the error + # 'TS5009: Cannot find the common subdirectory path for the input files.' + temp_dir = os.environ["TEMP"] if os.name == 'nt' else None + return tempfile.mkdtemp(dir=temp_dir) + + +# This function is copied from: +# https://gist.github.com/hayd/4f46a68fc697ba8888a7b517a414583e +# https://stackoverflow.com/q/52954248/1240268 +def tty_capture(cmd, bytes_input, timeout=5): + """Capture the output of cmd with bytes_input to stdin, + with stdin, stdout and stderr as TTYs.""" + # pty is not available on windows, so we import it within this function. + import pty + mo, so = pty.openpty() # provide tty to enable line-buffering + me, se = pty.openpty() + mi, si = pty.openpty() + fdmap = {mo: 'stdout', me: 'stderr', mi: 'stdin'} + + timeout_exact = time.time() + timeout + p = subprocess.Popen( + cmd, bufsize=1, stdin=si, stdout=so, stderr=se, close_fds=True) + os.write(mi, bytes_input) + + select_timeout = .04 #seconds + res = {'stdout': b'', 'stderr': b''} + while True: + ready, _, _ = select.select([mo, me], [], [], select_timeout) + if ready: + for fd in ready: + data = os.read(fd, 512) + if not data: + break + res[fdmap[fd]] += data + elif p.poll() is not None or time.time( + ) > timeout_exact: # select timed-out + break # p exited + for fd in [si, so, se, mi, mo, me]: + os.close(fd) # can't do it sooner: it leads to errno.EIO error + p.wait() + return p.returncode, res['stdout'], res['stderr'] diff --git a/tools/util_test.py b/tools/util_test.py new file mode 100755 index 000000000..b8098e463 --- /dev/null +++ b/tools/util_test.py @@ -0,0 +1,42 @@ +# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import os + +from test_util import DenoTestCase, run_tests +from util import (parse_exit_code, shell_quote_win, parse_wrk_output, + root_path) + + +class TestUtil(DenoTestCase): + def test_parse_exit_code(self): + assert parse_exit_code('hello_error54_world') == 54 + assert parse_exit_code('hello_error_world') == 1 + assert parse_exit_code('hello_world') == 0 + + def test_shell_quote_win(self): + assert shell_quote_win('simple') == 'simple' + assert shell_quote_win( + 'roof/\\isoprojection') == 'roof/\\isoprojection' + assert shell_quote_win('with space') == '"with space"' + assert shell_quote_win('embedded"quote') == '"embedded""quote"' + assert shell_quote_win( + 'a"b""c\\d\\"e\\\\') == '"a""b""""c\\d\\\\""e\\\\\\\\"' + + def test_parse_wrk_output(self): + f = open(os.path.join(root_path, "tools/testdata/wrk1.txt")) + stats = parse_wrk_output(f.read()) + assert stats['req_per_sec'] == 1837 + assert stats['max_latency'] == 6.25 + + f2 = open(os.path.join(root_path, "tools/testdata/wrk2.txt")) + stats2 = parse_wrk_output(f2.read()) + assert stats2['req_per_sec'] == 53435 + assert stats2['max_latency'] == 6.22 + + f3 = open(os.path.join(root_path, "tools/testdata/wrk3.txt")) + stats3 = parse_wrk_output(f3.read()) + assert stats3['req_per_sec'] == 96037 + assert stats3['max_latency'] == 6.36 + + +if __name__ == '__main__': + run_tests() |