Browse Source

.github/workflows/gen-images.yml: refactor

for whatever reason, the old workflow was running out of space on the
runner. splitting it up into different jobs and combining it at the end
fixes that. not 100% optimal because it doesn't reüse the ROOTFS when
building PLATFORMFS and PLATFORMFS when building SBC images. I couldn't
think of a good way to do that if e.g. generating ROOTFSes was not
done in the ROOTFS step.

also add checkboxes for each kind of image to make it more ergonomic to
generate a subset of images while still keeping the default strings.
unfortunately, this means we're at the max number of inputs so something
will have to change if we reënable netboot images or something.
classabbyamp 1 year ago
parent
commit
adc2d6b54b
1 changed files with 261 additions and 55 deletions
  1. 261 55
      .github/workflows/gen-images.yml

+ 261 - 55
.github/workflows/gen-images.yml

@@ -7,11 +7,11 @@ on:
         description: "Override datecode for images"
         description: "Override datecode for images"
         required: false
         required: false
         type: string
         type: string
-      mirror:
-        description: "Mirror to use"
-        default: "https://repo-ci.voidlinux.org/current"
-        required: false
-        type: string
+      live_iso_flag:
+        description: "Build live ISOs"
+        default: true
+        required: true
+        type: boolean
       live_archs:
       live_archs:
         description: "Archs to build live ISOs for"
         description: "Archs to build live ISOs for"
         default: "x86_64 x86_64-musl i686"
         default: "x86_64 x86_64-musl i686"
@@ -22,16 +22,31 @@ on:
         default: "base xfce"
         default: "base xfce"
         required: false
         required: false
         type: string
         type: string
+      rootfs_flag:
+        description: "Build ROOTFSes"
+        default: true
+        required: true
+        type: boolean
       rootfs:
       rootfs:
         description: "Archs to build ROOTFSes for"
         description: "Archs to build ROOTFSes for"
         default: "x86_64 x86_64-musl i686 armv6l armv6l-musl armv7l armv7l-musl aarch64 aarch64-musl"
         default: "x86_64 x86_64-musl i686 armv6l armv6l-musl armv7l armv7l-musl aarch64 aarch64-musl"
         required: false
         required: false
         type: string
         type: string
+      platformfs_flag:
+        description: "Build PLATFORMFSes"
+        default: true
+        required: true
+        type: boolean
       platformfs:
       platformfs:
         description: "Platforms to build PLATFORMFSes for"
         description: "Platforms to build PLATFORMFSes for"
         default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl"
         default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl"
         required: false
         required: false
         type: string
         type: string
+      sbc_img_flag:
+        description: "Build SBC Images"
+        default: true
+        required: true
+        type: boolean
       sbc_imgs:
       sbc_imgs:
         description: "Platforms to build SBC images for"
         description: "Platforms to build SBC images for"
         default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl"
         default: "rpi-armv6l rpi-armv6l-musl rpi-armv7l rpi-armv7l-musl rpi-aarch64 rpi-aarch64-musl"
@@ -42,89 +57,280 @@ concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
   group: ${{ github.workflow }}-${{ github.ref }}
   cancel-in-progress: true
   cancel-in-progress: true
 
 
+defaults:
+  run:
+    shell: bash
+
 jobs:
 jobs:
-  build:
-    name: Build
+  prepare:
+    name: Prepare Environment
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
+    outputs:
+      datecode: ${{ steps.prep.outputs.datecode }}
+      revision: ${{ steps.prep.outputs.revision }}
+      mirror: ${{ steps.prep.outputs.mirror }}
 
 
-    defaults:
-      run:
-        shell: bash
+    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
+
+  build-live-isos:
+    name: Build Live ISOs
+    runs-on: ubuntu-latest
+    needs: prepare
+    if: ${{ inputs.live_iso_flag }}
 
 
     container:
     container:
-      image: 'ghcr.io/void-linux/void-linux:20230204RC01-full-x86_64'
+      image: 'ghcr.io/void-linux/void-glibc-full:20231230R1'
       options: --privileged
       options: --privileged
       volumes:
       volumes:
         - /dev:/dev
         - /dev:/dev
       env:
       env:
         PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
         PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/tmp/bin'
-        DATECODE: "${{ inputs.datecode }}"
-        LIVE_ARCHS: "${{ inputs.live_archs }}"
-        LIVE_FLAVORS: "${{ inputs.live_flavors }}"
-        ROOTFS_ARCHS: "${{ inputs.rootfs }}"
-        PLATFORMS: "${{ inputs.platformfs }}"
-        SBC_IMGS: "${{ inputs.sbc_imgs }}"
-        REPO: "${{ inputs.mirror }}"
+        MKLIVE_REV: "${{ needs.prepare.outputs.revision }}"
 
 
     steps:
     steps:
       - name: Prepare container
       - name: Prepare container
         shell: sh
         shell: sh
         run: |
         run: |
