name: CI on: push: branches: - main pull_request: branches: - main workflow_dispatch: permissions: contents: read concurrency: group: ci-${{ github.ref }} cancel-in-progress: true env: I2C_TREE: https://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git SPARSE_REPOSITORY: https://git.kernel.org/pub/scm/devel/sparse/sparse.git SPARSE_COMMIT: 00c4b8e75cbf92003bc4a695a223045092b173f3 jobs: out-of-tree: name: Out-of-tree build runs-on: ubuntu-latest timeout-minutes: 30 # GCC only, deliberately. Building a module with LLVM=1 against the # runner's distro headers fails before it reaches this source: those # headers were built with GCC and their Makefiles pass flags clang does # not accept (-fconserve-stack, -fsanitize=bounds-strict, -mrecord-mcount). # Clang coverage belongs in the in-tree job below, which controls the # whole kernel build. steps: - uses: actions/checkout@v4 - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y build-essential linux-headers-$(uname -r) shellcheck - name: Build module run: make W=1 KCFLAGS=-W - name: Run checkpatch run: make checkpatch - name: Check shell scripts run: | bash -n test-smoke.sh for f in tools/*.sh; do bash -n "$f"; done shellcheck -S warning test-smoke.sh tools/*.sh - name: Upload artifact uses: actions/upload-artifact@v4 with: name: i2c-imc-skylake-${{ github.ref_name }} path: i2c-imc-skylake.ko if-no-files-found: error in-tree: name: Current i2c-host integration runs-on: ubuntu-latest timeout-minutes: 45 steps: - uses: actions/checkout@v4 - name: Install kernel build dependencies run: | sudo apt-get update sudo apt-get install -y bc bison build-essential clang flex libelf-dev \ libssl-dev lld llvm - name: Build pinned Sparse run: | git clone --filter=blob:none "$SPARSE_REPOSITORY" sparse git -C sparse checkout "$SPARSE_COMMIT" make -C sparse -j"$(nproc)" echo "$PWD/sparse" >> "$GITHUB_PATH" - name: Prepare current maintainer tree run: | git clone --depth=1 --branch i2c/i2c-host "$I2C_TREE" linux-i2c cp i2c-imc-skylake.c linux-i2c/drivers/i2c/busses/ cat docs/submission/Kconfig.kernel >> linux-i2c/drivers/i2c/busses/Kconfig printf '%s\n' 'obj-$(CONFIG_I2C_IMC_SKYLAKE) += i2c-imc-skylake.o' \ >> linux-i2c/drivers/i2c/busses/Makefile git -C linux-i2c rev-parse HEAD - name: Configure kernel working-directory: linux-i2c run: | make O=../linux-out x86_64_defconfig scripts/config --file ../linux-out/.config --enable I2C --module I2C_IMC_SKYLAKE make O=../linux-out olddefconfig grep '^CONFIG_I2C_IMC_SKYLAKE=m' ../linux-out/.config - name: Build driver in-tree working-directory: linux-i2c run: make O=../linux-out W=1 drivers/i2c/busses/i2c-imc-skylake.o - name: Build arm64 COMPILE_TEST with Clang working-directory: linux-i2c run: | make O=../linux-out-arm64 ARCH=arm64 LLVM=1 defconfig scripts/config --file ../linux-out-arm64/.config \ --enable COMPILE_TEST --enable PCI --enable I2C \ --module I2C_IMC_SKYLAKE make O=../linux-out-arm64 ARCH=arm64 LLVM=1 olddefconfig grep '^CONFIG_I2C_IMC_SKYLAKE=m' ../linux-out-arm64/.config make O=../linux-out-arm64 ARCH=arm64 LLVM=1 W=1 \ drivers/i2c/busses/i2c-imc-skylake.o - name: Run Sparse in-tree working-directory: linux-i2c run: | make O=../linux-out C=2 CF=-D__CHECK_ENDIAN__ \ drivers/i2c/busses/i2c-imc-skylake.o - name: Run current-tree checkpatch working-directory: linux-i2c run: | scripts/checkpatch.pl --strict --no-tree -f \ drivers/i2c/busses/i2c-imc-skylake.c - name: Build the documentation working-directory: linux-i2c run: | sudo apt-get install -y graphviz python3-sphinx python3-sphinx-rtd-theme cp ../docs/submission/i2c-imc-skylake.rst Documentation/i2c/busses/ sed -i 's|^ i2c-i801$| i2c-i801\n i2c-imc-skylake|' \ Documentation/i2c/busses/index.rst grep -q i2c-imc-skylake Documentation/i2c/busses/index.rst make O=../linux-out htmldocs SPHINXDIRS=i2c 2>&1 | tee doc.log | tail -20 # Only diagnostics naming this file should fail the job. The docs # build emits environment-dependent warnings that say nothing about # this patch. if grep -Ei 'warning|error' doc.log | grep -i i2c-imc-skylake; then echo "the documentation build complained about this file" >&2 exit 1 fi