Hi folks,

The 2020.01 tag has been pushed to master on git.lavasoftware.org.
.deb packages have been built in GitLab CI and are published at

  https://apt.lavasoftware.org/release

Docker images for amd64 and arm64 have been built in GitLab CI and
are available from

  https://hub.lavasoftware.org/

and

  https://hub.docker.com/u/lavasoftware

Changes in this release
=================

Upgrading
=========

This release add database migrations to add one field to the workers objects.

This migrations should be really quick due to the fairly small amount of workers. However this mean that some downtime will be required.

Device-types
============

New device-types
----------------

New supported devices:
* sun50i-h6-pine-h64-model-b (Olimex)

docker
------

The docker DUTs can now use a specific network by setting `docker_networks` in the device dictionary:

```jinja
{% set docker_networks = ["mynet", "mysecondnet"] %}
```

cmsis-dap
---------

cmsis-dap capable devices can now set `usb_sleep`.
This parameter will force lava to wait some seconds after the usb device becomes visible.

sun50i devices
--------------

The initrd memory limit has been increased to fix a failure in u-boot with large ramdisk. The new limit is set to `0xffffffffffffffff`.

REST API
========

We are expanding the REST API 0.2 functionalities in this release. New methods
and endpoints are available for different models.

New endpoints with basic CRUD methods are available:

* /api/v0.2/tags/
* /api/v0.2/aliases/

Following endpoints have their functionalities expended so they now support
create, update and delete actions:

* /api/v0.2/workers/
* /api/v0.2/devices/
* /api/v0.2/devicetypes/

Devices endpoint now supports get and set dictionary via GET/POST request.

* /api/v0.2/devices/${hostname}/dictionary/

Similarly, devicetypes endpoint now supports retrieving and creating/updating
the health checks and device type templates via GET/POST.

* /api/v0.2/devicetypes/${name}/health_check/
* /api/v0.2/devicetypes/${name}/template/

Workers endpoint now supports retrieving and creating/updating the
configuration and environment via GET/POST requests available here:

* /api/v0.2/workers/${hostname}/env/
* /api/v0.2/workers/${hostname}/config/

lava-dispatcher-host
====================

This release includes some new features towards being able to run lava-dispatcher, or some test job actions, inside containers.

One of these is lava-dispatcher-host, a small package that provides the minimal functionality that needs to run on the host OS: watching for udev events for USB devices showing up, and making them available inside containers.

For now, this only works for lxc containers, but it is separate from lava-dispatcher itself so that when lava-dispatcher runs inside a docker container, the amount of software needed on the host is minimal.

docker fastboot support
========================

This release also adds the possibility of deploying images and boot via a fastboot binary that is running inside a docker container.

It simplifies AOSP deployment, which no longer need to instantiate a full lxc container, install the tools inside of it, and boot it. The same can now be achieved by using a pre-built docker images with the tools already installed. For example, an AOSP deploy becomes:

```yaml
actions:
- deploy:
    to: fastboot
    docker:
      image: my-fastboot-image
    images:
      ptable:
        url: http://.../ptable.img
        reboot: hard-reset
      boot:
        url: http://.../boot.img
        reboot: hard-reset
      # [... other images ...]
    timeout:
      minutes: 15
- boot:
    method: fastboot
    docker:
      image: my-fastboot-image
    prompts:
    - 'healthd: No battery devices found'
    - 'hikey: '
    - 'console:'
    timeout:
      minutes: 15
```

Archive
=======

Some system images are compressed as a tarball (``.tar.*``), these images need the ``archive`` option specified to unpack the system image correctly.

```yaml
- deploy:
    images:
      boot:
        url: http://example.com/boot.tar.xz
        compression: xz
        archive: tar
```
The support for deploying qemu jobs using archive resources has been fixed.

Docker
======

Building images
---------------

The docker images are now built from sources. You can build the docker image locally using:
```shell
.gitlab-ci/build/docker.sh dispatcher
.gitlab-ci/build/docker.sh server
```

lava-coordinator
----------------

`lava-coordinator` is now installed and started in `lava-server` docker images.

lava-run
========

In previous releases, lava-run was executing host command under nice but was not running itself under nice.

`lava-run` is now running under `nice` and the host command will not be prepended anymore by `nice` as the niceness is inherited from the parent process.

Worker concurrent limit
=======================

Admins can now limit the number of jobs running in parallel on the same worker.
This limit can be set either from the admin interface or using lavacli:
```shell
lavacli workers update --job-limit 3 <worker>
```

Install script
==============

The `setup.py` script has been fully rewritten. This script is now used to generate the Debian packages and the docker containers.

This script could be used to generate any distribution packages.

This script is now used to build docker containers from sources.

Settings
========

The django settings are stored in `/etc/lava-server/settings.conf` using the json format.

Prior to this release, LAVA would silently ignore the settings if the file was invalid. Starting from this release, LAVA services will refuse to start if the file is not valid.

This will make errors easier to detect.


Thanks

--
Rémi Duraffort
LAVA Architect
Linaro