← Back to team overview

canonical-hw-cert team mailing list archive

[Merge] hwcert-jenkins-jobs:mir-jammy into hwcert-jenkins-jobs:master

 

Michał Sawicz has proposed merging hwcert-jenkins-jobs:mir-jammy into hwcert-jenkins-jobs:master.

Requested reviews:
  hwcert-jenkins (hwcert-jenkins)

For more details, see:
https://code.launchpad.net/~hwcert-jenkins/hwcert-jenkins-jobs/+git/hwcert-jenkins-jobs/+merge/440308
-- 
Your team hwcert-jenkins is requested to review the proposed merge of hwcert-jenkins-jobs:mir-jammy into hwcert-jenkins-jobs:master.
diff --git a/jobs/mir/mir-core-template-track.yaml b/jobs/mir/mir-core-template-track.yaml
new file mode 100644
index 0000000..3e856de
--- /dev/null
+++ b/jobs/mir/mir-core-template-track.yaml
@@ -0,0 +1,56 @@
+- job-template:
+    name: '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+    description: |
+        This runs the mir tests on {image} on {queue} using {snap}/{track}/{channel} with Mir `base: core{mir-base}`.
+        {detail}
+    project-type: freestyle
+    mir-base: '22'
+    track: 'latest'
+    channel: 'beta'
+    disabled_var:
+    disabled: '{obj:disabled_var}'
+    suite: smoke
+    filter: '*'
+    concurrent: false
+    sequential: false
+    repository: main
+    arch: amd64
+    has-serial-assertion: True
+    gfx-setup: ''
+    triggers:
+      - pollurl:
+          cron: 'H/10 * * * *'
+          polling-node: 'master'
+          urls:
+            - url: "{jenkins_url}/job/cert-snap-package-data/lastSuccessfulBuild/artifact/snaps.json/*view*/"
+              check-content:
+                - simple: false
+                - json:
+                  - '{snap}.{track}.{channel}.{arch}.revision'
+    wrappers:
+      - timeout:
+          timeout: 400
+          fail: true
+      - timestamps
+    builders:
+        - shell:
+            !include-raw: run-core-mir-track.sh
+    publishers:
+      - post-tasks:
+        - matches:
+          - log-text: "Build timed out"
+            operator: OR
+          - log-text: "Build was aborted"
+            operator: OR
+          script: |
+            testflinger cancel $(cat JOB_ID)
+      - description-setter:
+          regexp: "{snap} Version: (.*)"
+          regexp-for-failed: "{snap} Version: (.*)"
+          description: "\\1"
+          description-for-failed: "\\1"
+      - archive:
+          artifacts: 'artifacts/*'
+          allow-empty: true
+      - email:
+          recipients: michal.sawicz@xxxxxxxxxxxxx alan.griffiths@xxxxxxxxxxxxx
diff --git a/jobs/mir/mir-template-track.yaml b/jobs/mir/mir-template-track.yaml
new file mode 100644
index 0000000..0fb1e82
--- /dev/null
+++ b/jobs/mir/mir-template-track.yaml
@@ -0,0 +1,62 @@
+- job-template:
+    name: '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+    description: |
+        This runs the mir tests on {series} on {queue} using {snap}/{track}/{channel} with Mir `base: core{mir-base}`.
+        {detail}
+    project-type: freestyle
+    mir-base: '22'
+    track: 'latest'
+    channel: 'beta'
+    disabled_var:
+    disabled: '{obj:disabled_var}'
+    ppas: ''
+    gfx_drivers: ''
+    gfx_setup: ''
+    reboot: "true"  # needs to be a string, as it's passed to bash
+    suite: smoke
+    filter: '*'
+    concurrent: false
+    sequential: false
+    repository: main
+    arch: amd64
+    gschema_override:
+      !include-raw-escape: jobs/sru/gschema.override
+    wait_script:
+      !include-raw-escape: jobs/mir/wait-resource.sh
+    triggers:
+      - pollurl:
+          cron: 'H/10 * * * *'
+          polling-node: 'master'
+          urls:
+            - url: "{jenkins_url}/job/cert-snap-package-data/lastSuccessfulBuild/artifact/snaps.json/*view*/"
+              check-content:
+                - simple: false
+                - json:
+                  - '{snap}.{track}.{channel}.{arch}.revision'
+    wrappers:
+      - timeout:
+          timeout: 400
+          fail: true
+      - timestamps
+    builders:
+        - shell:
+            !include-raw: run-mir-track.sh
+    publishers:
+      - post-tasks:
+        - matches:
+          - log-text: "Build timed out"
+            operator: OR
+          - log-text: "Build was aborted"
+            operator: OR
+          script: |
+            testflinger cancel $(cat JOB_ID)
+      - description-setter:
+          regexp: "{snap} Version: (.*)"
+          regexp-for-failed: "{snap} Version: (.*)"
+          description: "\\1"
+          description-for-failed: "\\1"
+      - archive:
+          artifacts: 'artifacts/*'
+          allow-empty: true
+      - email:
+          recipients: michal.sawicz@xxxxxxxxxxxxx alan.griffiths@xxxxxxxxxxxxx
diff --git a/jobs/mir/projects-mir-core/beta-22.yaml b/jobs/mir/projects-mir-core/beta-22.yaml
new file mode 100644
index 0000000..62b9478
--- /dev/null
+++ b/jobs/mir/projects-mir-core/beta-22.yaml
@@ -0,0 +1,204 @@
+# Ubuntu Core 20
+- project: &core20
+    name: mir-22-beta-intel-amd64-core20
+    device: intel-amd64
+    queue: 202008-28166
+    snap: mir-test-tools
+    track: 22
+    channel: beta
+    arch: amd64
+    image: core20
+    provision_data: |
+      provision_data:
+            distro: core20-latest
+    jobs:
+      - '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+- project:
+    <<: *core20
+    name: ubuntu-frame-22-beta-intel-amd64-core20
+    snap: ubuntu-frame
+- project:
+    <<: *core20
+    name: mesa-core22-latest-beta-intel-amd64-core20
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core20
+    name: snapd-latest-beta-intel-amd64-core20
+    snap: snapd
+    track: latest
+- project:
+    <<: *core20
+    name: pc-kernel-latest-beta-intel-amd64-core20
+    snap: pc-kernel
+    track: latest
+- project:
+    <<: *core20
+    name: nvidia-core22-beta-nvidia-amd64-core20
+    device: nvidia-amd64
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: latest
+    gfx-setup: # temporary, until this all goes stable
+      _run sudo snap refresh snapd --channel beta;
+      _run sudo snap install nvidia-assemble --channel 20/stable --no-wait;
+      wait_for_snap_complete;
+- project: &core20-armhf
+    <<: *core20
+    name: mir-22-beta-rpi4-armhf-core20
+    device: rpi4-armhf
+    queue: rpi4-gfx
+    arch: armhf
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/20/dangerous-stable/current/ubuntu-core-20-armhf+raspi.img.xz
+- project:
+    <<: *core20-armhf
+    name: ubuntu-frame-22-beta-rpi4-armhf-core20
+    snap: ubuntu-frame
+- project:
+    <<: *core20-armhf
+    name: mesa-core22-latest-beta-rpi4-armhf-core20
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core20-armhf
+    name: pi-kernel-latest-beta-rpi4-armhf-core20
+    snap: pi-kernel
+    track: latest
+- project:
+    <<: *core20-armhf
+    name: snapd-latest-beta-rpi4-armhf-core20
+    snap: snapd
+    track: latest
+- project: &core20-arm64
+    <<: *core20
+    name: mir-22-beta-rpi4-arm64-core20
+    device: rpi4-arm64
+    queue: rpi4-gfx
+    arch: arm64
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/20/dangerous-stable/current/ubuntu-core-20-arm64+raspi.img.xz
+- project:
+    <<: *core20-arm64
+    name: ubuntu-frame-22-beta-rpi4-arm64-core20
+    snap: ubuntu-frame
+- project:
+    <<: *core20-arm64
+    name: mesa-core22-latest-beta-rpi4-arm64-core20
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core20-arm64
+    name: pi-kernel-latest-beta-rpi4-arm64-core20
+    snap: pi-kernel
+    track: latest
+- project:
+    <<: *core20-arm64
+    name: snapd-latest-beta-rpi4-arm64-core20
+    snap: snapd
+    track: latest
+
+
+# Ubuntu Core 22
+- project: &core22
+    name: mir-22-beta-intel-amd64-core22
+    device: intel-amd64
+    queue: 202008-28166
+    snap: mir-test-tools
+    track: 22
+    channel: beta
+    arch: amd64
+    image: core22
+    provision_data: |
+      provision_data:
+            distro: core22-latest
+    jobs:
+      - '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+- project:
+    <<: *core22
+    name: ubuntu-frame-22-beta-intel-amd64-core22
+    snap: ubuntu-frame
+- project:
+    <<: *core22
+    name: mesa-core22-22-beta-intel-amd64-core22
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core22
+    name: pc-kernel-latest-beta-intel-amd64-core22
+    snap: pc-kernel
+    track: latest
+- project:
+    <<: *core22
+    name: snapd-latest-beta-intel-amd64-core22
+    snap: snapd
+    track: latest
+- project:
+    <<: *core22
+    name: nvidia-core22-beta-nvidia-amd64-core22
+    device: nvidia-amd64
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: latest
+    gfx-setup: # temporary, until this all goes stable
+      _run sudo snap refresh snapd --channel beta;
+      _run sudo snap install nvidia-assemble --channel 22/stable --no-wait;
+      wait_for_snap_complete;
+- project: &core22-armhf
+    <<: *core22
+    name: mir-22-beta-rpi4-armhf-core22
+    device: rpi4-armhf
+    queue: rpi4-gfx
+    arch: armhf
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/22/dangerous-stable/current/ubuntu-core-22-armhf+raspi.img.xz
+- project:
+    <<: *core22-armhf
+    name: ubuntu-frame-22-beta-rpi4-armhf-core22
+    snap: ubuntu-frame
+- project:
+    <<: *core22-armhf
+    name: mesa-core22-latest-beta-rpi4-armhf-core22
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core22-armhf
+    name: pi-kernel-latest-beta-rpi4-armhf-core22
+    snap: pi-kernel
+    track: latest
+- project:
+    <<: *core22-armhf
+    name: snapd-latest-beta-rpi4-armhf-core22
+    snap: snapd
+    track: latest
+- project: &core22-arm64
+    <<: *core22
+    name: mir-22-beta-rpi4-arm64-core22
+    device: rpi4-arm64
+    queue: rpi4-gfx
+    arch: arm64
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/22/dangerous-stable/current/ubuntu-core-22-arm64+raspi.img.xz
+- project:
+    <<: *core22-arm64
+    name: ubuntu-frame-22-beta-rpi4-arm64-core22
+    snap: ubuntu-frame
+- project:
+    <<: *core22-arm64
+    name: mesa-core22-latest-beta-rpi4-arm64-core22
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core22-arm64
+    name: pi-kernel-latest-beta-rpi4-arm64-core22
+    snap: pi-kernel
+    track: latest
+- project:
+    <<: *core22-arm64
+    name: snapd-latest-beta-rpi4-arm64-core22
+    snap: snapd
+    track: latest
diff --git a/jobs/mir/projects-mir-core/candidate-22.yaml b/jobs/mir/projects-mir-core/candidate-22.yaml
new file mode 100644
index 0000000..6777804
--- /dev/null
+++ b/jobs/mir/projects-mir-core/candidate-22.yaml
@@ -0,0 +1,144 @@
+# Ubuntu Core 20
+- project: &core20
+    name: mir-22-candidate-intel-amd64-core20
+    device: intel-amd64
+    queue: 202008-28166
+    snap: mir-test-tools
+    track: 22
+    channel: candidate
+    arch: amd64
+    image: core20
+    provision_data: |
+      provision_data:
+            distro: core20-latest
+    jobs:
+      - '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+- project:
+    <<: *core20
+    name: ubuntu-frame-22-candidate-intel-amd64-core20
+    snap: ubuntu-frame
+- project:
+    <<: *core20
+    name: mesa-core22-latest-candidate-intel-amd64-core20
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core20
+    name: nvidia-core22-candidate-nvidia-amd64-core20
+    device: nvidia-amd64
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: latest
+    gfx-setup: # temporary, until this all goes stable
+      _run sudo snap refresh snapd --channel candidate;
+      _run sudo snap install nvidia-assemble --channel 20/stable --no-wait;
+      wait_for_snap_complete;
+- project: &core20-armhf
+    <<: *core20
+    name: mir-22-candidate-rpi4-armhf-core20
+    device: rpi4-armhf
+    queue: rpi4-gfx
+    arch: armhf
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/20/dangerous-stable/current/ubuntu-core-20-armhf+raspi.img.xz
+- project:
+    <<: *core20-armhf
+    name: ubuntu-frame-22-candidate-rpi4-armhf-core20
+    snap: ubuntu-frame
+- project:
+    <<: *core20-armhf
+    name: mesa-core22-latest-candidate-intel-armhf-core20
+    snap: mesa-core22
+    track: latest
+- project: &core20-arm64
+    <<: *core20
+    name: mir-22-candidate-rpi4-arm64-core20
+    device: rpi4-arm64
+    queue: rpi4-gfx
+    arch: arm64
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/20/dangerous-stable/current/ubuntu-core-20-arm64+raspi.img.xz
+- project:
+    <<: *core20-arm64
+    name: ubuntu-frame-22-candidate-rpi4-arm64-core20
+    snap: ubuntu-frame
+- project:
+    <<: *core20-arm64
+    name: mesa-core22-latest-candidate-intel-arm64-core20
+    snap: mesa-core22
+    track: latest
+
+
+# Ubuntu Core 22
+- project: &core22
+    name: mir-22-candidate-intel-amd64-core22
+    device: intel-amd64
+    queue: 202008-28166
+    snap: mir-test-tools
+    track: 22
+    channel: candidate
+    arch: amd64
+    image: core22
+    provision_data: |
+      provision_data:
+            distro: core22-latest
+    jobs:
+      - '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+- project:
+    <<: *core22
+    name: ubuntu-frame-22-candidate-intel-amd64-core22
+    snap: ubuntu-frame
+- project:
+    <<: *core22
+    name: mesa-core22-22-candidate-intel-amd64-core22
+    snap: mesa-core22
+    track: latest
+- project:
+    <<: *core22
+    name: nvidia-core22-candidate-nvidia-amd64-core22
+    device: nvidia-amd64
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: latest
+    gfx-setup: # temporary, until this all goes stable
+      _run sudo snap refresh snapd --channel candidate;
+      _run sudo snap install nvidia-assemble --channel 22/stable --no-wait;
+      wait_for_snap_complete;
+- project: &core22-armhf
+    <<: *core22
+    name: mir-22-candidate-rpi4-armhf-core22
+    device: rpi4-armhf
+    queue: rpi4-gfx
+    arch: armhf
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/22/dangerous-stable/current/ubuntu-core-22-armhf+raspi.img.xz
+- project:
+    <<: *core22-armhf
+    name: ubuntu-frame-22-candidate-rpi4-armhf-core22
+    snap: ubuntu-frame
+- project:
+    <<: *core22-armhf
+    name: mesa-core22-latest-candidate-rpi4-armhf-core22
+    snap: mesa-core22
+    track: latest
+- project: &core22-arm64
+    <<: *core22
+    name: mir-22-candidate-rpi4-arm64-core22
+    device: rpi4-arm64
+    queue: rpi4-gfx
+    arch: arm64
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/22/dangerous-stable/current/ubuntu-core-22-arm64+raspi.img.xz
+- project:
+    <<: *core22-arm64
+    name: ubuntu-frame-22-candidate-rpi4-arm64-core22
+    snap: ubuntu-frame
+- project:
+    <<: *core22-arm64
+    name: mesa-core22-latest-candidate-rpi4-arm64-core22
+    snap: mesa-core22
+    track: latest
diff --git a/jobs/mir/projects-mir-core/edge-22.yaml b/jobs/mir/projects-mir-core/edge-22.yaml
new file mode 100644
index 0000000..18f0aeb
--- /dev/null
+++ b/jobs/mir/projects-mir-core/edge-22.yaml
@@ -0,0 +1,91 @@
+# Ubuntu Core 20
+- project: &core20
+    name: mir-22-edge-intel-amd64-core20
+    device: intel-amd64
+    queue: 202008-28166
+    snap: mir-test-tools
+    track: 22
+    channel: edge
+    arch: amd64
+    image: core20
+    provision_data: |
+      provision_data:
+            distro: core20-latest
+    jobs:
+      - '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+- project:
+    <<: *core20
+    name: ubuntu-frame-22-edge-intel-amd64-core20
+    snap: ubuntu-frame
+- project: &core20-armhf
+    <<: *core20
+    name: mir-22-edge-rpi4-armhf-core20
+    device: rpi4-armhf
+    queue: rpi4-gfx
+    arch: armhf
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/20/dangerous-stable/current/ubuntu-core-20-armhf+raspi.img.xz
+- project:
+    <<: *core20-armhf
+    name: ubuntu-frame-22-edge-rpi4-armhf-core20
+    snap: ubuntu-frame
+- project: &core20-arm64
+    <<: *core20
+    name: mir-22-edge-rpi4-arm64-core20
+    device: rpi4-arm64
+    queue: rpi4-gfx
+    arch: arm64
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/20/dangerous-stable/current/ubuntu-core-20-arm64+raspi.img.xz
+- project:
+    <<: *core20-arm64
+    name: ubuntu-frame-22-edge-rpi4-arm64-core20
+    snap: ubuntu-frame
+
+# Ubuntu Core 22
+- project: &core22
+    name: mir-22-edge-intel-amd64-core22
+    device: intel-amd64
+    queue: 202008-28166
+    snap: mir-test-tools
+    track: 22
+    channel: edge
+    arch: amd64
+    image: core22
+    provision_data: |
+      provision_data:
+            distro: core22-latest
+    jobs:
+      - '{prefix}-{image}-mir-{suite}-{snap}-{track}-{channel}-{device}'
+- project:
+    <<: *core22
+    name: ubuntu-frame-22-edge-intel-amd64-core22
+    snap: ubuntu-frame
+- project: &core22-armhf
+    <<: *core22
+    name: mir-22-edge-rpi4-armhf-core22
+    device: rpi4-armhf
+    queue: rpi4-gfx
+    arch: armhf
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/22/dangerous-stable/current/ubuntu-core-22-armhf+raspi.img.xz
+- project:
+    <<: *core22-armhf
+    name: ubuntu-frame-22-edge-rpi4-armhf-core22
+    snap: ubuntu-frame
+- project: &core22-arm64
+    <<: *core22
+    name: mir-22-edge-rpi4-arm64-core22
+    device: rpi4-arm64
+    queue: rpi4-gfx
+    arch: arm64
+    provision_data: |
+      provision_data:
+            url: http://cdimage.ubuntu.com/ubuntu-core/22/dangerous-stable/current/ubuntu-core-22-arm64+raspi.img.xz
+- project:
+    <<: *core22-arm64
+    name: ubuntu-frame-22-edge-rpi4-arm64-core22
+    snap: ubuntu-frame
diff --git a/jobs/mir/projects/beta-22.yaml b/jobs/mir/projects/beta-22.yaml
new file mode 100644
index 0000000..9280bbf
--- /dev/null
+++ b/jobs/mir/projects/beta-22.yaml
@@ -0,0 +1,134 @@
+# Focal
+- project: &focal
+    name: focal-mir-22-beta-intel-gfx
+    queue: intel-gfx
+    series: focal
+    image: focal
+    snap: mir-test-tools
+    track: 22
+    channel: beta
+    jobs:
+      - '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+- project: &focal-nvidia-470
+    <<: *focal
+    name: focal-mir-22-beta-nvidia-gfx
+    queue: 201405-15065
+    snap: mir-test-tools
+    # The hardware isn't supported by newer drivers
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-470
+    gfx_setup: &nvidia-setup |
+        echo 'GRUB_CMDLINE_LINUX_DEFAULT="nvidia-drm.modeset=1"' |sudo tee /etc/default/grub.d/99-nvidia.cfg
+                sudo update-grub
+- project:
+    <<: *focal-nvidia-470
+    name: focal-mesa-core22-latest-beta-nvidia-gfx
+    snap: mesa-core22
+    track: "latest"
+- project:
+    <<: *focal
+    name: focal-nvidia-core22-latest-beta-nvidia-gfx
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: "latest"
+    # The version number here needs to correspond to nvidia-core22
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-515
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *focal
+    name: focal-ubuntu-frame-22-beta-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+- project:
+    <<: *focal
+    name: focal-mesa-core22-latest-beta-intel-gfx
+    queue: intel-gfx
+    snap: mesa-core22
+    track: "latest"
+
+
+# Jammy
+- project: &jammy
+    name: jammy-mir-22-beta-intel-gfx
+    queue: intel-gfx
+    series: jammy
+    image: jammy
+    snap: mir-test-tools
+    track: 22
+    channel: beta
+    jobs:
+      - '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+- project: &jammy-nvidia-470
+    <<: *jammy
+    name: jammy-mir-22-beta-nvidia-gfx
+    queue: 201405-15065
+    snap: mir-test-tools
+    # The hardware isn't supported by newer drivers
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-470
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *jammy-nvidia-470
+    name: jammy-mesa-core22-latest-beta-nvidia-gfx
+    snap: mesa-core22
+    track: "latest"
+- project: &jammy-nvidia-515
+    <<: *jammy
+    name: jammy-nvidia-core22-latest-beta-nvidia-gfx
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: "latest"
+    # The version number here needs to correspond to nvidia-core22
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-515
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *jammy
+    name: jammy-ubuntu-frame-22-beta-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+- project:
+    <<: *jammy
+    name: jammy-mesa-core22-latest-beta-intel-gfx
+    queue: intel-gfx
+    snap: mesa-core22
+    track: "latest"
+
+
+# Jammy riscv64
+- project: &jammy-riscv64
+    <<: *jammy
+    name: jammy-mir-22-beta-unmatched-gfx
+    queue: unmatched-gfx
+    arch: riscv64
+    image: http://cdimage.ubuntu.com/releases/jammy/release/ubuntu-22.04.2-preinstalled-server-riscv64+unmatched.img.xz
+    reboot: "false"
+    snap: mir-test-tools
+- project:
+    <<: *jammy-riscv64
+    name: jammy-mesa-core22-latest-beta-unmatched-gfx
+    snap: mesa-core22
+    track: "latest"
+- project:
+    <<: *jammy-riscv64
+    name: jammy-ubuntu-frame-22-beta-unmatched-gfx
+    snap: ubuntu-frame
+
+
+#  Performance
+- project:
+    <<: *jammy
+    name: jammy-mesa-core22-performance-beta-intel-gfx
+    queue: intel-gfx
+    suite: performance
+- project:
+    <<: *jammy-nvidia-515
+    name: jammy-mesa-core22-performance-beta-nvidia-gfx
+    snap: mesa-core22
+    suite: performance
+    # https://github.com/MirServer/mir/issues/2887
+    # https://github.com/MirServer/mir/issues/2462
+    filter: -Hosted*:*Xwayland.windowed
+- project:
+    <<: *jammy-nvidia-515
+    name: jammy-nvidia-core22-performance-beta-nvidia-gfx
+    snap: nvidia-core22
+    suite: performance
+    filter: -Hosted*:*Xwayland.windowed
diff --git a/jobs/mir/projects/candidate-22.yaml b/jobs/mir/projects/candidate-22.yaml
new file mode 100644
index 0000000..4294485
--- /dev/null
+++ b/jobs/mir/projects/candidate-22.yaml
@@ -0,0 +1,111 @@
+# Focal
+- project: &focal
+    name: focal-mir-22-candidate-intel-gfx
+    queue: intel-gfx
+    series: focal
+    image: focal
+    snap: mir-test-tools
+    track: 22
+    channel: candidate
+    jobs:
+      - '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+- project: &focal-nvidia-470
+    <<: *focal
+    name: focal-mir-22-candidate-nvidia-gfx
+    queue: 201405-15065
+    snap: mir-test-tools
+    # The hardware isn't supported by newer drivers
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-470
+    gfx_setup: &nvidia-setup |
+        echo 'GRUB_CMDLINE_LINUX_DEFAULT="nvidia-drm.modeset=1"' |sudo tee /etc/default/grub.d/99-nvidia.cfg
+                sudo update-grub
+- project:
+    <<: *focal-nvidia-470
+    name: focal-mesa-core22-latest-candidate-nvidia-gfx
+    snap: mesa-core22
+    track: "latest"
+- project:
+    <<: *focal
+    name: focal-nvidia-core22-latest-candidate-nvidia-gfx
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: "latest"
+    # The version number here needs to correspond to nvidia-core22
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-515
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *focal
+    name: focal-ubuntu-frame-22-candidate-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+- project:
+    <<: *focal
+    name: focal-mesa-core22-latest-candidate-intel-gfx
+    queue: intel-gfx
+    snap: mesa-core22
+    track: "latest"
+
+
+# Jammy
+- project: &jammy
+    name: jammy-mir-22-candidate-intel-gfx
+    queue: intel-gfx
+    series: jammy
+    image: jammy
+    snap: mir-test-tools
+    track: 22
+    channel: candidate
+    jobs:
+      - '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+- project: &jammy-nvidia-470
+    <<: *jammy
+    name: jammy-mir-22-candidate-nvidia-gfx
+    queue: 201405-15065
+    snap: mir-test-tools
+    # The hardware isn't supported by newer drivers
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-470
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *jammy-nvidia-470
+    name: jammy-mesa-core22-latest-candidate-nvidia-gfx
+    snap: mesa-core22
+    track: "latest"
+- project:
+    <<: *jammy
+    name: jammy-nvidia-core22-latest-candidate-nvidia-gfx
+    queue: 202008-28167
+    snap: nvidia-core22
+    track: "latest"
+    # The version number here needs to correspond to nvidia-core22
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-515
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *jammy
+    name: jammy-ubuntu-frame-22-candidate-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+- project:
+    <<: *jammy
+    name: jammy-mesa-core22-latest-candidate-intel-gfx
+    queue: intel-gfx
+    snap: mesa-core22
+    track: "latest"
+
+# Jammy riscv64
+- project: &jammy-riscv64
+    <<: *jammy
+    name: jammy-mir-candidate-unmatched-gfx
+    queue: unmatched-gfx
+    arch: riscv64
+    image: http://cdimage.ubuntu.com/releases/jammy/release/ubuntu-22.04.2-preinstalled-server-riscv64+unmatched.img.xz
+    reboot: "false"
+    snap: mir-test-tools
+- project:
+    <<: *jammy-riscv64
+    name: jammy-mesa-core22-latest-candidate-unmatched-gfx
+    snap: mesa-core22
+    track: "latest"
+- project:
+    <<: *jammy-riscv64
+    name: jammy-ubuntu-frame-candidate-unmatched-gfx
+    snap: ubuntu-frame
diff --git a/jobs/mir/projects/desktop-performance.yaml b/jobs/mir/projects/desktop-performance.yaml
index fad0652..8b3640c 100644
--- a/jobs/mir/projects/desktop-performance.yaml
+++ b/jobs/mir/projects/desktop-performance.yaml
@@ -16,7 +16,9 @@
     snap: mir-test-tools
     channel: edge
     suite: performance
