def exec_build(self, config): print ("DOCKER running " + config.platform + "@" + config.arch + " => " + config.name) is_win32 = utils.is_win32(config.platform) mount_point = "C:/j2v8" if is_win32 else "/j2v8" shell_invoke = "cmd /C" if is_win32 else "/bin/bash -c" cmd_separator = "&&" if is_win32 else ";" build_cmd = config.custom_cmd or (cmd_separator + " ").join(config.build(config)) extra_options = "" # NOTE: the --memory 3g setting is imporant for windows docker builds, # since the windows docker engine defaults to a 1gb limit which is not enough to run the Node.js build with MSBuild if (utils.is_win32(config.platform)): extra_options = "--memory 3g" else: extra_options = "--privileged" image_name = self.get_image_name(config) container_name = self.get_container_name(config) docker_run_str = "docker run " + extra_options + " -P -v $CWD:" + mount_point + \ " --name " + container_name + " " + image_name + " " + shell_invoke + " \"cd $BUILD_CWD" + cmd_separator + " " + build_cmd + "\"" docker_run_str = self.inject_env(docker_run_str, config) print docker_run_str self.exec_host_cmd(docker_run_str, config)
def health_check(self, config): print "Verifying Docker build-system status..." try: # general docker availability check self.exec_host_cmd("docker --version", config) # check the currently active container technology (linux vs. windows containers) # NOTE: the additional newlines are important for the regex matching version_str = utils.execute_to_str("docker version") + "\n\n" server_match = re.search(r"Server:(.*)\n\n", version_str + "\n\n", re.DOTALL) if (server_match is None or server_match.group(1) is None): utils.cli_exit("ERROR: Unable to determine docker server version from version string: \n\n" + version_str) version_match = re.search(r"^ OS/Arch:\s+(.*)$", server_match.group(1), re.MULTILINE) if (version_match is None): utils.cli_exit("ERROR: Unable to determine docker server platform from version string: \n\n" + version_str) docker_version = version_match.group(1) docker_req_platform = "windows" if utils.is_win32(config.platform) else "linux" # check if the docker engine is running the expected container platform (linux or windows) if (docker_req_platform not in docker_version): utils.cli_exit("ERROR: docker server must be using " + docker_req_platform + " containers, instead found server version using: " + docker_version) except subprocess.CalledProcessError: utils.cli_exit("ERROR: Failed Docker build-system health check, make sure Docker is available and running!")
def copyNativeLibs(config): """ Copy the compiled native J2V8 library (.dll/.dylib/.so) into the Java resources tree for inclusion into the later built Java JAR. """ platform_cmake_out = config.inject_env(cmake_out_dir) if (utils.is_win32(config.platform)): platform_cmake_out += "Debug/" if hasattr(config, 'debug') and config.debug else "Release/" lib_pattern = config.inject_env(platform_cmake_out + "*j2v8-*$FILE_ABI.$LIB_EXT") platform_lib_path = glob.glob(lib_pattern) if (len(platform_lib_path) == 0): utils.cli_exit("ERROR: Could not find native library for inclusion in platform target package") platform_lib_path = platform_lib_path[0] copy_cmds = [] lib_target_path = None if (utils.is_android(config.platform)): lib_target_path = config.inject_env("src/main/jniLibs/$FILE_ABI") # directory path copy_cmds += mkdir(lib_target_path) lib_target_path += "/libj2v8.so" # final lib file path else: lib_target_path = "src/main/resources/" print "Copying native lib from: " + platform_lib_path + " to: " + lib_target_path copy_cmds += cp(platform_lib_path + " " + lib_target_path) return copy_cmds
def health_check(self, config): try: shell_check_cmd = "ver" if utils.is_win32( config.platform) else "bash --version" self.exec_cmd(shell_check_cmd, config) except subprocess.CalledProcessError: sys.exit("ERROR: Failed Shell build-system health check!")
def exec_build(self, config): print ("VAGRANT running " + config.platform + "@" + config.arch + " => " + config.name) vagrant_run_cmd = None if (utils.is_win32(config.platform)): cmd_sep = "; " build_cmd = config.custom_cmd or cmd_sep.join(config.build(config)) build_cmd = self.inject_env("cd $BUILD_CWD" + cmd_sep + build_cmd, config) vagrant_run_cmd = "vagrant powershell -c \"Invoke-Command { " + build_cmd + " } -ErrorAction Stop\"" else: cmd_sep = "; " build_cmd = config.custom_cmd or cmd_sep.join(config.build(config)) build_cmd = self.inject_env("cd $BUILD_CWD" + cmd_sep + build_cmd, config) vagrant_run_cmd = "vagrant ssh -c '" + build_cmd + "'" self.exec_host_cmd(vagrant_run_cmd, config)
def exec_build(self, config): print("VAGRANT running " + config.platform + "@" + config.arch + " => " + config.name) vagrant_run_cmd = None if (utils.is_win32(config.platform)): cmd_sep = "; " build_cmd = config.custom_cmd or cmd_sep.join(config.build(config)) build_cmd = self.inject_env("cd $BUILD_CWD" + cmd_sep + build_cmd, config) vagrant_run_cmd = "vagrant powershell -c \"Invoke-Command { " + build_cmd + " } -ErrorAction Stop\"" else: cmd_sep = "; " build_cmd = config.custom_cmd or cmd_sep.join(config.build(config)) build_cmd = self.inject_env("cd $BUILD_CWD" + cmd_sep + build_cmd, config) vagrant_run_cmd = "vagrant ssh -c '" + build_cmd + "'" self.exec_host_cmd(vagrant_run_cmd, config)
def health_check(self, config): try: shell_check_cmd = "ver" if utils.is_win32(config.platform) else "bash --version" self.exec_cmd(shell_check_cmd, config) except subprocess.CalledProcessError: utils.cli_exit("ERROR: Failed Shell build-system health check!")