Hi folks,

The 2026.01 tag has been pushed to master on gitlab.com/lava/lava.
.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://registry.gitlab.com/

and

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


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

# Device-types

## New device-types

* imx952-19x19-evk
* osm-imx93
* r8a779g3-sparrow-hawk
* juno-r2
* mt8188-geralt-ciri-sku4
* RZV2L

# LAVA Server

## LAVA monitoring

Two scripts for exporting test job data and device transitions as JSON was added.

The scripts can be called with:

```shell
lava-server manage testjob_exporter --output-dir data/
lava-server manage transition_exporter --output-dir data/
```

The json files can then be consumed by [lava-dashboard](https://gitlab.com/lava/dashboard/lava-dashboard) to generate graphs of the device and job usages.

## UI improvements

Interminent worker to server communications errors used to be displayed at the
top of the job details page. This is now collapsed by default for complete jobs
and visible for incomplete jobs.

A link to the failing job is now available when the health of the device is bad
(after a failed check for the device).

Improve test job table filtering

The following views are now properly checking properly user permissions::

* Plain device dictionary download
* Device health check list
* Worker details

## XMLRPC API

Allow to add a reason when updating the health. This was already available in
the web interface and the REST API.

The reason of the latest health change is also shown on the device details page.

# LAVA Worker

## Labgrid support

LAVA now supports running labgrid tests natively or within the LAVA Docker test shell.

Native run example:

```shell
$ cd share/labgrid2lava/
$ python3 ./converter.py -l examples/uboot.yaml -o output/ -d bcm2837-rpi-3-b-32
$ sudo lava-run --job-id 1 \
  --output-dir ./1 \
  --device ./output/device.yaml \
  ./output/job.yaml
```

Job definition example with LAVA Docker test shell:

```yaml
actions:
 - test:
     docker:
       image: python:3.13
       local: true
     definitions:
     - repository: https://github.com/Linaro/test-definitions.git
       from: git
       path: automated/linux/labgrid/labgrid.yaml
       parameters:
         UPDATE_ENV: true
         LG_ENV: "./tests/example/env.yaml"
         LG_TEST: "./tests/example/test_shell_strategy.py"
         DEB_PKGS: "usbrelay"
       name: labgrid-shell-strategy-example
```

## Misc

When manipulating cpio archives all operations are performed using `fakeroot`.
This is fixing issues with devices nodes (like /dev/null) that where lost in
the process.

## Docker test shell

### Environment variables

Boot and test character delay are now available as environment variables inside
the docker test shell: `LAVA_BOOT_CHARACTER_DELAYS` and
`LAVA_TEST_CHARACTER_DELAYS`.

### Serial disconnect

Test shell running in docker can now disconnect device connection to allow test definition to use it. Test shell also has access to connection specific environment variables.

Add this snippet to the job definition:

```yaml
- test:
    docker:
      image: debian:trixie
    disconnect_connection: True
```

## FVP

Add support for running fvp shell commands. The `commands` are executed in the
FVP Docker container after the FVP model has started. It allows running custom
shell commands or a script that is already in the container to communicate with
the model.

## usbg-ms deploy action

Allow users to run `usbg_ms_commands.disable` command in the job definition, to disable usbg-ms whenever needed.

In order to call this function, add to the job definition:

```yaml
- command:
    name: usbg_ms_commands_disable
```

## Boot action

### boot to bootloader

By default LAVA will reset the previous connection and the board power when executing
the boot action. Users can skip this step by adding `reset_connection: false` and `reset_device: false` respectively.

This version allows to skip reset with the boot to bootloader action.

### Transfer overlay

LAVA will now check that the overlay is properly downloaded and deployed when using `transfer_overlay`. In case of failure, LAVA will fail the job.

## List of expected tests

List of expected tests is now supported in test definitions or job definitions. Missing test cases are reported as fail, while extra test cases are logged as warnings. These cases are always checked and reported either after the test finishes or right before the job exists on errors. All three test actions (definitions, monitors and interactive) support providing the list in the same way.

Test definition example:

```yaml
metadata:
  format: Lava-Test Test Definition 1.0
  name: expected-testdef-example
run:
  steps: []
expected:
  - tc1
  - tc2
  - tc3
  - tc4
```

Job definition example:

```yaml
- test:
  definitions:
    - repository: https://gitlab.com/lava/functional-tests.git
      from: git
      path: functional/expected-tests.yaml
      name: expected-tests
      expected:
        - tc1
        - tc2
```

## Fixed SShSession action raising exception

It became broken in 2025.10 release.

## Fixed RunNodebooterContainer action raising exception

It was broken since 2023.06 release.

# CI

Enable more pylint checks and fix code that wasn't compliant before. Enabled checks include: C0121, C0123, C0201, C0206, C0207, C2801, R1701, R1718, R1719, R1721, R1728, R1729, R1731, R1733, R1734, R1735, W0101, W0102, W0106, W0108, W0127, W0130, W0640, W0706, W0715, W3101 and W4701

More details on the meaning of the codes can be found in [pylint wiki](http://pylint-messages.wikidot.com/all-codes)


Rgds

-- 
Rémi Duraffort
Principal Tech Lead
LAVA Tech Lead
Automation Software Team
Linaro