<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11369">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved; Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Remove top-level Makefile, explain why in README<br><br>Obsoleted by docker_images_require(). The top-level Makefile had the<br>following drawbacks:<br>* it was not maintained: many targets were missing, and some of the<br>  existing ones did not build anymore<br>* make targets have the same names as the folders, so if they are not<br>  listed in the Makefile, it will assume that the target has been built<br>  already (prone to making mistakes)<br><br>Extend README.md to describe how to run tests, container caching, how<br>container dependencies are resolved now and the reasoning for doing<br>it that way instead of using a top-level Makefile.<br><br>Related: OS#3268<br>Change-Id: Id18a9a7a70f85127e6f6c9447d71764018bdb4ff<br>---<br>D Makefile<br>M README.md<br>2 files changed, 69 insertions(+), 84 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Makefile b/Makefile</span><br><span>deleted file mode 100644</span><br><span>index e224274..0000000</span><br><span>--- a/Makefile</span><br><span>+++ /dev/null</span><br><span>@@ -1,82 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: build</span><br><span style="color: hsl(0, 100%, 40%);">-build: debian-jessie-build osmo-ggsn-master osmo-stp-master sctp-test sigtran-tests m3ua-test sua-test debian-stretch-titan ttcn3-ggsn-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-debian-jessie-build:</span><br><span style="color: hsl(0, 100%, 40%);">-       $(MAKE) -C debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: debian-stretch-titan</span><br><span style="color: hsl(0, 100%, 40%);">-debian-stretch-titan:</span><br><span style="color: hsl(0, 100%, 40%);">- $(MAKE) -C debian-stretch-titan</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmo-bsc-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-bsc-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-      $(MAKE) -C osmo-bsc-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmo-bts-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-bts-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-   $(MAKE) -C osmo-bts-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmo-msc-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-msc-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-   $(MAKE) -C osmo-msc-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmo-stp-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-stp-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-   $(MAKE) -C osmo-stp-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmocom-bb-host-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmocom-bb-host-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-     $(MAKE) -C osmocom-bb-host-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmo-ggsn-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-ggsn-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-  $(MAKE) -C osmo-ggsn-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: osmo-hlr-master</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-hlr-master: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-  $(MAKE) -C osmo-hlr-master</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: ttcn3-bsc-test</span><br><span style="color: hsl(0, 100%, 40%);">-ttcn3-bsc-test: debian-stretch-titan osmo-stp-master osmo-bsc-master osmo-bts-master ttcn3-bsc-test</span><br><span style="color: hsl(0, 100%, 40%);">-     $(MAKE) -C ttcn3-bsc-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: ttcn3-bts-test</span><br><span style="color: hsl(0, 100%, 40%);">-ttcn3-bts-test: debian-stretch-titan osmo-bsc-master osmo-bts-master osmocom-bb-host-master ttcn3-bts-test</span><br><span style="color: hsl(0, 100%, 40%);">-       $(MAKE) -C ttcn3-bts-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: ttcn3-msc-test</span><br><span style="color: hsl(0, 100%, 40%);">-ttcn3-msc-test: debian-stretch-titan osmo-stp-master osmo-msc-master ttcn3-msc-test</span><br><span style="color: hsl(0, 100%, 40%);">-      $(MAKE) -C ttcn3-msc-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: ttcn3-ggsn-test</span><br><span style="color: hsl(0, 100%, 40%);">-ttcn3-ggsn-test: osmo-ggsn-test</span><br><span style="color: hsl(0, 100%, 40%);">- $(MAKE) -C ggsn-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: ttcn3-mgw-test</span><br><span style="color: hsl(0, 100%, 40%);">-ttcn3-mgw-test: debian-stretch-titan osmo-mgw-master</span><br><span style="color: hsl(0, 100%, 40%);">-  $(MAKE) -C ttcn3-mgw-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: ttcn3-hlr-test</span><br><span style="color: hsl(0, 100%, 40%);">-ttcn3-hlr-test: debian-stretch-titan osmo-hlr-master</span><br><span style="color: hsl(0, 100%, 40%);">-     $(MAKE) -C ttcn3-hlr-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: sctp-test</span><br><span style="color: hsl(0, 100%, 40%);">-sctp-test: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-        $(MAKE) -C sctp-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: sigtran-tests</span><br><span style="color: hsl(0, 100%, 40%);">-sigtran-tests: debian-jessie-build</span><br><span style="color: hsl(0, 100%, 40%);">-     $(MAKE) -C sigtran-tests</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: sua-test</span><br><span style="color: hsl(0, 100%, 40%);">-sua-test: osmo-stp-master</span><br><span style="color: hsl(0, 100%, 40%);">-       $(MAKE) -C sua-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: m3ua-test</span><br><span style="color: hsl(0, 100%, 40%);">-m3ua-test: osmo-stp-master sigtran-tests</span><br><span style="color: hsl(0, 100%, 40%);">-    $(MAKE) -C m3ua-test</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-.PHONY: gr-gsm-master</span><br><span style="color: hsl(0, 100%, 40%);">-gr-gsm-master:</span><br><span style="color: hsl(0, 100%, 40%);">- $(MAKE) -C gr-gsm-master</span><br><span>diff --git a/README.md b/README.md</span><br><span>index bb354c0..adb6420 100644</span><br><span>--- a/README.md</span><br><span>+++ b/README.md</span><br><span>@@ -5,5 +5,72 @@</span><br><span> containers + related stacks around Osmocom.   So far, the main focus is</span><br><span> test automation.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-See http://laforge.gnumonks.org/blog/20170503-docker-overhyped/ for</span><br><span style="color: hsl(0, 100%, 40%);">-related rambling on why this doesn't work as well as one would want.</span><br><span style="color: hsl(120, 100%, 40%);">+## Running a testsuite</span><br><span style="color: hsl(120, 100%, 40%);">+All testsuite folders start with `ttcn3` or `nplab`. Run the following</span><br><span style="color: hsl(120, 100%, 40%);">+to build/update all required containers and start a specific testsuite:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+```</span><br><span style="color: hsl(120, 100%, 40%);">+$ cd ttcn3-mgw-test</span><br><span style="color: hsl(120, 100%, 40%);">+$ ./jenkins.sh</span><br><span style="color: hsl(120, 100%, 40%);">+```</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Environment variables:</span><br><span style="color: hsl(120, 100%, 40%);">+* `IMAGE_SUFFIX`: the version of the Osmocom stack to run the testsuite</span><br><span style="color: hsl(120, 100%, 40%);">+  against. Default is `master`, set this to `latest` to test the last</span><br><span style="color: hsl(120, 100%, 40%);">+  stable releases.</span><br><span style="color: hsl(120, 100%, 40%);">+* `NO_DOCKER_IMAGE_BUILD`: when set to `1`, it won't try to update the</span><br><span style="color: hsl(120, 100%, 40%);">+  containers (see "caching" below)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+## Building containers manually</span><br><span style="color: hsl(120, 100%, 40%);">+Most folders in this repository contain a `Dockerfile`. Build a docker</span><br><span style="color: hsl(120, 100%, 40%);">+container with the same name as the folder like this:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+```</span><br><span style="color: hsl(120, 100%, 40%);">+$ cd debian-jessie-build</span><br><span style="color: hsl(120, 100%, 40%);">+$ make</span><br><span style="color: hsl(120, 100%, 40%);">+```</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+## Caching</span><br><span style="color: hsl(120, 100%, 40%);">+All folders named `osmo-*-latest` and `osmo-*-master` build the latest</span><br><span style="color: hsl(120, 100%, 40%);">+stable or most recent commit from `master` of the corresponding Osmocom</span><br><span style="color: hsl(120, 100%, 40%);">+program's git repository. When you have built it already, running `make`</span><br><span style="color: hsl(120, 100%, 40%);">+will only do a small HTTP request to check if the sources are outdated</span><br><span style="color: hsl(120, 100%, 40%);">+and skip the build in case it is still up-to-date.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+## Dependencies</span><br><span style="color: hsl(120, 100%, 40%);">+Folders that don't have a `jenkins.sh` usually only depend on the</span><br><span style="color: hsl(120, 100%, 40%);">+container that is specified in the `FROM` line of their `Dockerfile`.</span><br><span style="color: hsl(120, 100%, 40%);">+Testsuites depend on multiple containers, they are defined on top of</span><br><span style="color: hsl(120, 100%, 40%);">+each `jenkins.sh`:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+```shell</span><br><span style="color: hsl(120, 100%, 40%);">+. ../jenkins-common.sh</span><br><span style="color: hsl(120, 100%, 40%);">+IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"</span><br><span style="color: hsl(120, 100%, 40%);">+docker_images_require \</span><br><span style="color: hsl(120, 100%, 40%);">+       "debian-jessie-build" \</span><br><span style="color: hsl(120, 100%, 40%);">+     "osmo-stp-$IMAGE_SUFFIX" \</span><br><span style="color: hsl(120, 100%, 40%);">+  "osmo-bsc-$IMAGE_SUFFIX" \</span><br><span style="color: hsl(120, 100%, 40%);">+  "osmo-bts-$IMAGE_SUFFIX" \</span><br><span style="color: hsl(120, 100%, 40%);">+  "debian-stretch-titan" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "ttcn3-bsc-test"</span><br><span style="color: hsl(120, 100%, 40%);">+```</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#### Reasoning for this implementation</span><br><span style="color: hsl(120, 100%, 40%);">+Before having the `docker_images_require` lines, there used to be a</span><br><span style="color: hsl(120, 100%, 40%);">+top-level `Makefile` for resolving dependencies between the containers.</span><br><span style="color: hsl(120, 100%, 40%);">+But it was prone to mistakes: when new folders in the repository</span><br><span style="color: hsl(120, 100%, 40%);">+were added without related targets in the `Makefile`, `make` would</span><br><span style="color: hsl(120, 100%, 40%);">+always assume that the targets where the always existing folders and</span><br><span style="color: hsl(120, 100%, 40%);">+therefore never build the containers.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+In order to implement testing `latest` in addition to `master`</span><br><span style="color: hsl(120, 100%, 40%);">+([OS#3268](https://osmocom.org/issues/3268)), it would have been</span><br><span style="color: hsl(120, 100%, 40%);">+necessary to add further complexity to the `Makefile`. Instead it was</span><br><span style="color: hsl(120, 100%, 40%);">+decided to scrap the file, and just keep the short list of dependencies</span><br><span style="color: hsl(120, 100%, 40%);">+right above where they would be needed in the `jenkins.sh`.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+## See also</span><br><span style="color: hsl(120, 100%, 40%);">+* [Overhyped Docker](http://laforge.gnumonks.org/blog/20170503-docker-overhyped/)</span><br><span style="color: hsl(120, 100%, 40%);">+  for related rambling on why this doesn't work as well as one would</span><br><span style="color: hsl(120, 100%, 40%);">+  want.</span><br><span style="color: hsl(120, 100%, 40%);">+* [Osmocom wiki: Titan TTCN3 Testsuites](https://osmocom.org/projects/cellular-infrastructure/wiki/Titan_TTCN3_Testsuites)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11369">change 11369</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11369"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: docker-playground </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Id18a9a7a70f85127e6f6c9447d71764018bdb4ff </div>
<div style="display:none"> Gerrit-Change-Number: 11369 </div>
<div style="display:none"> Gerrit-PatchSet: 9 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>