kernel.yml 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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_FILE=$(curl "https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/sha256sums" \
  89. | sed -n -e 's/.*\(openwrt-toolchain.*\).tar.xz/\1/p')
  90. echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
  91. - name: Download external toolchain
  92. shell: su buildbot -c "sh -e {0}"
  93. working-directory: openwrt
  94. run: |
  95. wget -O - https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
  96. | tar --xz -xf -
  97. - name: Configure external toolchain
  98. shell: su buildbot -c "sh -e {0}"
  99. working-directory: openwrt
  100. run: |
  101. echo CONFIG_ALL_KMODS=y >> .config
  102. ./scripts/ext-toolchain.sh \
  103. --toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
  104. --overwrite-config \
  105. --config ${{ env.TARGET }}/${{ env.SUBTARGET }}
  106. make defconfig
  107. - name: Show configuration
  108. shell: su buildbot -c "sh -e {0}"
  109. working-directory: openwrt
  110. run: ./scripts/diffconfig.sh
  111. - name: Build tools
  112. shell: su buildbot -c "sh -e {0}"
  113. working-directory: openwrt
  114. run: make tools/install -j$(nproc) BUILD_LOG=1
  115. - name: Build toolchain
  116. shell: su buildbot -c "sh -e {0}"
  117. working-directory: openwrt
  118. run: make toolchain/install -j$(nproc) BUILD_LOG=1
  119. - name: Build Kernel
  120. shell: su buildbot -c "sh -e {0}"
  121. working-directory: openwrt
  122. run: make target/compile -j$(nproc) BUILD_LOG=1
  123. - name: Upload logs
  124. if: failure()
  125. uses: actions/upload-artifact@v2
  126. with:
  127. name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs
  128. path: "openwrt/logs"