-          # Switch to repo-ci mirror
+          # Switch to mirror
           mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
           mkdir -p /etc/xbps.d && cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
-          sed -i 's|https://repo-default.voidlinux.org/current|'"$REPO"'|g' /etc/xbps.d/*-repository-*.conf
+          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
           # Sync and upgrade once, assume error comes from xbps update
           xbps-install -Syu || xbps-install -yu xbps
           xbps-install -Syu || xbps-install -yu xbps
           # Upgrade again (in case there was a xbps update)
           # Upgrade again (in case there was a xbps update)
           xbps-install -yu
           xbps-install -yu
           # Install depedencies
           # Install depedencies
           xbps-install -yu bash make git kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
           xbps-install -yu bash make git kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
-
       - name: Clone and checkout
       - name: Clone and checkout
         uses: classabbyamp/treeless-checkout-action@v1
         uses: classabbyamp/treeless-checkout-action@v1
-      - name: Prepare environment
-        run: |
-          echo "DATECODE=$(date -u "+%Y%m%d")" >> $GITHUB_ENV
-          echo "MKLIVE_REV=${GITHUB_SHA:0:8}" >> $GITHUB_ENV
+
       - name: Build live ISOs
       - name: Build live ISOs
         run: |
         run: |
-          if ! [[ "$LIVE_ARCHS" = "none" || "$LIVE_FLAVORS" = "none" ]]; then
-              make live-iso-all{-print,} \
-                  LIVE_ARCHS="$LIVE_ARCHS" LIVE_FLAVORS="$LIVE_FLAVORS" \
-                  SUDO= REPOSITORY="$REPO" DATECODE=$DATECODE
-          else
-              echo "Nothing to do..."
-          fi
+          make live-iso-all-print live-iso-all \
+            SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
+            DATECODE="${{ needs.prepare.outputs.datecode }}" \
+            LIVE_ARCHS="${{ inputs.live_archs }}" LIVE_FLAVORS="${{ inputs.live_flavors }}"
+
+      - 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-${{ 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 }}
+
+    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
+          # 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 kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
+      - name: Clone and checkout
+        uses: classabbyamp/treeless-checkout-action@v1
+
       - name: Build ROOTFSes
       - name: Build ROOTFSes
         run: |
         run: |
-          if ! [ "$ROOTFS_ARCHS" = "none" ]; then
-              make rootfs-all{-print,} \
-                  SUDO= ARCHS="$ROOTFS_ARCHS" REPOSITORY="$REPO" DATECODE=$DATECODE
-          else
-              echo "Nothing to do..."
-          fi
+          make rootfs-all-print rootfs-all \
+            SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
+            DATECODE="${{ needs.prepare.outputs.datecode }}" \
+            ARCHS="${{ inputs.rootfs }}"
+
+      - 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-${{ 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 }}
+
+    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
+          # 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 kmod xz lzo qemu-user-static outils dosfstools e2fsprogs
+      - name: Clone and checkout
+        uses: classabbyamp/treeless-checkout-action@v1
+
       - name: Build PLATFORMFSes
       - name: Build PLATFORMFSes
         run: |
         run: |
-          if ! [ "$PLATFORMS" = "none" ]; then
-              make platformfs-all{-print,} \
-                  SUDO= PLATFORMS="$PLATFORMS" REPOSITORY="$REPO" DATECODE=$DATECODE
-          else
-              echo "Nothing to do..."
-          fi
-      - name: Build SBC images
+          make platformfs-all-print platformfs-all \
+            SUDO= REPOSITORY="${{ needs.prepare.outputs.mirror }}" \
+            DATECODE="${{ needs.prepare.outputs.datecode }}" \
+            PLATFORMS="${{ inputs.platformfs }}"
+
+      - name: Prepare artifacts for upload
         run: |
         run: |
-          if ! [ "$SBC_IMGS" = "none" ]; then
-              make images-all-sbc{-print,} \
-                  SUDO= SBC_IMGS="$SBC_IMGS" REPOSITORY="$REPO" DATECODE=$DATECODE
-          else
-              echo "Nothing to do..."
-          fi
+          make dist DATECODE="${{ needs.prepare.outputs.datecode }}"
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v4
+        with:
+          name: void-platformfs-${{ 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 }}
+
+    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
+          # 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 kmod xz lzo qemu-user-static 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="${{ inputs.sbc_imgs }}"
+
+      - 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-${{ 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
       - name: Prepare artifacts for upload
         run: |
         run: |
-          make dist checksum DATECODE=$DATECODE
+          make checksum DATECODE="${{ needs.prepare.outputs.datecode }}"
       - name: Upload artifacts
       - name: Upload artifacts
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
         with:
-          name: void-live-${{ env.DATECODE }}
-          path: distdir-${{ env.DATECODE }}/*
+          name: void-live-${{ needs.prepare.outputs.datecode }}
+          path: |
+            distdir-${{ needs.prepare.outputs.datecode }}/*
           if-no-files-found: error
           if-no-files-found: error