[Notes] [Git][BuildStream/buildstream][bschubert/tests-no-chroot-linux] 6 commits: using_config.rst: Update our instructions for how we declare caches in user config



Title: GitLab

Benjamin Schubert pushed to branch bschubert/tests-no-chroot-linux at BuildStream / buildstream

Commits:

6 changed files:

Changes:

  • buildstream/sandbox/_sandboxdummy.py
    ... ... @@ -42,4 +42,5 @@ class SandboxDummy(Sandbox):
    42 42
                                    "'{}'".format(command[0]),
    
    43 43
                                    reason='missing-command')
    
    44 44
     
    
    45
    -        raise SandboxError("This platform does not support local builds: {}".format(self._reason))
    45
    +        raise SandboxError("This platform does not support local builds: {}".format(self._reason),
    
    46
    +                           reason="unavailable-local-sandbox")

  • conftest.py
    ... ... @@ -23,6 +23,8 @@ import shutil
    23 23
     
    
    24 24
     import pytest
    
    25 25
     
    
    26
    +from buildstream._platform.platform import Platform
    
    27
    +
    
    26 28
     
    
    27 29
     def pytest_addoption(parser):
    
    28 30
         parser.addoption('--integration', action='store_true', default=False,
    
    ... ... @@ -52,3 +54,8 @@ def integration_cache(request):
    52 54
             shutil.rmtree(os.path.join(cache_dir, 'artifacts'))
    
    53 55
         except FileNotFoundError:
    
    54 56
             pass
    
    57
    +
    
    58
    +
    
    59
    +@pytest.fixture(autouse=True)
    
    60
    +def clean_platform_cache():
    
    61
    +    Platform._instance = None

  • doc/source/format_project.rst
    ... ... @@ -190,19 +190,34 @@ for more detail.
    190 190
     Artifact server
    
    191 191
     ~~~~~~~~~~~~~~~
    
    192 192
     If you have setup an :ref:`artifact server <artifacts>` for your
    
    193
    -project then it is convenient to configure this in your ``project.conf``
    
    193
    +project then it is convenient to configure the following in your ``project.conf``
    
    194 194
     so that users need not have any additional configuration to communicate
    
    195 195
     with an artifact share.
    
    196 196
     
    
    197 197
     .. code:: yaml
    
    198 198
     
    
    199
    +  #
    
    200
    +  # Artifacts
    
    201
    +  #
    
    199 202
       artifacts:
    
    203
    +    # A remote cache from which to download prebuilt artifacts
    
    204
    +    - url: https://foo.com/artifacts:11001
    
    205
    +      server.cert: server.crt
    
    206
    +    # A remote cache from which to upload/download built/prebuilt artifacts
    
    207
    +    - url: https://foo.com/artifacts:11002
    
    208
    +      server-cert: server.crt
    
    209
    +      client-cert: client.crt
    
    210
    +      client-key: client.key
    
    200 211
     
    
    201
    -    # A url from which to download prebuilt artifacts
    
    202
    -    url: https://foo.com/artifacts
    
    212
    +.. note::
    
    213
    +
    
    214
    +    You can also specify a list of different caches here; earlier entries in the
    
    215
    +    list will have higher priority than later ones.
    
    216
    +
    
    217
    +The use of ports are required to distinguish between pull only access and
    
    218
    +push/pull access. For information regarding the server/client certificates
    
    219
    +and keys, please see: :ref:`Key pair for the server <server_authentication>`.
    
    203 220
     
    
    204
    -You can also specify a list of caches here; earlier entries in the list
    
    205
    -will have higher priority than later ones.
    
    206 221
     
    
    207 222
     Remote execution
    
    208 223
     ~~~~~~~~~~~~~~~~
    

  • doc/source/using_config.rst
    ... ... @@ -32,38 +32,75 @@ the supported configurations on a project wide basis are listed here.
    32 32
     
    
    33 33
     Artifact server
    
    34 34
     ~~~~~~~~~~~~~~~
    
    35
    -The project you build will often specify a :ref:`remote artifact cache
    
    36
    -<artifacts>` already, but you may want to specify extra caches. There are two
    
    37
    -ways to do this.  You can add one or more global caches:
    
    35
    +Although project's often specify a :ref:`remote artifact cache <artifacts>` in
    
    36
    +their ``project.conf``, you may also want to specify extra caches.
    
    38 37
     
    
    39
    -**Example**
    
    38
    +Assuming that your host/server is reachable on the internet as ``artifacts.com``
    
    39
    +(for example), there are two ways to declare remote caches in your user
    
    40
    +configuration:
    
    41
    +
    
    42
    +1. Adding global caches:
    
    40 43
     
    
    41 44
     .. code:: yaml
    
    42 45
     
    
    46
    +   #
    
    47
    +   # Artifacts
    
    48
    +   #
    
    43 49
        artifacts:
    
    44
    -     url: https://artifacts.com/artifacts
    
    50
    +     # Add a cache to pull from
    
    51
    +     - url: https://artifacts.com/artifacts:11001
    
    52
    +       server-cert: server.crt
    
    53
    +     # Add a cache to push/pull to/from
    
    54
    +     - url: https://artifacts.com/artifacts:11002
    
    55
    +       server-cert: server.crt
    
    56
    +       client-cert: client.crt
    
    57
    +       client-key: client.key
    
    58
    +       push: true
    
    59
    +     # Add another cache to pull from
    
    60
    +     - url: https://anothercache.com/artifacts:8080
    
    61
    +       server-cert: another_server.crt
    
    62
    +
    
    63
    +.. note::
    
    45 64
     
    
    46
    -Caches listed there will be considered lower priority than those specified
    
    47
    -by the project configuration.
    
    65
    +    Caches declared here will be used by **all** BuildStream project's on the user's
    
    66
    +    machine and are considered a lower priority than those specified in the project
    
    67
    +    configuration.
    
    48 68
     
    
    49
    -You can also add project-specific caches:
    
    50 69
     
    
    51
    -**Example**
    
    70
    +2. Specifying caches for a specific project within the user configuration:
    
    52 71
     
    
    53 72
     .. code:: yaml
    
    54 73
     
    
    55 74
        projects:
    
    56 75
          project-name:
    
    57 76
            artifacts:
    
    58
    -         - url: https://artifacts.com/artifacts1
    
    59
    -         - url: ssh://user artifacts com/artifacts2
    
    77
    +         # Add a cache to pull from
    
    78
    +         - url: https://artifacts.com/artifacts:11001
    
    79
    +           server-cert: server.crt
    
    80
    +         # Add a cache to push/pull to/from
    
    81
    +         - url: https://artifacts.com/artifacts:11002
    
    82
    +           server-cert: server.crt
    
    83
    +           client-cert: client.crt
    
    84
    +           client-key: client.key
    
    60 85
                push: true
    
    86
    +         # Add another cache to pull from
    
    87
    +         - url: https://ourprojectcache.com/artifacts:8080
    
    88
    +           server-cert: project_server.crt
    
    89
    +
    
    90
    +
    
    91
    +.. note::
    
    92
    +
    
    93
    +    Caches listed here will be considered a higher priority than those specified
    
    94
    +    by the project. Furthermore, for a given list of URLs, earlier entries will
    
    95
    +    have higher priority.
    
    96
    +
    
    97
    +
    
    98
    +Notice that the use of different ports for the same server distinguishes between
    
    99
    +pull only access and push/pull access. For information regarding this and the
    
    100
    +server/client certificates and keys, please see:
    
    101
    +:ref:`Key pair for the server <server_authentication>`.
    
    61 102
     
    
    62
    -Caches listed here will be considered higher priority than those specified
    
    63
    -by the project.
    
    64 103
     
    
    65
    -If you give a list of URLs, earlier entries in the list will have higher
    
    66
    -priority than later ones.
    
    67 104
     
    
    68 105
     Strict build plan
    
    69 106
     ~~~~~~~~~~~~~~~~~
    

  • doc/source/using_configuring_artifact_server.rst
    ... ... @@ -98,6 +98,8 @@ Command reference
    98 98
        :prog: bst-artifact-server
    
    99 99
     
    
    100 100
     
    
    101
    +.. _server_authentication:
    
    102
    +
    
    101 103
     Key pair for the server
    
    102 104
     ~~~~~~~~~~~~~~~~~~~~~~~
    
    103 105
     
    
    ... ... @@ -237,52 +239,12 @@ We can then check if the services are successfully running with:
    237 239
     For more information on systemd services see: 
    
    238 240
     `Creating Systemd Service Files <https://www.devdungeon.com/content/creating-systemd-service-files>`_.
    
    239 241
     
    
    240
    -User configuration
    
    241
    -~~~~~~~~~~~~~~~~~~
    
    242
    -The user configuration for artifacts is documented with the rest
    
    243
    -of the :ref:`user configuration documentation <user_config>`.
    
    244
    -
    
    245
    -Note that for self-signed certificates, the public key fields are mandatory.
    
    246
    -
    
    247
    -Assuming you have the same setup used in this document, and that your
    
    248
    -host is reachable on the internet as ``artifacts.com`` (for example),
    
    249
    -then a user can use the following user configuration:
    
    250
    -
    
    251
    -Pull-only:
    
    252
    -
    
    253
    -.. code:: yaml
    
    254
    -
    
    255
    -   #
    
    256
    -   #    Artifacts
    
    257
    -   #
    
    258
    -   artifacts:
    
    259
    -
    
    260
    -     url: https://artifacts.com:11001
    
    261
    -
    
    262
    -     # Optional server certificate if not trusted by system root certificates
    
    263
    -     server-cert: server.crt
    
    242
    +Declaring remote artifact caches
    
    243
    +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    244
    +Remote artifact caches can be declared within either:
    
    264 245
     
    
    265
    -Pull and push:
    
    266
    -
    
    267
    -.. code:: yaml
    
    268
    -
    
    269
    -   #
    
    270
    -   #    Artifacts
    
    271
    -   #
    
    272
    -   artifacts:
    
    273
    -
    
    274
    -     url: https://artifacts.com:11002
    
    275
    -
    
    276
    -     # Optional server certificate if not trusted by system root certificates
    
    277
    -     server-cert: server.crt
    
    278
    -
    
    279
    -     # Optional client key pair for authentication
    
    280
    -     client-key: client.key
    
    281
    -     client-cert: client.crt
    
    282
    -
    
    283
    -     push: true
    
    284
    -
    
    285
    -.. note::
    
    246
    +1. The :ref:`project configuration <project_essentials_artifacts>`, or
    
    247
    +2. The :ref:`user configuration <config_artifacts>`.
    
    286 248
     
    
    287
    -    Equivalent statements can be delcared in a project's configuration file
    
    288
    -    (the ``project.conf``).
    249
    +Please follow the above links to see examples showing how we declare remote
    
    250
    +caches in both the project configuration and the user configuration, respectively.

  • tests/integration/missing_dependencies.py
    1
    +import os
    
    2
    +import pytest
    
    3
    +from tests.testutils import cli
    
    4
    +from tests.testutils.site import IS_LINUX
    
    5
    +
    
    6
    +from buildstream import _site, _yaml
    
    7
    +from buildstream._exceptions import ErrorDomain
    
    8
    +
    
    9
    +
    
    10
    +pytestmark = pytest.mark.integration
    
    11
    +
    
    12
    +
    
    13
    +# Project directory
    
    14
    +DATA_DIR = os.path.join(
    
    15
    +    os.path.dirname(os.path.realpath(__file__)),
    
    16
    +    'project',
    
    17
    +)
    
    18
    +
    
    19
    +
    
    20
    +@pytest.fixture
    
    21
    +def clean_bwrap_cache():
    
    22
    +    def wipe():
    
    23
    +        _site._bwrap_major = None
    
    24
    +        _site._bwrap_minor = None
    
    25
    +        _site._bwrap_patch = None
    
    26
    +
    
    27
    +    wipe()
    
    28
    +    yield
    
    29
    +    wipe()
    
    30
    +
    
    31
    +
    
    32
    +@pytest.mark.skipif(not IS_LINUX, reason='Only available on Linux')
    
    33
    +@pytest.mark.datafiles(DATA_DIR)
    
    34
    +@pytest.mark.usefixtures("clean_bwrap_cache")
    
    35
    +def test_missing_brwap_has_nice_error_message(cli, datafiles):
    
    36
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    37
    +    element_path = os.path.join(project, 'elements', 'element.bst')
    
    38
    +
    
    39
    +    # Write out our test target
    
    40
    +    element = {
    
    41
    +        'kind': 'script',
    
    42
    +        'depends': [
    
    43
    +            {
    
    44
    +                'filename': 'base.bst',
    
    45
    +                'type': 'build',
    
    46
    +            },
    
    47
    +        ],
    
    48
    +        'config': {
    
    49
    +            'commands': [
    
    50
    +                'false',
    
    51
    +            ],
    
    52
    +        },
    
    53
    +    }
    
    54
    +    _yaml.dump(element, element_path)
    
    55
    +
    
    56
    +    # Build without access to host tools, this should fail with a nice error
    
    57
    +    result = cli.run(
    
    58
    +        project=project, args=['build', 'element.bst'], env={'PATH': ''})
    
    59
    +    result.assert_task_error(ErrorDomain.SANDBOX, 'unavailable-local-sandbox')
    
    60
    +    assert "not found" in result.stderr
    
    61
    +
    
    62
    +
    
    63
    +@pytest.mark.skipif(not IS_LINUX, reason='Only available on Linux')
    
    64
    +@pytest.mark.datafiles(DATA_DIR)
    
    65
    +@pytest.mark.usefixtures("clean_bwrap_cache")
    
    66
    +def test_old_brwap_has_nice_error_message(cli, datafiles, tmp_path):
    
    67
    +    import buildstream._platform
    
    68
    +    buildstream._platform.Platform._instance = None
    
    69
    +
    
    70
    +    bwrap = tmp_path.joinpath('bin/bwrap')
    
    71
    +    bwrap.parent.mkdir()
    
    72
    +    with bwrap.open('w') as fp:
    
    73
    +        fp.write('''
    
    74
    +            #!/bin/bash
    
    75
    +            echo bubblewrap 0.0.1
    
    76
    +        '''.strip())
    
    77
    +
    
    78
    +    bwrap.chmod(0o755)
    
    79
    +
    
    80
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    81
    +    element_path = os.path.join(project, 'elements', 'element3.bst')
    
    82
    +
    
    83
    +    # Write out our test target
    
    84
    +    element = {
    
    85
    +        'kind': 'script',
    
    86
    +        'depends': [
    
    87
    +            {
    
    88
    +                'filename': 'base.bst',
    
    89
    +                'type': 'build',
    
    90
    +            },
    
    91
    +        ],
    
    92
    +        'config': {
    
    93
    +            'commands': [
    
    94
    +                'true && true && false',
    
    95
    +            ],
    
    96
    +        },
    
    97
    +    }
    
    98
    +    _yaml.dump(element, element_path)
    
    99
    +
    
    100
    +    # Build without access to host tools, this should fail with a nice error
    
    101
    +    result = cli.run(
    
    102
    +        project=project,
    
    103
    +        args=['--debug', '--verbose', 'build', 'element3.bst'],
    
    104
    +        env={'PATH': str(tmp_path.joinpath('bin'))})
    
    105
    +    result.assert_task_error(ErrorDomain.SANDBOX, 'unavailable-local-sandbox')
    
    106
    +    assert "too old" in result.stderr



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]