diff --git a/.github/workflows/checkbox-ce-oem-daily-cross-builds.yaml b/.github/workflows/checkbox-ce-oem-daily-cross-builds.yaml index 90b5c57dfe..6ff007e75d 100644 --- a/.github/workflows/checkbox-ce-oem-daily-cross-builds.yaml +++ b/.github/workflows/checkbox-ce-oem-daily-cross-builds.yaml @@ -26,7 +26,7 @@ jobs: fail-fast: false matrix: type: [classic, uc] - release: [20, 22, 24] + release: [20, 22, 24, 26] arch: [armhf, amd64, arm64] exclude: # other confs built natively in checkbox-daily-native-builds.yaml diff --git a/.github/workflows/checkbox-ce-oem-daily-native-builds.yaml b/.github/workflows/checkbox-ce-oem-daily-native-builds.yaml index 07ad8bdf37..fced962d2b 100644 --- a/.github/workflows/checkbox-ce-oem-daily-native-builds.yaml +++ b/.github/workflows/checkbox-ce-oem-daily-native-builds.yaml @@ -5,14 +5,14 @@ on: workflow_dispatch: inputs: store_upload: - description: 'Should the workflow upload to the store?' + description: "Should the workflow upload to the store?" default: false required: false type: boolean workflow_call: inputs: store_upload: - description: 'Should the workflow upload to the store?' + description: "Should the workflow upload to the store?" default: false required: false type: boolean @@ -27,7 +27,7 @@ jobs: matrix: # other confs cross-built by checkbox-daily-cross-build.yaml type: [classic, uc] - release: [20, 22, 24] + release: [20, 22, 24, 26] arch: [amd64, arm64] include: - arch: amd64 @@ -35,14 +35,16 @@ jobs: - arch: arm64 tag: ARM64 - release: 20 - snapcraft_version: 7.x + snapcraft_version: 7.x/stable - release: 22 - snapcraft_version: 8.x + snapcraft_version: 8.x/stable - release: 24 - snapcraft_version: 8.x + snapcraft_version: 8.x/stable + - release: 26 + snapcraft_version: 9.x/candidate runs-on: group: "Canonical self-hosted runners" - labels: ["self-hosted", "linux", "jammy", "large", "${{ matrix.tag }}"] + labels: ["self-hosted", "linux", "noble", "large", "${{ matrix.tag }}"] timeout-minutes: 1200 #20h, this will timeout sooner due to inner timeouts name: Frontend ${{ matrix.type }}${{ matrix.release }} (${{matrix.arch}}) steps: @@ -67,7 +69,7 @@ jobs: attempt_limit: 5 with: | path: contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_${{ matrix.type }}${{ matrix.release }} - snapcraft-channel: ${{ matrix.snapcraft_version }}/stable + snapcraft-channel: ${{ matrix.snapcraft_version }} - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a name: Upload logs on failure diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/.gitignore b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/.gitignore new file mode 100644 index 0000000000..ed422dfc57 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/.gitignore @@ -0,0 +1,2 @@ +checkbox-provider-ce-oem/ +*.snap \ No newline at end of file diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/config/config_vars b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/config/config_vars new file mode 100644 index 0000000000..58b82f70de --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/config/config_vars @@ -0,0 +1,44 @@ +# follow KEY=value syntax +WIFI_INTERFACE=wlan0 +# WATCHDOG_KERNEL_MOD=iTCO_wdt +# ALSADEVICE=hw:CARD=bytrt5660,DEV=0 +OPEN_N_SSID=ubuntu-cert-n-open-tpelab +OPEN_BG_SSID=ubuntu-cert-bg-open-tpelab +OPEN_AC_SSID=ubuntu-cert-ac-open-tpelab +OPEN_AX_SSID=ubuntu-cert-ax-open +WPA_N_SSID=ubuntu-cert-n-wpa-tpelab +WPA_BG_SSID=ubuntu-cert-bg-wpa-tpelab +WPA_AC_SSID=ubuntu-cert-ac-wpa-tpelab +WPA_AX_SSID=ubuntu-cert-ax-wpa +WPA_N_PSK=insecure +WPA_BG_PSK=insecure +WPA_AC_PSK=insecure +WPA_AX_PSK=insecure +BTDEVADDR=C0:B5:D7:C1:74:38 +# obex server in office: C0:B5:D7:C1:74:38 +# obex server in lab: 28:3A:4D:46:79:C0, 7C:B2:7D:4B:14:95 +WWAN_APN=internet +WWAN_NET_IF=ppp0 +WWAN_CONTROL_IF=ttyACM3 +STRESS_BOOT_ITERATIONS=100 +STRESS_S3_ITERATIONS=100 +STRESS_S4_ITERATIONS=100 +TEST_TARGET_IPERF=10.102.88.25,10.102.182.100,10.102.182.137,10.102.182.101 +# iperf server in office: 10.102.88.25 +# iperf server in lab: 10.102.182.100, 10.102.182.137 +STRESS_S4_WAIT_DELAY=120 +STRESS_S4_SLEEP_DELAY=60 +STRESS_S3_SLEEP_DELAY=60 +STRESS_BOOT_WAKEUP_DELAY=120 +STRESS_S3_WAIT_DELAY=150 +STRESS_BOOT_WAIT_DELAY=150 +WIFI_AP_SETUPTIME=30 +WWAN_SETUPTIME=30 +TPM2TOOLS_TCTI_NAME=device +TPM2TOOLS_DEVICE_FILE=/dev/tpm0 +MODEL_GRADE=signed +WATCHDOG_TYPE=wdat_wdt +WATCHDOG_IDENTITY=wdat_wdt +RTC_DEVICE_FILE=/dev/rtc0 +SNAPD_TASK_TIMEOUT=600 + diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/checkbox-cli-wrapper b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/checkbox-cli-wrapper new file mode 100755 index 0000000000..aff044783e --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/checkbox-cli-wrapper @@ -0,0 +1,3 @@ +#!/bin/sh + +exec checkbox-cli "$@" diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/configure b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/configure new file mode 100755 index 0000000000..27b78c5338 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/configure @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# Copyright 2018-2026 Canonical Ltd. +# All rights reserved. +# +# Written by: +# Maciej Kisielewski +# Sylvain Pineau +import os +import re +import sys + +sys.path.append(os.path.expandvars("$SNAP/usr/lib/python3/dist-packages")) +sitepkgpath = "$SNAP/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(sitepkgpath)) + +sys.path.append(os.path.expandvars( + "$SNAP/checkbox-runtime/usr/lib/python3/dist-packages")) +runtimepath = "$SNAP/checkbox-runtime/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(runtimepath)) + +try: + from checkbox_support.snap_utils.config import update_configuration + from checkbox_support.snap_utils.config import print_checkbox_conf +except ImportError: + msg = """ +checkbox-support not found! +You need to install the checkbox26 snap: + +sudo snap install checkbox26 + """ + print(os.path.expandvars(msg), file=sys.stderr) + sys.exit(1) + + +def main(): + # we need run as root to be able to write to /var/snap/... + if os.geteuid() != 0: + raise SystemExit('You have to run this command with sudo') + + if len(sys.argv) > 1 and sys.argv[1] == '-l': + print_checkbox_conf() + return + + key_re = re.compile(r"^(?:[A-Z0-9]+_?)*[A-Z](?:_?[A-Z0-9])*$") + vars_to_set = dict() + for pair in sys.argv[1:]: + k, _, v = pair.partition('=') + if not key_re.match(k) or not v: + raise SystemExit("'%s' is not a valid configuration entry. " + "Should be KEY=val" % pair) + k = k.replace('_', '-').lower() + vars_to_set[k] = v + update_configuration(vars_to_set) + + +if __name__ == '__main__': + main() diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/shell-wrapper b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/shell-wrapper new file mode 100755 index 0000000000..a9a36091bb --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/shell-wrapper @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "$SNAP_NAME runtime shell, type 'exit' to quit the session" +exec bash diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/test-runner b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/test-runner new file mode 100755 index 0000000000..242fcfda59 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/test-runner @@ -0,0 +1,9 @@ +#!/usr/bin/env checkbox-cli-wrapper +[launcher] +app_id = com.canonical.contrib:checkbox +launcher_version = 1 +stock_reports = text, submission_files, certification + +[test plan] +unit = com.canonical.contrib::ce-oem-iot-server-26-04 +filter = com.canonical.contrib::ce-oem-iot-server-26-04* diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/wrapper_local b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/wrapper_local new file mode 100755 index 0000000000..74a7733761 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/launchers/wrapper_local @@ -0,0 +1,46 @@ +#!/bin/bash + +case "$SNAP_ARCH" in + "amd64") ARCH='x86_64-linux-gnu' + ;; + "i386") ARCH='i386-linux-gnu' + ;; + "arm64") ARCH='aarch64-linux-gnu' + ;; + "armhf") ARCH='arm-linux-gnueabihf' + ;; + *) + echo "Unsupported architecture: $SNAP_ARCH" + exit 1 + ;; +esac + +################################################ +# Launcher common exports for any checkbox app # +################################################ + +RUNTIME=/snap/checkbox26/current +if [ ! -d "$RUNTIME" ]; then + echo "You need to install the checkbox26 snap." + echo "" + echo "You can do this with this command:" + echo "snap install checkbox26" + exit 1 +fi + +export LC_ALL=C.UTF-8 +PERL_VERSION=$(perl -e '$^V=~/^v(\d+\.\d+)/;print $1') +export PERL5LIB="$PERL5LIB:$SNAP/usr/lib/$ARCH/perl/$PERL_VERSION:$SNAP/usr/lib/$ARCH/perl5/$PERL_VERSION:$SNAP/usr/share/perl/$PERL_VERSION:$SNAP/usr/share/perl5" +export GI_TYPELIB_PATH=$SNAP/usr/lib/girepository-1.0:$SNAP/usr/lib/$ARCH/girepository-1.0 +export PATH="$PATH:$SNAP/usr/bin:$SNAP/usr/sbin:$SNAP/sbin:/snap/bin" +export PYTHONPATH="$SNAP/usr/lib/python3/dist-packages:$PYTHONPATH" +export ALSA_CONFIG_PATH=/usr/share/alsa/alsa.conf + +if [ -e $RUNTIME/wrapper_common_classic ]; then + . $RUNTIME/wrapper_common_classic +else + echo "ERROR: no $RUNTIME/wrapper_common_classic found" + exit 1 +fi + +exec "$@" diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/hooks/configure b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/hooks/configure new file mode 100755 index 0000000000..6259216804 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/hooks/configure @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# Copyright 2017-2024 Canonical Ltd. +# All rights reserved. + +""" +This hook reads `config_vars` file from the root of a snap and reenters this +configuration using snapd's config facilities and rewrites the file to a +checkbox config format in `$SNAP_DATA/checkbox.conf`. + +config_vars should list all the configuration variables in a `key=value` +syntax. The line can list variable name only, if the variable should not have a +default value. All keys should comprise of CAPS, numbers and underscores (_). +E.g.: + +OPEN_N_SSID +OPEN_BG_SSID +STRESS_S3_WAIT_DELAY=60 + +To change those values use the configure launcher. +E.g. + $ checkbox-ce-oem.configure OPEN_N_SSID=my-wifi + +If you __really__ need to change those values using `snap set` command, +you need to change CAPS to lowercase and underscores to dashes (-). + +E.g. + $ snap set checkbox-ce-oem open-n-ssid=my-wifi +""" + +import os +import sys + +sys.path.append(os.path.expandvars("$SNAP/usr/lib/python3/dist-packages")) +sitepkgpath = "$SNAP/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(sitepkgpath)) + +sys.path.append(os.path.expandvars( + "$SNAP/checkbox-runtime/usr/lib/python3/dist-packages")) +runtimepath = "$SNAP/checkbox-runtime/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(runtimepath)) + +try: + from checkbox_support.snap_utils.config import refresh_configuration +except ImportError: + msg = """ +checkbox-support not found! +You need to install the checkbox26 snap: + +sudo snap install checkbox26 + """ + print(os.path.expandvars(msg), file=sys.stderr) + sys.exit(0) +refresh_configuration() diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/hooks/install b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/hooks/install new file mode 100755 index 0000000000..068b518289 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/hooks/install @@ -0,0 +1,4 @@ +#!/bin/sh + +set -e +snapctl set slave=disabled diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/snapcraft.yaml b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/snapcraft.yaml new file mode 100644 index 0000000000..a866c20bc0 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_classic26/snap/snapcraft.yaml @@ -0,0 +1,139 @@ +name: checkbox-ce-oem +summary: Checkbox CE OEM test runner and public providers for 26.04 classic +description: "Checkbox CE OEM test runner and public providers for 26.04 classic" +confinement: classic +grade: stable + +version: '1.0-resolute' + +base: core26 + +apps: + checkbox-cli: + command-chain: [bin/wrapper_local] + command: bin/checkbox-cli-wrapper + configure: + command-chain: [bin/wrapper_local] + command: bin/configure + remote-slave: + command-chain: [bin/wrapper_local] + command: bin/checkbox-cli-wrapper slave + daemon: simple + restart-condition: on-failure + shell: + command-chain: [bin/wrapper_local] + command: bin/shell-wrapper + test-runner: + command-chain: [bin/wrapper_local] + command: bin/test-runner + +passthrough: + hooks: + configure: + command-chain: [bin/wrapper_local] + +parts: + checkbox-provider-ce-oem: + plugin: dump + source: checkbox-provider-ce-oem + source-type: local + stage-packages: + - mtd-utils + - u-boot-tools + - v4l-utils + - device-tree-compiler + - linuxptp + - snmp + - python3-rpyc + - gpsd + override-prime: | + craftctl default + override-build: | + export PYTHONPATH=/snap/checkbox26/current/lib/python3.14/site-packages/:/usr/lib/python3/dist-packages + for path in $(find "/snap/checkbox26/current/providers/" -mindepth 1 -maxdepth 1 -type d); do export PROVIDERPATH=$path${PROVIDERPATH:+:$PROVIDERPATH}; done + python3 manage.py validate + python3 manage.py build + python3 manage.py install --layout=relocatable --prefix=/providers/checkbox-provider-ce-oem --root="$CRAFT_PART_INSTALL" + build-snaps: + - checkbox26 + build-attributes: + - enable-patchelf + build-packages: + - python3-dev + - python3-jinja2 + - python3-packaging + - python3-urwid + - python3-xlsxwriter + - python3-requests-oauthlib + input-pcspkr: + plugin: nil + after: [checkbox-provider-ce-oem] + build-packages: + - gcc + - libc6-dev + build-attributes: + - enable-patchelf + override-build: | + mkdir -p ${CRAFT_PART_INSTALL}/usr/bin + gcc ${CRAFT_PROJECT_DIR}/checkbox-provider-ce-oem/src/input-pcspkr.c -o ${CRAFT_PART_INSTALL}/usr/bin/beep + xtest: + plugin: dump + after: [checkbox-provider-ce-oem] + source: https://github.com/OP-TEE/optee_test.git + source-type: git + build-snaps: + - checkbox26 + build-attributes: + - enable-patchelf + build-packages: + - jq + - python3-requests-unixsocket + build-environment: + - PART_DEST: ${CRAFT_PART_INSTALL}/providers/checkbox-provider-ce-oem/data/ + - PROVIDER_SRC: ${CRAFT_PROJECT_DIR}/checkbox-provider-ce-oem + - PYTHONPATH: /snap/checkbox26/current/lib/python3.14/site-packages/ + override-pull: | + craftctl default + cp ${PROVIDER_SRC}/data/xtest_supported_version.json . + cp ${PROVIDER_SRC}/bin/optee_helper.py . + cp ${PROVIDER_SRC}/bin/look_up_xtest.py . + cp ${PROVIDER_SRC}/bin/xtest_install_ta.py . + override-build: | + for ver in `cat xtest_supported_version.json | jq -r .xtest_suite_tag[]`; do + git checkout $ver + python3 optee_helper.py parse_xtest_src $ver + done + mkdir -p ${PART_DEST} + cp -v optee-test-*.json ${PART_DEST} + spidev-test: + plugin: make + build-attributes: + - enable-patchelf + source: https://github.com/torvalds/linux.git + source-type: git + source-depth: 1 + source-subdir: tools/spi + parts-meta-info: + plugin: nil + override-build: | + craftctl default + for p in `ls -d ../../*`; do + if [ -d $p/src ]; then + (cd $p/src + if [ -d $p/src/.git ]; then + (echo `basename $p`\: && git show --pretty=format:"%h%d %aN %ci%n%s%n" -q ; echo ) >> $CRAFT_PART_INSTALL/parts_meta_info + fi # for additional `source-type` support, elif them here + ) + fi + done + after: [checkbox-provider-ce-oem] + launchers: + plugin: dump + source: launchers/ + build-attributes: [no-patchelf] + organize: + '*': bin/ + config-variables: + plugin: dump + source: config/ + build-attributes: [no-patchelf] diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/.gitignore b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/.gitignore new file mode 100644 index 0000000000..ed422dfc57 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/.gitignore @@ -0,0 +1,2 @@ +checkbox-provider-ce-oem/ +*.snap \ No newline at end of file diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/config/config_vars b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/config/config_vars new file mode 100644 index 0000000000..58b82f70de --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/config/config_vars @@ -0,0 +1,44 @@ +# follow KEY=value syntax +WIFI_INTERFACE=wlan0 +# WATCHDOG_KERNEL_MOD=iTCO_wdt +# ALSADEVICE=hw:CARD=bytrt5660,DEV=0 +OPEN_N_SSID=ubuntu-cert-n-open-tpelab +OPEN_BG_SSID=ubuntu-cert-bg-open-tpelab +OPEN_AC_SSID=ubuntu-cert-ac-open-tpelab +OPEN_AX_SSID=ubuntu-cert-ax-open +WPA_N_SSID=ubuntu-cert-n-wpa-tpelab +WPA_BG_SSID=ubuntu-cert-bg-wpa-tpelab +WPA_AC_SSID=ubuntu-cert-ac-wpa-tpelab +WPA_AX_SSID=ubuntu-cert-ax-wpa +WPA_N_PSK=insecure +WPA_BG_PSK=insecure +WPA_AC_PSK=insecure +WPA_AX_PSK=insecure +BTDEVADDR=C0:B5:D7:C1:74:38 +# obex server in office: C0:B5:D7:C1:74:38 +# obex server in lab: 28:3A:4D:46:79:C0, 7C:B2:7D:4B:14:95 +WWAN_APN=internet +WWAN_NET_IF=ppp0 +WWAN_CONTROL_IF=ttyACM3 +STRESS_BOOT_ITERATIONS=100 +STRESS_S3_ITERATIONS=100 +STRESS_S4_ITERATIONS=100 +TEST_TARGET_IPERF=10.102.88.25,10.102.182.100,10.102.182.137,10.102.182.101 +# iperf server in office: 10.102.88.25 +# iperf server in lab: 10.102.182.100, 10.102.182.137 +STRESS_S4_WAIT_DELAY=120 +STRESS_S4_SLEEP_DELAY=60 +STRESS_S3_SLEEP_DELAY=60 +STRESS_BOOT_WAKEUP_DELAY=120 +STRESS_S3_WAIT_DELAY=150 +STRESS_BOOT_WAIT_DELAY=150 +WIFI_AP_SETUPTIME=30 +WWAN_SETUPTIME=30 +TPM2TOOLS_TCTI_NAME=device +TPM2TOOLS_DEVICE_FILE=/dev/tpm0 +MODEL_GRADE=signed +WATCHDOG_TYPE=wdat_wdt +WATCHDOG_IDENTITY=wdat_wdt +RTC_DEVICE_FILE=/dev/rtc0 +SNAPD_TASK_TIMEOUT=600 + diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/checkbox-cli-wrapper b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/checkbox-cli-wrapper new file mode 100755 index 0000000000..aff044783e --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/checkbox-cli-wrapper @@ -0,0 +1,3 @@ +#!/bin/sh + +exec checkbox-cli "$@" diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/configure b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/configure new file mode 100755 index 0000000000..8471f06a77 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/configure @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +# Copyright 2018-2022 Canonical Ltd. +# All rights reserved. +# +# Written by: +# Maciej Kisielewski +# Sylvain Pineau +import os +import re +import sys + +sys.path.append(os.path.expandvars("$SNAP/usr/lib/python3/dist-packages")) +sitepkgpath = "$SNAP/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(sitepkgpath)) + +sys.path.append(os.path.expandvars( + "$SNAP/checkbox-runtime/usr/lib/python3/dist-packages")) +runtimepath = "$SNAP/checkbox-runtime/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(runtimepath)) + +try: + from checkbox_support.snap_utils.config import update_configuration + from checkbox_support.snap_utils.config import print_checkbox_conf +except ImportError: + msg = """ +checkbox-support not found! +You need to connect this snap to the checkbox26 snap. + +You can do this with those commands: + +snap connect $SNAP_NAME:checkbox-runtime checkbox26:checkbox-runtime +snap connect $SNAP_NAME:provider-resource checkbox26:provider-resource +snap connect $SNAP_NAME:provider-checkbox checkbox26:provider-checkbox +snap connect $SNAP_NAME:provider-tpm2 checkbox26:provider-tpm2 +snap connect $SNAP_NAME:provider-docker checkbox26:provider-docker +snap connect $SNAP_NAME:provider-certification-client checkbox26:provider-certification-client + """ + print(os.path.expandvars(msg), file=sys.stderr) + sys.exit(1) + + +def main(): + # we need run as root to be able to write to /var/snap/... + if os.geteuid() != 0: + raise SystemExit('You have to run this command with sudo') + + if len(sys.argv) > 1 and sys.argv[1] == '-l': + print_checkbox_conf() + return + + key_re = re.compile(r"^(?:[A-Z0-9]+_?)*[A-Z](?:_?[A-Z0-9])*$") + vars_to_set = dict() + for pair in sys.argv[1:]: + k, _, v = pair.partition('=') + if not key_re.match(k) or not v: + raise SystemExit("'%s' is not a valid configuration entry. " + "Should be KEY=val" % pair) + k = k.replace('_', '-').lower() + vars_to_set[k] = v + update_configuration(vars_to_set) + + +if __name__ == '__main__': + main() diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/shell-wrapper b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/shell-wrapper new file mode 100755 index 0000000000..a9a36091bb --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/shell-wrapper @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "$SNAP_NAME runtime shell, type 'exit' to quit the session" +exec bash diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/test-runner b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/test-runner new file mode 100755 index 0000000000..096c9ca06c --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/test-runner @@ -0,0 +1,12 @@ +#!/usr/bin/env checkbox-cli-wrapper +[launcher] +app_id = com.canonical.contrib:checkbox +launcher_version = 1 +stock_reports = text, submission_files, certification + +[test plan] +unit = com.canonical.contrib::ce-oem-iot-ubuntucore-26-automated +filter = com.canonical.contrib::ce-oem-iot-ubuntucore-26 + com.canonical.contrib::ce-oem-iot-ubuntucore-26-manual + com.canonical.contrib::ce-oem-iot-ubuntucore-26-automated + com.canonical.contrib::ce-oem-iot-ubuntucore-26-stress diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/wrapper_local b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/wrapper_local new file mode 100755 index 0000000000..e717a7ec76 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/launchers/wrapper_local @@ -0,0 +1,53 @@ +#!/bin/bash + +case "$SNAP_ARCH" in + "amd64") ARCH='x86_64-linux-gnu' + ;; + "i386") ARCH='i386-linux-gnu' + ;; + "arm64") ARCH='aarch64-linux-gnu' + ;; + "armhf") ARCH='arm-linux-gnueabihf' + ;; + *) + echo "Unsupported architecture: $SNAP_ARCH" + exit 1 + ;; +esac + +################################################ +# Launcher common exports for any checkbox app # +################################################ + +if [ -d $SNAP/checkbox-runtime ]; then + RUNTIME=$SNAP/checkbox-runtime + if [ ! -d $RUNTIME/usr ]; then + echo "You need to connect this snap to the checkbox26 snap." + echo "" + echo "You can do this with those commands:" + echo "snap install checkbox26" + echo "snap connect $SNAP_NAME:checkbox-runtime checkbox26:checkbox-runtime" + exit 1 + fi +fi + +export LC_ALL=C.UTF-8 +PERL_VERSION=$(perl -e '$^V=~/^v(\d+\.\d+)/;print $1') +export PERL5LIB="$PERL5LIB:$SNAP/usr/lib/$ARCH/perl/$PERL_VERSION:$SNAP/usr/lib/$ARCH/perl5/$PERL_VERSION:$SNAP/usr/share/perl/$PERL_VERSION:$SNAP/usr/share/perl5" +export GI_TYPELIB_PATH=$SNAP/usr/lib/girepository-1.0:$SNAP/usr/lib/$ARCH/girepository-1.0 +export PATH="$PATH:$SNAP/usr/bin:$SNAP/usr/sbin:$SNAP/sbin:/snap/bin" +export PYTHONPATH="$SNAP/usr/lib/python3/dist-packages:$PYTHONPATH" + +if [ -e $RUNTIME/wrapper_common ]; then + . $RUNTIME/wrapper_common +else + CGROUP_NAME=$(cat /proc/self/cgroup | grep -e "^1:name") + if [[ "$CGROUP_NAME" == *"hook.configure"* ]]; then + echo "Running in configure hook, wrapper_common not required" + else + echo "ERROR: no $RUNTIME/wrapper_common found" + exit 1 + fi +fi + +exec "$@" diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/hooks/configure b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/hooks/configure new file mode 100755 index 0000000000..c05027d70f --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/hooks/configure @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +# Copyright 2017-2024 Canonical Ltd. +# All rights reserved. + +""" +This hook reads `config_vars` file from the root of a snap and reenters this +configuration using snapd's config facilities and rewrites the file to a +checkbox config format in `$SNAP_DATA/checkbox.conf`. + +config_vars should list all the configuration variables in a `key=value` +syntax. The line can list variable name only, if the variable should not have a +default value. All keys should comprise of CAPS, numbers and underscores (_). +E.g.: + +OPEN_N_SSID +OPEN_BG_SSID +STRESS_S3_WAIT_DELAY=60 + +To change those values use the configure launcher. +E.g. + $ checkbox-ce-oem.configure OPEN_N_SSID=my-wifi + +If you __really__ need to change those values using `snap set` command, +you need to change CAPS to lowercase and underscores to dashes (-). + +E.g. + $ snap set checkbox-ce-oem open-n-ssid=my-wifi +""" + +import os +import sys + +sys.path.append(os.path.expandvars("$SNAP/usr/lib/python3/dist-packages")) +sitepkgpath = "$SNAP/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(sitepkgpath)) + +sys.path.append(os.path.expandvars( + "$SNAP/checkbox-runtime/usr/lib/python3/dist-packages")) +runtimepath = "$SNAP/checkbox-runtime/lib/python{}.{}/site-packages".format( + sys.version_info[0], sys.version_info[1]) +sys.path.append(os.path.expandvars(runtimepath)) + +try: + from checkbox_support.snap_utils.config import refresh_configuration +except ImportError: + msg = """ +checkbox-support not found! +You need to connect this snap to the checkbox26 snap. + +You can do this with those commands: + +snap connect $SNAP_NAME:checkbox-runtime checkbox26:checkbox-runtime +snap connect $SNAP_NAME:provider-resource checkbox26:provider-resource +snap connect $SNAP_NAME:provider-checkbox checkbox26:provider-checkbox +snap connect $SNAP_NAME:provider-tpm2 checkbox26:provider-tpm2 +snap connect $SNAP_NAME:provider-docker checkbox26:provider-docker +snap connect $SNAP_NAME:provider-certification-client checkbox26:provider-certification-client + """ + print(os.path.expandvars(msg), file=sys.stderr) + sys.exit(0) +refresh_configuration() diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/hooks/install b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/hooks/install new file mode 100755 index 0000000000..068b518289 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/hooks/install @@ -0,0 +1,4 @@ +#!/bin/sh + +set -e +snapctl set slave=disabled diff --git a/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/snapcraft.yaml b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/snapcraft.yaml new file mode 100644 index 0000000000..9cf77e4978 --- /dev/null +++ b/contrib/checkbox-ce-oem/checkbox-ce-oem-snap/series_uc26/snap/snapcraft.yaml @@ -0,0 +1,169 @@ +name: checkbox-ce-oem +summary: Checkbox CE OEM test runner and public providers +description: "Checkbox CE OEM test runner and public providers" +confinement: strict +grade: stable + +version: '1.0-resolute' + +base: core26 + +plugs: + checkbox-runtime: + interface: content + target: $SNAP/checkbox-runtime + default-provider: checkbox26 + provider-resource: + interface: content + target: $SNAP/providers/checkbox-provider-resource + default-provider: checkbox26 + provider-checkbox: + interface: content + target: $SNAP/providers/checkbox-provider-checkbox + default-provider: checkbox26 + provider-tpm2: + interface: content + target: $SNAP/providers/checkbox-provider-tpm2 + default-provider: checkbox26 + provider-docker: + interface: content + target: $SNAP/providers/checkbox-provider-docker + default-provider: checkbox26 + provider-certification-client: + interface: content + target: $SNAP/providers/checkbox-provider-certification-client + default-provider: checkbox26 +apps: + checkbox-cli: + command-chain: [bin/wrapper_local] + command: bin/checkbox-cli-wrapper + plugs: &standard [home, network-bind, hardware-observe, bluez, bluetooth-control, + gpio, modem-manager, mount-observe, network-manager, pulseaudio, serial-port, + system-observe, tpm, timezone-control, timeserver-control] + configure: + command-chain: [bin/wrapper_local] + command: bin/configure + remote-slave: + command-chain: [bin/wrapper_local] + command: bin/checkbox-cli-wrapper slave + daemon: simple + restart-condition: on-failure + plugs: *standard + shell: + command-chain: [bin/wrapper_local] + command: bin/shell-wrapper + plugs: *standard + test-runner: + command-chain: [bin/wrapper_local] + command: bin/test-runner + plugs: *standard + +passthrough: + hooks: + configure: + command-chain: [bin/wrapper_local] + +slots: + provider-ce-oem: + interface: content + read: + - $SNAP/providers/checkbox-provider-ce-oem + +parts: + checkbox-provider-ce-oem: + plugin: dump + source: checkbox-provider-ce-oem + source-type: local + stage-packages: + - alsa-utils + - mtd-utils + - u-boot-tools + - v4l-utils + - device-tree-compiler + - linuxptp + - snmp + - python3-rpyc + - gpsd + override-build: | + export PYTHONPATH=/snap/checkbox26/current/lib/python3.14/site-packages/:/usr/lib/python3/dist-packages + for path in $(find "/snap/checkbox26/current/providers/" -mindepth 1 -maxdepth 1 -type d); do export PROVIDERPATH=$path${PROVIDERPATH:+:$PROVIDERPATH}; done + python3 manage.py validate + python3 manage.py build + python3 manage.py install --layout=relocatable --prefix=/providers/checkbox-provider-ce-oem --root="$CRAFT_PART_INSTALL" + build-snaps: + - checkbox26 + build-packages: + - python3-dev + - python3-jinja2 + - python3-packaging + - python3-urwid + - python3-xlsxwriter + - python3-requests-oauthlib + input-pcspkr: + plugin: nil + after: [checkbox-provider-ce-oem] + build-packages: + - gcc + - libc6-dev + override-build: | + mkdir -p ${CRAFT_PART_INSTALL}/usr/bin + gcc ${CRAFT_PROJECT_DIR}/checkbox-provider-ce-oem/src/input-pcspkr.c -o ${CRAFT_PART_INSTALL}/usr/bin/beep + xtest: + plugin: dump + after: [checkbox-provider-ce-oem] + source: https://github.com/OP-TEE/optee_test.git + source-type: git + build-snaps: + - checkbox26 + build-packages: + - jq + - python3-requests-unixsocket + build-environment: + - PART_DEST: ${CRAFT_PART_INSTALL}/providers/checkbox-provider-ce-oem/data/ + - PROVIDER_SRC: ${CRAFT_PROJECT_DIR}/checkbox-provider-ce-oem + - PYTHONPATH: /snap/checkbox26/current/lib/python3.14/site-packages/ + override-pull: | + craftctl default + cp ${PROVIDER_SRC}/data/xtest_supported_version.json . + cp ${PROVIDER_SRC}/bin/optee_helper.py . + cp ${PROVIDER_SRC}/bin/look_up_xtest.py . + cp ${PROVIDER_SRC}/bin/xtest_install_ta.py . + override-build: | + for ver in `cat xtest_supported_version.json | jq -r .xtest_suite_tag[]`; do + git checkout $ver + python3 optee_helper.py parse_xtest_src $ver + done + mkdir -p ${PART_DEST} + cp -v optee-test-*.json ${PART_DEST} + spidev-test: + plugin: make + source: https://github.com/torvalds/linux.git + source-type: git + source-depth: 1 + source-subdir: tools/spi + parts-meta-info: + plugin: nil + override-build: | + craftctl default + for p in `ls -d ../../*`; do + if [ -d $p/src ]; then + (cd $p/src + if [ -d $p/src/.git ]; then + (echo `basename $p`\: && git show --pretty=format:"%h%d %aN %ci%n%s%n" -q ; echo ) >> $CRAFT_PART_INSTALL/parts_meta_info + fi # for additional `source-type` support, elif them here + ) + fi + done + after: [checkbox-provider-ce-oem] + launchers: + plugin: dump + source: launchers/ + organize: + '*': bin/ + config-variables: + plugin: dump + source: config/ + +layout: + /usr/share/alsa: + bind: $SNAP/usr/share/alsa