Esempio n. 1
0
File: clean.py Progetto: jamofer/cpm
def clean_project(compilation_service):
    try:
        compilation_service.clean()
    except NotACpmProject:
        return Result(FAIL, f'error: not a cpm project')

    return Result(OK, f'clean finished')
Esempio n. 2
0
def prep_project(compilation_service, target='default'):
    try:
        compilation_service.update(target)
    except NotACpmProject:
        return Result(FAIL, f'error: not a cpm project')

    return Result(OK, f'CMakeLists.txt ready')
Esempio n. 3
0
def clean_project(compilation_service):
    try:
        compilation_service.clean()
    except ProjectDescriptorNotFound:
        return Result(FAIL, f'error: not a cpm project')

    return Result(OK, f'clean finished')
Esempio n. 4
0
def new_project(creation_service, options=CreationOptions()):
    if creation_service.exists(options.directory):
        return Result(FAIL,
                      f'error: directory {options.directory} already exists')

    creation_service.create(options)
    return Result(OK, f'Created project {options.project_name}')
Esempio n. 5
0
def init_project(creation_service,
                 options=CreationOptions(init_from_existing_sources=True)):
    if creation_service.exists(options.directory):
        directory_print = 'current directory' if options.directory == '.' else f'directory {options.directory}'
        return Result(
            FAIL, f'error: {directory_print} already contains a cpm project')

    creation_service.create(options)
    return Result(OK, f'Created project {options.project_name}')
Esempio n. 6
0
def install_bit(install_service, name, version='latest'):
    try:
        install_service.install(name, version)
    except ProjectDescriptorNotFound:
        return Result(FAIL, 'error: not a cpm project')
    except BitNotFound:
        return Result(FAIL, f'error: bit {name} not found in CPM Hub')
    except HttpConnectionError as error:
        return Result(FAIL, f'error: failed to connect to CPM Hub at {error}')

    return Result(OK, f'installed bit {name}:{version}')
Esempio n. 7
0
def install_project_bits(install_service):
    try:
        install_service.install_all()
    except ProjectDescriptorNotFound:
        return Result(FAIL, 'error: not a cpm project')
    except BitNotFound as e:
        return Result(FAIL, f'error: bit {e} not found in CPM Hub')
    except HttpConnectionError as error:
        return Result(FAIL, f'error: failed to connect to CPM Hub at {error}')

    return Result(OK, f'installed bits')
Esempio n. 8
0
def new_project(creation_service, options=CreationOptions()):
    try:
        if creation_service.exists(options.directory):
            return Result(
                FAIL, f'error: directory {options.directory} already exists')
        creation_service.create(options)
    except TemplateNotFound:
        return Result(
            FAIL,
            f'error: template {options.template_name}:{options.template_version} not found'
        )
    return Result(OK, f'Created project {options.project_name}')
Esempio n. 9
0
File: test.py Progetto: jorsanpe/cpm
def run_tests(test_service, files_or_dirs=(), test_args=(), target='default'):
    try:
        test_service.run_tests(files_or_dirs, target, test_args)
    except ProjectDescriptorNotFound:
        return Result(FAIL, 'error: not a cpm project')
    except BuildError as e:
        return Result(FAIL, f'error: failed building tests')
    except TestsFailed:
        return Result(FAIL, '✖ FAIL')
    except NoTestsFound:
        return Result(OK, 'no tests to run')

    return Result(OK, '✔ PASS')
Esempio n. 10
0
File: build.py Progetto: jamofer/cpm
def build_project(compilation_service, target='default'):
    try:
        compilation_service.build(target)
    except NotACpmProject:
        return Result(FAIL, f'error: not a cpm project')
    except BuildError:
        return Result(FAIL, f'error: compilation failed')
    except DockerImageNotFound as e:
        return Result(
            FAIL,
            f'error: docker image {e.image_name} not found for target {target}'
        )

    return Result(OK, f'Build finished')
