123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- 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
|