diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2023-04-24 17:31:14 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2023-05-12 14:19:00 +0200 |
commit | 58a12cf05e99ce016ecf0f5b16e695c3f107a592 (patch) | |
tree | 5810ccb0efc7993833c7a0c0fe1c822f666409c9 | |
parent | 772783242e323f5cf4415d8dac95bdef70322c2c (diff) | |
download | barebox-next.tar.gz |
Add GitHub CInext
This adds the necessary bits and pieces to build and test barebox with
GitHub actions.
Currently barebox is build tested in all architectures and all
defconfigs. Additionally labgrid-pytest runs for architectures we have
Qemu support for.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | .github/workflows/container.yml | 32 | ||||
-rw-r--r-- | .github/workflows/test-defconfigs.yml | 44 | ||||
-rw-r--r-- | .github/workflows/test-labgrid-pytest.yml | 70 | ||||
-rw-r--r-- | test/Containerfile | 89 | ||||
-rwxr-xr-x | test/generate-dummy-fw.sh | 65 | ||||
-rw-r--r-- | test/kconfig/disable_size_check.kconf | 1 | ||||
-rw-r--r-- | test/kconfig/disable_target_tools.kconf | 5 | ||||
-rw-r--r-- | test/kconfig/enable_self_test.kconf | 5 |
8 files changed, 311 insertions, 0 deletions
diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml new file mode 100644 index 0000000000..434745ae61 --- /dev/null +++ b/.github/workflows/container.yml @@ -0,0 +1,32 @@ +name: build ci container + +on: + push: + branches: + - 'master' + - 'ci' + paths: + - 'test/Containerfile' + workflow_dispatch: {} + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - id: build-image + uses: redhat-actions/buildah-build@v2 + with: + image: barebox-ci + tags: latest + dockerfiles: | + ./test/Containerfile + - id: push-to-github + uses: redhat-actions/push-to-registry@v2 + with: + image: ${{ steps.build-image.outputs.image }} + tags: ${{ steps.build-image.outputs.tags }} + registry: ghcr.io/${{ github.repository }} + username: ${{ github.actor }} + password: ${{ github.token }} + - run: echo "Image pushed to ${{ steps.push-to-github.outputs.registry-paths }}" diff --git a/.github/workflows/test-defconfigs.yml b/.github/workflows/test-defconfigs.yml new file mode 100644 index 0000000000..108e54d289 --- /dev/null +++ b/.github/workflows/test-defconfigs.yml @@ -0,0 +1,44 @@ +name: build all defconfigs + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + container: + image: ghcr.io/barebox/barebox/barebox-ci:latest + # allow mounting and devtmpfs in the container + options: --user=root --privileged -v /dev:/dev + + strategy: + matrix: + arch: [mips, powerpc, riscv, sandbox, x86 ] + regex: ["*"] + include: + - arch: arm + regex: "[a-b]*" + - arch: arm + regex: "[c-m]*" + - arch: arm + regex: "[n-q]*" + - arch: arm + regex: "[r-z]*" + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Build + run: | + export ARCH=${{matrix.arch}} + + export CROSS_COMPILE_arm=/opt/gcc-12.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi- + export CROSS_COMPILE_arm64=/opt/gcc-12.2.0-nolibc/aarch64-linux/bin/aarch64-linux- + export CROSS_COMPILE_mips=/opt/gcc-12.2.0-nolibc/mips-linux/bin/mips-linux- + export CROSS_COMPILE_powerpc=/opt/gcc-12.2.0-nolibc/powerpc-linux/bin/powerpc-linux- + export CROSS_COMPILE_riscv=/opt/gcc-12.2.0-nolibc/riscv32-linux/bin/riscv32-linux- + + ./test/generate-dummy-fw.sh + + ./MAKEALL -O build-${{matrix.arch}} -k test/kconfig/disable_size_check.kconf \ + -k test/kconfig/disable_target_tools.kconf -e '${{matrix.regex}}' diff --git a/.github/workflows/test-labgrid-pytest.yml b/.github/workflows/test-labgrid-pytest.yml new file mode 100644 index 0000000000..2c74150066 --- /dev/null +++ b/.github/workflows/test-labgrid-pytest.yml @@ -0,0 +1,70 @@ +name: test images with labgrid-pytest + +on: [push, pull_request] + +jobs: + labgrid-pytest: + runs-on: ubuntu-latest + container: + image: ghcr.io/barebox/barebox/barebox-ci:latest + # allow mounting and devtmpfs in the container + options: --user=root --privileged -v /dev:/dev + + strategy: + matrix: + + include: + - ARCH: arm + lgenv: 'test/arm/*@multi_v7_defconfig.yaml' + defconfig: multi_v7_defconfig + + - ARCH: arm + lgenv: test/arm/multi_v8_defconfig.yaml + defconfig: multi_v8_defconfig + + - ARCH: mips + lgenv: test/mips/qemu-malta_defconfig.yaml + defconfig: qemu-malta_defconfig + + - ARCH: x86 + lgenv: test/x86/efi_defconfig.yaml + defconfig: efi_defconfig + + - ARCH: riscv + lgenv: test/riscv/qemu@virt32_defconfig.yaml + defconfig: virt32_defconfig + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Build + run: | + export ARCH=${{matrix.arch}} + + export CROSS_COMPILE_arm=/opt/gcc-12.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi- + export CROSS_COMPILE_arm64=/opt/gcc-12.2.0-nolibc/aarch64-linux/bin/aarch64-linux- + export CROSS_COMPILE_mips=/opt/gcc-12.2.0-nolibc/mips-linux/bin/mips-linux- + export CROSS_COMPILE_powerpc=/opt/gcc-12.2.0-nolibc/powerpc-linux/bin/powerpc-linux- + export CROSS_COMPILE_riscv=/opt/gcc-12.2.0-nolibc/riscv32-linux/bin/riscv32-linux- + + ./test/generate-dummy-fw.sh + + ./MAKEALL -O build-${{matrix.arch}} -k test/kconfig/enable_self_test.kconf \ + -k test/kconfig/disable_target_tools.kconf ${{matrix.defconfig}} + + if [ ${{matrix.arch}} = "x86" ]; then + cp /usr/share/ovmf/OVMF.fd build-${{matrix.arch}} + fi + + if [ ${{matrix.arch}} = "riscv" ]; then + cp /usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.bin build-${{matrix.arch}} + fi + - name: labgrid-pytest + run: | + export KBUILD_OUTPUT=build-${{matrix.arch}} + + for i in ${{matrix.lgenv}}; do + echo "Testing $i" + labgrid-pytest --lg-env $i test/py --verbosity=1 --lg-log + done diff --git a/test/Containerfile b/test/Containerfile new file mode 100644 index 0000000000..8c9502c0a1 --- /dev/null +++ b/test/Containerfile @@ -0,0 +1,89 @@ +# SPDX-License-Identifier: GPL-2.0+ +# This Containerfile is used to build an image containing basic stuff to be used +# to build barebox and run our test suites. + +FROM debian:bullseye +MAINTAINER Sascha Hauer <s.hauer@pengutronix.de> +LABEL Description="This image is for building and testing barebox inside a container" + +# Make sure apt is happy +ENV DEBIAN_FRONTEND=noninteractive + +# Update and install things from apt now +RUN apt-get update && apt-get install -y \ + automake \ + autopoint \ + bc \ + binutils-dev \ + bison \ + build-essential \ + coreutils \ + cpio \ + cppcheck \ + curl \ + erofs-utils \ + expect \ + flex \ + gawk \ + gdisk \ + git \ + imagemagick \ + libc6-i386 \ + libgit2-dev \ + libguestfs-tools \ + liblz4-tool \ + libseccomp-dev \ + libssl-dev \ + libtool \ + libudev-dev \ + libusb-1.0-0-dev \ + lzma-alone \ + lzop \ + mount \ + openssl \ + pkg-config \ + rpm2cpio \ + util-linux \ + uuid-dev \ + zip \ + wget \ + qemu-system-arm \ + qemu-system-misc \ + qemu-system-mips \ + qemu-system-x86 \ + qemu-system-common \ + ovmf \ + python3 \ + python3-pip \ + python3-virtualenv \ + python3-setuptools \ + virtualenv \ + microcom \ + sudo \ + libyaml-tiny-perl \ + libyaml-libyaml-perl \ + && rm -rf /var/lib/apt/lists/* + +# Manually install the kernel.org Crosstool based toolchains for gcc-12.2.0 +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-aarch64-linux.tar.xz | tar -C /opt -xJ +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-arm-linux-gnueabi.tar.xz | tar -C /opt -xJ +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-i386-linux.tar.xz | tar -C /opt -xJ +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-mips-linux.tar.xz | tar -C /opt -xJ +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-powerpc-linux.tar.xz | tar -C /opt -xJ +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-riscv64-linux.tar.xz | tar -C /opt -xJ +RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.2.0/x86_64-gcc-12.2.0-nolibc-riscv32-linux.tar.xz | tar -C /opt -xJ + +RUN wget "https://github.com/qemu/qemu/blob/v5.2.0/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin?raw=true" -O /usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.bin + +# Create our user/group +RUN useradd -m -U barebox +RUN echo barebox ALL=NOPASSWD: ALL > /etc/sudoers.d/barebox + +# install labgrid +RUN cd /tmp && \ + git clone --depth 1 -b v23.0 https://github.com/labgrid-project/labgrid && \ + cd labgrid && \ + pip3 install . && \ + ln -s $(which pytest) /usr/local/bin/labgrid-pytest; + +USER barebox:barebox diff --git a/test/generate-dummy-fw.sh b/test/generate-dummy-fw.sh new file mode 100755 index 0000000000..e12593feaa --- /dev/null +++ b/test/generate-dummy-fw.sh @@ -0,0 +1,65 @@ +#!/bin/sh +# +# Generate dummy firmware files for compile tests +# + +FW_NXP_LPDDR4=" + firmware/lpddr4_pmu_train_1d_dmem.bin + firmware/lpddr4_pmu_train_1d_imem.bin + firmware/lpddr4_pmu_train_2d_dmem.bin + firmware/lpddr4_pmu_train_2d_imem.bin +" + +FW_NXP_DDR4=" + firmware/ddr4_dmem_1d.bin + firmware/ddr4_dmem_2d.bin + firmware/ddr4_imem_1d.bin + firmware/ddr4_imem_2d.bin +" + +FW_BL31=" + firmware/imx8mm-bl31.bin + firmware/imx8mn-bl31.bin + firmware/imx8mp-bl31.bin + firmware/imx8mq-bl31.bin + firmware/rk3568-bl31.bin + firmware/rk3588-bl31.bin +" + +FW_ROCKCHIP_SDRAM_INIT=" + arch/arm/boards/pine64-quartz64/sdram-init.bin + arch/arm/boards/radxa-rock3/sdram-init.bin + arch/arm/boards/rockchip-rk3568-bpi-r2pro/sdram-init.bin + arch/arm/boards/rockchip-rk3568-evb/sdram-init.bin + arch/arm/boards/radxa-rock5/sdram-init.bin +" + +FW_MVEBU_BINARY0=" + arch/arm/boards/globalscale-mirabox/binary.0 + arch/arm/boards/lenovo-ix4-300d/binary.0 + arch/arm/boards/marvell-armada-xp-db/binary.0 + arch/arm/boards/marvell-armada-xp-gp/binary.0 + arch/arm/boards/netgear-rn104/binary.0 + arch/arm/boards/netgear-rn2120/binary.0 + arch/arm/boards/plathome-openblocks-ax3/binary.0 + arch/arm/boards/turris-omnia/binary.0 +" + +FW_NXP_LAYERSCAPE=" + firmware/fsl_fman_ucode_ls1046_r1.0_106_4_18.bin + firmware/ppa-ls1046a.bin +" + +FW=" + $FW_NXP_LPDDR4 + $FW_NXP_DDR4 + $FW_BL31 + $FW_ROCKCHIP_SDRAM_INIT + $FW_MVEBU_BINARY0 + $FW_NXP_LAYERSCAPE +" + +for i in $FW; do + mkdir -p $(dirname $i) + echo "Dummy firmware generated for $i" > $i +done diff --git a/test/kconfig/disable_size_check.kconf b/test/kconfig/disable_size_check.kconf new file mode 100644 index 0000000000..3819f8a32c --- /dev/null +++ b/test/kconfig/disable_size_check.kconf @@ -0,0 +1 @@ +CONFIG_BAREBOX_MAX_IMAGE_SIZE=0xffffffff diff --git a/test/kconfig/disable_target_tools.kconf b/test/kconfig/disable_target_tools.kconf new file mode 100644 index 0000000000..55cb99b891 --- /dev/null +++ b/test/kconfig/disable_target_tools.kconf @@ -0,0 +1,5 @@ +# CONFIG_IMD_TARGET is not set +# CONFIG_KERNEL_INSTALL_TARGET is not set +# CONFIG_BAREBOXENV_TARGET is not set +# CONFIG_BAREBOXCRC32_TARGET is not set +# CONFIG_MVEBU_KWBOOT_TARGET is not set diff --git a/test/kconfig/enable_self_test.kconf b/test/kconfig/enable_self_test.kconf new file mode 100644 index 0000000000..f5cd7821b9 --- /dev/null +++ b/test/kconfig/enable_self_test.kconf @@ -0,0 +1,5 @@ +CONFIG_SELFTEST_ENABLE_ALL=y +CONFIG_TEST=y +CONFIG_CMD_SELFTEST=y +CONFIG_SELFTEST=y + |