Skip to content

Commit 6f05a7e

Browse files
author
Mark R Tuttle
committed
Add GitHub Actions to build installation packages for develop.
This workflow builds installations for MacOS, Windows, and Ubuntu from the tip of the develop branch.
1 parent 7cbae42 commit 6f05a7e

File tree

20 files changed

+1489
-71
lines changed

20 files changed

+1489
-71
lines changed

.github/workflows/README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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.

.github/workflows/TODO.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Left to do:
2+
* Make the Debian builds run the full debian package flow.
3+
* Refactor the workflow to invoke a makefile that can be invoked either from
4+
the workflow or from a command line to build the package.
5+
* Make the workflow distinguish between stable versions and latest versions
6+
Stable versions should write into cbmc (or bin) and latest versions
7+
should write into cbmc-latest (so they can exist side-by-side). Windows
8+
packages will have to have different product guids for stable and latest.
9+
* Transform version numbers from 5.12 to 5.12.0.id where id is some value
10+
that increments with each build. A good candidate is `github.run_id` or
11+
`github.run_num`.
12+
* Can we automate the generation of repository packages (eg, homebrew)?
13+
14+
Plans:
15+
* Wait for Michael's Debian builds and fit them into the workflow
16+
* Refactor the workflow to invoke Makefiles
17+
* Prepare PR
18+
* Do remaining items as PR refinements.

0 commit comments

Comments
 (0)