multi-arch-test-build.yml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. name: Test Build
  2. on:
  3. push:
  4. branches:
  5. - master
  6. - main
  7. pull_request:
  8. paths-ignore:
  9. - '**.md'
  10. jobs:
  11. build:
  12. name: Test ${{ matrix.arch }}
  13. runs-on: ubuntu-latest
  14. strategy:
  15. fail-fast: false
  16. matrix:
  17. include:
  18. - arch: arm_cortex-a9_vfpv3-d16
  19. target: mvebu-cortexa9
  20. - arch: mips_24kc
  21. target: ath79-generic
  22. - arch: mipsel_24kc
  23. target: mt7621
  24. - arch: aarch64_cortex-a53
  25. target: mvebu-cortexa53
  26. - arch: arm_cortex-a15_neon-vfpv4
  27. target: armvirt-32
  28. - arch: i386_pentium-mmx
  29. target: x86-geode
  30. - arch: x86_64
  31. target: x86-64
  32. steps:
  33. - name: Free Disk Space
  34. uses: jlumbroso/free-disk-space@main
  35. with:
  36. tool-cache: true
  37. android: true
  38. dotnet: true
  39. haskell: true
  40. large-packages: true
  41. docker-images: true
  42. swap-storage: true
  43. - uses: actions/checkout@v4
  44. with:
  45. fetch-depth: 0
  46. - name: Determine branch name
  47. run: |
  48. if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
  49. BRANCH="${GITHUB_BASE_REF#refs/heads/}"
  50. else
  51. BRANCH="${GITHUB_REF#refs/heads/}"
  52. fi
  53. echo "Building for $BRANCH"
  54. echo "BRANCH=$BRANCH" >> $GITHUB_ENV
  55. - name: Determine changed packages
  56. run: |
  57. # only detect packages with changes
  58. PKG_ROOTS=$(find . -name Makefile | \
  59. grep -v ".*/src/Makefile" | \
  60. sed -e 's@./\(.*\)/Makefile@\1/@')
  61. if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
  62. BASE_REF="origin/${BRANCH}"
  63. else
  64. BASE_REF="HEAD^"
  65. fi
  66. CHANGES=$(git diff --diff-filter=d --name-only $BASE_REF HEAD)
  67. PACKAGES=""
  68. for ROOT in $PKG_ROOTS; do
  69. for CHANGE in $CHANGES; do
  70. if [[ "$CHANGE" == "$ROOT"* ]]; then
  71. PACKAGE_NAME=$(echo "$ROOT" | sed -e 's@\(.*\)/@\1@')
  72. PACKAGES="$PACKAGES $PACKAGE_NAME"
  73. break
  74. fi
  75. done
  76. done
  77. # fallback to test packages if nothing explicitly changes
  78. PACKAGES="${PACKAGES:-luci-app-ssr-plus}"
  79. # clear spaces
  80. PACKAGES=$(echo $PACKAGES | xargs)
  81. echo "Building $PACKAGES"
  82. echo "PACKAGES=$PACKAGES" >> $GITHUB_ENV
  83. - name: Build
  84. uses: immortalwrt/gh-action-sdk@v7
  85. env:
  86. ARCH: ${{ matrix.arch }}
  87. FEEDNAME: packages_ci
  88. V: s
  89. target: ${{ matrix.target }}
  90. packages: ${{ env.PACKAGES }}
  91. - name: Move created packages to project dir
  92. run: cp bin/packages/${{ matrix.arch }}/packages_ci/*.ipk . || true
  93. - name: Collect metadata
  94. run: |
  95. MERGE_ID=$(git rev-parse --short HEAD)
  96. if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
  97. BASE_ID=$(git rev-parse --short origin/$BRANCH)
  98. HEAD_ID=$(git rev-parse --short HEAD)
  99. PRNUMBER=${GITHUB_REF_NAME%/merge}
  100. else
  101. BASE_ID=$(git rev-parse --short HEAD^)
  102. HEAD_ID=$MERGE_ID
  103. PRNUMBER="push-$MERGE_ID"
  104. fi
  105. echo "MERGE_ID=$MERGE_ID" >> $GITHUB_ENV
  106. echo "BASE_ID=$BASE_ID" >> $GITHUB_ENV
  107. echo "HEAD_ID=$HEAD_ID" >> $GITHUB_ENV
  108. echo "PRNUMBER=$PRNUMBER" >> $GITHUB_ENV
  109. echo "ARCHIVE_NAME=${{ matrix.arch }}-$PRNUMBER" >> $GITHUB_ENV
  110. - name: Generate metadata
  111. run: |
  112. shopt -s nullglob
  113. IPKS=( *.ipk )
  114. cat << EOF > PKG-INFO
  115. Metadata-Version: 2.1
  116. Name: ${{ env.ARCHIVE_NAME }}
  117. Version: $BRANCH
  118. Author: $GITHUB_ACTOR
  119. Home-page: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY
  120. Download-URL: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
  121. Summary: $PACKAGES
  122. Platform: ${{ matrix.arch }}
  123. Packages for ImmortalWrt $BRANCH running on ${{ matrix.arch }}, built from $PRNUMBER
  124. at commit $HEAD_ID, against $BRANCH at commit $BASE_ID.
  125. Modified packages:
  126. EOF
  127. for p in $PACKAGES; do
  128. echo " $p" >> PKG-INFO
  129. done
  130. echo >> PKG-INFO
  131. echo "Package count: ${#IPKS[@]}" >> PKG-INFO
  132. echo "Package size summary:" >> PKG-INFO
  133. for f in "${IPKS[@]}"; do
  134. du -sh "$f" >> PKG-INFO
  135. done
  136. if [ ${#IPKS[@]} -eq 0 ]; then
  137. echo "No packages built." >> PKG-INFO
  138. fi
  139. cat PKG-INFO
  140. - name: Store packages
  141. uses: actions/upload-artifact@v4
  142. with:
  143. name: ${{ env.ARCHIVE_NAME }}-packages
  144. path: |
  145. Packages
  146. Packages.*
  147. *.ipk
  148. PKG-INFO
  149. - name: Store logs
  150. uses: actions/upload-artifact@v4
  151. with:
  152. name: ${{ env.ARCHIVE_NAME }}-logs
  153. path: |
  154. logs/
  155. PKG-INFO