kernel.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. name: Build Kernel
  2. on:
  3. pull_request:
  4. paths:
  5. - '.github/workflows/kernel.yml'
  6. - 'include/kernel-*'
  7. - 'package/kernel/**'
  8. - 'target/linux/generic/**'
  9. jobs:
  10. determine_targets:
  11. name: Set targets
  12. runs-on: ubuntu-latest
  13. outputs:
  14. target: ${{ steps.find_targets.outputs.target }}
  15. steps:
  16. - name: Checkout
  17. uses: actions/checkout@v2
  18. - name: Set targets
  19. id: find_targets
  20. run: |
  21. export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \
  22. | sort -u -t '/' -k1,1 \
  23. | awk '{ print $1 }')"
  24. JSON='['
  25. FIRST=1
  26. for TARGET in $TARGETS; do
  27. [[ $FIRST -ne 1 ]] && JSON="$JSON"','
  28. JSON="$JSON"'"'"${TARGET}"'"'
  29. FIRST=0
  30. done
  31. JSON="$JSON"']'
  32. echo -e "\n---- targets ----\n"
  33. echo "$JSON"
  34. echo -e "\n---- targets ----\n"
  35. echo "::set-output name=target::$JSON"
  36. build:
  37. name: Build Kernel with external toolchain
  38. needs: determine_targets
  39. runs-on: ubuntu-latest
  40. strategy:
  41. fail-fast: False
  42. matrix:
  43. target: ${{fromJson(needs.determine_targets.outputs.target)}}
  44. container: registry.gitlab.com/openwrt/buildbot/buildworker-3.4.1
  45. steps:
  46. - name: Checkout master directory
  47. uses: actions/checkout@v2
  48. with:
  49. path: openwrt
  50. - name: Checkout packages feed
  51. uses: actions/checkout@v2
  52. with:
  53. repository: openwrt/packages
  54. path: openwrt/feeds/packages
  55. - name: Checkout luci feed
  56. uses: actions/checkout@v2
  57. with:
  58. repository: openwrt/luci
  59. path: openwrt/feeds/luci
  60. - name: Checkout routing feed
  61. uses: actions/checkout@v2
  62. with:
  63. repository: openwrt/routing
  64. path: openwrt/feeds/routing
  65. - name: Checkout telephony feed
  66. uses: actions/checkout@v2
  67. with:
  68. repository: openwrt/telephony
  69. path: openwrt/feeds/telephony
  70. - name: Fix permission
  71. run: |
  72. chown -R buildbot:buildbot openwrt
  73. - name: Initialization environment
  74. run: |
  75. TARGET=$(echo ${{ matrix.target }} | cut -d "/" -f 1)
  76. SUBTARGET=$(echo ${{ matrix.target }} | cut -d "/" -f 2)
  77. echo "TARGET=$TARGET" >> "$GITHUB_ENV"
  78. echo "SUBTARGET=$SUBTARGET" >> "$GITHUB_ENV"
  79. - name: Update & Install feeds
  80. shell: su buildbot -c "sh -e {0}"
  81. working-directory: openwrt
  82. run: |
  83. ./scripts/feeds update -a
  84. ./scripts/feeds install -a
  85. - name: Parse toolchain file
  86. working-directory: openwrt
  87. run: |
  88. TOOLCHAIN_STRING="$(curl "https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/sha256sums" \
  89. | grep ".*openwrt-toolchain.*tar.xz")"
  90. TOOLCHAIN_FILE=$(echo "$TOOLCHAIN_STRING" | sed -n -e 's/.*\(openwrt-toolchain.*\).tar.xz/\1/p')
  91. TOOLCHAIN_SHA256=$(echo "$TOOLCHAIN_STRING" | cut -d ' ' -f 1)
  92. echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
  93. echo "TOOLCHAIN_SHA256=$TOOLCHAIN_SHA256" >> "$GITHUB_ENV"
  94. - name: Cache external toolchain
  95. id: cache-external-toolchain
  96. uses: actions/cache@v3
  97. with:
  98. path: openwrt/${{ env.TOOLCHAIN_FILE }}
  99. key: ${{ env.TOOLCHAIN_FILE }}-${{ env.TOOLCHAIN_SHA256 }}
  100. - name: Download external toolchain
  101. if: ${{ steps.cache-external-toolchain.outputs.cache-hit != 'true' }}
  102. shell: su buildbot -c "sh -e {0}"
  103. working-directory: openwrt
  104. run: |
  105. wget -O - https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
  106. | tar --xz -xf -
  107. - name: Configure external toolchain
  108. shell: su buildbot -c "sh -e {0}"
  109. working-directory: openwrt
  110. run: |
  111. echo CONFIG_ALL_KMODS=y >> .config
  112. ./scripts/ext-toolchain.sh \
  113. --toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
  114. --overwrite-config \
  115. --config ${{ env.TARGET }}/${{ env.SUBTARGET }}
  116. make defconfig
  117. - name: Show configuration
  118. shell: su buildbot -c "sh -e {0}"
  119. working-directory: openwrt
  120. run: ./scripts/diffconfig.sh
  121. - name: Build tools
  122. shell: su buildbot -c "sh -e {0}"
  123. working-directory: openwrt
  124. run: make tools/install -j$(nproc) BUILD_LOG=1
  125. - name: Build toolchain
  126. shell: su buildbot -c "sh -e {0}"
  127. working-directory: openwrt
  128. run: make toolchain/install -j$(nproc) BUILD_LOG=1
  129. - name: Build Kernel
  130. shell: su buildbot -c "sh -e {0}"
  131. working-directory: openwrt
  132. run: make target/compile -j$(nproc) BUILD_LOG=1
  133. - name: Build Kernel Kmods
  134. shell: su buildbot -c "sh -e {0}"
  135. working-directory: openwrt
  136. run: make package/linux/compile -j$(nproc) BUILD_LOG=1
  137. - name: Upload logs
  138. if: failure()
  139. uses: actions/upload-artifact@v2
  140. with:
  141. name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs
  142. path: "openwrt/logs"