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
					Paul Spooren
				
			
				
					committed by
					
						 Christian Marangi
						Christian Marangi
					
				
			
			
				
	
			
			
			 Christian Marangi
						Christian Marangi
					
				
			
						parent
						
							7be01fe13b
						
					
				
				
					commit
					c17c931a90
				
			
							
								
								
									
										143
									
								
								.github/workflows/kernel.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								.github/workflows/kernel.yml
									
									
									
									
										vendored
									
									
										Normal 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" | ||||
		Reference in New Issue
	
	Block a user