Exemplo n.º 1
0
def test_as_cwd(tmpdir):
    with tmpdir.as_cwd():
        workdir.options.path = 'test_as_cwd'
        os.mkdir(workdir.options.path)
        with workdir.as_cwd():
            assert os.getcwd() == os.path.join(str(tmpdir), 'test_as_cwd')
        assert os.getcwd() == str(tmpdir)
Exemplo n.º 2
0
def task_package(args):
    release_version = args['--release-version']
    suppress_output = not args['--stream-command-output']
    workdir.sync()
    with workdir.as_cwd():
        config_dict = _get_config_or_die(calling_task='package',
                                         required_params=[
                                             'create_wheel', 'readme_to_rst',
                                             'pypi_repository',
                                             'pypi_verify_ssl'
                                         ])
        pypi_repository = config_dict['pypi_repository']
        pypi_verify_ssl = config_dict['pypi_verify_ssl']
        project_name = project.get_project_name()
        package_name = _get_package_name_or_die()
        _check_and_set_version(release_version, package_name, project_name,
                               pypi_repository, pypi_verify_ssl)
        if config_dict['readme_to_rst']:
            if project.project_has_readme_md():
                try:
                    project.convert_readme_to_rst()
                except project.ProjectError as e:
                    if 'could not convert' in str(e):
                        logger.error(e)
                        raise SystemExit(1)
                    else:
                        logger.info(e)
        _create_packages(config_dict['create_wheel'], suppress_output)
    logger.info('successfully packaged {}=={}'.format(project_name,
                                                      release_version))
Exemplo n.º 3
0
def task_register(args):
    release_version = args['--release-version']
    suppress_output = not args['--stream-command-output']
    workdir.sync()
    with workdir.as_cwd():
        config_dict = _get_config_or_die(
            calling_task='register',
            required_params=['pypi_repository', 'pypi_verify_ssl'])
        pypi_repository = config_dict['pypi_repository']
        pypi_verify_ssl = config_dict['pypi_verify_ssl']
        project_name = project.get_project_name()
        package_name = _get_package_name_or_die()
        packaged_files = project.get_packaged_files(package_name)
        if len(packaged_files) == 0:
            if not release_version:
                release_version = project.get_version(package_name)
                if not project.version_is_valid(release_version):
                    logger.info('using version 0.0 for registration purposes')
                    release_version = '0.0'
            _check_and_set_version(release_version, package_name, project_name,
                                   pypi_repository, pypi_verify_ssl)
            _create_packages(create_wheel=False,
                             suppress_output=suppress_output)
            packaged_files = project.get_packaged_files(package_name)
        package_path = packaged_files[0]
        result = _call_twine(['register', package_path], pypi_repository,
                             suppress_output)
        if result.exitval or '(400)' in result.stdout:
            _log_failure_and_die('failed to register project',
                                 result,
                                 log_full_result=suppress_output)
    logger.info('successfully registered {} with [{}]'.format(
        project_name, pypi_repository))
Exemplo n.º 4
0
def task_tag(args):
    if not os.path.isdir(workdir.options.path):
        logger.error('{} does not exist, cannot fetch tag version!'.format(
            workdir.options.path))
        raise SystemExit(1)
    with workdir.as_cwd():
        config_dict = _get_config_or_die(calling_task='upload',
                                         required_params=['git_remote_name'])
        git_remote_name = config_dict['git_remote_name']
        package_name = _get_package_name_or_die()
        release_version = project.get_version(package_name, ignore_cache=True)

    # this part actually happens outside of the working directory!
    repo = git.Repo()
    if repo.is_dirty():
        logger.error('cannot create tag, repo is dirty')
        raise SystemExit(1)
    if git_remote_name not in [x.name for x in repo.remotes]:
        logger.error(
            'cannot push tag to remote "{}" as it is not defined in repo'.
            format(git_remote_name))
        raise SystemExit(1)
    repo.create_tag(
        path=release_version,
        message='tag {} created by hatchery'.format(release_version))
    repo.remotes[git_remote_name].push(tags=True)
    logger.info('version {} tagged and pushed!'.format(release_version))
Exemplo n.º 5
0
def test_has_file(tmpdir):
    with tmpdir.as_cwd():
        workdir.options.path = 'test_has_file'
        workdir.create()
        with workdir.as_cwd():
            open('myfile', 'w').close()
        assert workdir.has_file('myfile') is True
        assert workdir.has_file('notthere') is False
Exemplo n.º 6
0
def _create_packages(create_wheel, suppress_output):
    with workdir.as_cwd():
        setup_args = ['sdist']
        if create_wheel:
            setup_args.append('bdist_wheel')
        result = executor.setup(setup_args, suppress_output=suppress_output)
        if result.exitval:
            _log_failure_and_die('failed to package project',
                                 result,
                                 log_full_result=suppress_output)
Exemplo n.º 7
0
def task_test(args):
    suppress_output = not args['--stream-command-output']
    workdir.sync()
    with workdir.as_cwd():
        config_dict = _get_config_or_die(calling_task='test',
                                         required_params=['test_command'])
        test_commands = config_dict['test_command']
        if not funcy.is_list(test_commands):
            test_commands = [test_commands]
        for cmd_str in test_commands:
            result = executor.call(cmd_str, suppress_output=suppress_output)
            if result.exitval:
                _log_failure_and_die('tests failed',
                                     result,
                                     log_full_result=suppress_output)
    logger.info('testing completed successfully')
Exemplo n.º 8
0
def task_upload(args):
    suppress_output = not args['--stream-command-output']
    if not os.path.isdir(workdir.options.path):
        logger.error('{} does not exist, nothing to upload!'.format(
            workdir.options.path))
        raise SystemExit(1)
    with workdir.as_cwd():
        config_dict = _get_config_or_die(
            calling_task='upload',
            required_params=['pypi_repository', 'pypi_verify_ssl'])
        pypi_repository = config_dict['pypi_repository']
        pypi_verify_ssl = config_dict['pypi_verify_ssl']
        project_name = project.get_project_name()
        package_name = _get_package_name_or_die()
        if project.multiple_packaged_versions(package_name):
            logger.error(
                'multiple package versions found, refusing to upload -- run `hatchery clean`'
            )
            raise SystemExit(1)
        release_version = project.get_version(package_name, ignore_cache=True)
        _valid_version_or_die(release_version)
        _latest_version_or_die(release_version, project_name, pypi_repository,
                               pypi_verify_ssl)
        result = _call_twine(['upload', 'dist/*'], pypi_repository,
                             suppress_output)
        if result.exitval:
            if 'not allowed to edit' in result.stderr:
                logger.error(
                    'could not upload packages, try `hatchery register`')
            else:
                _log_failure_and_die('failed to upload packages',
                                     result,
                                     log_full_result=suppress_output)
            raise SystemExit(1)
    logger.info('successfully uploaded {}=={} to [{}]'.format(
        project_name, release_version, pypi_repository))