gen-images.yml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. name: Build void images
  2. on:
  3. workflow_dispatch:
  4. inputs:
  5. datecode:
  6. description: "Override datecode for images"
  7. required: false
  8. type: string
  9. live_iso_flag:
  10. description: "Build live ISOs"
  11. default: true
  12. required: true
  13. type: boolean
  14. live_archs:
  15. description: "Archs to build live ISOs for"
  16. default: "x86_64 x86_64-musl i686"
  17. required: false
  18. type: string
  19. live_flavors:
  20. description: "Flavors to build live ISOs for"
  21. default: "base xfce"
  22. required: false
  23. type: string
  24. rootfs_flag:
  25. description: "Build ROOTFSes"
  26. default: true
  27. required: true
  28. type: boolean
  29. rootfs:
  30. description: "Archs to build ROOTFSes for"
  31. default: "x86_64 x86_64-musl i686 armv6l armv6l-musl armv7l armv7l-musl aarch64 aarch64-musl"
  32. required: false
  33. type: string
  34. platformfs_flag:
  35. description: "Build PLATFORMFSes"
  36. default: true
  37. required: true
  38. type: boolean
  39. platformfs:
  40. description: "Platforms to build PLATFORMFSes for"
  41. default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl"
  42. required: false
  43. type: string
  44. sbc_img_flag:
  45. description: "Build SBC Images"
  46. default: true
  47. required: true
  48. type: boolean
  49. sbc_imgs:
  50. description: "Platforms to build SBC images for"
  51. default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl"
  52. required: false
  53. type: string
  54. concurrency:
  55. group: ${{ github.workflow }}-${{ github.ref }}
  56. cancel-in-progress: true
  57. defaults:
  58. run:
  59. shell: bash
  60. jobs:
  61. prepare:
  62. name: Prepare Environment
  63. runs-on: ubuntu-latest
  64. outputs:
  65. datecode: ${{ steps.prep.outputs.datecode }}
  66. revision: ${{ steps.prep.outputs.revision }}
  67. mirror: ${{ steps.prep.outputs.mirror }}
  68. steps:
  69. - name: Prepare Environment
  70. id: prep
  71. run: |
  72. if [ -z "${{ inputs.datecode }}" ]; then
  73. echo "datecode=$(date -u "+%Y%m%d")" >> $GITHUB_OUTPUT
  74. else
  75. echo "datecode=${{ inputs.datecode }}" >> $GITHUB_OUTPUT
  76. fi
  77. echo "revision=${GITHUB_SHA:0:8}" >> $GITHUB_OUTPUT
  78. echo "mirror=https://repo-ci.voidlinux.org/current" >> $GITHUB_OUTPUT
  79. build-live-isos:
  80. name: Build Live ISOs
  81. runs-on: ubuntu-latest
  82. needs: prepare
  83. if: ${{ inputs.live_iso_flag }}
  84. container:
  85. image: 'ghcr.io/void-linux/void-glibc-full:20231230R1'
  86. options: --privileged
  87. volumes:
  88. - /dev:/dev
  89. env:
  90. PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
  91. MKLIVE_REV: "${{ needs.prepare.outputs.revision }}"
  92. steps:
  93. - name: Prepare container
  94. shell: sh
  95. run: |
  96. # Switch to mirror
  97. mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
  98. sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \
  99. /etc/xbps.d/*-repository-*.conf
  100. # Sync and upgrade once, assume error comes from xbps update
  101. xbps-install -Syu || xbps-install -yu xbps
  102. # Upgrade again (in case there was a xbps update)
  103. xbps-install -yu
  104. # Install depedencies
  105. xbps-install -yu bash make git kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
  106. - name: Clone and checkout
  107. uses: classabbyamp/treeless-checkout-action@v1
  108. - name: Build live ISOs
  109. run: |
  110. make live-iso-all-print live-iso-all \
  111. SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
  112. DATECODE="${{ needs.prepare.outputs.datecode }}" \
  113. LIVE_ARCHS="${{ inputs.live_archs }}" LIVE_FLAVORS="${{ inputs.live_flavors }}"
  114. - name: Prepare artifacts for upload
  115. run: |
  116. make dist DATECODE="${{ needs.prepare.outputs.datecode }}"
  117. - name: Upload artifacts
  118. uses: actions/upload-artifact@v4
  119. with:
  120. name: void-iso-${{ needs.prepare.outputs.datecode }}
  121. path: |
  122. distdir-${{ needs.prepare.outputs.datecode }}/*
  123. if-no-files-found: error
  124. build-rootfs:
  125. name: Build ROOTFSes
  126. runs-on: ubuntu-latest
  127. needs: prepare
  128. if: ${{ inputs.rootfs_flag }}
  129. container:
  130. image: 'ghcr.io/void-linux/void-glibc-full:20231230R1'
  131. options: --privileged
  132. volumes:
  133. - /dev:/dev
  134. env:
  135. PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
  136. MKLIVE_REV: "${{ needs.prepare.outputs.revision }}"
  137. steps:
  138. - name: Prepare container
  139. shell: sh
  140. run: |
  141. # Switch to mirror
  142. mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
  143. sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \
  144. /etc/xbps.d/*-repository-*.conf
  145. # Sync and upgrade once, assume error comes from xbps update
  146. xbps-install -Syu || xbps-install -yu xbps
  147. # Upgrade again (in case there was a xbps update)
  148. xbps-install -yu
  149. # Install depedencies
  150. xbps-install -yu bash make git kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
  151. - name: Clone and checkout
  152. uses: classabbyamp/treeless-checkout-action@v1
  153. - name: Build ROOTFSes
  154. run: |
  155. make rootfs-all-print rootfs-all \
  156. SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
  157. DATECODE="${{ needs.prepare.outputs.datecode }}" \
  158. ARCHS="${{ inputs.rootfs }}"
  159. - name: Prepare artifacts for upload
  160. run: |
  161. make dist DATECODE="${{ needs.prepare.outputs.datecode }}"
  162. - name: Upload artifacts
  163. uses: actions/upload-artifact@v4
  164. with:
  165. name: void-rootfs-${{ needs.prepare.outputs.datecode }}
  166. path: |
  167. distdir-${{ needs.prepare.outputs.datecode }}/*
  168. if-no-files-found: error
  169. build-platformfs:
  170. name: Build PLATFORMFSes
  171. runs-on: ubuntu-latest
  172. needs: prepare
  173. if: ${{ inputs.platformfs_flag }}
  174. container:
  175. image: 'ghcr.io/void-linux/void-glibc-full:20231230R1'
  176. options: --privileged
  177. volumes:
  178. - /dev:/dev
  179. env:
  180. PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
  181. MKLIVE_REV: "${{ needs.prepare.outputs.revision }}"
  182. steps:
  183. - name: Prepare container
  184. shell: sh
  185. run: |
  186. # Switch to mirror
  187. mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
  188. sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \
  189. /etc/xbps.d/*-repository-*.conf
  190. # Sync and upgrade once, assume error comes from xbps update
  191. xbps-install -Syu || xbps-install -yu xbps
  192. # Upgrade again (in case there was a xbps update)
  193. xbps-install -yu
  194. # Install depedencies
  195. xbps-install -yu bash make git kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
  196. - name: Clone and checkout
  197. uses: classabbyamp/treeless-checkout-action@v1
  198. - name: Build PLATFORMFSes
  199. run: |
  200. make platformfs-all-print platformfs-all \
  201. SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
  202. DATECODE="${{ needs.prepare.outputs.datecode }}" \
  203. PLATFORMS="${{ inputs.platformfs }}"
  204. - name: Prepare artifacts for upload
  205. run: |
  206. make dist DATECODE="${{ needs.prepare.outputs.datecode }}"
  207. - name: Upload artifacts
  208. uses: actions/upload-artifact@v4
  209. with:
  210. name: void-platformfs-${{ needs.prepare.outputs.datecode }}
  211. path: |
  212. distdir-${{ needs.prepare.outputs.datecode }}/*
  213. !distdir-${{ needs.prepare.outputs.datecode }}/*ROOTFS*
  214. if-no-files-found: error
  215. build-sbc-img:
  216. name: Build SBC Images
  217. runs-on: ubuntu-latest
  218. needs: prepare
  219. if: ${{ inputs.sbc_img_flag }}
  220. container:
  221. image: 'ghcr.io/void-linux/void-glibc-full:20231230R1'
  222. options: --privileged
  223. volumes:
  224. - /dev:/dev
  225. env:
  226. PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
  227. MKLIVE_REV: "${{ needs.prepare.outputs.revision }}"
  228. steps:
  229. - name: Prepare container
  230. shell: sh
  231. run: |
  232. # Switch to mirror
  233. mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
  234. sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \
  235. /etc/xbps.d/*-repository-*.conf
  236. # Sync and upgrade once, assume error comes from xbps update
  237. xbps-install -Syu || xbps-install -yu xbps
  238. # Upgrade again (in case there was a xbps update)
  239. xbps-install -yu
  240. # Install depedencies
  241. xbps-install -yu bash make git kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
  242. - name: Clone and checkout
  243. uses: classabbyamp/treeless-checkout-action@v1
  244. - name: Build SBC Images
  245. run: |
  246. make images-all-sbc-print images-all-sbc \
  247. SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
  248. DATECODE="${{ needs.prepare.outputs.datecode }}" \
  249. SBC_IMGS="${{ inputs.sbc_imgs }}"
  250. - name: Prepare artifacts for upload
  251. run: |
  252. make dist DATECODE="${{ needs.prepare.outputs.datecode }}"
  253. - name: Upload artifacts
  254. uses: actions/upload-artifact@v4
  255. with:
  256. name: void-sbc-img-${{ needs.prepare.outputs.datecode }}
  257. path: |
  258. distdir-${{ needs.prepare.outputs.datecode }}/*
  259. !distdir-${{ needs.prepare.outputs.datecode }}/*ROOTFS*
  260. !distdir-${{ needs.prepare.outputs.datecode }}/*PLATFORMFS*
  261. if-no-files-found: error
  262. merge-artifacts:
  263. name: Combine artifacts
  264. runs-on: ubuntu-latest
  265. if: ${{ always() }}
  266. needs:
  267. - prepare
  268. - build-live-isos
  269. - build-rootfs
  270. - build-platformfs
  271. - build-sbc-img
  272. container:
  273. image: 'ghcr.io/void-linux/void-glibc-full:20231230R1'
  274. env:
  275. PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
  276. MKLIVE_REV: "${{ needs.prepare.outputs.revision }}"
  277. steps:
  278. - name: Prepare container
  279. shell: sh
  280. run: |
  281. # Switch to mirror
  282. mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
  283. sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \
  284. /etc/xbps.d/*-repository-*.conf
  285. # Sync and upgrade once, assume error comes from xbps update
  286. xbps-install -Syu || xbps-install -yu xbps
  287. # Upgrade again (in case there was a xbps update)
  288. xbps-install -yu
  289. # Install depedencies
  290. xbps-install -yu bash make git outils
  291. - name: Clone and checkout
  292. uses: classabbyamp/treeless-checkout-action@v1
  293. - name: Download artifacts
  294. uses: actions/download-artifact@v4
  295. with:
  296. path: distdir-${{ needs.prepare.outputs.datecode }}
  297. merge-multiple: true
  298. - name: Prepare artifacts for upload
  299. run: |
  300. make checksum DATECODE="${{ needs.prepare.outputs.datecode }}"
  301. - name: Upload artifacts
  302. id: upload
  303. uses: actions/upload-artifact@v4
  304. with:
  305. name: void-live-${{ needs.prepare.outputs.datecode }}
  306. path: |
  307. distdir-${{ needs.prepare.outputs.datecode }}/*
  308. if-no-files-found: error
  309. - name: Generate summary
  310. run: |
  311. cat << EOF >> "$GITHUB_STEP_SUMMARY"
  312. ## Images generated successfully!
  313. ### Download
  314. Download the result of this run with \`./release.sh dl ${{ github.run_id }} -- -R ${{ github.repository }}\` or use [this url](${{ steps.upload.outputs.artifact-url }}).
  315. ### Checksums
  316. \`\`\`
  317. $(cat distdir-${{ needs.prepare.outputs.datecode }}/sha256sum.txt)
  318. \`\`\`
  319. EOF