diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 95a9b6d..9b0c603 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -117,6 +117,27 @@ jobs: echo "VERSION=${NEXT_VERSION}" >> $GITHUB_ENV echo "Next version to be published is: ${NEXT_VERSION}" + - name: Build RISC-V rootfs + id: build-riscv-rootfs + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile.riscv64_rootfs + push: false + load: true + platforms: linux/amd64 + tags: rootfs + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Convert rootfs to raw image + run: | + mkdir -p ./extracted + docker run --privileged --rm --volume ./riscv64/convert.sh:/convert.sh \ + --volume ./extracted:/to_extract --entrypoint /convert.sh rootfs + docker buildx prune --all --force + docker image rm rootfs + - name: Build and push Docker image for RISC-V id: build-and-push-riscv uses: docker/build-push-action@v6 diff --git a/riscv64/convert.sh b/riscv64/convert.sh new file mode 100755 index 0000000..c7d8f5f --- /dev/null +++ b/riscv64/convert.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -ex + +apt-get update + +DEBIAN_FRONTEND="noninteractive" apt-get install --no-install-recommends -y \ + qemu-utils + +TMP_MOUNT_DIR=tmp_mount_dir +ROOTFS_DIR=/opt/rootfs +EXTRACT_DIR=/to_extract + +# Move rootfs into image with raw format +qemu-img create $EXTRACT_DIR/rootfs.img 5G && mkfs.ext4 $EXTRACT_DIR/rootfs.img +mkdir $TMP_MOUNT_DIR +# This operation need `privileged` docker container +mount -o loop $EXTRACT_DIR/rootfs.img $TMP_MOUNT_DIR +mv $ROOTFS_DIR/* $TMP_MOUNT_DIR +umount $TMP_MOUNT_DIR +rmdir $TMP_MOUNT_DIR + +mv /root/.ssh $EXTRACT_DIR +# Enable docker builx to transfer into container +chmod 777 $EXTRACT_DIR/.ssh