mirror of
https://github.com/armbian/scripts.git
synced 2026-01-06 10:32:48 -08:00
298 lines
11 KiB
YAML
298 lines
11 KiB
YAML
name: Build test images with Docker
|
|
|
|
on:
|
|
|
|
workflow_dispatch:
|
|
workflow_call:
|
|
inputs:
|
|
reference:
|
|
required: true
|
|
type: string
|
|
runner:
|
|
required: true
|
|
type: string
|
|
|
|
jobs:
|
|
|
|
gradle:
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
max-parallel: 8
|
|
matrix:
|
|
board: [uefi-x86]
|
|
release: ["bullseye","sid","jammy","kinetic"]
|
|
|
|
name: Make
|
|
runs-on: ${{ inputs.runner }}
|
|
outputs:
|
|
desktop: ${{steps.list_dirs.outputs.desktop}}
|
|
steps:
|
|
|
|
- name: Runner prepare
|
|
uses: armbian/actions/runner-prepare@main
|
|
|
|
- name: Read values
|
|
run: |
|
|
|
|
DISTRO=$(echo ${{ matrix.target }} | cut -d":" -f1)
|
|
RELEASE=$(echo ${{ matrix.target }} | cut -d":" -f2)
|
|
COMPILER=$(echo ${{ matrix.target }} | cut -d":" -f3)
|
|
|
|
DOCKER_DISTRO=$DISTRO
|
|
DOCKER_RELEASE=$RELEASE
|
|
DOCKER_COMPILER=$COMPILER
|
|
|
|
BOARD=${{ matrix.board }}
|
|
|
|
# Bullseye can't build even itself
|
|
if [[ "$RELEASE" == "bullseye" ]]; then
|
|
DOCKER_DISTRO="ubuntu"
|
|
DOCKER_RELEASE="jammy"
|
|
DOCKER_COMPILER="12"
|
|
fi
|
|
|
|
if [[ "$DISTRO" == "debian" ]] && [[ "$BOARD" == "rpi4b" ]]; then
|
|
echo "SKIP=yes" >> $GITHUB_ENV
|
|
fi
|
|
|
|
# export to environment
|
|
echo "RELEASE=$RELEASE" >> $GITHUB_ENV
|
|
echo "BOARD=$BOARD" >> $GITHUB_ENV
|
|
echo "COMPILER=$COMPILER" >> $GITHUB_ENV
|
|
echo "DESKTOP=${{ matrix.desktop }}" >> $GITHUB_ENV
|
|
|
|
echo "DOCKER_DISTRO=$DOCKER_DISTRO" >> $GITHUB_ENV
|
|
echo "DOCKER_RELEASE=$DOCKER_RELEASE" >> $GITHUB_ENV
|
|
echo "DOCKER_COMPILER=$DOCKER_COMPILER" >> $GITHUB_ENV
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3.1.0
|
|
with:
|
|
fetch-depth: 1
|
|
repository: armbian/build
|
|
path: build
|
|
|
|
- name: Checkout support scripts
|
|
uses: actions/checkout@v3.1.0
|
|
with:
|
|
fetch-depth: 1
|
|
repository: armbian/scripts
|
|
path: scripts
|
|
|
|
- name: Sync
|
|
run: |
|
|
|
|
mkdir -p build/userpatches
|
|
sudo cp scripts/configs/lib.config build/userpatches/
|
|
sudo cp scripts/configs/config-default.conf build/userpatches/
|
|
|
|
- name: Pull Docker image
|
|
run: |
|
|
|
|
sudo docker pull ghcr.io/armbian/build:latest"-jammy-$(dpkg --print-architecture)"
|
|
|
|
- name: Build test image
|
|
if: ${{ env.SKIP != 'yes' }}
|
|
run: |
|
|
|
|
cd build
|
|
|
|
# framework init
|
|
./compile.sh \
|
|
JUST_INIT="yes" \
|
|
OFFLINE_WORK="yes" \
|
|
BRANCH=current \
|
|
RELEASE=focal \
|
|
BUILD_MINIMAL=yes \
|
|
BUILD_DESKTOP=no \
|
|
KERNEL_ONLY=no \
|
|
KERNEL_CONFIGURE=no \
|
|
BOARD="zeropi" \
|
|
NO_HOST_RELEASE_CHECK="yes"
|
|
|
|
# change template
|
|
sudo sed -i "s/^#DOCKER_FLAGS+=(--privileged)/DOCKER_FLAGS+=(--privileged)/" userpatches/config-docker.conf
|
|
#sudo sed -i "s/^ARM_GCC_COMPILER=.*/ARM_GCC_COMPILER=g++-${{ env.DOCKER_COMPILER }}-arm-linux-gnueabihf/" userpatches/config-docker.conf
|
|
sudo sed -i "s/^BASE_IMAGE=.*/BASE_IMAGE=ubuntu:jammy/" userpatches/config-docker.conf
|
|
sudo sed -i "s/^VERSION=.*/VERSION=latest\"-\$(echo \${BASE_IMAGE} \| cut -d\":\" -f2)-\$(dpkg --print-architecture)\"/" userpatches/config-docker.conf
|
|
sudo sed -i 's/armbian:/ghcr.io\/armbian\/build:/g' userpatches/config-docker.conf
|
|
sudo sed -i "s/ -it/ -i/" userpatches/config-docker.conf
|
|
|
|
export TERM=dumb
|
|
touch .ignore_changes
|
|
./compile.sh docker \
|
|
JUST_INIT="no" \
|
|
OFFLINE_WORK="no" \
|
|
BETA=yes \
|
|
EXPERT=yes \
|
|
BOARD=${{ matrix.board }} \
|
|
BRANCH=current \
|
|
RELEASE=${{ matrix.release }} \
|
|
BUILD_MINIMAL=no \
|
|
BUILD_DESKTOP=no \
|
|
KERNEL_CONFIGURE=prebuilt \
|
|
IGNORE_UPDATES=yes \
|
|
REPOSITORY_INSTALL="u-boot,kernel" \
|
|
COMPRESS_OUTPUTIMAGE="yes" \
|
|
SKIP_EXTERNAL_TOOLCHAINS=yes \
|
|
|
|
- name: Upload artefacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: "${{ matrix.board }}-${{ matrix.release }}"
|
|
path: build/output/images/*
|
|
if-no-files-found: error
|
|
retention-days: 7
|
|
|
|
- name: Read
|
|
id: list_dirs
|
|
run: |
|
|
RELEASE=$(echo ${{ matrix.target }} | cut -d":" -f2)
|
|
echo ${{ matrix.target }}
|
|
echo ${RELEASE}
|
|
echo "RELEASE=$RELEASE" >> $GITHUB_ENV
|
|
MATRIX=$(
|
|
set +e
|
|
releases=($(find build/config/distributions -mindepth 1 -maxdepth 1 -type d | sed 's/.*\///' | grep -v "focal\|buster" ))
|
|
#
|
|
# releases=("jammy")
|
|
|
|
for i in ${releases[@]}
|
|
do
|
|
environments=($([[ -d build/config/desktop/${i}/environments ]] && ls -1 build/config/desktop/${i}/environments))
|
|
#
|
|
#environments=("xfce" "gnome")
|
|
#environmants=("xfce" "gnome" "mate" "cinnamon" "budgie" "kde-plasma" "i3-wm" "xmonad")
|
|
for j in ${environments[@]}
|
|
do
|
|
echo "$i:$j"
|
|
done
|
|
done)
|
|
echo "desktop=$(for x in $(echo "${MATRIX}"); do echo $x; done|jq -cnR '[inputs | select(length>0)]' | jq -c)" >> $GITHUB_OUTPUT
|
|
|
|
Upgrade:
|
|
|
|
needs: [ gradle ]
|
|
name: "Install"
|
|
runs-on: [qemu,igor]
|
|
timeout-minutes: 480
|
|
strategy:
|
|
max-parallel: 32
|
|
fail-fast: false
|
|
matrix:
|
|
node: ${{fromJson(needs.gradle.outputs.desktop)}}
|
|
|
|
steps:
|
|
|
|
- name: Prepare
|
|
run: |
|
|
|
|
#sudo apt-get -y install qemu-kvm libvirt-daemon-system libvirt-clients virtinst cpu-checker libguestfs-tools libosinfo-bin gir1.2-spiceclientgtk-3.0 virt-viewer sshpass nmap
|
|
|
|
- name: Read
|
|
run: |
|
|
RELEASE=$(echo ${{ matrix.node }} | cut -d":" -f1)
|
|
DESKTOP=$(echo ${{ matrix.node }} | cut -d":" -f2)
|
|
echo "RELEASE=$RELEASE" >> $GITHUB_ENV
|
|
echo "DESKTOP=$DESKTOP" >> $GITHUB_ENV
|
|
|
|
# remove old
|
|
rm -rf "uefi-x86-${RELEASE}"
|
|
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: "uefi-x86-${{ env.RELEASE }}"
|
|
path: "uefi-x86-${{ env.RELEASE }}"
|
|
|
|
- name: Remove previous if any
|
|
run: |
|
|
|
|
sudo virsh destroy "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" || true
|
|
sudo virsh undefine "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" || true
|
|
|
|
- name: Convert to QEMU and resize
|
|
run: |
|
|
|
|
xz -fd "uefi-x86-${{ env.RELEASE }}"/*.xz
|
|
IMAGE=$(ls -1 "uefi-x86-${{ env.RELEASE }}"/*.img)
|
|
sudo qemu-img convert -f raw -O qcow2 ${IMAGE} /var/lib/libvirt/images/"uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}".qcow2
|
|
sudo qemu-img resize /var/lib/libvirt/images/"uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}".qcow2 +10G
|
|
|
|
- name: Run image in QEMU
|
|
run: |
|
|
|
|
sudo virt-install --name "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" --memory 2048 --vcpus 4 --disk /var/lib/libvirt/images/"uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}".qcow2,bus=sata --import --os-variant ubuntu22.04 --network bridge=br0 --noautoconsole
|
|
sleep 2m
|
|
sudo virsh domiflist "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" | tail -2 | head -1 | awk '{print $NF}'
|
|
|
|
- name: Get IP address
|
|
run: |
|
|
|
|
# repeat several times
|
|
#for i in 1 2 3 4 5
|
|
while true
|
|
do
|
|
MAC=$(sudo virsh domiflist "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" | tail -2 | head -1 | awk '{print $NF}')
|
|
USER_HOST=$(sudo nmap --max-parallelism 10 -sn 10.0.40.0/24 | grep -i "$MAC" -B 2 | head -1 | awk '{print $NF}')
|
|
if [[ "$USER_HOST" =~ ^(([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.){3}([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))$ ]]; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
[[ -f "$HOME/.ssh/known_hosts" ]] && ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$USER_HOST" || true
|
|
echo "USER_HOST=$USER_HOST" >> $GITHUB_ENV
|
|
|
|
- name: Login
|
|
run: |
|
|
|
|
USER_HOST=${{ env.USER_HOST }}
|
|
USER_ROOT=root
|
|
PASS_ROOT=testpassword
|
|
USER_NORMAL=guest
|
|
PASS_NORMAL=testpassword
|
|
|
|
expect -c "
|
|
spawn sshpass -p 1234 ssh -o "StrictHostKeyChecking=accept-new" ${USER_ROOT}@${USER_HOST}
|
|
set timeout 120
|
|
expect \"Create root password: \"
|
|
send \"${PASS_ROOT}\r\"
|
|
expect \"Repeat root password: \"
|
|
send \"${PASS_ROOT}\r\"
|
|
expect \"zsh\"
|
|
send \"2\r\"
|
|
expect \"*to abort\"
|
|
send \"${USER_NORMAL}\r\"
|
|
expect \"Create*password:\"
|
|
send \"${PASS_NORMAL}\r\"
|
|
expect \"Repeat*password:\"
|
|
send \"${PASS_NORMAL}\r\"
|
|
expect \"Please provide your real name: \"
|
|
send \"${NAME_NORMAL}\r\"
|
|
expect \"*language based on your location*\"
|
|
send \"y\r\"
|
|
expect eof"
|
|
|
|
sshpass -p ${PASS_ROOT} ssh -o "StrictHostKeyChecking=accept-new" ${USER_ROOT}@${USER_HOST} "apt-get -y update"
|
|
sshpass -p ${PASS_ROOT} ssh -o "StrictHostKeyChecking=accept-new" ${USER_ROOT}@${USER_HOST} "apt-get -y install maim"
|
|
sshpass -p ${PASS_ROOT} ssh -o "StrictHostKeyChecking=accept-new" ${USER_ROOT}@${USER_HOST} "apt-get -y upgrade"
|
|
sshpass -p ${PASS_ROOT} ssh -o "StrictHostKeyChecking=accept-new" ${USER_ROOT}@${USER_HOST} "git clone https://github.com/armbian/configng -b desktop"
|
|
sshpass -p ${PASS_ROOT} ssh -o "StrictHostKeyChecking=accept-new" ${USER_ROOT}@${USER_HOST} "cd configng/test; ./desktop_test.sh ${{ env.DESKTOP }}"
|
|
sleep 10
|
|
sshpass -p ${PASS_NORMAL} ssh -o "StrictHostKeyChecking=accept-new" ${USER_NORMAL}@${USER_HOST} "export DISPLAY=:0;maim" > screenshot.png
|
|
|
|
- name: Upload artefacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}-screenshot"
|
|
path: screenshot.png
|
|
if-no-files-found: error
|
|
retention-days: 7
|
|
|
|
- name: Remove VMs
|
|
run: |
|
|
sudo virsh destroy "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" || true
|
|
sudo virsh undefine "uefi-x86-${{ env.RELEASE }}-${{ env.DESKTOP }}" || true
|