Example #1
0
def _ecr_login(project, registry):
    command = ExternalCommandBuilder('aws', project,
                                     Reactor.current_instance())
    command.use_argument('ecr')
    command.use_argument('get-authorization-token')
    command.use_argument('--output')
    command.use_argument('text')
    command.use_argument('--query')
    command.use_argument('authorizationData[].authorizationToken')
    res = command.run("{}/{}".format(prepare_reports_directory(project),
                                     'docker_ecr_get_token'))
    if res.exit_code > 0:
        raise Exception("Error getting token")
    pass_token = base64.b64decode(res.report_lines[0])
    split = pass_token.split(":")
    command = ExternalCommandBuilder('docker', project,
                                     Reactor.current_instance())
    command.use_argument('login')
    command.use_argument('-u')
    command.use_argument('{0}').formatted_with(split[0])
    command.use_argument('-p')
    command.use_argument('{0}').formatted_with(split[1])
    command.use_argument('{0}').formatted_with(registry)
    res = command.run("{}/{}".format(prepare_reports_directory(project),
                                     'docker_ecr_docker_login'))
    if res.exit_code > 0:
        raise Exception("Error authenticating")
Example #2
0
def do_docker_package(project, logger):
    project.set_property_if_unset("docker_package_build_dir",
                                  "src/main/docker")
    project.set_property_if_unset("docker_package_build_image", project.name)
    project.set_property_if_unset("docker_package_build_version",
                                  project.version)
    report_dir = prepare_reports_directory(project)
    dist_dir = prepare_dist_directory(project)
    assert_can_execute(["docker", "--version"],
                       prerequisite="docker",
                       caller="docker_package",
                       env=None)
    # is true if user set verbose in build.py or from command line
    verbose = project.get_property("verbose")
    project.set_property_if_unset("docker_package_verbose_output", verbose)
    temp_build_img = 'pyb-temp-{}:{}'.format(project.name, project.version)
    build_img = get_build_img(project)
    logger.info("Executing primary stage docker build for image - {}.".format(
        build_img))
    # docker build --build-arg buildVersion=${BUILD_NUMBER} -t ${BUILD_IMG} src/
    command = ExternalCommandBuilder('docker', project,
                                     Reactor.current_instance())
    command.use_argument('build')
    command.use_argument('--build-arg')
    command.use_argument('buildVersion={0}').formatted_with_property(
        'docker_package_build_version')
    command.use_argument('-t')
    command.use_argument('{0}').formatted_with(temp_build_img)
    command.use_argument('{0}').formatted_with_property(
        'docker_package_build_dir')
    result = command.run("{}/{}".format(report_dir, 'docker_package_build'))
    if result.exit_code != 0:
        logger.error(result.error_report_lines)
        raise Exception("Error building primary stage docker image")
    write_docker_build_file(project=project,
                            logger=logger,
                            build_image=temp_build_img,
                            dist_dir=dist_dir)
    copy_dist_file(project=project, dist_dir=dist_dir, logger=logger)
    logger.info(
        "Executing secondary stage docker build for image - {}.".format(
            build_img))
    command = ExternalCommandBuilder('docker', project,
                                     Reactor.current_instance())
    command.use_argument('build')
    command.use_argument('-t')
    command.use_argument('{0}').formatted_with(build_img)
    command.use_argument('{0}').formatted_with(dist_dir)
    result = command.run("{}/{}".format(report_dir, 'docker_package_img'))
    if result.exit_code != 0:
        logger.error(result.error_report_lines)
        raise Exception("Error building docker image")
    logger.info(
        "Finished build docker image - {} - with dist file - {}".format(
            build_img, dist_dir))
Example #3
0
 def setUp(self):
     self.old_reactor = Reactor.current_instance()
     self.plugin_loader_mock = Mock(PluginLoader)
     self.logger = Mock()
     self.execution_manager = Mock(ExecutionManager)
     self.reactor = Reactor(
         self.logger, self.execution_manager, self.plugin_loader_mock)
Example #4
0
 def setUp(self):
     self.old_reactor = Reactor.current_instance()
     self.plugin_loader_mock = Mock(PluginLoader)
     self.logger = Mock()
     self.execution_manager = Mock(ExecutionManager)
     self.reactor = Reactor(
         self.logger, self.execution_manager, self.plugin_loader_mock)
