Esempio n. 1
0
    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)
Esempio n. 2
0
    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!")
Esempio n. 3
0
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
Esempio n. 4
0
 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!")
Esempio n. 5
0
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
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
 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!")