|
1 | | -# CBMC packages |
2 | | - |
3 | | -This project builds installation packages for the tip of the develop |
4 | | -branch for MacOS, Windows, and Ubuntu. |
5 | | - |
6 | | -There exist installation packages for the latest stable releases of |
7 | | -CBMC on MacOS and Ubuntu. |
8 | | - |
9 | | -On MacOS: |
10 | | -* brew install cbmc |
11 | | - |
12 | | -On Ubuntu: |
13 | | -* sudo apt-get install software-properties-common |
14 | | -* sudo add-apt-repository ppa:mt-debian/cbmc-backports |
15 | | -* sudo apt-get update |
16 | | -* sudo apt-get install cbmc |
17 | | - |
18 | | -This project uses GitHub Actions to build installation packages for |
19 | | -the tip of the develop branch for MacOS, Windows, and Ubuntu each time |
20 | | -new commits is added to develop. The packages reside on GitHub as |
21 | | -artifacts that can be listed using the GitHub Actions API. |
22 | | - |
23 | | -A separate project implements a web page hosted on GitHub Pages that makes |
24 | | -it easy to find the installation package for the tip of develop. |
25 | | - |
26 | | -The stable installation packages describe above for MacOS and Ubuntu |
27 | | -install into the local operating system's equivalent of |
28 | | -/usr/local/bin. |
29 | | -This project builds two kinds of packages: |
30 | | -* cbmc installs into the equvalent of /usr/local/bin |
31 | | -* cbmc-latest installs into the equivalent of /usr/local/cbmc-latest/bin, |
32 | | - and makes it possible to have two copies of cbmc --- a stable release |
33 | | - and a tip of develop --- side-by-side on the same machine. |
34 | | - |
35 | | -For each operatin system: |
36 | | -* The MacOS package is just a tar file of a directory containing the |
37 | | - binaries. The directory should be unpacked and placed in the search |
38 | | - path. Using Homebrew, "brew install cbmc" will install the latest |
39 | | - stable release. These tar files are intended only to distribute the |
40 | | - development versions between stable releases (Homebrew repository |
41 | | - updates of the stable versions are quick). |
42 | | - |
43 | | -* The Windows package is an Microsoft Installer (msi) for Windows 10 |
44 | | - with Visual Studio 2019. It can be installed by double-clicking on the |
45 | | - installer or runnin `msexec /i <filename>`. |
46 | | - |
47 | | -* The Ubuntu package is a Debian package that can be installed with |
48 | | - `dpkg -i <filename>`. There are packages for Ubuntu 18 and Ubuntu 16. |
49 | | - These packages are intended to distribute the development versions |
50 | | - between stable releases, but also to produce the stable packages uploaded |
51 | | - to a Debian or Ubuntu PPA. |
52 | | - |
53 | | -The file packages.yaml defines the workflow for GitHub Actions to build the |
54 | | -packages. Each package is defined by a job that runs in its own |
55 | | -container. The subdirectories contain files and data needed to build |
56 | | -each of the packages. |
| 1 | +# CBMC CI infrastructure |
| 2 | + |
| 3 | +This folder contains implementation and configuration files for |
| 4 | +our CI infrastructure on top of Github Actions. Aside from CI, |
| 5 | +it also contains packaging and automated release scripts. |
| 6 | + |
| 7 | +The files in this folder correspond to: |
| 8 | + |
| 9 | +* `build-and-test-Xen.yaml` -> Build Xen using CBMC tools. |
| 10 | +* `csmith.yaml` -> Run 10 randomly generated CSmith tests per Pull Request. |
| 11 | +* `doxygen-check.yaml` -> Build project doxygen documentation per Pull Request. |
| 12 | +* `pull-request-check-cpplint.sh` -> Script that's called per Pull Request to execute |
| 13 | + `cpplint` over changes. |
| 14 | +* `pull-request-check-clang-format.sh` -> Script that's called per Pull Request |
| 15 | + to execute `clang-format` over changes. |
| 16 | +* `pull-request-checks.yaml` -> Configuration file for the Github Actions CI jobs |
| 17 | + for the various platforms. |
| 18 | +* `regular-release.yaml` -> Configuration file for performing an automated release |
| 19 | + every time a tag of a specific form (`cbmc-x.y.z`) is pushed. |
| 20 | +* `release-packages.yaml` -> Configuration file for performing building of build |
| 21 | + artifacts that are attached to release when it's being made. Invoked when a |
| 22 | + regular release is performed. |
| 23 | + |
| 24 | +## CI Platforms |
| 25 | + |
| 26 | +We are currently building and testing CBMC under the following configurations: |
| 27 | + |
| 28 | +* `make` * `gcc` * `linux` (ubuntu 20.04) |
| 29 | +* `make` * `clang` * `linux` (ubuntu 20.04) |
| 30 | +* `cmake` * `gcc` * `linux` (ubuntu 20.04) |
| 31 | +* `make` * `clang` * `macos` (10.15) |
| 32 | +* `cmake` * `clang` * `macos` (10.15) |
| 33 | +* `cmake` * `vs` * `windows` (vs2019) |
| 34 | + |
| 35 | +Aside from the main platform builds for testing, we are also performing |
| 36 | +some auxiliary builds that test packaging support to be up-to-date. We |
| 37 | +do that for: |
| 38 | + |
| 39 | +* a `docker` image |
| 40 | +* an `ubuntu-20.04` package |
| 41 | +* an `ubuntu-18.04` package |
| 42 | +* a `windows-msi` installer package |
| 43 | + |
| 44 | +Last but not least, we are also performing a coverage statistics collection |
| 45 | +job, which builds CBMC with coverage information on, and then runs the tests, |
| 46 | +finally uploading the results to [Codecov](https://about.codecov.io) which |
| 47 | +then updates pull request with coverage statistics after the job has finished |
| 48 | +running. |
0 commit comments