Hi folks,

The 2020.06 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
=========

Database migrations
-------------------

A new `is_synced` field as been added to the `Device` model. The field will be used to know when a given device is managed by `lava-server manage sync` command or is managed manually.

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

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

New supported devices:

* d2500cc
* imx6qp-wandboard-revd1

Device management
=================

```shell
lava-server manage sync
```

LAVA can now synchronize database records with the device dictionary via this
management command. It currently supports these models:

* Device
* Device type
* Tag
* Alias

This can make administration less cumbersome and can help with Ansible and
similar setups. By using this feature administrators are able to keep the list
of these records inside the version control.

For device records, a flag named **is_synced** is used to recognize devices
which are synced to/from the device dictionary. This option can be updated via
usual channels (web UI admin, APIs) and will be automatically set to True for
newly added device via this method.

Example device dictionary snippet:

```jinja
{% set sync_to_lava = {
   "device_type": "qemu",
   "worker": "worker-01"
   "tags": ["tag1", "tag2"],
   "aliases": ["alias1", "alias2"],
   }
%}
```

Scheduler
=========

Fix multinode scheduling. The scheduler was expecting ids of jobs in a multinode group to be consecutive.

This is not guaranteed and was leading to a dead lock when scheduling interleaved multinode jobs.

`command` action
================

The [command](https://lava.readthedocs.io/en/latest/technical-references/job-definition/actions/command/) action can now run recovery commands `recovery_mode` and `recovery_off`:

```yaml
actions:
- command:
    name: recovery_off
```

Auto login
==========

The auto-login action is now able to retry on failed login. This can happen when the kernel print some stack trace while booting.

Connection closed
=================

LAVA is now able to detect when the connection is closed by the DUT. When retrying to boot the DUT, LAVA will automatically reconnect to the DUT.

The `minimal` boot action has been updated to detect such event and mark the job as `incomplete`.

Documentation
=============

The documentation work is progressing with some new pages added. The work-in-progress documentation is visible on [read the doc](https://lava.readthedocs.io/).

Test job log
============

Prior to this release, LAVA would always store test job logs on the filesystem in `/var/lib/lava-server/default/media/job-output/<year>/<month>/<day>/<id>`.

In release [2020.05](2020.05), the support for mongodb was added.

Elasticsearch
-------------

The support for [Elasticsearch](https://www.elastic.co) was added in this release.

To use elastic search to store the logs, admin should update the configuration:

```yaml
LAVA_LOG_BACKEND: "lava_scheduler_app.logutils.LogsElasticsearch"
ELASTICSEARCH_URI: "<URI|http://localhost:9200/>"
ELASTICSEARCH_INDEX: "<INDEX_NAME|lava-logs>"
ELASTICSEARCH_APIKEY: "<API_KEY>"
```

Firestore
---------

The support of [Firestore](https://firebase.google.com/docs/firestore/) was added in this release.

Admin should update the configuration:

```yaml
LAVA_LOG_BACKEND: "lava_scheduler_app.logutils.LogsFirestore"
```

In the environment, `GOOGLE_APPLICATION_CREDENTIALS` should point to the google cloud credentials.


Thanks

--
Rémi Duraffort
LAVA Architect
Linaro