Example #5
0
def _run_tag_cmd(project, local_img, remote_img, logger):
    logger.info("Tagging local docker image {} - {}".format(
        local_img, remote_img))
    report_dir = prepare_reports_directory(project)
    command = ExternalCommandBuilder('docker', project,
                                     Reactor.current_instance())
    command.use_argument('tag')
    command.use_argument('{0}').formatted_with(local_img)
    command.use_argument('{0}').formatted_with(remote_img)
    command.run("{}/{}".format(report_dir, 'docker_push_tag'))
Example #6
0
def get_all_dependencies_for_task(task):
    """
    Returns a list containing all tasks required by the given
    task function (but not the given task itself)
    """
    from pybuilder.reactor import Reactor
    task_name = task.__name__
    execution_manager = Reactor.current_instance().execution_manager
    task_and_all_dependencies = execution_manager.collect_all_transitive_tasks([task_name])
    return [dependency for dependency in task_and_all_dependencies if dependency.name != task_name]
Example #7
0
def get_all_dependencies_for_task(task):
    """
    Returns a list containing all tasks required by the given
    task function (but not the given task itself)
    """
    from pybuilder.reactor import Reactor

    task_name = task.__name__
    execution_manager = Reactor.current_instance().execution_manager
    task_and_all_dependencies = execution_manager.collect_all_transitive_tasks([task_name])
    return [dependency for dependency in task_and_all_dependencies if dependency.name != task_name]
Example #8
0
def _create_ecr_registry(fq_artifact, project):
    command = ExternalCommandBuilder('aws', project,
                                     Reactor.current_instance())
    command.use_argument('ecr')
    command.use_argument('describe-repositories')
    command.use_argument('--repository-names')
    command.use_argument('{0}').formatted_with(fq_artifact)
    res = command.run("{}/{}".format(prepare_reports_directory(project),
                                     'docker_ecr_registry_discover'))
    if res.exit_code > 0:
        command = ExternalCommandBuilder('aws', project,
                                         Reactor.current_instance())
        command.use_argument('ecr')
        command.use_argument('create-repository')
        command.use_argument('--repository-name')
        command.use_argument('{0}').formatted_with(fq_artifact)
        res = command.run("{}/{}".format(prepare_reports_directory(project),
                                         'docker_ecr_registry_create'))
        if res.exit_code > 0:
            raise Exception("Unable to create ecr registry")
Example #9
0
def _run_push_cmd(project, remote_img, logger):
    logger.info("Pushing remote docker image - {}".format(remote_img))
    report_dir = prepare_reports_directory(project)
    command = ExternalCommandBuilder('docker', project,
                                     Reactor.current_instance())
    command.use_argument('push')
    command.use_argument('{0}').formatted_with(remote_img)
    res = command.run("{}/{}".format(report_dir, 'docker_push_tag'))
    if res.exit_code > 0:
        logger.info(res.error_report_lines)
        raise Exception(
            "Error pushing image to remote registry - {}".format(remote_img))
Example #10
0
def build_with_pyb(target_dir, artifact_name, artifact_filter, config_settings=None, metadata_directory=None):
    from pybuilder.cli import main
    # verbose, debug, skip all optional...
    if main("-v", "-X", "-o", "--reset-plugins", "clean", "publish"):
        raise RuntimeError("PyBuilder build failed")

    from pybuilder.reactor import Reactor
    from pybuilder.plugins.python.distutils_plugin import _get_generated_artifacts
    reactor = Reactor.current_instance()
    project = reactor.project
    logger = reactor.logger
    dist_dir, artifacts = _get_generated_artifacts(project, logger)

    filtered = list(filter(artifact_filter, artifacts))
    if len(filtered) > 1:
        raise RuntimeError("Multiple project %ss found, don't know which to install: %r" % (artifact_name, filtered,))
    if not filtered:
        raise RuntimeError("Project did not generate any %ss install: %r" % (artifact_name, artifacts,))
    artifact = filtered[0]
    shutil.copy2(artifact, target_dir)

    return os.path.basename(artifact)
