CI: add Kernel compile tests

Add Github Actions yaml script to build test kernel PR changes for
each target.

Signed-off-by: Paul Spooren <mail@aparcar.org>
[ add commit description ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
Paul Spooren 2022-03-09 18:22:22 +01:00 committed by Christian Marangi
parent 7be01fe13b
commit c17c931a90
No known key found for this signature in database
GPG Key ID: AC001D09ADBFEAD7

143
.github/workflows/kernel.yml vendored Normal file
View File

@ -0,0 +1,143 @@
name: Build Kernel
on:
pull_request:
paths:
- 'include/kernel-*'
- 'package/kernel/**'
jobs:
determine_targets:
name: Set targets
runs-on: ubuntu-latest
outputs:
target: ${{ steps.find_targets.outputs.target }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set targets
id: find_targets
run: |
export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \
| sort -u -t '/' -k1,1 \
| awk '{ print $1 }')"
JSON='['
FIRST=1
for TARGET in $TARGETS; do
[[ $FIRST -ne 1 ]] && JSON="$JSON"','
JSON="$JSON"'"'"${TARGET}"'"'
FIRST=0
done
JSON="$JSON"']'
echo -e "\n---- targets ----\n"
echo "$JSON"
echo -e "\n---- targets ----\n"
echo "::set-output name=target::$JSON"
build:
name: Build Kernel with external toolchain
needs: determine_targets
runs-on: ubuntu-latest
strategy:
fail-fast: False
matrix:
target: ${{fromJson(needs.determine_targets.outputs.target)}}
steps:
- name: Checkout master directory
uses: actions/checkout@v2
with:
path: openwrt
- name: Setup Ubuntu
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
sudo apt-get -y install \
build-essential \
ccache \
clang-12 \
ecj \
fastjar \
file \
g++ \
gawk \
gettext \
git \
java-propose-classpath \
libelf-dev \
libncurses-dev \
libssl-dev \
mkisofs \
python3 \
python3-dev \
python3-distutils \
python3-setuptools \
qemu-utils \
rsync \
subversion \
swig \
unzip \
wget \
xsltproc \
zlib1g-dev
- name: Initialization environment
run: |
TARGET=$(echo ${{ matrix.target }} | cut -d "/" -f 1)
SUBTARGET=$(echo ${{ matrix.target }} | cut -d "/" -f 2)
echo "TARGET=$TARGET" >> "$GITHUB_ENV"
echo "SUBTARGET=$SUBTARGET" >> "$GITHUB_ENV"
- name: Update & Install feeds
run: |
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
- name: Setup external toolchain
run: |
cd openwrt
TOOLCHAIN_FILE=$(curl "https://downloads.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/sha256sums" \
| sed -n -e 's/.*\(openwrt-toolchain.*\).tar.xz/\1/p')
echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
wget -O - https://downloads.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
| tar --xz -xf -
- name: Configure external toolchain
run: |
cd openwrt
./scripts/ext-toolchain.sh \
--toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
--config ${{ env.TARGET }}/${{ env.SUBTARGET }}
make defconfig
- name: Build tools
run: |
cd openwrt
make tools/install -j$(nproc) BUILD_LOG=1
- name: Build toolchain
run: |
cd openwrt
make toolchain/install -j$(nproc) BUILD_LOG=1
- name: Build Kernel
run: |
cd openwrt
make target/compile -j$(nproc) BUILD_LOG=1
- name: Upload logs
if: failure()
uses: actions/upload-artifact@v2
with:
name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs
path: "openwrt/logs"