Arch Chroot Test #16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Arch Chroot Test | |
| on: | |
| workflow_dispatch: | |
| jobs: | |
| arch-chroot: | |
| runs-on: ubuntu-latest | |
| env: | |
| AUR_MAINTAINER_NAME: envolution | |
| GIT_USERNAME: envolution | |
| ROOT: /home/runner/work/aur/aur | |
| ARCHROOT: /home/runner/work/aur/aur/arch-root | |
| WORKFLOWCMD: /tmp/workflowcmd.sh | |
| steps: | |
| - name: Maximize build space | |
| uses: easimon/maximize-build-space@master | |
| with: | |
| root-reserve-mb: 512 | |
| swap-size-mb: 1024 | |
| remove-dotnet: "true" | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Download Arch bootstrap | |
| run: | | |
| curl -sSLO https://iad.mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.zst | |
| tar --zstd -xf archlinux-bootstrap-x86_64.tar.zst --ignore-failed-read --warning=no-timestamp 2>/dev/null || true | |
| sudo mv root.x86_64 ${ARCHROOT} | |
| - name: Bind mounts | |
| run: | | |
| sudo mount --bind ${ARCHROOT} ${ARCHROOT} | |
| sudo mount --bind /dev ${ARCHROOT}/dev | |
| sudo mount --bind /proc ${ARCHROOT}/proc | |
| sudo mount --bind /sys ${ARCHROOT}/sys | |
| sudo mount --bind /run ${ARCHROOT}/run | |
| - name: Build | |
| run: | | |
| echo "Free space:" | |
| df -h | |
| ls -la ${ARCHROOT} | |
| - name: Test pacman | |
| run: | | |
| sudo chroot ${ARCHROOT} /bin/bash -c " | |
| echo ${GIT_USERNAME} | |
| echo 'Free space:' | |
| df -h | |
| " | |
| - name: Test pacman 2 | |
| run: | | |
| cat > ${ARCHROOT}/${WORKFLOWCMD} <<'EOF' | |
| echo "::group::Initialize pacman, Update System, and Configure Makepkg" | |
| echo "Initializing pacman keyring..." | |
| mkdir -p /etc/pacman.d/gnupg | |
| pacman-key --init | |
| pacman-key --populate archlinux | |
| echo "Enabling multilib repository..." | |
| echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf | |
| echo "Adding mirrors" | |
| echo -e "Server = https://geo.mirror.pkgbuild.com/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist | |
| echo -e "Server = https://mirror.rackspace.com/archlinux/\$repo/os/\$arch" >> /etc/pacman.d/mirrorlist | |
| echo "Updating system and installing core dependencies..." | |
| pacman -Sy --noconfirm --needed archlinux-keyring | |
| pacman -Syu --noconfirm | |
| echo "Installing necessary packages..." | |
| pacman -S --noconfirm --needed \ | |
| git base-devel pacman-contrib openssh github-cli jq expac \ | |
| ruby-rdoc ruby-pkg-config gnupg \ | |
| python python-pip \ | |
| pyalpm python-awesomeversion python-packaging python-lxml \ | |
| python-gobject python-requests libnotify nvchecker \ | |
| binutils multilib-devel python-aiohttp clang python-jq \ | |
| sudo | |
| echo "Configuring makepkg for parallel compilation..." | |
| # Check if MAKEFLAGS is already set and uncommented | |
| if grep -q -E '^#?\s*MAKEFLAGS=' /etc/makepkg.conf; then | |
| # If found (commented or uncommented), replace the line | |
| sed -i "s|^#*\s*MAKEFLAGS=.*|MAKEFLAGS=\"-j$(nproc)\"|g" /etc/makepkg.conf | |
| echo "Updated existing MAKEFLAGS in /etc/makepkg.conf." | |
| else | |
| # If not found, append it | |
| echo "MAKEFLAGS=\"-j$(nproc)\"" >> /etc/makepkg.conf | |
| echo "Appended MAKEFLAGS to /etc/makepkg.conf." | |
| fi | |
| echo "Current MAKEFLAGS setting in /etc/makepkg.conf:" | |
| grep --color=auto MAKEFLAGS /etc/makepkg.conf || echo "MAKEFLAGS not found after attempting to set." | |
| echo "::endgroup::" | |
| pacman -Sy --noconfirm | |
| pacman -Q pacman | |
| echo "$GIT_USERNAME" | |
| EOF | |
| chmod +x ${ARCHROOT}/${WORKFLOWCMD} | |
| sudo chroot ${ARCHROOT} ${WORKFLOWCMD} | |
| - name: Cleanup mounts | |
| if: always() | |
| run: | | |
| sudo umount ${ROOT}/arch-root/dev || true | |
| sudo umount ${ROOT}/arch-root/proc || true | |
| sudo umount ${ROOT}/arch-root/sys || true |