Example #11
0
def use_plugin(name, version=None, plugin_module_name=None):
    from pybuilder.reactor import Reactor
    reactor = Reactor.current_instance()
    if reactor is not None:
        reactor.require_plugin(name, version, plugin_module_name)
Example #12
0
def use_plugin(name):
    from pybuilder.reactor import Reactor

    reactor = Reactor.current_instance()
    if reactor is not None:
        reactor.require_plugin(name)
Example #13
0
        project.set_property_if_unset(key, DEFAULT_PROPERTIES[key])
        for arg in sys.argv:
            if str(arg).startswith(key + '='):
                project.set_property(key, str(arg).replace(key + '=', ''))
    # set project.name
    project.name = _get_repo_name(project, _get_repo_path(project))
    # set project.version
    set_version_from_git_tag(project, logger)
    # save current properties
    for key in DEFAULT_PROPERTIES:
        project.set_property_if_unset(key + SAVED_PROP_SUFFIX,
                                      project.get_property(key))


# if we're in working project - update version according git tag
if Reactor.current_instance():
    force_semver_git_tag_plugin(Reactor.current_instance().project,
                                Reactor.current_instance().logger)


@init
def initialize_semver_git_tag(project):
    """ Init default plugin project properties. """
    project.plugin_depends_on('GitPython')
    project.plugin_depends_on('semver')
    # Part for develop increment - 'major', 'minor' or 'patch'
    project.set_property_if_unset('semver_git_tag_increment_part', 'patch')
    # Git repository directory path.
    # If None parent directory for build.py will be used
    project.set_property_if_unset('semver_git_tag_repo_dir', None)
    # Relative path with name of changelog file.
Example #14
0
    else:
        raise
except subprocess.CalledProcessError as e:
    if e.returncode == 127:
        install_pyb()
    else:
        sys.exit(e.returncode)

try:
    from pybuilder.cli import main
    # verbose, debug, skip all optional...
    if main("-v", "-X", "-o", "--reset-plugins", "clean", "package"):
        raise RuntimeError("PyBuilder build failed")

    from pybuilder.reactor import Reactor
    reactor = Reactor.current_instance()
    project = reactor.project
    dist_dir = project.expand_path("$dir_dist")

    for src_file in glob.glob(os.path.join(dist_dir, "*")):
        file_name = os.path.basename(src_file)
        target_file_name = os.path.join(script_dir, file_name)
        if os.path.exists(target_file_name):
            if os.path.isdir(target_file_name):
                shutil.rmtree(target_file_name)
            else:
                os.remove(target_file_name)
        shutil.move(src_file, script_dir)
    setup_args = sys.argv[1:]
    subprocess.check_call([sys.executable, "setup.py"] + setup_args,
                          cwd=script_dir)
Example #15
0
def use_plugin(name):
    from pybuilder.reactor import Reactor
    reactor = Reactor.current_instance()
    if reactor is not None:
        reactor.require_plugin(name)
Example #16
0
def use_plugin(name, version=None, plugin_module_name=None):
    from pybuilder.reactor import Reactor
    reactor = Reactor.current_instance()
    if reactor is not None:
        reactor.require_plugin(name, version, plugin_module_name)
Example #17
0
        It allows to set properties before other plugins
        and download it from needed PyPi index"""
    # workaround for command line properties
    # until https://github.com/pybuilder/pybuilder/pull/515
    if not project.get_property('pypi_server'):
        # try to get property from command line arguments
        for arg in sys.argv:
            if str(arg).startswith('pypi_server='):
                project.set_property('pypi_server',
                                     str(arg).replace('pypi_server=', ''))
                break
    if project.get_property('pypi_server'):
        use_pypi_server_plugin(project, logger)


init_pypi_server_plugin(Reactor.current_instance().project,
                        Reactor.current_instance().logger)


@before("prepare", only_once=True)
def reinitialize_pypi_server_plugin(project, logger):
    """ Re-init properties if `pypi_server` was changed on initialization
        stage"""
    if project.get_property('pypi_server'):
        if (project.get_property('pypi_server') !=
                project.get_property('pypi_server_on_import_plugin')):
            logger.warn(
                "Property `pypi_server` defined on initialize stage. "
                "Please use command line `pyb ... -P pypi_server=...`, "
                "otherwise some packages could be downloaded "
                "from default PyPi index.")