-    filter: -*Xwayland*:Hosted*
+    # https://github.com/MirServer/mir/issues/2887
+    # https://github.com/MirServer/mir/issues/2462
+    filter: -Hosted*:*Xwayland.windowed
     gfx_drivers: --no-install-recommends libgles2 nvidia-driver-440
     gfx_setup: |
         echo 'GRUB_CMDLINE_LINUX_DEFAULT="nvidia-drm.modeset=1"' |sudo tee /etc/default/grub.d/99-nvidia.cfg
@@ -31,6 +33,7 @@
     snap: mir-kiosk
     channel: edge
     suite: performance
+    # Only run Hosted* tests so we can see doubly-nested performance
     filter: Hosted*
     jobs:
       - '{prefix}-{series}-mir-{suite}-{snap}-{channel}-{queue}'
@@ -42,6 +45,7 @@
     snap: ubuntu-frame
     channel: edge
     suite: performance
+    # Only run Hosted* tests so we can see doubly-nested performance
     filter: Hosted*
     jobs:
       - '{prefix}-{series}-mir-{suite}-{snap}-{channel}-{queue}'
diff --git a/jobs/mir/projects/edge-22.yaml b/jobs/mir/projects/edge-22.yaml
new file mode 100644
index 0000000..fe4d340
--- /dev/null
+++ b/jobs/mir/projects/edge-22.yaml
@@ -0,0 +1,82 @@
+# Focal
+- project: &focal
+    name: focal-mir-22-edge-intel-gfx
+    queue: intel-gfx
+    series: focal
+    image: focal
+    snap: mir-test-tools
+    track: 22
+    channel: edge
+    jobs:
+      - '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+- project:
+    <<: *focal
+    name: focal-mir-22-edge-nvidia-gfx
+    queue: 201405-15065
+    snap: mir-test-tools
+    # The hardware isn't supported by newer drivers
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-470
+    gfx_setup: &nvidia-setup |
+        echo 'GRUB_CMDLINE_LINUX_DEFAULT="nvidia-drm.modeset=1"' |sudo tee /etc/default/grub.d/99-nvidia.cfg
+                sudo update-grub
+- project:
+    <<: *focal
+    name: focal-ubuntu-frame-22-edge-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+
+
+# Jammy
+- project: &jammy
+    name: jammy-mir-22-edge-intel-gfx
+    queue: intel-gfx
+    series: jammy
+    image: jammy
+    snap: mir-test-tools
+    track: 22
+    channel: edge
+    jobs:
+      - '{prefix}-{series}-mir-{suite}-{snap}-{track}-{channel}-{queue}'
+- project: &jammy-nvidia-515
+    <<: *jammy
+    name: jammy-mir-22-edge-nvidia-gfx
+    queue: 202008-28167
+    snap: mir-test-tools
+    gfx_drivers: --no-install-recommends libgles2 nvidia-driver-515
+    gfx_setup: *nvidia-setup
+- project:
+    <<: *jammy
+    name: jammy-ubuntu-frame-22-edge-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+- project:
+    <<: *jammy
+    name: jammy-mir-edge-unmatched-gfx
+    queue: unmatched-gfx
+    arch: riscv64
+    image: http://cdimage.ubuntu.com/releases/jammy/release/ubuntu-22.04.2-preinstalled-server-riscv64+unmatched.img.xz
+    reboot: "false"
+    snap: mir-test-tools
+
+
+#  Performance
+- project:
+    <<: *jammy
+    name: jammy-mir-22-performance-edge-intel-gfx
+    queue: intel-gfx
+    suite: performance
+- project:
+    <<: *jammy-nvidia-515
+    name: jammy-mir-22-performance-edge-nvidia-gfx
+    suite: performance
+    # https://github.com/MirServer/mir/issues/2887
+    # https://github.com/MirServer/mir/issues/2462
+    filter: -Hosted*:*Xwayland.windowed
+- project:
+    <<: *jammy
+    name: jammy-ubuntu-frame-22-performance-edge-intel-gfx
+    queue: intel-gfx
+    snap: ubuntu-frame
+    suite: performance
+    # Only run Hosted* tests so we can see doubly-nested performance
+    filter: Hosted*
diff --git a/jobs/mir/run-core-mir-track.sh b/jobs/mir/run-core-mir-track.sh
new file mode 100644
index 0000000..b626629
--- /dev/null
+++ b/jobs/mir/run-core-mir-track.sh
@@ -0,0 +1,185 @@
+#!/bin/bash
+set +e
+set -x
+
+TRACK="{track}"
+TRACK="${{TRACK:-latest}}"
+REV=$(curl -s -H "Snap-Device-Series: 16" -H "Snap-Device-Store: {store}" "{url}" | jq --arg TRACK "$TRACK" '."channel-map" | .[] | select(.channel.risk=="{channel}") |select(.channel.track==$TRACK).revision')
+VERSION=$(curl -s -H "Snap-Device-Series: 16" -H "Snap-Device-Store: {store}" "{url}" | jq --arg TRACK "$TRACK" '."channel-map" | .[] | select(.channel.risk=="{channel}") |select(.channel.track==$TRACK).version')
+cat > job.yaml <<EOF
+    job_queue: {queue}
+    global_timeout: 18000
+    output_timeout: 1200
+    {provision_data}
+    test_data:
+      {test_data}
+      test_cmds: |
+        #!/bin/bash
+        set -x
+        # convenience functions
+        #
+        SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ServerAliveInterval=30 -o ServerAliveCountMax=3"
+        _put() {{
+            scp \$SSH_OPTS \$1 {user}@\$DEVICE_IP:\$2
+        }}
+        _get() {{
+            scp \$SSH_OPTS {user}@\$DEVICE_IP:\$1 \$2
+        }}
+        _run() {{
+            ssh \$SSH_OPTS {user}@\$DEVICE_IP "\$@"
+        }}
+        wait_for_ssh() {{
+            loopcnt=0
+            until timeout 10 ssh \$SSH_OPTS {user}@\$DEVICE_IP /bin/true
+            do
+                echo "Testing to see if system is back up"
+                loopcnt=\$((loopcnt+1))
+                if [ \$loopcnt -gt 20 ]; then
+                    echo "ERROR: Timeout waiting for ssh!"
+                    exit 1
+                fi
+                sleep 30
+            done
+        }}
+        wait_for_snap_complete() {{
+            # wait for snapd to realize it's Doing stuff
+            sleep 5
+            loopcnt=0
+            until [ -z "\$(ssh \$SSH_OPTS \$DEVICE_IP 'sudo snap changes | grep Doing' )" ] && [ "\$(ssh \$SSH_OPTS \$DEVICE_IP echo true)" = "true" ]
+            do
+                loopcnt=\$((loopcnt+1))
+                if [ \$loopcnt -gt 40 ]; then
+                    echo "ERROR: Timeout waiting for snap install!"
+                    exit 1
+                fi
+                sleep 30
+            done
+        }}
+        _run_retry() {{
+            # Retry running a command if any failure occurs
+            loopcnt=0
+            _run "\$@"
+            RC="\$?"
+            while [ \$RC -ne 0 ]
+            do
+                loopcnt=\$((loopcnt+1))
+                if [ \$loopcnt -gt 20 ]; then
+                    _run sudo cat /var/lib/snapd/state.json
+                    _run sudo journalctl -u snapd.service
+                    echo "ERROR: retry limit reached!"
+                    exit 1
+                fi
+                sleep 30
+                _run "\$@"
+                RC="\$?"
+            done
+        }}
+
+        # Some devices need a bit of time at the beginning before starting
+        sleep {starting_sleep}
+        wait_for_ssh
+        # Wait for a valid serial assertion before starting
+        if [ "{has-serial-assertion}" = "True" ]; then
+            _run_retry "snap known serial |grep serial"
+        fi
+
+        wait_for_snap_complete
+
+        # debug snapd connections
+        _run sudo mkdir /etc/systemd/system/snapd.service.d/
+        echo "[Service]" | _run sudo tee /etc/systemd/system/snapd.service.d/override.conf
+        echo "Environment=SNAPD_DEBUG=1" | _run sudo tee -a /etc/systemd/system/snapd.service.d/override.conf
+        _run sudo systemctl daemon-reload
+        _run sudo systemctl restart snapd
+        # end debug
+
+        _run_retry sudo snap refresh
+        wait_for_snap_complete
+
+        # reboot for OS refreshes
+        _run sudo reboot
+        wait_for_snap_complete
+
+        if [ "{snap}" == "mir-test-tools" ]; then
+            _run_retry sudo snap install {snap} --channel={mir-base}/{channel} --no-wait {extra_args}
+        elif [[ '{snap} == ubuntu-frame' ]]; then
+            _run_retry sudo "snap \$( _run snap list {snap} >&2 && echo refresh --ignore-validation || echo install ) {snap} --channel={track}/{channel} --no-wait {extra_args}"
+            _run_retry sudo snap install mir-test-tools --channel={mir-base}/{channel} --no-wait
+        else
+            _run_retry sudo "snap \$( _run snap list {snap} >&2 && echo refresh --ignore-validation || echo install ) {snap} --channel={track}/{channel} --no-wait {extra_args}"
+            _run_retry sudo snap install mir-test-tools --channel={mir-base}/stable --no-wait
+        fi
+        wait_for_snap_complete
+
+        if [ -n '{gfx-setup}' ]; then
+            true; {gfx-setup}
+        fi
+
+        if [ '{mir-base}' == 22 ]; then
+            # temporary, until the auto-connects are in place
+            # https://forum.snapcraft.io/t/global-auto-connect-request-mesa-core22-graphics-core22/34455
+            if [ '{snap}' == nvidia-core22 ]; then
+                _run sudo snap disconnect mir-test-tools:graphics-core22
+                _run sudo snap connect mir-test-tools:graphics-core22 nvidia-core22
+            else
+                _run sudo snap connect mir-test-tools:graphics-core22 mesa-core22
+                _run sudo snap connect {snap}:graphics-core22 mesa-core22 || true
+            fi
+        fi
+
+        if [ "{snap}" == "mir-kiosk" -o "{snap}" == "ubuntu-frame" ]; then
+            TEST_ENV=(MIR_SERVER_WAYLAND_HOST=wayland-0)
+            if ! _run sudo timeout 30 sh -c '"while ! [ -S /run/user/0/wayland-0 ]; do sleep 5; done"'; then
+                echo "ERROR: {snap} did not come up"
+                exit 1
+            fi
+        fi
+
+        _run_retry sudo snap disconnect mir-test-tools:x11
+
+        wait_for_snap_complete
+
+        sleep 30
+        # I see some weird problems even though the earlier one came back good
+        wait_for_snap_complete
+
+        mkdir -p artifacts
+        echo "Snaps currently installed:" | tee artifacts/snaplist.txt
+        _run snap list |tail -n +2 |awk '{{ print \$1" Version: "\$2"-"\$3 }}'
+        _run snap list >> artifacts/snaplist.txt
+        _run sudo journalctl -u snap.{snap}.daemon.service > artifacts/{snap}.log
+
+        echo Starting
+
+        (_run sudo env "\${{TEST_ENV[@]}}" snap run mir-test-tools.{suite}-test --gtest_filter={filter} --gtest_output=xml:/var/snap/mir-test-tools/current/mir.xml && echo "OUTCOME: PASS" || echo "OUTCOME: FAIL") | tee artifacts/mir.log
+        _get /var/snap/mir-test-tools/current/mir.xml artifacts
+        _run sudo snap logs --abs-time -n all {snap} > artifacts/{snap}.log
+        _run sudo snap run --shell mir-test-tools.{suite}-test -c 'cp\\ /tmp/*.log\\ \\\$SNAP_DATA'
+        _get /var/snap/mir-test-tools/current/*.log artifacts
+        grep -q "OUTCOME: PASS" artifacts/mir.log || exit 1
+EOF
+#Remove previous venv
+rm -rf env
+cat <<EOF >build-env.sh
+{build_env}
+EOF
+. build-env.sh
+git -C hwcert-jenkins-tools pull -q || (rm -rf hwcert-jenkins-tools && git clone -q https://git.launchpad.net/hwcert-jenkins-tools)
+JOB_ID=$(testflinger submit -q job.yaml)
+echo "JOB_ID: $JOB_ID"
+echo "$JOB_ID" > JOB_ID
+testflinger poll $JOB_ID
+
+TEST_STATUS=$(testflinger results $JOB_ID |jq -r .test_status)
+
+rm -rf artifacts*
+#retry getting the artifacts after a delay if it fails
+testflinger artifacts $JOB_ID || (sleep 30 && testflinger artifacts $JOB_ID)
+tar -xzf artifacts.tgz
+
+mkdir -p artifacts
+echo Jenkins build details: $BUILD_URL > artifacts/summary
+echo >> artifacts/summary
+cat artifacts/snaplist.txt >> artifacts/summary
+echo "Test exit status: $TEST_STATUS"
+exit $TEST_STATUS
diff --git a/jobs/mir/run-mir-track.sh b/jobs/mir/run-mir-track.sh
new file mode 100644
index 0000000..af5df68
--- /dev/null
+++ b/jobs/mir/run-mir-track.sh
@@ -0,0 +1,208 @@
+#!/bin/bash
+set +e
+set -x
+
+[ "{no_run}" = "True" ] && exit
+
+cat > job.yaml <<EOF
+    job_queue: {queue}
+    global_timeout: 18000
+    output_timeout: 1200
+    provision_data:
+      distro: {image}
+      url: {image}
+    test_data:
+      {test_data}
+      test_cmds: |
+        #!/bin/bash
+        # convenience functions
+        #
+        SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
+        _put() {{
+            scp \$SSH_OPTS \$1 {user}@\$DEVICE_IP:\$2
+        }}
+        _get() {{
+            scp \$SSH_OPTS {user}@\$DEVICE_IP:\$1 \$2
+        }}
+        _run() {{
+            ssh -t \$SSH_OPTS {user}@\$DEVICE_IP "\$@"
+        }}
+        wait_for_ssh() {{
+            loopcnt=0
+            until timeout 120 ssh \$SSH_OPTS {user}@\$DEVICE_IP /bin/true
+            do
+                echo "Testing to see if system is back up"
+                loopcnt=\$((loopcnt+1))
+                if [ \$loopcnt -gt 40 ]; then
+                    echo "ERROR: Timeout waiting for ssh!"
+                    exit 1
+                fi
+                sleep 30
+            done
+        }}
+        if [ "{no_apt_cron}" == "True"  ]; then
+          echo "no_apt_cron option is on. Block the apt cron check."
+          _run sudo rm /etc/cron.daily/apt-compat
+          echo "Stop apt daily service..."
+          _run sudo systemctl stop apt-daily.timer
+          _run sudo systemctl stop apt-daily.service
+          _run sudo systemctl kill --kill-who=all apt-daily.service
+          echo "Stopped apt-daily.timer and apt-daily.service"
+        fi
+
+        # Install dependencies in the host environment
+        sudo apt-get -qq update
+
+        # waiting for apt and dpkg process resource lock
+        # instead of killing process
+        cat <<EOF > wait-resource.sh
+        {wait_script}
+        EOF
+        chmod +x wait-resource.sh
+        _put wait-resource.sh /home/ubuntu
+
+        # don't lock the screen or suspend the system
+        # so screen-related tests won't fail
+        cat <<EOF > certification.gschema.override
+        {gschema_override}
+        EOF
+
+        _run sudo /home/ubuntu/wait-resource.sh
+        _run sudo apt-get purge -y appstream
+
+        echo "updating the system..."
+        _run sudo apt-get -qq update
+        _run sudo /home/ubuntu/wait-resource.sh
+        _run sudo DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -o Dpkg::Options::="--force-confdef" -y --force-yes
+
+        wait_for_ssh
+        cat << XEOF > setup.sh
+        for ppa in {ppas}; do
+          sudo add-apt-repository -y --update ppa:\\\$ppa
+        done
+        [ -n '{gfx_drivers}' ] && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y {gfx_drivers}
+        {gfx_setup}
+
+        if [ '{snap}' == 'mir-test-tools' ]; then
+            sudo snap install mir-test-tools --channel={mir-base}/{channel}
+        elif [[ '{snap}' == ubuntu-frame ]]; then
+            sudo sh -c "snap \\\$( snap list {snap} >&2 && echo refresh --ignore-validation || echo install ) {snap} --channel={track}/{channel}"
+            sudo snap install mir-test-tools --channel={mir-base}/{channel}
+        else
+            sudo sh -c "snap \\\$( snap list {snap} >&2 && echo refresh --ignore-validation || echo install ) {snap} --channel={track}/{channel}"
+            sudo snap install mir-test-tools --channel {mir-base}/stable
+        fi
+
+        if [ '{mir-base}' == 22 ]; then
+            # temporary, until the auto-connects are in place
+            # https://forum.snapcraft.io/t/global-auto-connect-request-mesa-core22-graphics-core22/34455
+            if [ '{snap}' == nvidia-core22 ]; then
+                sudo snap connect mir-test-tools:graphics-core22 nvidia-core22
+            else
+                sudo snap connect mir-test-tools:graphics-core22 mesa-core22
+                sudo snap connect {snap}:graphics-core22 mesa-core22 || true
+            fi
+        fi
+
+        sudo snap connect mir-test-tools:login-session-control
+        sudo snap disconnect mir-test-tools:x11
+        if [ '{snap}' == 'ubuntu-frame' ]; then
+            sudo snap connect {snap}:login-session-control
+        fi
+
+        cat << EOF > override.conf
+        [Service]
+        ExecStart=
+        ExecStart=-/sbin/agetty --autologin ubuntu --noclear %I \\\$TERM
+        EOF
+        sudo mkdir -p /etc/systemd/system/getty@tty3.service.d
+        sudo cp override.conf /etc/systemd/system/getty@tty3.service.d/override.conf
+        sudo systemctl daemon-reload
+        cat << EOF >> \$HOME/.bashrc
+        if [ "\\\\\\\$XDG_VTNR" == 3 ]; then
+          set -x
+          exec &> /tmp/mir-bashrc.log
+
+          if [ ! -f /tmp/mir-done ]; then
+            loginctl activate
+
+            if [ '{snap}' == 'ubuntu-frame' ]; then
+              echo "Spawning {snap}..."
+              TEST_ENV=(MIR_SERVER_WAYLAND_HOST=wayland-0)
+              {snap} &> /tmp/{snap}.log &
+              if ! timeout 10 sh -c "until [ -S \\\\\\\$XDG_RUNTIME_DIR/wayland-0 ]; do sleep 1; done"; then
+                echo "ERROR {snap} failed to create its socket." | tee -a /tmp/{snap}.log
+                touch /tmp/mir-done
+                exit 1
+              fi
+              echo "{snap} is up."
+            fi
+
+            echo "Starting tests..."
+            (env "\\\\\\\${{TEST_ENV[@]}}" mir-test-tools.{suite}-test --gtest_filter={filter} --gtest_output=xml:snap/mir-test-tools/current/mir.xml && echo "OUTCOME: PASS" || echo "OUTCOME: FAIL") &> /tmp/mir.log
+
+            echo "Tests done."
+            touch /tmp/mir-done
+
+            pkill miral-kiosk
+          fi
+        fi
+        EOF
+        XEOF
+        _put setup.sh /home/ubuntu
+        _run bash -e /home/ubuntu/setup.sh || exit 1
+        if {reboot}; then
+            _run sudo reboot
+            # wait a bit after the reboot, or else we may detect it's up before it's rebooted
+            sleep 120
+            wait_for_ssh
+        else
+            _run sudo systemctl daemon-reload
+        fi
+        _run sudo systemctl restart getty@tty3
+        echo "Waiting for mir tests to complete..."
+        _run "until [ -f /tmp/mir-done ]; do sleep 1; done"
+        _run cat /tmp/mir.log
+
+        mkdir -p artifacts
+        echo "Snaps currently installed:" | tee artifacts/snaplist.txt
+        _run snap list |tail -n +2 |awk '{{ print \$1" Version: "\$2"-"\$3 }}'
+        _run snap list >> artifacts/snaplist.txt
+        _run snap run --shell mir-test-tools.{suite}-test -c 'cp\\ /tmp/*.log\\ \\\$SNAP_USER_DATA'
+
+        _get /tmp/mir.log artifacts
+        _get /tmp/{snap}.log artifacts
+        _get /tmp/mir-bashrc.log artifacts
+        _get snap/mir-test-tools/current/mir.xml artifacts
+        _get snap/mir-test-tools/current/*.log artifacts
+        grep -q "OUTCOME: PASS" artifacts/mir.log || exit 1
+EOF
+#Remove previous venv
+rm -rf env
+cat <<EOF >build-env.sh
+{build_env}
+EOF
+. build-env.sh
+
+JOB_ID=$(testflinger submit -q job.yaml)
+echo "JOB_ID: $JOB_ID"
+echo "$JOB_ID" > JOB_ID
+testflinger poll $JOB_ID
+
+TEST_STATUS=$(testflinger results $JOB_ID |jq -r .test_status)
+[ -n $TEST_STATUS ] && TEST_STATUS=1
+
+rm -rf artifacts*
+#retry getting the artifacts after a delay if it fails
+testflinger artifacts $JOB_ID || (sleep 30 && testflinger artifacts $JOB_ID)
+tar -xzf artifacts.tgz
+
+set +x
+export C3LINK=$(testflinger results $JOB_ID |jq -r .test_output|grep certification.canonical.com)
+echo $C3LINK > c3link
+set -x
+
+mkdir -p artifacts
+echo Jenkins build details: $BUILD_URL > artifacts/summary
+echo "Test exit status: $TEST_STATUS"
+grep -q "OUTCOME: PASS" artifacts/mir.log || exit 1
diff --git a/jobs/mir/run-mir.sh b/jobs/mir/run-mir.sh
index 35f06d9..c6d3d44 100644
--- a/jobs/mir/run-mir.sh
+++ b/jobs/mir/run-mir.sh
@@ -80,7 +80,7 @@ cat > job.yaml <<EOF
         for ppa in {ppas}; do
           sudo add-apt-repository -y --update ppa:\\\$ppa
         done
-        [ -n '{gfx_drivers}' ] && sudo apt install -y {gfx_drivers}
+        [ -n '{gfx_drivers}' ] && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y {gfx_drivers}
         {gfx_setup}
 
         if [ '{snap}' == 'mir-test-tools' ]; then

Follow ups