CI: Add workaround for github uppercase usernames
[openwrt/openwrt.git] / .github / workflows / kernel.yml
1 name: Build Kernel
2
3 on:
4 pull_request:
5 paths:
6 - '.github/workflows/kernel.yml'
7 - 'include/kernel-*'
8 - 'package/kernel/**'
9 - 'target/linux/generic/**'
10
11 permissions:
12 contents: read
13
14 jobs:
15 determine_targets:
16 name: Set targets
17 runs-on: ubuntu-latest
18 outputs:
19 target: ${{ steps.find_targets.outputs.target }}
20 owner_lc: ${{ steps.lower_owner.outputs.owner_lc }}
21
22 steps:
23 - name: Checkout
24 uses: actions/checkout@v2
25
26 - name: Set lower case owner name
27 id: lower_owner
28 run: |
29 OWNER_LC=$(echo "${{ github.repository_owner }}" \
30 | tr '[:upper:]' '[:lower:]')
31 echo "::set-output name=owner_lc::$OWNER_LC"
32
33 - name: Set targets
34 id: find_targets
35 run: |
36 export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \
37 | sort -u -t '/' -k1,1 \
38 | awk '{ print $1 }')"
39
40 JSON='['
41 FIRST=1
42 for TARGET in $TARGETS; do
43 [[ $FIRST -ne 1 ]] && JSON="$JSON"','
44 JSON="$JSON"'"'"${TARGET}"'"'
45 FIRST=0
46 done
47 JSON="$JSON"']'
48
49 echo -e "\n---- targets ----\n"
50 echo "$JSON"
51 echo -e "\n---- targets ----\n"
52
53 echo "::set-output name=target::$JSON"
54
55 build:
56 name: Build Kernel with external toolchain
57 needs: determine_targets
58 runs-on: ubuntu-latest
59 strategy:
60 fail-fast: False
61 matrix:
62 target: ${{fromJson(needs.determine_targets.outputs.target)}}
63
64 container: ghcr.io/${{ needs.determine_targets.outputs.owner_lc }}/tools:latest
65
66 permissions:
67 contents: read
68 packages: read
69
70 steps:
71 - name: Checkout master directory
72 uses: actions/checkout@v2
73 with:
74 path: openwrt
75
76 - name: Checkout packages feed
77 uses: actions/checkout@v2
78 with:
79 repository: openwrt/packages
80 path: openwrt/feeds/packages
81
82 - name: Checkout luci feed
83 uses: actions/checkout@v2
84 with:
85 repository: openwrt/luci
86 path: openwrt/feeds/luci
87
88 - name: Checkout routing feed
89 uses: actions/checkout@v2
90 with:
91 repository: openwrt/routing
92 path: openwrt/feeds/routing
93
94 - name: Checkout telephony feed
95 uses: actions/checkout@v2
96 with:
97 repository: openwrt/telephony
98 path: openwrt/feeds/telephony
99
100 - name: Fix permission
101 run: |
102 chown -R buildbot:buildbot openwrt
103
104 - name: Initialization environment
105 run: |
106 TARGET=$(echo ${{ matrix.target }} | cut -d "/" -f 1)
107 SUBTARGET=$(echo ${{ matrix.target }} | cut -d "/" -f 2)
108 echo "TARGET=$TARGET" >> "$GITHUB_ENV"
109 echo "SUBTARGET=$SUBTARGET" >> "$GITHUB_ENV"
110
111 - name: Update & Install feeds
112 shell: su buildbot -c "sh -e {0}"
113 working-directory: openwrt
114 run: |
115 ./scripts/feeds update -a
116 ./scripts/feeds install -a
117
118 - name: Parse toolchain file
119 working-directory: openwrt
120 run: |
121 TOOLCHAIN_STRING="$(curl "https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/sha256sums" \
122 | grep ".*openwrt-toolchain.*tar.xz")"
123 TOOLCHAIN_FILE=$(echo "$TOOLCHAIN_STRING" | sed -n -e 's/.*\(openwrt-toolchain.*\).tar.xz/\1/p')
124 TOOLCHAIN_SHA256=$(echo "$TOOLCHAIN_STRING" | cut -d ' ' -f 1)
125
126 echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
127 echo "TOOLCHAIN_SHA256=$TOOLCHAIN_SHA256" >> "$GITHUB_ENV"
128
129 - name: Cache external toolchain
130 id: cache-external-toolchain
131 uses: actions/cache@v3
132 with:
133 path: openwrt/${{ env.TOOLCHAIN_FILE }}
134 key: ${{ env.TOOLCHAIN_FILE }}-${{ env.TOOLCHAIN_SHA256 }}
135
136 - name: Download external toolchain
137 if: ${{ steps.cache-external-toolchain.outputs.cache-hit != 'true' }}
138 shell: su buildbot -c "sh -e {0}"
139 working-directory: openwrt
140 run: |
141 wget -O - https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
142 | tar --xz -xf -
143
144 - name: Extract prebuilt tools
145 shell: su buildbot -c "sh -e {0}"
146 working-directory: openwrt
147 run: ./scripts/ext-tools.sh --tools /tools.tar
148
149 - name: Configure external toolchain
150 shell: su buildbot -c "sh -e {0}"
151 working-directory: openwrt
152 run: |
153 echo CONFIG_ALL_KMODS=y >> .config
154 echo CONFIG_DEVEL=y >> .config
155 echo CONFIG_AUTOREMOVE=y >> .config
156
157 ./scripts/ext-toolchain.sh \
158 --toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
159 --overwrite-config \
160 --config ${{ env.TARGET }}/${{ env.SUBTARGET }}
161
162 - name: Show configuration
163 shell: su buildbot -c "sh -e {0}"
164 working-directory: openwrt
165 run: ./scripts/diffconfig.sh
166
167 - name: Build tools
168 shell: su buildbot -c "sh -e {0}"
169 working-directory: openwrt
170 run: make tools/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
171
172 - name: Build toolchain
173 shell: su buildbot -c "sh -e {0}"
174 working-directory: openwrt
175 run: make toolchain/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
176
177 - name: Build Kernel
178 shell: su buildbot -c "sh -e {0}"
179 working-directory: openwrt
180 run: make target/compile -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
181
182 - name: Build Kernel Kmods
183 shell: su buildbot -c "sh -e {0}"
184 working-directory: openwrt
185 run: make package/linux/compile -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
186
187 - name: Upload logs
188 if: failure()
189 uses: actions/upload-artifact@v2
190 with:
191 name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs
192 path: "openwrt/logs"