Esempio n. 11
0
 def test_build_from_docker_image_with_toolchain_prefix(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.set_target_dockerfile('default', f'../environment/Dockerfile')
     self.set_toolchain_prefix('default', 'arm-linux-gnueabihf-')
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute([])
     assert result == Result(0, 'Build finished')
Esempio n. 12
0
 def test_build_from_docker_image_with_non_default_target(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.set_target_image('ubuntu', 'cpmbits/ubuntu:20.04')
     self.set_target_main('ubuntu', 'main.cpp')
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute([])
     assert result == Result(0, 'Build finished')
Esempio n. 13
0
File: test.py Progetto: jamofer/cpm
def run_tests(test_service, files_or_dirs=None, target='default'):
    if files_or_dirs is None:
        files_or_dirs = []

    try:
        test_service.run_tests(files_or_dirs, target)
    except NotACpmProject:
        return Result(FAIL, 'error: not a cpm project')
    except BuildError as e:
        return Result(FAIL, f'error: failed building tests')
    except TestsFailed:
        return Result(FAIL, '✖ FAIL')
    except NoTestsFound:
        return Result(OK, 'no tests to run')

    return Result(OK, '✔ PASS')
Esempio n. 14
0
 def test_build_after_recursive_bit_installation(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.add_bit('build', 'test', '1.0')
     self.set_libraries(['pthread', 'dl'])
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute([])
     assert result == Result(0, 'Build finished')
Esempio n. 15
0
def build_project(compilation_service, target='default'):
    try:
        print(f'cpm: building target {target}')
        compilation_service.build(target)
    except ProjectDescriptorNotFound:
        return Result(FAIL, f'error: not a cpm project')
    except BuildError:
        return Result(FAIL, f'error: compilation failed')
    except InvalidTarget:
        return Result(FAIL, f'error: unknown target {target}')
    except DockerImageNotFound as e:
        return Result(
            FAIL,
            f'error: docker image {e.image_name} not found for target {target}'
        )

    return Result(OK, f'Build finished')
Esempio n. 16
0
    def test_executing_project_action(self, os):
        action_runner = ProjectActionRunner('deploy', 'docker build')
        os.system.return_value = 0

        result = action_runner.execute(None)

        os.system.assert_called_once_with('docker build')
        assert result == Result(0, f'finished "deploy"')
Esempio n. 17
0
 def test_publishing_template(self, user_input, getpass):
     user_input.return_value = 'user'
     getpass.return_value = 'password'
     os.chdir(self.PROJECT_DIRECTORY)
     self.set_target_dockerfile('default', f'../environment/Dockerfile')
     install.execute(['-s', 'http://localhost:8000'])
     result = publish.execute(['-t', '-s', 'http://localhost:8000'])
     assert result == Result(0, 'Project published')
Esempio n. 18
0
 def test_build_from_docker_image_with_ldflags(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.set_target_image('default', 'cpmbits/ubuntu:20.04')
     self.set_ldflags(['-Wl,--allow-multiple-definition'])
     self.set_target_ldflags('default', ['-Wl,-s'])
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute([])
     assert result == Result(0, 'Build finished')
Esempio n. 19
0
 def test_build_from_docker_image_with_post_build(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.set_target_image('default', 'cpmbits/ubuntu:20.04')
     self.set_post_build('default',
                         [f'ls', f'rm build/{self.PROJECT_NAME}'])
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute([])
     assert result == Result(0, 'Build finished')
     assert not filesystem.file_exists(f'build/{self.PROJECT_NAME}')
Esempio n. 20
0
 def test_build_after_recursive_bit_installation_for_target_not_described_by_bit(
         self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.add_bit('build', 'test', '1.0')
     self.set_libraries(['pthread', 'dl'])
     self.set_target_main('rpi4', 'main.cpp')
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute(['rpi4'])
     assert result == Result(0, 'Build finished')
Esempio n. 21
0
def publish_project(publish_service):
    try:
        publish_service.publish()
    except NotACpmProject:
        return Result(FAIL, f'error: not a CPM project')
    except PackagingFailure as error:
        return Result(FAIL, f'error: {error.cause}')
    except HttpConnectionError:
        return Result(FAIL, f'error: failed to connect to CPM Hub')
    except InvalidCpmHubUrl:
        return Result(FAIL, f'error: invalid CPM Hub URL')
    except AuthenticationFailure:
        return Result(FAIL, f'error: invalid credentials')
    except PublicationFailure as error:
        return Result(FAIL, f'error: {error}')
    except KeyboardInterrupt:
        return Result(FAIL, f'interrupted')

    return Result(OK, f'Project published')
Esempio n. 22
0
 def test_creating_project_from_template(self, user_input, getpass):
     os.chdir(self.PROJECT_DIRECTORY)
     self.add_bit('test', 'cest', '1.0')
     self.add_test('test_case.cpp', fails=True)
     self.set_target_image('default', 'cpmbits/ubuntu:20.04')
     self.set_target_test_image('default', 'cpmbits/ubuntu:20.04')
     self.set_target_dockerfile('default', f'../environment/Dockerfile')
     user_input.return_value = 'user'
     getpass.return_value = 'password'
     publish.execute(['-t', '-s', 'http://localhost:8000'])
     os.chdir('..')
     shutil.rmtree(self.PROJECT_DIRECTORY, ignore_errors=True)
     result = create.execute([
         '-s', 'http://localhost:8000', '-t', f'{self.PROJECT_NAME}:0.0.1',
         self.PROJECT_NAME_FROM_TEMPLATE
     ])
     assert result == Result(
         0, f'Created project {self.PROJECT_NAME_FROM_TEMPLATE}')
Esempio n. 23
0
def publish_project(publish_service, publish_as_template=False):
    try:
        if publish_as_template:
            publish_service.publish_template()
        else:
            publish_service.publish()
    except ProjectDescriptorNotFound:
        return Result(FAIL, f'error: not a CPM project')
    except PackagingFailure as error:
        return Result(FAIL, f'error: {error.cause}')
    except HttpConnectionError:
        return Result(FAIL, f'error: failed to connect to CPM Hub')
    except InvalidCpmHubUrl:
        return Result(FAIL, f'error: invalid CPM Hub URL')
    except AuthenticationFailure:
        return Result(FAIL, f'error: invalid credentials')
    except PublicationFailure as error:
        return Result(FAIL, f'error: {error}')
    except KeyboardInterrupt:
        return Result(FAIL, f'interrupted')

    return Result(OK, f'Project published')
Esempio n. 24
0
 def execute(self, argv):
     return_code = os.system(self.command)
     return Result(return_code, f'finished "{self.name}"')
Esempio n. 25
0
 def test_build_from_dockerfile(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.set_target_dockerfile('default', f'../environment/Dockerfile')
     install.execute(['-s', 'http://localhost:8000'])
     result = build.execute([])
     assert result == Result(0, 'Build finished')
Esempio n. 26
0
 def test_build_when_declared_bit_is_not_installed(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.add_bit('build', 'test', '1.0')
     result = build.execute([])
     assert result == Result(0, 'Build finished')
Esempio n. 27
0
 def test_bit_installation_from_command_line_passed_bit(self):
     os.chdir(self.PROJECT_DIRECTORY)
     result = install.execute(['-s', 'http://localhost:8000', 'test:1.0'])
     assert result == Result(0, 'installed bit test:1.0')
Esempio n. 28
0
 def test_recursive_bit_installation(self):
     os.chdir(self.PROJECT_DIRECTORY)
     self.add_bit('build', 'test', '1.0')
     result = install.execute(['-s', 'http://localhost:8000'])
     assert result == Result(0, 'installed bits')