6 - '.github/workflows/kernel.yml'
9 - 'target/linux/generic/**'
17 runs-on: ubuntu-latest
19 target: ${{ steps.find_targets.outputs.target }}
20 owner_lc: ${{ steps.lower_owner.outputs.owner_lc }}
24 uses: actions/checkout@v2
26 - name: Set lower case owner name
29 OWNER_LC=$(echo "${{ github.repository_owner }}" \
30 | tr '[:upper:]' '[:lower:]')
31 echo "::set-output name=owner_lc::$OWNER_LC"
36 export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \
37 | sort -u -t '/' -k1,1 \
38 | awk '{ print $1 }')"
42 for TARGET in $TARGETS; do
43 [[ $FIRST -ne 1 ]] && JSON="$JSON"','
44 JSON="$JSON"'"'"${TARGET}"'"'
49 echo -e "\n---- targets ----\n"
51 echo -e "\n---- targets ----\n"
53 echo "::set-output name=target::$JSON"
56 name: Build Kernel with external toolchain
57 needs: determine_targets
58 runs-on: ubuntu-latest
62 target: ${{fromJson(needs.determine_targets.outputs.target)}}
64 container: ghcr.io/${{ needs.determine_targets.outputs.owner_lc }}/tools:latest
71 - name: Checkout master directory
72 uses: actions/checkout@v2
76 - name: Checkout packages feed
77 uses: actions/checkout@v2
79 repository: openwrt/packages
80 path: openwrt/feeds/packages
82 - name: Checkout luci feed
83 uses: actions/checkout@v2
85 repository: openwrt/luci
86 path: openwrt/feeds/luci
88 - name: Checkout routing feed
89 uses: actions/checkout@v2
91 repository: openwrt/routing
92 path: openwrt/feeds/routing
94 - name: Checkout telephony feed
95 uses: actions/checkout@v2
97 repository: openwrt/telephony
98 path: openwrt/feeds/telephony
100 - name: Fix permission
102 chown -R buildbot:buildbot openwrt
104 - name: Initialization environment
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"
111 - name: Update & Install feeds
112 shell: su buildbot -c "sh -e {0}"
113 working-directory: openwrt
115 ./scripts/feeds update -a
116 ./scripts/feeds install -a
118 - name: Parse toolchain file
119 working-directory: openwrt
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)
126 echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
127 echo "TOOLCHAIN_SHA256=$TOOLCHAIN_SHA256" >> "$GITHUB_ENV"
129 - name: Cache external toolchain
130 id: cache-external-toolchain
131 uses: actions/cache@v3
133 path: openwrt/${{ env.TOOLCHAIN_FILE }}
134 key: ${{ env.TOOLCHAIN_FILE }}-${{ env.TOOLCHAIN_SHA256 }}
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
141 wget -O - https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
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
149 - name: Configure external toolchain
150 shell: su buildbot -c "sh -e {0}"
151 working-directory: openwrt
153 echo CONFIG_ALL_KMODS=y >> .config
154 echo CONFIG_DEVEL=y >> .config
155 echo CONFIG_AUTOREMOVE=y >> .config
157 ./scripts/ext-toolchain.sh \
158 --toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
160 --config ${{ env.TARGET }}/${{ env.SUBTARGET }}
162 - name: Show configuration
163 shell: su buildbot -c "sh -e {0}"
164 working-directory: openwrt
165 run: ./scripts/diffconfig.sh
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
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
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
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
189 uses: actions/upload-artifact@v2
191 name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs