aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/kernel.yml
blob: d9ab8581c9b455968ce36731b9a8b7335e149b07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: Build Kernel

on:
  pull_request:
    paths:
      - '.github/workflows/check-kernel-patches.yml'
      - '.github/workflows/build.yml'
      - '.github/workflows/kernel.yml'
      - 'include/kernel*'
      - 'package/kernel/**'
      - 'target/linux/**'
  push:
    paths:
      - '.github/workflows/check-kernel-patches.yml'
      - '.github/workflows/build.yml'
      - '.github/workflows/kernel.yml'
      - 'include/kernel*'
      - 'package/kernel/**'
      - 'target/linux/**'
    branches-ignore:
      - master

permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
  determine_targets:
    name: Set targets
    runs-on: ubuntu-latest
    outputs:
      targets_subtargets: ${{ steps.find_targets.outputs.targets_subtargets }}
      targets: ${{ steps.find_targets.outputs.targets }}

    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 2

      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@v35

      - name: Set targets
        id: find_targets
        run: |
          ALL_TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null)"
          CHANGED_FILES="$(echo ${{ steps.changed-files.outputs.all_changed_files }} | tr ' ' '\n')"

          TARGETS_SUBTARGETS="$(echo "$ALL_TARGETS" | sort -u -t '/' -k1 | awk '{ print $1 }')"
          TARGETS="$(echo "$ALL_TARGETS" | sort -u -t '/' -k1,1 | awk '{ print $1 }')"

          # On testing non-specific target, skip testing each subtarget
          if echo "$CHANGED_FILES" | grep -v -q target/linux ||
            echo "$CHANGED_FILES" | grep -q target/linux/generic; then
            TARGETS_SUBTARGETS=$TARGETS
          fi

          JSON_TARGETS_SUBTARGETS='['
          FIRST=1
          for TARGET in $TARGETS_SUBTARGETS; do
            if echo "$CHANGED_FILES" | grep -v -q target/linux ||
              echo "$CHANGED_FILES" | grep -q target/linux/generic ||
              echo "$CHANGED_FILES" | grep -q $(echo $TARGET | cut -d "/" -f 1); then
              TUPLE='{"target":"'"$(echo $TARGET | cut -d "/" -f 1)"'","subtarget":"'"$(echo $TARGET | cut -d "/" -f 2)"'"}'
              [[ $FIRST -ne 1 ]] && JSON_TARGETS_SUBTARGETS="$JSON_TARGETS_SUBTARGETS"','
              JSON_TARGETS_SUBTARGETS="$JSON_TARGETS_SUBTARGETS""$TUPLE"
              FIRST=0
            fi
          done
          JSON_TARGETS_SUBTARGETS="$JSON_TARGETS_SUBTARGETS"']'

          JSON_TARGETS='['
          FIRST=1
          for TARGET in $TARGETS; do
            if echo "$CHANGED_FILES" | grep -v -q target/linux ||
              echo "$CHANGED_FILES" | grep -q target/linux/generic ||
              echo "$CHANGED_FILES" | grep -q $(echo $TARGET | cut -d "/" -f 1); then
              TUPLE='{"target":"'"$(echo $TARGET | cut -d "/" -f 1)"'","subtarget":"'"$(echo $TARGET | cut -d "/" -f 2)"'"}'
              [[ $FIRST -ne 1 ]] && JSON_TARGETS="$JSON_TARGETS"','
              JSON_TARGETS="$JSON_TARGETS""$TUPLE"
              FIRST=0
            fi
          done
          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 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:
    name: Build Kernel with external toolchain
    needs: determine_targets
    permissions:
      contents: read
      packages: read
      actions: write
    strategy:
       fail-fast: False
       matrix:
         include: ${{fromJson(needs.determine_targets.outputs.targets_subtargets)}}
    uses: ./.github/workflows/build.yml
    with:
      container_name: toolchain
      target: ${{ matrix.target }}
      subtarget: ${{ matrix.subtarget }}
      build_kernel: true
      build_all_kmods: true

  check-kernel-patches:
    name: Check Kernel patches
    needs: determine_targets
    permissions:
      contents: read
      packages: read
    strategy:
       fail-fast: False
       matrix:
         include: ${{fromJson(needs.determine_targets.outputs.targets)}}
    uses: ./.github/workflows/check-kernel-patches.yml
    with:
      target: ${{ matrix.target }}
      subtarget: ${{ matrix.subtarget }}