finn pushed to branch jmac/expand-user-for-tls at BuildGrid / buildgrid
Commits:
-
2f02bd54
by Martin Blanchard at 2018-09-19T08:35:06Z
-
88f5fc94
by Martin Blanchard at 2018-09-19T08:35:08Z
-
6362346c
by Martin Blanchard at 2018-09-19T09:07:12Z
-
1cba26f3
by finnball at 2018-09-20T08:57:52Z
8 changed files:
- CONTRIBUTING.rst
- README.rst
- buildgrid/_app/settings/parser.py
- + docs/source/data/bazel-example-server.conf
- docs/source/using.rst
- + docs/source/using_bazel.rst
- − docs/source/using_dummy_build.rst
- docs/source/using_simple_build.rst → docs/source/using_internal.rst
Changes:
... | ... | @@ -142,13 +142,67 @@ their containing *package*, as such; modules which are entirely private to |
142 | 142 |
BuildGrid are named as such, e.g. ``_roy.py``.
|
143 | 143 |
|
144 | 144 |
|
145 |
+.. _codebase-testing:
|
|
146 |
+ |
|
147 |
+Testing
|
|
148 |
+-------
|
|
149 |
+ |
|
150 |
+BuildGrid is using `pytest`_ for regression and newly added code testing. The
|
|
151 |
+test suite contains a serie of unit-tests and also run linting tools in order to
|
|
152 |
+detect coding-style_ breakage. The full test suite is automatically executed by
|
|
153 |
+GitLab CI system for every push to the server. Passing all the tests is a
|
|
154 |
+mandatory requirement for any merge request to the trunk.
|
|
155 |
+ |
|
156 |
+.. _pytest: https://docs.pytest.org
|
|
157 |
+ |
|
158 |
+ |
|
159 |
+Running tests
|
|
160 |
+~~~~~~~~~~~~~
|
|
161 |
+ |
|
162 |
+In order to run the entire test suite, simply run:
|
|
163 |
+ |
|
164 |
+.. code-block:: sh
|
|
165 |
+ |
|
166 |
+ python3 setup.py test
|
|
167 |
+ |
|
168 |
+You can use the ``--addopt`` function to feed arguments to pytest. For example,
|
|
169 |
+if you want to see the ``stdout`` and ``stderr`` generated y the test, run:
|
|
170 |
+ |
|
171 |
+.. code-block:: sh
|
|
172 |
+ |
|
173 |
+ python3 setup.py test --addopts -s
|
|
174 |
+ |
|
175 |
+If you want run a specific test instead of the entire suite use:
|
|
176 |
+ |
|
177 |
+.. code-block:: sh
|
|
178 |
+ |
|
179 |
+ python3 setup.py test --addopts tests/cas/test_client
|
|
180 |
+ |
|
181 |
+pyest's `usage documentation section`_ details the different command line
|
|
182 |
+options that can be used when invoking the test runner.
|
|
183 |
+ |
|
184 |
+.. _usage documentation section: https://docs.pytest.org/en/latest/usage.html
|
|
185 |
+ |
|
186 |
+ |
|
187 |
+Test coverage
|
|
188 |
+~~~~~~~~~~~~~
|
|
189 |
+ |
|
190 |
+We are doing our best at keeping BuildGrid's test coverage score as high as
|
|
191 |
+possible. Doing so, we ask for any merge request to include necessary test
|
|
192 |
+additions and/or modifications in order to maintain that coverage level. A
|
|
193 |
+detailed `coverage report`_ is produced and publish for any change merged to the
|
|
194 |
+trunk.
|
|
195 |
+ |
|
196 |
+.. _coverage report: https://buildgrid.gitlab.io/buildgrid/coverage/
|
|
197 |
+ |
|
198 |
+ |
|
145 | 199 |
.. _committer-access:
|
146 | 200 |
|
147 | 201 |
Committer access
|
148 | 202 |
----------------
|
149 | 203 |
|
150 | 204 |
We'll hand out commit access to anyone who has successfully landed a single
|
151 |
-patch to the code base. Please request this via irc or the mailing list.
|
|
205 |
+patch to the code base. Please request this via Slack or the mailing list.
|
|
152 | 206 |
|
153 | 207 |
This of course relies on contributors being responsive and show willingness to
|
154 | 208 |
address problems after landing branches there should not be any problems here.
|
1 |
-.. _about:
|
|
2 |
- |
|
3 |
- |
|
4 | 1 |
|
5 | 2 |
.. image:: https://gitlab.com/Buildgrid/buildgrid/badges/master/pipeline.svg
|
6 | 3 |
:target: https://gitlab.com/BuildStream/buildstream/commits/master
|
7 | 4 |
|
8 | 5 |
.. image:: https://gitlab.com/BuildGrid/buildgrid/badges/master/coverage.svg?job=coverage
|
9 | 6 |
:target: https://buildgrid.gitlab.io/buildgrid/coverage
|
10 |
-
|
|
7 |
+ |
|
8 |
+ |
|
9 |
+.. _about:
|
|
10 |
+ |
|
11 | 11 |
About BuildGrid
|
12 | 12 |
===============
|
13 | 13 |
|
14 |
+ |
|
15 |
+.. _what-is-it:
|
|
16 |
+ |
|
14 | 17 |
What is BuildGrid?
|
15 | 18 |
------------------
|
16 | 19 |
|
... | ... | @@ -49,7 +52,7 @@ Resources |
49 | 52 |
- `GitLab repository`_
|
50 | 53 |
- `Bug tracking`_
|
51 | 54 |
- `Mailing list`_
|
52 |
-- `Slack channel`_ [`invite link`_]
|
|
55 |
+- `Slack channel`_ [`invite link`_]
|
|
53 | 56 |
|
54 | 57 |
.. _Homepage: https://buildgrid.build
|
55 | 58 |
.. _GitLab repository: https://gitlab.com/BuildGrid/buildgrid
|
... | ... | @@ -41,6 +41,15 @@ class YamlFactory(yaml.YAMLObject): |
41 | 41 |
return cls(**values)
|
42 | 42 |
|
43 | 43 |
|
44 |
+class Path(YamlFactory):
|
|
45 |
+ |
|
46 |
+ yaml_tag = u'!path'
|
|
47 |
+ |
|
48 |
+ def __new__(cls, path):
|
|
49 |
+ path = os.path.expanduser(path)
|
|
50 |
+ return path
|
|
51 |
+ |
|
52 |
+ |
|
44 | 53 |
class Disk(YamlFactory):
|
45 | 54 |
|
46 | 55 |
yaml_tag = u'!disk-storage'
|
... | ... | @@ -169,6 +178,7 @@ def _parse_size(size): |
169 | 178 |
|
170 | 179 |
def get_parser():
|
171 | 180 |
|
181 |
+ yaml.SafeLoader.add_constructor(Path.yaml_tag, Path.from_yaml)
|
|
172 | 182 |
yaml.SafeLoader.add_constructor(Execution.yaml_tag, Execution.from_yaml)
|
173 | 183 |
yaml.SafeLoader.add_constructor(Action.yaml_tag, Action.from_yaml)
|
174 | 184 |
yaml.SafeLoader.add_constructor(Reference.yaml_tag, Reference.from_yaml)
|
1 |
+server:
|
|
2 |
+ port: 50051
|
|
3 |
+ insecure-mode: true
|
|
4 |
+ |
|
5 |
+instances:
|
|
6 |
+ - name: main
|
|
7 |
+ |
|
8 |
+ storages:
|
|
9 |
+ - !lru-storage &main-storage
|
|
10 |
+ size: 512MB
|
|
11 |
+ |
|
12 |
+ services:
|
|
13 |
+ - !action-cache &main-action
|
|
14 |
+ storage: *main-storage
|
|
15 |
+ max_cached_refs: 256
|
|
16 |
+ allow_updates: true
|
|
17 |
+ - !execution
|
|
18 |
+ storage: *main-storage
|
|
19 |
+ action_cache: *main-action
|
|
20 |
+ - !cas
|
|
21 |
+ storage: *main-storage
|
|
22 |
+ - !bytestream
|
|
23 |
+ storage: *main-storage
|
|
\ No newline at end of file |
... | ... | @@ -9,5 +9,5 @@ This section covers how to run an use the BuildGrid build service. |
9 | 9 |
.. toctree::
|
10 | 10 |
:maxdepth: 2
|
11 | 11 |
|
12 |
- using_dummy_build.rst
|
|
13 |
- using_simple_build.rst
|
|
12 |
+ using_internal.rst
|
|
13 |
+ using_bazel.rst
|
1 |
+ |
|
2 |
+.. _bazel-builds:
|
|
3 |
+ |
|
4 |
+Bazel builds
|
|
5 |
+============
|
|
6 |
+ |
|
7 |
+`Bazel`_ is a *“fast, scalable, multi-language and extensible build system”*
|
|
8 |
+that supports remote build execution using the remote execution API (REAPI) v2
|
|
9 |
+since its `0.17 release`_.
|
|
10 |
+ |
|
11 |
+.. _Bazel: https://bazel.build
|
|
12 |
+.. _0.17 release: https://blog.bazel.build/2018/09/14/bazel-0.17.html
|
|
13 |
+ |
|
14 |
+ |
|
15 |
+.. _bazel-configuration:
|
|
16 |
+ |
|
17 |
+Configuration
|
|
18 |
+-------------
|
|
19 |
+ |
|
20 |
+Bazel accepts many options that can either be specified as command line
|
|
21 |
+arguments when involking the ``bazel`` tool or stored in a `.bazelrc`_
|
|
22 |
+configuration file. In order to activate remote build execution, the
|
|
23 |
+``bazel build`` subcommand needs to be given specific `build options`_,
|
|
24 |
+including:
|
|
25 |
+ |
|
26 |
+- ``--remote_executor``: remote execution endpoint's location, ``{host}:{port}``.
|
|
27 |
+- ``--remote_instance_name``: remote execution instance's name.
|
|
28 |
+- ``--spawn_strategy``: action execution method.
|
|
29 |
+- ``--genrule_strategy``: `genrules`_ execution method.
|
|
30 |
+ |
|
31 |
+Spawn and genrule strategies need to be set to ``remote`` for remote execution.
|
|
32 |
+ |
|
33 |
+As an example, in order to activate remote execution on the ``main`` instance of
|
|
34 |
+the remote execution server available at ``controller.grid.build`` on port
|
|
35 |
+``50051`` you should amend your ``.bazelrc`` with:
|
|
36 |
+ |
|
37 |
+.. code-block:: sh
|
|
38 |
+ |
|
39 |
+ build --spawn_strategy=remote --genrule_strategy=remote --remote_executor=controller.grid.build:50051 --remote_instance_name=main
|
|
40 |
+ |
|
41 |
+.. _.bazelrc: https://docs.bazel.build/versions/master/user-manual.html#bazelrc
|
|
42 |
+.. _build options: https://docs.bazel.build/versions/master/command-line-reference.html#build-options
|
|
43 |
+.. _genrules: https://docs.bazel.build/versions/master/be/general.html#genrule
|
|
44 |
+ |
|
45 |
+ |
|
46 |
+.. _bazel-example:
|
|
47 |
+ |
|
48 |
+Example build
|
|
49 |
+-------------
|
|
50 |
+ |
|
51 |
+The `bazel-examples`_ repository contains example Bazel workspaces that can be
|
|
52 |
+used for testing purpose. We'll focus here on instructions on how to build the
|
|
53 |
+`stage3 CPP example`_ running Bazel and BuildGrid on your local machine,
|
|
54 |
+compiling the C++ source code using host-tools.
|
|
55 |
+ |
|
56 |
+First, you need to checkout the bazel-examples repository sources:
|
|
57 |
+ |
|
58 |
+.. code-block:: sh
|
|
59 |
+ |
|
60 |
+ git clone https://github.com/bazelbuild/examples.git bazel-examples
|
|
61 |
+ |
|
62 |
+Next, change the current directory to the Bazel workspace root:
|
|
63 |
+ |
|
64 |
+.. code-block:: sh
|
|
65 |
+ |
|
66 |
+ cd bazel-examples/cpp-tutorial/stage3
|
|
67 |
+ |
|
68 |
+.. note::
|
|
69 |
+ |
|
70 |
+ All the commands in the instructions below are expected to be executed from
|
|
71 |
+ that root directory (the stage3 example workspace's root directory).
|
|
72 |
+ |
|
73 |
+Before running Bazel and building the example workspace, you'll have to setup
|
|
74 |
+and run a BuildGrid server and bot. A minimal server's configuration is given
|
|
75 |
+below, paste it in a ``server.conf`` file in the root directory:
|
|
76 |
+ |
|
77 |
+.. literalinclude:: ./data/bazel-example-server.conf
|
|
78 |
+ :language: yaml
|
|
79 |
+ |
|
80 |
+This defines a single ``main`` server instance implementing a
|
|
81 |
+``ContentAddressableStorage`` (CAS) + ``ByteStream`` service together with an
|
|
82 |
+``Execution`` + ``ActionCache`` service, both using the same in-memory storage.
|
|
83 |
+You can then start the BuildGrid server deamon using that configuration by
|
|
84 |
+running:
|
|
85 |
+ |
|
86 |
+.. code-block:: sh
|
|
87 |
+ |
|
88 |
+ bgd server start server.conf
|
|
89 |
+ |
|
90 |
+In order to perform the actual build work, you need to attach a worker bot to
|
|
91 |
+that server for that ``main`` instance. A simple host-tools based bot should be
|
|
92 |
+enough to build the stage3 CPP example. Once you've make sure that your machine
|
|
93 |
+has ``gcc`` installed, run:
|
|
94 |
+ |
|
95 |
+.. code-block:: sh
|
|
96 |
+ |
|
97 |
+ bgd bot --remote=http://localhost:50051 --parent=main temp-directory
|
|
98 |
+ |
|
99 |
+The ``--remote`` option is used to specify the server location (running on the
|
|
100 |
+same machine here, and listenning to port 50051). The ``--parent`` option is
|
|
101 |
+used to specifiy the server instance you except the bot to be attached to.
|
|
102 |
+ |
|
103 |
+The BuildGrid server is now ready to accept jobs and execute them. Bazel needs
|
|
104 |
+some :ref:`configuration <bazel-configuration>` in order to run remote builds.
|
|
105 |
+Below are the minimal build options you should use, paste them in a ``.bazelrc``
|
|
106 |
+file in the root directory:
|
|
107 |
+ |
|
108 |
+.. code-block:: sh
|
|
109 |
+ |
|
110 |
+ build --spawn_strategy=remote --genrule_strategy=remote --remote_executor=localhost:50051 --remote_instance_name=main
|
|
111 |
+ |
|
112 |
+This ativates Bazel's remote execution mode and points to the ``main`` remote
|
|
113 |
+execution server instance at ``localhost:50051``.
|
|
114 |
+ |
|
115 |
+You can finally have Bazel to build the example workspace by running:
|
|
116 |
+ |
|
117 |
+.. code-block:: sh
|
|
118 |
+ |
|
119 |
+ bazel build //main:hello-world
|
|
120 |
+ |
|
121 |
+You can verify that the example has been successfully build by runnig the
|
|
122 |
+generated executable. Simply invoke:
|
|
123 |
+ |
|
124 |
+.. code-block:: sh
|
|
125 |
+ |
|
126 |
+ ./bazel-bin/main/hello-world
|
|
127 |
+ |
|
128 |
+.. _bazel-examples: https://github.com/bazelbuild/examples
|
|
129 |
+.. _stage3 CPP example: https://github.com/bazelbuild/examples/tree/master/cpp-tutorial/stage3
|
1 |
-.. _dummy-build:
|
|
2 |
- |
|
3 |
-Dummy build
|
|
4 |
-===========
|
|
5 |
- |
|
6 |
-In one terminal, start a server:
|
|
7 |
- |
|
8 |
-.. code-block:: sh
|
|
9 |
- |
|
10 |
- bgd server start buildgrid/_app/settings/default.yml
|
|
11 |
- |
|
12 |
-In another terminal, send a request for work:
|
|
13 |
- |
|
14 |
-.. code-block:: sh
|
|
15 |
- |
|
16 |
- bgd execute request-dummy
|
|
17 |
- |
|
18 |
-The stage should show as ``QUEUED`` as it awaits a bot to pick up the work:
|
|
19 |
- |
|
20 |
-.. code-block:: sh
|
|
21 |
- |
|
22 |
- bgd execute list
|
|
23 |
- |
|
24 |
-Create a bot session:
|
|
25 |
- |
|
26 |
-.. code-block:: sh
|
|
27 |
- |
|
28 |
- bgd bot dummy
|
|
29 |
- |
|
30 |
-Show the work as completed:
|
|
31 |
- |
|
32 |
-.. code-block:: sh
|
|
33 |
- |
|
34 |
- bgd execute list
|
1 |
+ |
|
2 |
+.. _internal-builds:
|
|
3 |
+ |
|
4 |
+Internal builds
|
|
5 |
+===============
|
|
6 |
+ |
|
7 |
+ |
|
8 |
+.. _dummy-test:
|
|
9 |
+ |
|
10 |
+Dummy test
|
|
11 |
+----------
|
|
12 |
+ |
|
13 |
+In one terminal, start a server:
|
|
14 |
+ |
|
15 |
+.. code-block:: sh
|
|
16 |
+ |
|
17 |
+ bgd server start buildgrid/_app/settings/default.yml
|
|
18 |
+ |
|
19 |
+In another terminal, send a request for work:
|
|
20 |
+ |
|
21 |
+.. code-block:: sh
|
|
22 |
+ |
|
23 |
+ bgd execute request-dummy
|
|
24 |
+ |
|
25 |
+The stage should show as ``QUEUED`` as it awaits a bot to pick up the work:
|
|
26 |
+ |
|
27 |
+.. code-block:: sh
|
|
28 |
+ |
|
29 |
+ bgd execute list
|
|
30 |
+ |
|
31 |
+Create a bot session:
|
|
32 |
+ |
|
33 |
+.. code-block:: sh
|
|
34 |
+ |
|
35 |
+ bgd bot dummy
|
|
36 |
+ |
|
37 |
+Show the work as completed:
|
|
38 |
+ |
|
39 |
+.. code-block:: sh
|
|
40 |
+ |
|
41 |
+ bgd execute list
|
|
42 |
+ |
|
43 |
+ |
|
1 | 44 |
.. _simple-build:
|
2 | 45 |
|
3 | 46 |
Simple build
|
4 |
-============
|
|
47 |
+------------
|
|
5 | 48 |
|
6 | 49 |
This example covers a simple build. The user will upload a directory containing
|
7 | 50 |
a C file and a command to the CAS. The bot will then fetch the uploaded
|