CI: kernel: build only changed targets
Detect changes in commit and build only changed targets. If a change is related to the generic target, build test each target. The matrix json is split. For target check patch only the first subtarget is selected, for build test each target subtarget is built. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
		
							
								
								
									
										59
									
								
								.github/workflows/kernel.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										59
									
								
								.github/workflows/kernel.yml
									
									
									
									
										vendored
									
									
								
							| @@ -16,7 +16,7 @@ on: | |||||||
|       - '.github/workflows/kernel.yml' |       - '.github/workflows/kernel.yml' | ||||||
|       - 'include/kernel*' |       - 'include/kernel*' | ||||||
|       - 'package/kernel/**' |       - 'package/kernel/**' | ||||||
|       - 'target/linux/generic/**' |       - 'target/linux/**' | ||||||
|  |  | ||||||
| permissions: | permissions: | ||||||
|   contents: read |   contents: read | ||||||
| @@ -26,33 +26,66 @@ jobs: | |||||||
|     name: Set targets |     name: Set targets | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     outputs: |     outputs: | ||||||
|       target: ${{ steps.find_targets.outputs.target }} |       targets_subtargets: ${{ steps.find_targets.outputs.targets_subtargets }} | ||||||
|  |       targets: ${{ steps.find_targets.outputs.targets }} | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v3 |         uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           fetch-depth: 2 | ||||||
|  |  | ||||||
|  |       - name: Get changed files | ||||||
|  |         id: changed-files | ||||||
|  |         uses: tj-actions/changed-files@v35 | ||||||
|  |         with: | ||||||
|  |           since_last_remote_commit: true | ||||||
|  |  | ||||||
|       - name: Set targets |       - name: Set targets | ||||||
|         id: find_targets |         id: find_targets | ||||||
|         run: | |         run: | | ||||||
|  |           export TARGETS_SUBTARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \ | ||||||
|  |             | sort -u -t '/' -k1 \ | ||||||
|  |             | awk '{ print $1 }')" | ||||||
|  |  | ||||||
|           export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \ |           export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \ | ||||||
|             | sort -u -t '/' -k1,1 \ |             | sort -u -t '/' -k1,1 \ | ||||||
|             | awk '{ print $1 }')" |             | awk '{ print $1 }')" | ||||||
|  |  | ||||||
|           JSON='[' |           JSON_TARGETS_SUBTARGETS='[' | ||||||
|  |           FIRST=1 | ||||||
|  |           for TARGET in $TARGETS_SUBTARGETS; do | ||||||
|  |             if echo ${{ steps.changed-files.outputs.all_changed_files }} | grep -q target/linux/generic || | ||||||
|  |               echo ${{ steps.changed-files.outputs.all_changed_files }} | grep -q $(echo $TARGET | cut -d "/" -f 1); then | ||||||
|  |               [[ $FIRST -ne 1 ]] && JSON_TARGETS_SUBTARGETS="$JSON_TARGETS_SUBTARGETS"',' | ||||||
|  |               JSON_TARGETS_SUBTARGETS="$JSON_TARGETS_SUBTARGETS"'"'"${TARGET}"'"' | ||||||
|  |               FIRST=0 | ||||||
|  |             fi | ||||||
|  |           done | ||||||
|  |           JSON_TARGETS_SUBTARGETS="$JSON_TARGETS_SUBTARGETS"']' | ||||||
|  |  | ||||||
|  |           JSON_TARGETS='[' | ||||||
|           FIRST=1 |           FIRST=1 | ||||||
|           for TARGET in $TARGETS; do |           for TARGET in $TARGETS; do | ||||||
|             [[ $FIRST -ne 1 ]] && JSON="$JSON"',' |             if echo ${{ steps.changed-files.outputs.all_changed_files }} | grep -q target/linux/generic || | ||||||
|             JSON="$JSON"'"'"${TARGET}"'"' |               echo ${{ steps.changed-files.outputs.all_changed_files }} | grep -q $(echo $TARGET | cut -d "/" -f 1); then | ||||||
|             FIRST=0 |               [[ $FIRST -ne 1 ]] && JSON_TARGETS="$JSON_TARGETS"',' | ||||||
|  |               JSON_TARGETS="$JSON_TARGETS"'"'"${TARGET}"'"' | ||||||
|  |               FIRST=0 | ||||||
|  |             fi | ||||||
|           done |           done | ||||||
|           JSON="$JSON"']' |           JSON_TARGETS="$JSON_TARGETS"']' | ||||||
|  |  | ||||||
|            echo -e "\n---- targets ----\n" |           echo -e "\n---- targets to build ----\n" | ||||||
|            echo "$JSON" |           echo "$JSON_TARGETS_SUBTARGETS" | ||||||
|            echo -e "\n---- targets ----\n" |           echo -e "\n---- targets to build ----\n" | ||||||
|  |  | ||||||
|            echo "target=$JSON" >> $GITHUB_OUTPUT |           echo -e "\n---- targets to check patch ----\n" | ||||||
|  |           echo "$JSON_TARGETS" | ||||||
|  |           echo -e "\n---- targets to check patch ----\n" | ||||||
|  |  | ||||||
|  |           echo "targets_subtargets=$JSON_TARGETS_SUBTARGETS" >> $GITHUB_OUTPUT | ||||||
|  |           echo "targets=$JSON_TARGETS" >> $GITHUB_OUTPUT | ||||||
|  |  | ||||||
|   build: |   build: | ||||||
|     name: Build Kernel with external toolchain |     name: Build Kernel with external toolchain | ||||||
| @@ -63,7 +96,7 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|        fail-fast: False |        fail-fast: False | ||||||
|        matrix: |        matrix: | ||||||
|          target: ${{fromJson(needs.determine_targets.outputs.target)}} |          target: ${{fromJson(needs.determine_targets.outputs.targets_subtargets)}} | ||||||
|     uses: ./.github/workflows/build.yml |     uses: ./.github/workflows/build.yml | ||||||
|     with: |     with: | ||||||
|       target: ${{ matrix.target }} |       target: ${{ matrix.target }} | ||||||
| @@ -79,7 +112,7 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|        fail-fast: False |        fail-fast: False | ||||||
|        matrix: |        matrix: | ||||||
|          target: ${{fromJson(needs.determine_targets.outputs.target)}} |          target: ${{fromJson(needs.determine_targets.outputs.targets)}} | ||||||
|     uses: ./.github/workflows/check-kernel-patches.yml |     uses: ./.github/workflows/check-kernel-patches.yml | ||||||
|     with: |     with: | ||||||
|       target: ${{ matrix.target }} |       target: ${{ matrix.target }} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Christian Marangi
					Christian Marangi