Remove top-level Makefile, explain why in README

Obsoleted by docker_images_require(). The top-level Makefile had the
following drawbacks:
* it was not maintained: many targets were missing, and some of the
  existing ones did not build anymore
* make targets have the same names as the folders, so if they are not
  listed in the Makefile, it will assume that the target has been built
  already (prone to making mistakes)

Extend README.md to describe how to run tests, container caching, how
container dependencies are resolved now and the reasoning for doing
it that way instead of using a top-level Makefile.

Related: OS#3268
Change-Id: Id18a9a7a70f85127e6f6c9447d71764018bdb4ff
This commit is contained in:
Oliver Smith 2018-10-11 14:54:57 +02:00
parent 96a0c5f73a
commit fb87e1b19b
2 changed files with 69 additions and 84 deletions

View File

@ -1,82 +0,0 @@
.PHONY: build
build: debian-jessie-build osmo-ggsn-master osmo-stp-master sctp-test sigtran-tests m3ua-test sua-test debian-stretch-titan ttcn3-ggsn-test
.PHONY: debian-jessie-build
debian-jessie-build:
$(MAKE) -C debian-jessie-build
.PHONY: debian-stretch-titan
debian-stretch-titan:
$(MAKE) -C debian-stretch-titan
.PHONY: osmo-bsc-master
osmo-bsc-master: debian-jessie-build
$(MAKE) -C osmo-bsc-master
.PHONY: osmo-bts-master
osmo-bts-master: debian-jessie-build
$(MAKE) -C osmo-bts-master
.PHONY: osmo-msc-master
osmo-msc-master: debian-jessie-build
$(MAKE) -C osmo-msc-master
.PHONY: osmo-stp-master
osmo-stp-master: debian-jessie-build
$(MAKE) -C osmo-stp-master
.PHONY: osmocom-bb-host-master
osmocom-bb-host-master: debian-jessie-build
$(MAKE) -C osmocom-bb-host-master
.PHONY: osmo-ggsn-master
osmo-ggsn-master: debian-jessie-build
$(MAKE) -C osmo-ggsn-master
.PHONY: osmo-hlr-master
osmo-hlr-master: debian-jessie-build
$(MAKE) -C osmo-hlr-master
.PHONY: ttcn3-bsc-test
ttcn3-bsc-test: debian-stretch-titan osmo-stp-master osmo-bsc-master osmo-bts-master ttcn3-bsc-test
$(MAKE) -C ttcn3-bsc-test
.PHONY: ttcn3-bts-test
ttcn3-bts-test: debian-stretch-titan osmo-bsc-master osmo-bts-master osmocom-bb-host-master ttcn3-bts-test
$(MAKE) -C ttcn3-bts-test
.PHONY: ttcn3-msc-test
ttcn3-msc-test: debian-stretch-titan osmo-stp-master osmo-msc-master ttcn3-msc-test
$(MAKE) -C ttcn3-msc-test
.PHONY: ttcn3-ggsn-test
ttcn3-ggsn-test: osmo-ggsn-test
$(MAKE) -C ggsn-test
.PHONY: ttcn3-mgw-test
ttcn3-mgw-test: debian-stretch-titan osmo-mgw-master
$(MAKE) -C ttcn3-mgw-test
.PHONY: ttcn3-hlr-test
ttcn3-hlr-test: debian-stretch-titan osmo-hlr-master
$(MAKE) -C ttcn3-hlr-test
.PHONY: sctp-test
sctp-test: debian-jessie-build
$(MAKE) -C sctp-test
.PHONY: sigtran-tests
sigtran-tests: debian-jessie-build
$(MAKE) -C sigtran-tests
.PHONY: sua-test
sua-test: osmo-stp-master
$(MAKE) -C sua-test
.PHONY: m3ua-test
m3ua-test: osmo-stp-master sigtran-tests
$(MAKE) -C m3ua-test
.PHONY: gr-gsm-master
gr-gsm-master:
$(MAKE) -C gr-gsm-master

View File

@ -5,5 +5,72 @@ This repository contains some humble attempts at creating some Docker
containers + related stacks around Osmocom. So far, the main focus is
test automation.
See http://laforge.gnumonks.org/blog/20170503-docker-overhyped/ for
related rambling on why this doesn't work as well as one would want.
## Running a testsuite
All testsuite folders start with `ttcn3` or `nplab`. Run the following
to build/update all required containers and start a specific testsuite:
```
$ cd ttcn3-mgw-test
$ ./jenkins.sh
```
Environment variables:
* `IMAGE_SUFFIX`: the version of the Osmocom stack to run the testsuite
against. Default is `master`, set this to `latest` to test the last
stable releases.
* `NO_DOCKER_IMAGE_BUILD`: when set to `1`, it won't try to update the
containers (see "caching" below)
## Building containers manually
Most folders in this repository contain a `Dockerfile`. Build a docker
container with the same name as the folder like this:
```
$ cd debian-jessie-build
$ make
```
## Caching
All folders named `osmo-*-latest` and `osmo-*-master` build the latest
stable or most recent commit from `master` of the corresponding Osmocom
program's git repository. When you have built it already, running `make`
will only do a small HTTP request to check if the sources are outdated
and skip the build in case it is still up-to-date.
## Dependencies
Folders that don't have a `jenkins.sh` usually only depend on the
container that is specified in the `FROM` line of their `Dockerfile`.
Testsuites depend on multiple containers, they are defined on top of
each `jenkins.sh`:
```shell
. ../jenkins-common.sh
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
"debian-jessie-build" \
"osmo-stp-$IMAGE_SUFFIX" \
"osmo-bsc-$IMAGE_SUFFIX" \
"osmo-bts-$IMAGE_SUFFIX" \
"debian-stretch-titan" \
"ttcn3-bsc-test"
```
#### Reasoning for this implementation
Before having the `docker_images_require` lines, there used to be a
top-level `Makefile` for resolving dependencies between the containers.
But it was prone to mistakes: when new folders in the repository
were added without related targets in the `Makefile`, `make` would
always assume that the targets where the always existing folders and
therefore never build the containers.
In order to implement testing `latest` in addition to `master`
([OS#3268](https://osmocom.org/issues/3268)), it would have been
necessary to add further complexity to the `Makefile`. Instead it was
decided to scrap the file, and just keep the short list of dependencies
right above where they would be needed in the `jenkins.sh`.
## See also
* [Overhyped Docker](http://laforge.gnumonks.org/blog/20170503-docker-overhyped/)
for related rambling on why this doesn't work as well as one would
want.
* [Osmocom wiki: Titan TTCN3 Testsuites](https://osmocom.org/projects/cellular-infrastructure/wiki/Titan_TTCN3_Testsuites)