[openwrt/openwrt] CI: kernel: build only changed targets

LEDE Commits lede-commits at lists.infradead.org
Wed Jan 11 05:28:45 PST 2023


ansuel pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/04ada8bc4118b390cceca9dc67e7a593f7dc77b0

commit 04ada8bc4118b390cceca9dc67e7a593f7dc77b0
Author: Christian Marangi <ansuelsmth at gmail.com>
AuthorDate: Tue Jan 10 23:20:07 2023 +0100

    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 at gmail.com>
---
 .github/workflows/kernel.yml | 59 ++++++++++++++++++++++++++++++++++----------
 1 file changed, 46 insertions(+), 13 deletions(-)

diff --git a/.github/workflows/kernel.yml b/.github/workflows/kernel.yml
index d886002ed1..6cff102091 100644
--- a/.github/workflows/kernel.yml
+++ b/.github/workflows/kernel.yml
@@ -16,7 +16,7 @@ on:
       - '.github/workflows/kernel.yml'
       - 'include/kernel*'
       - 'package/kernel/**'
-      - 'target/linux/generic/**'
+      - 'target/linux/**'
 
 permissions:
   contents: read
@@ -26,33 +26,66 @@ jobs:
     name: Set targets
     runs-on: ubuntu-latest
     outputs:
-      target: ${{ steps.find_targets.outputs.target }}
+      targets_subtargets: ${{ steps.find_targets.outputs.targets_subtargets }}
+      targets: ${{ steps.find_targets.outputs.targets }}
 
     steps:
       - name: Checkout
         uses: actions/checkout at v3
+        with:
+          fetch-depth: 2
+
+      - name: Get changed files
+        id: changed-files
+        uses: tj-actions/changed-files at v35
+        with:
+          since_last_remote_commit: true
 
       - name: Set targets
         id: find_targets
         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 \
             | sort -u -t '/' -k1,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
           for TARGET in $TARGETS; do
-            [[ $FIRST -ne 1 ]] && JSON="$JSON"','
-            JSON="$JSON"'"'"${TARGET}"'"'
-            FIRST=0
+            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="$JSON_TARGETS"','
+              JSON_TARGETS="$JSON_TARGETS"'"'"${TARGET}"'"'
+              FIRST=0
+            fi
           done
-          JSON="$JSON"']'
+          JSON_TARGETS="$JSON_TARGETS"']'
+
+          echo -e "\n---- targets to build ----\n"
+          echo "$JSON_TARGETS_SUBTARGETS"
+          echo -e "\n---- targets to build ----\n"
 
-           echo -e "\n---- targets ----\n"
-           echo "$JSON"
-           echo -e "\n---- targets ----\n"
+          echo -e "\n---- targets to check patch ----\n"
+          echo "$JSON_TARGETS"
+          echo -e "\n---- targets to check patch ----\n"
 
-           echo "target=$JSON" >> $GITHUB_OUTPUT
+          echo "targets_subtargets=$JSON_TARGETS_SUBTARGETS" >> $GITHUB_OUTPUT
+          echo "targets=$JSON_TARGETS" >> $GITHUB_OUTPUT
 
   build:
     name: Build Kernel with external toolchain
@@ -63,7 +96,7 @@ jobs:
     strategy:
        fail-fast: False
        matrix:
-         target: ${{fromJson(needs.determine_targets.outputs.target)}}
+         target: ${{fromJson(needs.determine_targets.outputs.targets_subtargets)}}
     uses: ./.github/workflows/build.yml
     with:
       target: ${{ matrix.target }}
@@ -79,7 +112,7 @@ jobs:
     strategy:
        fail-fast: False
        matrix:
-         target: ${{fromJson(needs.determine_targets.outputs.target)}}
+         target: ${{fromJson(needs.determine_targets.outputs.targets)}}
     uses: ./.github/workflows/check-kernel-patches.yml
     with:
       target: ${{ matrix.target }}




More information about the lede-commits mailing list