name: Build void images on: workflow_dispatch: inputs: datecode: description: "Override datecode for images" required: false type: string live_iso_flag: description: "Build live ISOs" default: true required: true type: boolean live_archs: description: "Archs to build live ISOs for" default: "x86_64 x86_64-musl i686 aarch64 aarch64-musl" required: false type: string live_flavors: description: "Flavors to build live ISOs for" default: "base xfce" required: false type: string rootfs_flag: description: "Build ROOTFSes" default: true required: true type: boolean rootfs: description: "Archs to build ROOTFSes for" default: "x86_64 x86_64-musl i686 armv6l armv6l-musl armv7l armv7l-musl aarch64 aarch64-musl" required: false type: string platformfs_flag: description: "Build PLATFORMFSes" default: true required: true type: boolean platformfs: description: "Platforms to build PLATFORMFSes for" default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl" required: false type: string sbc_img_flag: description: "Build SBC Images" default: true required: true type: boolean sbc_imgs: description: "Platforms to build SBC images for" default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl" required: false type: string concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true defaults: run: shell: bash jobs: prepare: name: Prepare Environment runs-on: ubuntu-latest outputs: datecode: ${{ steps.prep.outputs.datecode }} revision: ${{ steps.prep.outputs.revision }} mirror: ${{ steps.prep.outputs.mirror }} live_archs: ${{ steps.prep.outputs.live_archs }} live_flavors: ${{ steps.prep.outputs.live_flavors }} rootfs: ${{ steps.prep.outputs.rootfs }} platformfs: ${{ steps.prep.outputs.platformfs }} sbc_imgs: ${{ steps.prep.outputs.sbc_imgs }} steps: - name: Prepare Environment id: prep run: | if [ -z "${{ inputs.datecode }}" ]; then echo "datecode=$(date -u "+%Y%m%d")" >> $GITHUB_OUTPUT else echo "datecode=${{ inputs.datecode }}" >> $GITHUB_OUTPUT fi echo "revision=${GITHUB_SHA:0:8}" >> $GITHUB_OUTPUT echo "mirror=https://repo-ci.voidlinux.org/current" >> $GITHUB_OUTPUT jsonify() { sed 's/\s\+/ /g' | jq -Rrc 'split(" ")' } echo "live_archs=$(echo "${{ inputs.live_archs }}" | jsonify)" >> $GITHUB_OUTPUT echo "live_flavors=$(echo "${{ inputs.live_flavors }}" | jsonify)" >> $GITHUB_OUTPUT echo "rootfs=$(echo "${{ inputs.rootfs }}" | jsonify)" >> $GITHUB_OUTPUT echo "platformfs=$(echo "${{ inputs.platformfs }}" | jsonify)" >> $GITHUB_OUTPUT echo "sbc_imgs=$(echo "${{ inputs.sbc_imgs }}" | jsonify)" >> $GITHUB_OUTPUT build-live-isos: name: Build Live ISOs runs-on: ubuntu-latest needs: prepare if: ${{ inputs.live_iso_flag }} strategy: matrix: arch: ${{ fromJson(needs.prepare.outputs.live_archs) }} flavor: ${{ fromJson(needs.prepare.outputs.live_flavors) }} container: image: 'ghcr.io/void-linux/void-glibc-full:20231230R1' options: --privileged volumes: - /dev:/dev env: PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin' MKLIVE_REV: "${{ needs.prepare.outputs.revision }}" steps: - name: Prepare container shell: sh run: | # Switch to mirror mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/ sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \ /etc/xbps.d/*-repository-*.conf xbps-install -Syu xbps && xbps-install -yu xbps-install -yu bash make git kmod xz lzo qemu-user-aarch64 binfmt-support outils dosfstools e2fsprogs - name: Clone and checkout uses: classabbyamp/treeless-checkout-action@v1 - name: Build live ISOs run: | make live-iso-all-print live-iso-all \ SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \ DATECODE="${{ needs.prepare.outputs.datecode }}" \ LIVE_ARCHS="${{ matrix.arch }}" LIVE_FLAVORS="${{ matrix.flavor }}" - name: Prepare artifacts for upload run: | make dist DATECODE="${{ needs.prepare.outputs.datecode }}" - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: void-iso-${{ matrix.arch }}-${{ matrix.flavor }}-${{ needs.prepare.outputs.datecode }} path: | distdir-${{ needs.prepare.outputs.datecode }}/* if-no-files-found: error build-rootfs: name: Build ROOTFSes runs-on: ubuntu-latest needs: prepare if: ${{ inputs.rootfs_flag }} strategy: matrix: arch: ${{ fromJson(needs.prepare.outputs.rootfs) }} container: image: 'ghcr.io/void-linux/void-glibc-full:20231230R1' options: --privileged volumes: - /dev:/dev env: PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin' MKLIVE_REV: "${{ needs.prepare.outputs.revision }}" steps: - name: Prepare container shell: sh run: | # Switch to mirror mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/ sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \ /etc/xbps.d/*-repository-*.conf xbps-install -Syu xbps && xbps-install -yu xbps-install -yu bash make git kmod xz lzo qemu-user-arm qemu-user-aarch64 binfmt-support outils dosfstools e2fsprogs - name: Clone and checkout uses: classabbyamp/treeless-checkout-action@v1 - name: Build ROOTFSes run: | make rootfs-all-print rootfs-all \ SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \ DATECODE="${{ needs.prepare.outputs.datecode }}" \ ARCHS="${{ matrix.arch }}" - name: Prepare artifacts for upload run: | make dist DATECODE="${{ needs.prepare.outputs.datecode }}" - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: void-rootfs-${{ matrix.arch }}-${{ needs.prepare.outputs.datecode }} path: | distdir-${{ needs.prepare.outputs.datecode }}/* if-no-files-found: error build-platformfs: name: Build PLATFORMFSes runs-on: ubuntu-latest needs: prepare if: ${{ inputs.platformfs_flag }} strategy: matrix: platform: ${{ fromJson(needs.prepare.outputs.platformfs) }} container: image: 'ghcr.io/void-linux/void-glibc-full:20231230R1' options: --privileged volumes: - /dev:/dev env: PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin' MKLIVE_REV: "${{ needs.prepare.outputs.revision }}" steps: - name: Prepare container shell: sh run: | # Switch to mirror mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/ sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \ /etc/xbps.d/*-repository-*.conf xbps-install -Syu xbps && xbps-install -yu xbps-install -yu bash make git kmod xz lzo qemu-user-arm qemu-user-aarch64 binfmt-support outils dosfstools e2fsprogs - name: Clone and checkout uses: classabbyamp/treeless-checkout-action@v1 - name: Build PLATFORMFSes run: | make platformfs-all-print platformfs-all \ SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \ DATECODE="${{ needs.prepare.outputs.datecode }}" \ PLATFORMS="${{ matrix.platform }}" - name: Prepare artifacts for upload run: | make dist DATECODE="${{ needs.prepare.outputs.datecode }}" - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: void-platformfs-${{ matrix.platform }}-${{ needs.prepare.outputs.datecode }} path: | distdir-${{ needs.prepare.outputs.datecode }}/* !distdir-${{ needs.prepare.outputs.datecode }}/*ROOTFS* if-no-files-found: error build-sbc-img: name: Build SBC Images runs-on: ubuntu-latest needs: prepare if: ${{ inputs.sbc_img_flag }} strategy: matrix: platform: ${{ fromJson(needs.prepare.outputs.sbc_imgs) }} container: image: 'ghcr.io/void-linux/void-glibc-full:20231230R1' options: --privileged volumes: - /dev:/dev env: PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin' MKLIVE_REV: "${{ needs.prepare.outputs.revision }}" steps: - name: Prepare container shell: sh run: | # Switch to mirror mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/ sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \ /etc/xbps.d/*-repository-*.conf xbps-install -Syu xbps && xbps-install -yu xbps-install -yu bash make git kmod xz lzo qemu-user-arm qemu-user-aarch64 binfmt-support outils dosfstools e2fsprogs - name: Clone and checkout uses: classabbyamp/treeless-checkout-action@v1 - name: Build SBC Images run: | make images-all-sbc-print images-all-sbc \ SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \ DATECODE="${{ needs.prepare.outputs.datecode }}" \ SBC_IMGS="${{ matrix.platform }}" - name: Prepare artifacts for upload run: | make dist DATECODE="${{ needs.prepare.outputs.datecode }}" - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: void-sbc-img-${{ matrix.platform }}-${{ needs.prepare.outputs.datecode }} path: | distdir-${{ needs.prepare.outputs.datecode }}/* !distdir-${{ needs.prepare.outputs.datecode }}/*ROOTFS* !distdir-${{ needs.prepare.outputs.datecode }}/*PLATFORMFS* if-no-files-found: error merge-artifacts: name: Combine artifacts runs-on: ubuntu-latest if: ${{ always() }} needs: - prepare - build-live-isos - build-rootfs - build-platformfs - build-sbc-img container: image: 'ghcr.io/void-linux/void-glibc-full:20231230R1' env: PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin' MKLIVE_REV: "${{ needs.prepare.outputs.revision }}" steps: - name: Prepare container shell: sh run: | # Switch to mirror mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/ sed -i 's|https://repo-default.voidlinux.org/current|'"${{ needs.prepare.outputs.mirror }}"'|g' \ /etc/xbps.d/*-repository-*.conf # Sync and upgrade once, assume error comes from xbps update xbps-install -Syu || xbps-install -yu xbps # Upgrade again (in case there was a xbps update) xbps-install -yu # Install depedencies xbps-install -yu bash make git outils - name: Clone and checkout uses: classabbyamp/treeless-checkout-action@v1 - name: Download artifacts uses: actions/download-artifact@v4 with: path: distdir-${{ needs.prepare.outputs.datecode }} merge-multiple: true - name: Prepare artifacts for upload run: | make checksum DATECODE="${{ needs.prepare.outputs.datecode }}" - name: Upload artifacts id: upload uses: actions/upload-artifact@v4 with: name: void-live-${{ needs.prepare.outputs.datecode }} path: | distdir-${{ needs.prepare.outputs.datecode }}/* if-no-files-found: error - name: Generate summary run: | cat << EOF >> "$GITHUB_STEP_SUMMARY" ## Images generated successfully! ### Download 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 }}). ### Checksums \`\`\` $(cat distdir-${{ needs.prepare.outputs.datecode }}/sha256sum.txt) \`\`\` EOF